Für diejenigen, die eine viel größere Herausforderung als die alte spanische alphabetische Reihenfolge wünschen , werfen wir einen Blick auf die Reihenfolge des ungarischen Alphabets.
a, á, b, c, cs, d, dz, dzs, e, é, f, g, gy, h, ich, í, j, k, l, ly, m, n, ny, o, ó, ö, ő, p, q, r, s, sz, t, ty, u, ú, ü, ű, v, w, x, y, z, zs
tatsächlich, q
, w
, x
und y
sind nicht in der ungarischen Worte verwendet, aber sie sind für Lehnwörter und ausländische Namen enthalten. Ausländische Zeichen mit Akzent, die nicht Teil des ungarischen Alphabets sind (wie ñ
), haben die gleiche Priorität wie die nicht akzentuierten, aber wir ignorieren sie für diese Herausforderung.
Die Regeln, zusammengefasst:
- Digraphen (
cs
,sz
usw.) und Trigraphen (dzs
) werden als eigenständige Buchstaben betrachtet.
cudar cukor cuppant csalit csata
- Wenn die gleiche digraph oder trigraph hintereinander in einem Wort zweimal direkt auftritt, werden sie in einer vereinfachten Art und Weise geschrieben:
ssz
stattszsz
,ddzs
stattdzsdzs
aber für die alphabetische Reihenfolge wird die nicht vereinfachte verwendet. Zum Beispielkasza
<kaszinó
<kassza
, dakassza
wird verwendet alsk
+a
+sz
+sz
+a
zum Zweck der Bestellung. Manchmal finden Sie die nicht vertraglich vereinbarte Version in einem Wort, wenn es sich um zusammengesetzte Wörter handelt.
kasza kaszinó kassza kaszt nagy naggyá nagygyakorlat naggyal nagyít
- Die Groß- und Kleinschreibung spielt keine Rolle, mit der Ausnahme, dass die beiden Wörter ohne die Groß- und Kleinschreibung genau gleich wären. In diesem Fall hat der Kleinbuchstabe Vorrang
jácint Jácint Zoltán zongora
- Die kurzen und langen Versionen von akzentuierten Vokale haben die gleiche Priorität (
a - á
,e -é
,i - í
,o - ó
,ö - ő
,u - ú
ü - ű
), mit einer einzigen Ausnahme: Wenn die beiden Wörter sonst genau das gleiche sein würde, hat der kurze Vokal Vorrang vor dem langen Vokal. Beachten Sie, dass die Vokale mit Umlaut (ö
undü
) völlig andere Zeichen also
und sindu
.
Eger egér író iroda irónia kerek kerék kérek szúr szül
- Bindestriche oder Leerzeichen (z. B. in zusammengesetzten Wörtern, Namen usw.) werden vollständig ignoriert
márvány márványkő márvány sírkő Márvány-tenger márványtömb
Die Aufgabe
Ihr Programm / Ihre Funktion empfängt Zeichenfolgen, die aus Zeichen des ungarischen Alphabets bestehen (sowohl in Klein- als auch in Großbuchstaben). Eine Zeichenfolge kann jedoch Leerzeichen oder Bindestriche enthalten. Das Minuszeichen (ASCII 45) kann der Einfachheit halber als Bindestrich verwendet werden. Beachten Sie, dass einige Zeichen (wie das ő
) nicht Teil von ASCII sind. Sie können eine beliebige Codierung verwenden, wenn alle erforderlichen Zeichen unterstützt werden.
Sie müssen die Zeilen richtig bestellen und das Ergebnis anzeigen / zurückgeben.
Sie können jede zufällig angeordnete Teilmenge der obigen Beispiele zum Testen verwenden.
BEARBEITEN:
Bitte verwenden Sie keine eingebaute oder andere Methode, die die ungarische alphabetische Reihenfolge bereits kennt. Dies würde den Wettbewerb unnötig machen und die Herausforderung darin bestehen, den besten regulären Ausdruck oder die besten Code-Golf-Tricks zu finden.
EDIT2:
Um eine Klärung klar gestellt von isaacg: „zwei Strings , die nur durch Aktivierung abweichen und lange gegen kurze Vokale, unterscheidet sich aber in beide Richtungen“: Obwohl keine Regel in dem amtlichen Dokument ausdrücklich diese Frage befasst, ein Beispiel innerhalb Punkte der Länge gefunden des Vokals hat mehr Bedeutung als die Großschreibung.
malacsült
oder bestehtnyílászáró
. Ich frage mich, ob es welche gibt (aber du brauchst ein Vokabular, um das zu überprüfen, was vermutlich nicht Teil dieser Herausforderung ist)Antworten:
Perl, 250
Beinhaltet +11 für
-Mutf8 -CS
.Verwendet das Dekorieren-Sortieren-Undekorieren- Idiom (AKA Schwartzian Transform ) und die mehrstufige Sortierung † , wobei die Ebenen wie folgt lauten:
Intern wird als
␜
Ebenentrennzeichen (ASCII 0x1C-Feldtrennzeichen - dessen Wert kleiner als ein beliebiges Zeichen im Alphabet für diese Abfrage ist) verwendet.Diese Implementierung hat viele Einschränkungen, darunter:
Erweiterte Version:
†. Einige bekannte mehrstufige Kollatierungsalgorithmen sind der Unicode-Kollatierungsalgorithmus (UCA, Unicode UTS # 10) , ISO 14651 (erhältlich auf der ISO ITTF-Website ) und die LC_COLLATE-Teile bei ISO TR 30112 (Entwurf erhältlich bei ISO / IEC JTC1 / SC35 / WG5 home ), das ISO / IEC TR 14652 (verfügbar bei ISO / IEC JTC1 / SC22 / WG20 home ) und LC_COLLATE bei POSIX ersetzt.
‡. Für eine korrekte Ausführung ist ein Wörterbuch erforderlich. ICU behandelt weirdly aktivierten Gruppen als nicht-Kontraktionen / non-Digraphen / non-trigraphs, zB: 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
quelle
Java 8, 742 Bytes
Könnte die Benennung der Funktion
s
stattdessen um weitere 3 Bytes reduzierensort
oder um weitere 16 Bytes, wenn Klassendefinition nicht gezählt wird.Kann so verwendet werden:
Testsuite:
nachgebend
Ungolfed:
Ich benutze Javas
List
-Typ und die Funktionorder()
davon, aber der Komparator gehört mir.quelle
<String>
und ein paar Zeichen auf Kosten einiger Warnungen speichern können.Object
als Typ von a und b schließen würde . Ich könnte wahrscheinlich davonkommen, einen klassengenerischen Parameter zu definieren, der erweitertString
wird. Auch erwarte ich nicht, den kürzesten Code zu haben. ;-)Python 3, 70
8 Bytes gespart dank shooqie.
Ich liebe Python. : D
Erwartet eine Liste von Zeichenfolgen.
quelle
from locale import*
spart eine Menge Bytes