Definicja
Ranga słowa jest definiowana jako pozycja słowa, gdy wszystkie możliwe kombinacje (lub układy) jego liter są ułożone alfabetycznie, jak w słowniku, bez względu na to, czy słowa są znaczące, czy nie.
Rozważmy te dwa słowa - „niebieski” i „widziany”. Na początek piszemy wszystkie możliwe układy liter tych słów w kolejności alfabetycznej:
"blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl",
"eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb",
"ulbe","uleb"
"seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen",
"sene","snee"
Teraz spójrzmy od lewej strony i znajdź pozycję potrzebnych nam słów. Widzimy, że słowo „niebieski” znajduje się na 4 pozycji, a „widziany” na 10 pozycji. Zatem ranga słowa „niebieski” wynosi 4, a ranga „widziany” to 10. Jest to ogólny sposób obliczania rangi słowa. Upewnij się, że zaczynasz liczyć tylko od 1.
Zadanie
Twoim zadaniem jest napisanie kodu, który przyjmie dowolne słowo jako dane wejściowe i wyświetli jego pozycję. Ranga powinna być wynikiem. Uważaj na słowa zawierające powtarzające się litery.
Przykłady
"prime" -> 94
"super" -> 93
"bless" -> 4
"speech" -> 354
"earth" -> 28
"a" -> 1
"abcd" -> 1
"baa" -> 3
Możesz założyć, że dane wejściowe są całkowicie pisane małymi literami, a dane wejściowe będą zawierać tylko znaki alfabetyczne . Również jeśli zostanie wprowadzona spacja lub niepoprawny ciąg, możesz zwrócić cokolwiek.
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy kod!
źródło
O(n log n)
lub krócej. (przepraszam, brak Pythona) Moje przesłanie (C ++) zajmuje test 2.53s, aby rozwiązać test 14.['h', 'e', 'l', 'l', 'o']
. W przeciwieństwie do'hello'
?Odpowiedzi:
Gaia , 4 bajty
Wypróbuj online!
źródło
Python 3 , 71 bajtów
Wypróbuj online!
źródło
05AB1E , 5 bajtów
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
Pyth , 6 bajtów
Zestaw testowy.
Wyjaśnienie
źródło
Galaretka , 5 bajtów
Wypróbuj online! lub zobacz zestaw testowy
Jak to działa
źródło
Œ¿
nie działaṢŒ¿
działa1
Python 2 , 78 bajtów
Wypróbuj online!
Python 3 , 73 bajty
Wypróbuj online!
źródło
CJam , 8 bajtów
Wypróbuj online!
+1 bajt ze względu na wymaganie 1-indeksowane.
źródło
Haskell , 56 bajtów
Wypróbuj online!
+6 bajtów z powodu wymogu 1-indeksowania. :(
źródło
Japt ,
810 bajtów0-indeksowane.Poxy, niepotrzebne indeksowanie 1, zwiększając moją liczbę bajtów o 25%!Sprawdź to
Wyjaśnienie
á
pobiera wszystkie permutacje wejściu,â
usuwa duplikaty,n
sortuje je ib
dostaje indeks pierwszego wystąpienia wejściu,U
.źródło
J ,
2823 bajtów-5 bajtów dzięki FrownyFrog
Jak to działa?
Wypróbuj online!
źródło
1+/:~@~.@(A.~i.@!@#)i.]
Tcl, 196 bajtów
Tcl nie ma wbudowanej metody obliczania następnej permutacji leksykograficznej, więc musimy to zrobić sami. Ale poczekaj ... jest to krótsze, aby to zrobić za pomocą prostej funkcji rekurencyjnej, która oblicza wszystkie możliwe permutacje w dowolnej kolejności.
Nie golfowany:
źródło
K (oK) ,
2318 bajtówRozwiązanie:
Wypróbuj online!
Przykłady:
Wyjaśnienie:
Wygeneruj permutacje indeksów posortowanego ciągu wejściowego, użyj ich, aby zindeksować z powrotem ciąg wejściowy, weź różnice, zobacz, gdzie pasował oryginalny ciąg, i dodaj jeden.
źródło
Java 8, 211 bajtów
Wyjaśnienie:
Wypróbuj online.
źródło
Python 3 ,
183182 bajtówPierwsza odpowiedź, która działa w czasie wielomianowym!
Wypróbuj online!
Wymagaj, aby dane wejściowe były pisane wielkimi literami, ponieważ ... zapisuje bajt.
Pełny program pobiera dane wejściowe
stdin
i wyjściowestdout
.Nazwy zmiennych: (rodzaj nieoznakowanego kodu)
Niestety
from math import factorial as f
zajmuje dokładnie 1 bajt więcej.(Niepowiązana uwaga: sprawdziłem
Combinatorica`
pakiet Mathematica, nic przydatnego, w tymRankPermutation
)źródło
Łuska , 6 bajtów
Wypróbuj online! Czuję, że powinien istnieć sposób na upuszczenie
(
.Wyjaśnienie:
źródło
Czysty ,
113111 bajtówWypróbuj online!
+3 bajty do obsługi indeksowania 1: /
źródło
APL (Dyalog Unicode) , 33 bajty (SBCS)
Wypróbuj online!
źródło
Python 3 ,
105104103 bajtyWypróbuj online!
źródło
Rubinowy , 49 bajtów
Wypróbuj online!
źródło
JavaScript (ES6),
106100 bajtówPrzypadki testowe
Pokaż fragment kodu
W jaki sposób?
P () to nasza rekurencyjna funkcja permutacji. Ale otaczający obiekt P służy również do przechowywania szeregów permutacji.
Kod owijania brzmi teraz:
źródło
C ++, 230 bajtów
Zgodnie z moim pytaniem kod zdecydowanie musi być wykonywalny w obecnej postaci. Klauzula tylko funkcji jest w zasadzie śmieciami. : - @
Dziękuję tym, którzy uprzejmie odpowiedzieli na pytanie, co można dla mnie wyciąć. W interesie poprawnego kodu uniknąłem popularnego GCC obejmującego <bits / stdc ++. H>, co zawsze uważałem za kiepskie oszustwo.
Oto, co pozostało z mojego oryginalnego posta:
Zawsze nie jestem pewien, kiedy używam C i C ++, co liczy się do całkowitej liczby bajtów. Zgodnie z programem, funkcją lub fragmentem kodu? odpowiedź jest wciąż niejasna (chyba, że to nie jest fragment kodu). Wybieram więc najkrótszą z dwóch możliwości.
Tutaj jest on niepolecany z niezbędnymi nagłówkami itp .:
To gra w golfa do 230 bajtów, jednej trzeciej standardowej płyty wymaganej przez każdy program C ++. (Więc nie czuję się tak źle, nie licząc tego, ale ponieważ nigdy nie widziałem stanowczej skargi w żaden sposób, OP będzie musiał mi powiedzieć, który woli spełnić „napisz kod, aby wziąć dowolne słowo jako dane wejściowe i wyświetlać swoją pozycję. ”)
Nie jestem również pewien, czy to spełnia „pozycję należy wyliczyć”.
źródło
using namespace std
,#include <algorithm>
nagłówki używane do określenia funkcji w bajtach I ... Nie.main(){}
Jest to ważny C ++ (g ++) Program na 8 bajtów.import math
jest często konieczne. Pozwól mi znaleźć odpowiednią meta ...puts
iprintf
). Aby kod był prawidłowy, kod musi się kompilować i działać bez zmian. Zobacz: codegolf.meta.stackexchange.com/a/10085/45941main
funkcji nie można uruchomić bez zmian .Perl 5 , 98 + 3 (
-pF
) = 101 bajtówWypróbuj online!
źródło
Oktawa , 43 bajty
Wypróbuj online!
źródło
Perl 6 , 53 bajtów
Wypróbuj online!
źródło
PowerShell , 275 bajtów
Wypróbuj online!
To jest cholerny bałagan.
PowerShell nie ma wbudowanych permutacji, więc ten kod korzysta z algorytmu z tego miejsca (intensywnie grał w golfa), który jest dostępny na licencji Microsoft Limited Public License ( załącznik B na tej stronie licencjonowania).
Program pobiera dane wejściowe
$s
jako ciąg znaków, a następnie rozpoczyna się rzeczywisty program$b=New-Object ...
. Budujemy nowy obiekt StringBuilder , który jest (zasadniczo) zmiennym ciągiem znaków. Pozwoli nam to łatwiej obsługiwać permutacje. Następnie wywołujemy funkcjęn
(ustawiając$j
przy tym długość łańcucha wejściowego),sort
z-u
flagą nique na wyjściu, bierzemy,.indexOf()
aby znaleźć łańcuch wejściowy i dodajemy,1
ponieważ PowerShell jest indeksowany na zero.Ta funkcja jest główną częścią programu. Pobiera na wejściu liczbę i każda iteracja odlicza do osiągnięcia
1
(tj. Pojedynczej litery). Reszta funkcji zasadniczo rekurencyjnie wywołuje funkcję, a także pobiera bieżącą literę i iteruje ją przez każdą pozycję.Istnieje jeden dodatkowy element logiki
if($s.length-eq1){1;exit}
do uwzględnienia łańcuchów wejściowych długości1
ze względu na działanie funkcji permutacji.źródło
Pyt , 5 bajtów
Wyjaśnienie:
Wypróbuj online!źródło