Biorąc pod uwagę listę dwóch lub więcej wypisanych numerów seryjnych o równej długości większej niż dwa, np
[[ "three" , "one" , "four" ],
[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "five" , "eight" ]]
posortuj listę według liczb reprezentowanych przez słowa:
[[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "one" , "four" ],
[ "three" , "five" , "eight" ]]
Możesz wymagać, aby cyfry były pisane małymi lub górnymi, ale nie mieszanymi, wielkimi literami.
Przypadki testowe
[["three","one","four"],["one","five","nine"],["two","six","five"],["three","five","eight"]]
daje[["one","five","nine"],["two","six","five"],["three","one","four"],["three","five","eight"]]
[["two","seven"],["one","eight"],["two","eight"],["one","eight"],["two","eight"],["four","five"]]
daje[["one","eight"],["one","eight"],["two","seven"],["two","eight"],["two","eight"],["four","five"]]
[["one","four","one","four","two"],["one","three","five","six","two"],["three","seven","three","zero","nine"]]
daje[["one","three","five","six","two"],["one","four","one","four","two"],["three","seven","three","zero","nine"]]
[["zero","six","one"],["eight","zero","three"],["three","nine","eight"],["eight","seven","four"],["nine","eight","nine"],["four","eight","four"]]
daje[["zero","six","one"],["three","nine","eight"],["four","eight","four"],["eight","zero","three"],["eight","seven","four"],["nine","eight","nine"]]
["three","one","four"] === 314
?[314,159,265,358]
→[159,265,314,358]
.You may require the numbers to be spelled in lower or upper, but not mixed, case.
Odpowiedzi:
Łuska ,
98 bajtówWypróbuj online!
Algorytm „zainspirowany” rekursywną odpowiedzią Staxa (właśnie zmieniłem nieco ciąg odnośnika), idź do niego!
Sztuczka polega na mapowaniu każdej litery do jej pozycji w łańcuchu
tfsen
(skompresowana na końcu tego programu). Listy Husky są oparte na 1, a brakujące elementy zwracają 0, więc otrzymujemy to mapowanie:Jak widać, listy są idealnie uporządkowane.
Aby być jasnym, oto jak działa porównanie list w Husk (i w wielu innych językach):
źródło
tfrsen
ale zgaduję, że takie słowa jakwith
isen
tam pomagają w kompresji.[1,0,0]
jest uważany za mniejszy niż[1,0,0,0]
(ale dla tego programu nie zrobiłoby to różnicy)Stax ,
2422171614 bajtówUruchom i debuguj
Ten program przyjmuje tablice małych liter pisowni do wprowadzania. Wyjście jest w ten sposób oddzielone znakiem nowej linii.
Ten program sortuje dane wejściowe przy użyciu kolejności uzyskanej w ramach określonej transformacji. Każdy znak w każdym słowie jest zastępowany przez indeks w ciągu
"wo thif sen"
. Oryginalne tablice są sortowane według tej kolejności. Następnie wyniki są drukowane po połączeniu ze spacją.Spacje nie służą żadnemu celowi, ale w rzeczywistości pozwalają na większą kompresję w literale łańcucha.
źródło
Galaretka , 12 bajtów
Link monadyczny.
Wypróbuj online! ... lub zobacz zestaw testowy
W jaki sposób?
Konwersja cyfr na liczby porządkowe, a następnie z podstawy 10, a następnie pobranie modułów o wartości 4752, a następnie 147, daje rosnącą kolejność:
Można to następnie wykorzystać jako kluczową funkcję sortowania:
źródło
Python , 62 bajty
Wypróbuj online! ... lub zobacz zestaw testowy
Uwaga:
który działa w Pythonie 2 (ale nie 3) jest dłuższy o dwa bajty.
źródło
APL (Dyalog Classic) , 12 bajtów
Wypróbuj online!
W ten sposób znalazłem odpowiedni lewy argument dla dyadic
⍒
(⍋
najpierw spróbowałem i mam długość 6):źródło
Perl 6 , 37 bajtów
Spróbuj
Rozszerzony:
Blok kodu przyjmie wartość formularza
("three","one","four")
i przetłumaczy ją na("3","1","4")
wartość, której.sort
można łatwo użyć.źródło
APL (Dyalog) , 38 bajtów
Wypróbuj online!
Na podstawie niesamowitego rozwiązania Jonathana Allana .
źródło
⊂⌷¨⍨∘⍋(531⊥531|6779|36⊥9+⎕A⍳⊢)¨
ale możesz to zrobić znacznie prościej w mniej niż połowie bieżącej liczby bajtów.Rubinowy, 48 bajtów
Nadużywa faktu, że
"zero".to_i(35)
wynosi 0 (ponieważ „z” nie jest prawidłową cyfrą w bazie 35), więc o wiele łatwiej jest użyć formuły brutalnej dla pozostałych dziewięciu cyfr.źródło
K (ngn / k) , 14 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 70 bajtów
Wypróbuj online!
źródło
Ruby , 47 bajtów
Wypróbuj online!
Wykorzystuje fakt, że użycie podstawy mniejszej niż maksymalna cyfra daje wynik zerowy (jak wskazał histokrat w swojej odpowiedzi )
źródło
Python 2 ,
858180 bajtówPo prostu używa pierwszych dwóch liter każdego słowa do ustalenia liczby, a następnie sortuje każdą listę za pomocą tej funkcji indeksowania jako klucza.
Wypróbuj online!
Zaoszczędź 4 bajty dzięki Jonathanowi Allanowi
źródło
Rubinowy , 49 bajtów
Wypróbuj online!
źródło
05AB1E , 27 bajtów
Wypróbuj online!
źródło
Haskell ,
133122109107106 bajtówNie golfowany:
źródło
Python 2 , 59 bajtów
Wypróbuj online!
Riffing na temat rozwiązania Jonathan Allan Python 3 ...
źródło
Java (JDK 10) , 132 bajty
Wypróbuj online!
źródło
Rubinowy , 64 bajty
Wypróbuj online!
Lambda akceptuje tablicę ciągów 2D i zwraca tablicę ciągów 2D.
Piggybacking z odpowiedzi mbomb007 na Python 2 dla -26 bajtów mniej od tego, co zamierzałem opublikować.
źródło
Perl 5 , 103 bajtów
Wypróbuj online!
źródło
Retina 0.8.2 , 38 bajtów
Wypróbuj online! Link zawiera pakiet testowy. Działa poprzez tymczasowe zastąpienie liter
zowithfsen
ich pozycją w tym ciągu, co pozwala na sortowanie liczbowe.źródło
Galaretka ,
302827 bajtówWypróbuj online!
-1 dzięki Jonathan Allan.
Znajduje indeks każdej cyfry w ciągu „onetwo ... nine”, a następnie sortuje, używając tej funkcji jako klawisza
Þ
. Nie trzeba uwzględniać'zero'
na początku, ponieważ wyszukiwanie pierwszych dwóch znaków'zero'
nie powiedzie się i0
zostanie zwrócone zamiast indeksu, dzięki czemu'zero'
leksykograficznie „wcześnie”.źródło
'zeontw...ni'
okazało się dłuższe.Python 3, 141 bajtów
Wypróbuj online!
źródło
C (brzęk) , 229 bajtów
Wypróbuj online!
Nie ma prostego sposobu na przesłanie tablicy tablic ciągów do funkcji C, więc w duchu golfa kodu skorzystałem z niewielkiej swobody w formacie wejściowym.
f()
akceptuje tablicę wskaźników do ciągów, gdzie każdy ciąg jest liczbą, reprezentowaną oddzielonymi przecinkami cyframi pisanymi małymi literami. Dodatkowo potrzebuje liczby ciągów w tablicy w drugim parametrze. Mam nadzieję, że jest to do przyjęcia.f()
zastępuje wskaźniki na miejscu w posortowanej kolejności za pomocąqsort()
.r()
odczytuje numer wejściowy z ciągu liczb oddzielonych przecinkami. Porównuje tylko dwa pierwsze znaki w celu identyfikacji numeru.c()
jest funkcją porównawcząźródło
strstr("i"-19,t)-"zeontwthfofisiseeini"
? Czy jest to specyficzne dla kompilatora czy standardowe?.rodata
tym wyglądzie0x69 0x00
i kompilacji umieszczającej adres"i"
na końcu"zeo..."