Suzhou-Ziffern (蘇州 蘇州; auch 花 花) sind chinesische Dezimalzahlen:
0 〇
1 〡 一
2 〢 二
3 〣 三
4 〤
5 〥
6 〦
7 〧
8 〨
9 〩
Sie funktionieren so ziemlich wie arabische Ziffern, mit der Ausnahme, dass bei aufeinanderfolgenden Ziffern, die zum Satz gehören {1, 2, 3}
, die Ziffern zwischen der vertikalen Strichnotation {〡,〢,〣}
und der horizontalen Strichnotation wechseln {一,二,三}
, um Mehrdeutigkeiten zu vermeiden. Die erste Ziffer einer solchen fortlaufenden Gruppe wird immer in vertikaler Strichnotation geschrieben.
Die Aufgabe besteht darin, eine positive ganze Zahl in Suzhou-Zahlen umzuwandeln.
Testfälle
1 〡
11 〡一
25 〢〥
50 〥〇
99 〩〩
111 〡一〡
511 〥〡一
2018 〢〇〡〨
123321 〡二〣三〢一
1234321 〡二〣〤〣二〡
9876543210 〩〨〧〦〥〤〣二〡〇
Kürzester Code in Bytes gewinnt.
Antworten:
Gelee , 35 Bytes
Probieren Sie es online!
quelle
R , 138 Bytes
Ich wette, es gibt einen einfacheren Weg, dies zu tun. Verwenden Sie
gsub
, um die abwechselnden numerischen Positionen abzurufen.Probieren Sie es online!
quelle
JavaScript, 81 Byte
Probieren Sie es online!
Mit
14>>c
sparen Sie 3 Bytes. Vielen Dank an Arnauld .quelle
Netzhaut , 46 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Passen Sie entweder zwei Ziffern 1-3 oder eine beliebige andere Ziffer an.
Ersetze den ersten Charakter jedes Matches durch seinen Suzhou.
Ersetzen Sie alle verbleibenden Ziffern durch horizontales Suzhou.
51 Bytes in Retina 0.8.2 :
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Teilen Sie die Eingabe in einzelne Ziffern oder Ziffernpaare auf, wenn beide 1-3 sind.
Ersetzen Sie das erste Zeichen jeder Zeile durch sein Suzhou.
Verbinden Sie die Linien wieder miteinander und ersetzen Sie alle verbleibenden Ziffern durch horizontales Suzhou.
quelle
Perl 5
-pl -Mutf8
,5346 Bytes-7 Bytes dank Grimy
Probieren Sie es online!
Erläuterung
quelle
s/[123]\K[123]/$&^$;/ge;y/--</一二三〇〡-〩/
( TIO )s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/
( TIO ). 48:s/[123]{2}/$&^"\0\34"/ge;y/--</一二三〇〡-〩/
(erfordert die Verwendung von wörtlichen Steuerzeichen anstelle von\0\34
, idk, wie dies auf TIO zu tun ist)s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c
( TIO )Java (JDK) , 120 Byte
Probieren Sie es online!
Credits
quelle
c=s[i]-48;if(p>0&p<4&c>0&c<4)
kann seinif(p>0&p<4&(c=s[i]-48)>0&c<4)
, und dann können Sie auch die Klammern um die Schleife fallen. Auchelse{p=c;s[i]+=c<1?12247:12272;}
kann seinelse s[i]+=(p=c)<1?12247:12272;
JavaScript (ES6),
95 8988 Byte6 Bytes dank @ShieruAsakoto eingespart
Übernimmt die Eingabe als Zeichenfolge.
Probieren Sie es online!
quelle
Python 3 , 102 Bytes
Probieren Sie es online!
mypetlion erinnerte mich an ein triviales Golfspiel. -4 Bytes.
quelle
Sauber ,
181165 BytesAlle oktalen Escapezeichen können durch die entsprechenden Einzelbytezeichen ersetzt werden (und werden jeweils als ein Byte gezählt), werden jedoch aus Gründen der Lesbarkeit verwendet und weil sonst TIO und SE mit ungültigem UTF-8 beschädigt werden.
Probieren Sie es online!
Ein Compiler, der die Codierung nicht kennt, ist sowohl ein Segen als auch ein Fluch.
quelle
Perl 6
-p
,8561 Bytes-13 Bytes dank Jo King
Probieren Sie es online!
quelle
Rot ,
198171 BytesProbieren Sie es online!
quelle
Jelly , 38 Bytes
Probieren Sie es online!
quelle
C 131 Bytes
Probieren Sie es online!
Erläuterung: Zunächst einmal verwende ich char für alle Variablen, um es kurz zu machen.
Array
s
enthält alle benötigten Suzhou-Zeichen.Der Rest iteriert so ziemlich über die angegebene Zahl, die als Zeichenfolge ausgedrückt wird.
Beim Schreiben in das Terminal verwende ich den eingegebenen Zahlenwert (also das Zeichen - 48 in ASCII), multipliziert mit 3, da alle diese Zeichen in UTF-8 3 Byte lang sind. Die 'Zeichenkette', die gedruckt wird, ist immer 3 Bytes lang - also ein reales Zeichen.
Variablen
c
undd
sind nur 'Verknüpfungen' zum aktuellen und nächsten Eingabezeichen (Nummer).Die Variable
f
enthält 0 oder 27 - es wird angegeben, ob das nächste 1/2/3 Zeichen auf das alternative verschoben werden soll - 27 ist der Versatz zwischen regulärem und alternativem Zeichen im Array.f=c*d&&(c|d)<4&&!f?27:0
- schreibe 27 nach f wenn c * d! = 0 und wenn beide <4 sind und wenn f nicht 0 ist, schreibe sonst 0.Könnte umgeschrieben werden als:
Vielleicht gibt es ein paar Bytes zu entfernen, aber ich kann nichts Offensichtliches mehr finden.
quelle
Ruby
-p
, 71 BytesProbieren Sie es online!
quelle
K (ngn / k) , 67 Bytes
Probieren Sie es online!
10\
Liste der Dezimalstellen abrufen{
}@
Wenden Sie die folgende Funktion anx&x<4
Boolesche (0/1) Liste, in der das Argument kleiner als 4 und ungleich Null ist<\
Scannen mit weniger als. Dadurch werden aufeinanderfolgende Einsen in abwechselnde Einsen und Nullen umgewandeltx+9*
Mit 9 multiplizieren und addierenx
Juxtaposition indiziert, verwenden Sie dies also als Indizes in ...
0N 3#"〇一二三〤〥〦〧〨〩〡〢〣"
Die angegebene Zeichenfolge wird in eine Liste von 3-Byte-Zeichenfolgen aufgeteilt. k ist nicht Unicode-fähig, sieht also nur Bytes,/
verkettenquelle
Wolfram Language (Mathematica) , 117 Bytes
Probieren Sie es online!
Beachten Sie, dass dies bei TIO das Ergebnis in maskierter Form ausgibt. Im normalen Wolfram-Frontend sieht es so aus:
quelle
f[123]
sollte zurückkehren〡二〣
.Japt , 55 Bytes
Probieren Sie es online!
Es ist erwähnenswert, dass TIO eine andere Byteanzahl angibt als mein bevorzugter Interpreter , aber ich sehe keinen Grund, demjenigen nicht zu vertrauen, der mir eine niedrigere Punktzahl gibt.
Erläuterung:
quelle
C # (.NET Core) , 107 Byte, 81 Zeichen
Probieren Sie es online!
17 Bytes dank @Jo King gespeichert
Alte Antwort
C # (.NET Core) , 124 Byte, 98 ZeichenProbieren Sie es online!
Nimmt Eingaben in Form einer Liste entgegen und gibt eine IEnumerable zurück. Ich weiß nicht, ob diese Eingabe / Ausgabe in Ordnung ist. Lassen Sie es mich wissen, wenn dies nicht der Fall ist.
Erläuterung
Das funktioniert so, dass alle Ganzzahlen in ihre jeweilige Suzhou-Zahlenform umgewandelt werden, aber nur, wenn die Variable
b
wahr ist.b
wird immer dann invertiert, wenn wir auf eine Ganzzahl treffen, die eins, zwei oder drei ist, und ansonsten auf true gesetzt. Wennb
false ist, setzen wir die Ganzzahl auf eine der vertikalen Zahlen.quelle
R , 104 Bytes
Probieren Sie es online!
Ein alternativer Ansatz in R. Verwendet einige Regex-Features im Perl-Stil (der letzte
T
Parameter in der Substitutionsfunktion steht fürperl=TRUE
).Zuerst übersetzen wir Ziffern in alphabetische Zeichen
a-j
, dann verwenden wir die Regex-Ersetzung, um doppelte Vorkommen vonbcd
(früher123
) in Großbuchstaben umzuwandeln , und schließlich übersetzen wir Zeichen in Suzhou-Ziffern, wobei Kleinbuchstaben und Großbuchstaben unterschiedlich behandelt werden.Dank an J.Doe für die Vorbereitung von Testfällen, da diese seiner Antwort entnommen wurden .
quelle
153 Bytes
Probieren Sie es online!
quelle