Dla tych, którzy chcą o wiele więcej wyzwań niż stara hiszpańska kolejność alfabetyczna , rzućmy okiem na kolejność alfabetu węgierskiego.
a, á, b, c, cs, d, dz, dzs, e, é, f, g, gy, h, i, í, j, k, l, ly, m, n, ny, o, ó, ö, ő, p, q, r, s, sz, t, ty, u, ú, ü, ű, v, w, x, y, z, zs
Właściwie q
, w
, x
i y
nie są wykorzystywane w węgierskich słów, ale są one włączone do zapożyczeń i nazw obcych. Obce znaki akcentowane, które nie są częścią alfabetu węgierskiego (podobnego ñ
), mają taki sam priorytet jak znaki nieakcentowane, ale pomijamy je w tym wyzwaniu.
Zasady podsumowane:
- Digraphy (
cs
,sz
itp.) I trigraf (dzs
) są uważane za same w sobie litery.
cudar cukor cuppant csalit csata
- Jeśli ten sam digraf lub kaligraf występuje dwa razy bezpośrednio po sobie w słowie, są one zapisywane w sposób uproszczony:
ssz
zamiastszsz
,ddzs
zamiast wdzsdzs
kolejności alfabetycznej stosuje się kolejność nie uproszczoną. Na przykładkasza
<kaszinó
<kassza
, ponieważkassza
służy jakok
+a
+sz
+sz
+a
dla dobra zamawiania. Czasami można znaleźć wersję bez umowy w jednym słowie, w przypadku słów złożonych.
kasza kaszinó kassza kaszt nagy naggyá nagygyakorlat naggyal nagyít
- wielkie litery nie mają znaczenia, z wyjątkiem tego, że dwa słowa byłyby dokładnie takie same bez wielkich liter, w którym to przypadku mała litera ma priorytet
jácint Jácint Zoltán zongora
- Krótkie i długie wersje akcentowanych samogłosek mają ten sam priorytet (
a - á
,e -é
,i - í
,o - ó
,ö - ő
,u - ú
ü - ű
), z jednym wyjątkiem: jeśli te dwa słowa w przeciwnym razie być dokładnie taka sama, krótka samogłoska ma pierwszeństwo przed długą samogłoską. Zauważ, że samogłoski z umlaut (ö
iü
) są całkowicie różnymi znakami odo
iu
.
Eger egér író iroda irónia kerek kerék kérek szúr szül
- Łączniki lub spacje (na przykład złożone słowa, nazwy itp.) Są całkowicie ignorowane
márvány márványkő márvány sírkő Márvány-tenger márványtömb
Zadanie
Twój program / funkcja odbiera ciągi złożone ze znaków z węgierskiego alfabetu (zarówno małe, jak i wielkie litery), ale ciąg może zawierać spacje lub łączniki. Dla uproszczenia znak minus (ASCII 45) może być używany jako łącznik. Zauważ, że niektóre znaki (takie jak ő
) nie są częścią ASCII. Możesz użyć dowolnego kodowania, jeśli obsługuje ono wszystkie wymagane znaki.
Musisz poprawnie zamówić wiersze i wyświetlić / zwrócić wynik.
Do testowania możesz użyć dowolnego losowo uporządkowanego podzestawu powyższych przykładów.
EDYTOWAĆ:
Proszę nie używać żadnego wbudowanego lub innego sposobu, który już zna węgierską kolejność alfabetyczną. Sprawiłoby to, że zawody stałyby się bezcelowe, i podjęłyby wszelkie wyzwanie ze znalezienia najlepszego wyrażenia regularnego lub najlepszych sztuczek golfowych.
EDYCJA 2:
Aby wyjaśnić wyjaśnienie zadane przez isaacga: „dwa ciągi, które różnią się jedynie wielkimi literami i długimi a krótkimi samogłoskami, ale różnią się w obu kierunkach”: Chociaż żadna reguła w oficjalnym dokumencie nie odnosi się wyraźnie do tego pytania, przykład znajduje się w obrębie długości samogłoska ma większe znaczenie niż wielkie litery.
malacsült
lubnyílászáró
. Zastanawiam się, czy są jakieś (ale potrzebujesz słownictwa, aby to sprawdzić, co prawdopodobnie nie jest częścią tego wyzwania)Odpowiedzi:
Perl, 250
Obejmuje +11 za
-Mutf8 -CS
.Używa idiomu dekorowanie-sortowanie-i dekorowanie (AKA Schwartzian Transform ) oraz sortowanie wielopoziomowe † , gdzie poziomy są następujące:
Wewnętrznie
␜
(separator pól ASCII 0x1C - którego wartość jest mniejsza niż dowolny znak w alfabecie dla tego wyzwania) jest używany jako separator poziomu.Ta implementacja ma wiele ograniczeń, między innymi:
Wersja rozszerzona:
†. Niektóre dobrze znane wielopoziomowe algorytmy zestawiania to Algorytm sortowania Unicode (UCA, Unicode UTS # 10) , ISO 14651 (dostępny w witrynie ISO ITTF ) części LC_COLLATE w ISO TR 30112 (szkic dostępny w ISO / IEC JTC1 / SC35 / WG5 home ), która unieważnia ISO / IEC TR 14652 (dostępny w domu ISO / IEC JTC1 / SC22 / WG20 home ) i LC_COLLATE w POSIX.
‡. Wykonanie tego poprawnie wymagałoby słownika. OIOM traktuje dziwnie skapitalizowane grupy jako niekontrakty / non-digraphs / non-trigrafs, np .: ccS < 3 CcS < 3 c Cs < 3 c CS < 3 C Cs < 3 cS < 3 cs < 3 Cs < 3 CS < 3 ccs < 3 Ccs < 3 CCS
źródło
Java 8, 742 bajtów
Można zmniejszyć o kolejne 3 bajty nazywając funkcję
s
zamiastsort
lub o kolejne 16 bajtów, jeśli nie licząc definicji klasy.Można użyć w następujący sposób:
Zestaw testowy:
wydajność
Nie golfowany:
Korzystam z
List
typu Java i jegoorder()
funkcji, ale cały komparator jest mój.źródło
<String>
i zapisać kilka znaków kosztem kilku ostrzeżeń?Object
jako typ a i b. Prawdopodobnie mógłbym jednak uciec od zdefiniowania rozszerzenia parametru generic-parametricString
. Nie oczekuję też, że będę mieć najkrótszy kod. ;-)Python 3, 70
Zaoszczędź 8 bajtów dzięki shooqie.
Uwielbiam Python. :RE
Oczekuje listy ciągów.
źródło
from locale import*
oszczędza dużo bajtów