Innerhalb der Aussparungen von Unicode-Zeichen gibt es einen Unicode-Block mit (derzeit) 63 Zeichen mit dem Namen "Zahlenformen", der aus Zeichen besteht, die numerische Werte wie die römische Ziffer Ⅻ, vulgäre Brüche wie ⅑ oder ↉ oder seltsame wie haben ↊ (10) oder ↈ (100000).
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die bei Angabe einer Liste zugewiesener Unicode-Zeichen in diesem Block die Liste nach den numerischen Werten der einzelnen Zeichen sortiert.
Eine (sortierbare) Liste von Zeichen und Werten finden Sie auf der Wikipedia-Seite .
Um in sich abgeschlossen zu sein, finden Sie hier eine Liste der Codepunkte und ihrer Werte:
Hex Char Value
0x00BC: ¼ = 1/4 or 0.25
0x00BD: ½ = 1/2 or 0.5
0x00BE: ¾ = 3/4 or 0.75
0x2150: ⅐ = 1/7 or 0.142857
0x2151: ⅑ = 1/9 or 0.111111
0x2152: ⅒ = 1/10 or 0.1
0x2153: ⅓ = 1/3 or 0.333333
0x2154: ⅔ = 2/3 or 0.666667
0x2155: ⅕ = 1/5 or 0.2
0x2156: ⅖ = 2/5 or 0.4
0x2157: ⅗ = 3/5 or 0.6
0x2158: ⅘ = 4/5 or 0.8
0x2159: ⅙ = 1/6 or 0.166667
0x215A: ⅚ = 5/6 or 0.833333
0x215B: ⅛ = 1/8 or 0.125
0x215C: ⅜ = 3/8 or 0.375
0x215D: ⅝ = 5/8 or 0.625
0x215E: ⅞ = 7/8 or 0.875
0x215F: ⅟ = 1
0x2160: Ⅰ = 1
0x2161: Ⅱ = 2
0x2162: Ⅲ = 3
0x2163: Ⅳ = 4
0x2164: Ⅴ = 5
0x2165: Ⅵ = 6
0x2166: Ⅶ = 7
0x2167: Ⅷ = 8
0x2168: Ⅸ = 9
0x2169: Ⅹ = 10
0x216A: Ⅺ = 11
0x216B: Ⅻ = 12
0x216C: Ⅼ = 50
0x216D: Ⅽ = 100
0x216E: Ⅾ = 500
0x216F: Ⅿ = 1000
0x2170: ⅰ = 1
0x2171: ⅱ = 2
0x2172: ⅲ = 3
0x2173: ⅳ = 4
0x2174: ⅴ = 5
0x2175: ⅵ = 6
0x2176: ⅶ = 7
0x2177: ⅷ = 8
0x2178: ⅸ = 9
0x2179: ⅹ = 10
0x217A: ⅺ = 11
0x217B: ⅻ = 12
0x217C: ⅼ = 50
0x217D: ⅽ = 100
0x217E: ⅾ = 500
0x217F: ⅿ = 1000
0x2180: ↀ = 1000
0x2181: ↁ = 5000
0x2182: ↂ = 10000
0x2183: Ↄ = 100
0x2184: ↄ = 100
0x2185: ↅ = 6
0x2186: ↆ = 50
0x2187: ↇ = 50000
0x2188: ↈ = 100000
0x2189: ↉ = 0
0x218A: ↊ = 10
0x218B: ↋ = 11
Testfälle:
['½','ↆ','ↂ','⅒','Ⅽ','⅑','ⅷ'] -> ['⅒','⅑','½','ⅷ','ↆ','Ⅽ','ↂ']
['¼','↋','↉','ↅ','⅐','⅟','Ⅻ','ⅺ'] -> ['↉','⅐','¼','⅟','ↅ','↋','ⅺ','Ⅻ']
['¼','½','¾','⅐','⅑','⅒','⅓','⅔','⅕','⅖','⅗','⅘','⅙','⅚','⅛','⅜','⅝','⅞','⅟'] -> ['⅒','⅑','⅛','⅐','⅙','⅕','¼','⅓','⅜','⅖','½','⅗','⅝','⅔','¾','⅘','⅚','⅞','⅟']
'⅞ⅾ↊ↄⅨⅮⅺↁⅸⅰⅩⅱⅶ¾ⅧↅↃ↋ↆ⅔ⅼⅲ⅘⅒ⅽⅦ⅕ⅤⅭⅳↂⅪⅬⅯↇⅠⅷ⅛Ⅵ½ⅵ¼ⅻ⅐Ⅱ⅜⅗⅝⅚Ⅳ⅓ⅴ↉ⅿⅫⅹↀↈ⅙⅑Ⅲ⅖⅟' -> '↉⅒⅑⅛⅐⅙⅕¼⅓⅜⅖½⅗⅝⅔¾⅘⅚⅞⅟ⅠⅰⅡⅱⅢⅲⅣⅳⅤⅴⅥⅵↅⅦⅶⅧⅷⅨⅸⅩⅹ↊Ⅺⅺ↋ⅫⅻⅬⅼↆⅭⅽↄↃⅮⅾⅯⅿↀↁↂↇↈ'
['Ↄ','ↄ','↊','↋'] -> ['↊','↋','ↄ','Ↄ']
Beachten Sie, dass vier der Symbole (die im letzten Fall verwendeten) keine Unicode-Zahlen sind, obwohl sie immer noch einen numerischen Wert haben. Überprüfen Sie dies also, bevor Sie nur ein eingebautes Symbol veröffentlichen.
Regeln:
- Wenn diesem Block in Zukunft weitere Zeichen zugewiesen werden, müssen Sie Ihren Code nicht mehr aktualisieren, um sie zu unterstützen.
- Die Reihenfolge der Zeichen mit identischen Werten spielt keine Rolle.
- IO ist flexibel .
- Die Ausgabe muss jedoch als Zeichen erfolgen, nicht als Zahlenwert
- Standardlücken sind verboten.
- Ich verbiete keine eingebauten Funktionen, mit denen der numerische Wert eines Zeichens abgerufen werden kann, empfehle jedoch, wenn möglich auch eine nicht eingebaute Antwort hinzuzufügen.
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes für jede Sprache! Viel Glück!
Antworten:
Python 3 ,
216213 Bytes-3 Bytes dank TFeld
Probieren Sie es online!
Mit eingebautem, der den numerischen Wert abruft, 111 Bytes
Probieren Sie es online!
quelle
↉
aus der Zeichenfolge entfernen (Rückgabe suchen,-1
die am kleinsten ist)Perl 6 , 57 Bytes
Probieren Sie es online!
Schlägt einfach die vier außergewöhnlichen Zeichen in einem Hash nach oder greift auf die integrierte
unival
Methode zurück.quelle
05AB1E (Legacy) ,
192746361 Bytes-118 Byte, wobei nur die Zeichen der Codepage von 05AB1E verwendet werden, sodass keine UTF-8-Codierung erforderlich ist.
-11 Bytes dank @Adnan .
-2 Bytes dank @Grimy .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Also was ist
•Bšā¿ÑáζΔÕæ₅"®GÙ₂®°ƶío"§óÏ4¸bćÔ!₃ùZFúÐìŸ\n,λ₂ϦP(Ì•65в₂+
?Basierend auf der Reihenfolge der Zeichen modulo-100 erhalten wir die folgende Liste:
Diese werden vom folgenden Programm generiert:
Probieren Sie es online aus.
•Bšā¿ÑáζΔÕæ₅"®GÙ₂®°ƶío"§óÏ4¸bćÔ!₃ùZFúÐìŸ\n,λ₂ϦP(Ì•65в₂+
ist eine kürzere Variante dieser Liste, bei der die komprimierte Zahl1485725021600091112740267145165274006958935956446028449609419704394607952161907963838640094709317691369972842282463
in Base-65 konvertiert und dann zu jeder 26 addiert wird.Probieren Sie es online aus und stellen Sie sicher, dass die Listen identisch sind .
quelle
"]&%/$-)`'0*a+1(b,.234D5E6F7G8H9IY:J;K<L=M^>N_?O@PZAQWXBRCSTUV[\"Ç8-
mit•4Œ”dóŒfÝŸĀTUÕáOyÖOÀÁàu¼6¹₆Žr‡_›y³eß₂©ǝ²ƶ"SAÎAñ'¡û†Ø(•91в
Retina ,
193 Byte (UTF-8)Probieren Sie es online! Erläuterung: Sortiert die Zeichen in der Codepunktreihenfolge und ordnet sie dann zwischen den numerischen Zeichen und den ASCII-Zeichen zu, sodass die numerischen Zeichen mit dem niedrigsten Wert die ASCII-Zeichen mit dem niedrigsten Codepunkt zuordnen und umgekehrt. Wiederholen Sie dann die Übung, sodass die Zeichen nun in der Reihenfolge dieser ASCII-Zuordnung sortiert werden, die der gewünschten numerischen Reihenfolge entspricht, bevor sie zurücktransformiert werden. Bearbeiten: Speichert 100 (!) Bytes, indem die Reihenfolge der ASCII-Zeichen anstelle der numerischen Zeichen angegeben wird.
quelle
Jelly , 55 Bytes
Ein monadischer Link, der eine Liste von Zeichen akzeptiert, die eine Liste von Zeichen ergibt.
Probieren Sie es online!
Wie?
Viel einfacher als es aussieht, da
“$Żz*ṀḢD⁹VṢaʠƝ lẹkƝʋ9⁽ƭXmż4#⁺3ç%|ọṢLxƈ⁽}ÞƇ2’
nur eine große Zahl in der Basis 250 ist, die Jellys Codepage als die Ziffern verwendet, die ich“...’
an ihrer Stelle verwenden werde.Beiseite
Etwas ironischerweise war das, was ich einem "Verwenden eines eingebauten Ansatzes" am nächsten bringen konnte, 85 Bytes , dies verwendet eine komprimierte Zeichenfolge:
Das wird in Zeilenumbrüche aufgeteilt und mit
⁸
s verbunden, um den Python-Code zu erhalten:Dies ist in Jellys Interpreter ausführbar. Der numerische Wert des Unicode-Zeichens wird
⁸
zur späteren Verwendung im linken Argument nilad abgelegt .quelle
Japt , 72 Bytes
Probieren Sie es aus oder führen Sie alle Testfälle aus
Erläuterung
Codepoints
Ursprüngliche Lösung,
908988 BytesProbieren Sie es aus oder führen Sie alle Testfälle aus
Erläuterung
Codepoints
quelle
05AB1E,
565351504948 BytesProbieren Sie es online!
Kern dieser Lösung ist eine komprimierte Liste, die Unicode-Codepunkte auf einen Sortierschlüssel abbildet. Zeichen, die der gleichen Nummer entsprechen, werden dem gleichen Schlüssel zugeordnet, sodass wir nur 40 verschiedene Schlüssel benötigen.
70 ist die kleinste Zahl, mit der wir alle Eingabecodepunkte modulieren und eindeutige Ergebnisse erzielen können. Da die Indizierung in 05AB1E einen Umbruch darstellt, müssen wir nicht explizit
70%
sicherstellen, dass die Liste die Länge 70 hat.Beachten Sie, dass es lange Strecken aufeinanderfolgender Codepunkte mit aufeinanderfolgenden Schlüsseln gibt. Die Codierung (Schlüssel - Codepunkt) anstelle der einfachen Codierung (Schlüssel) ergibt also lange Strecken mit identischen Zahlen, die lauflängencodiert werden können. Der Bereich der Codepunkte ist jedoch sehr groß (verdammt die 0xBC .. 0xBE), was ein Problem darstellen würde. Anstelle von (key - codepoint) wird also (key - sum_of_digits (codepoint)) codiert, wodurch die Dehnungslänge leider auf 10 begrenzt wird, der Bereich der codierten Werte jedoch recht gut reduziert wird. (Andere Funktionen sind natürlich möglich, wie Codepunkt% Konstante, aber die Summe der Ziffern liefert die besten Ergebnisse).
Außerdem hat sich herausgestellt, dass die Liste bei der Lauflängencodierung gut um 2 gedreht werden kann. Daher subtrahieren wir vor der Indizierung 2 vom Codepunkt.
quelle
JavaScript (SpiderMonkey) , 117 Byte
Probieren Sie es online!
quelle
T-SQL, 207 Bytes
Die Rückgabe in der Mitte der Zeichenfolge dient nur der Lesbarkeit. Ich glaube, ich habe die Anzahl der Bytes richtig (3 der numerischen Zeichen sind 1 Byte, der Rest sind 2 Byte), die Anzahl der Zeichen ist 148.
Ich habe die Zeichenfolge in aufsteigender Reihenfolge vorsortiert und dabei
↉
den Wert 0 ausgelassen, wie in anderen Antworten vorgeschlagen.Jede binäre Kollatierung funktioniert, ich habe sie verwendet,
Thai_BIN
da sie den kürzesten Namen hat. (Eine Sortierung in SQL schreibt vor, wie das Sortieren / Vergleichen von Zeichen erfolgt. Ich benötige Binärdateien, damit jedes Zeichen nur mit sich selbst übereinstimmt.)Gemäß unseren IO-Standards erfolgt die Eingabe über die bereits vorhandene Tabelle t mit
NCHAR(1)
Feld c .Wenn Sie die Eingabetabelle selbst mit einer binären Kollatierung definieren, können Sie dies weglassen, um 16 Bytes zu sparen:
quelle
⅐⅑⅒Ↄↄↅↆↇↈ↉↊↋
stimmen 10 der weniger verbreiteten Zeichen ( wenn Sie neugierig sind) miteinander überein.Ruby , 77 Bytes
Ändert alle Zeichen in Buchstaben, die die numerischen Werte darstellen, und sortiert sie danach.
Probieren Sie es online!
quelle
Perl 6 ,
1352 BytesProbieren Sie es online!
quelle
*.sort:{%(<Ↄ 99 ↄ 99 ↊ 10 ↋ 11>){$_}//.EVAL}