Auf Chinesisch werden Zahlen wie folgt geschrieben:
1 一
2 二
3 三
4 四
5 五
6 六
7 七
8 八
9 九
10 十
Bei Zahlen über 10 wird dies als Anzahl der Zehner und Anzahl der Einsen ausgedrückt. Wenn es nur eine Zehn gibt, müssen Sie nicht explizit eine sagen, und wenn es keine gibt, müssen Sie nichts danach setzen:
11 十一
24 二十四
83 八十三
90 九十
Für Zahlen über 100 verwenden Sie dieselbe Logik, jedoch mit dem Zeichen 百
. Dieses Mal, wenn es nur einhundert gibt, müssen Sie es noch aufschreiben, und wenn es keine Zehner gibt, müssen Sie sagen 零
.
100 一百
231 二百三十一
803 八百零三
999 九百九十九
Ihre Aufgabe ist es, diese chinesischen Ziffern in arabische Ziffern umzuwandeln. Wenn Sie eine Zahl N auf Chinesisch ( 一
(1) <= N <= 九百九十九
(999)) angeben, konvertieren Sie diese in eine arabische Zahl.
Denken Sie daran, dies ist Code-Golf , also gewinnt der Code mit der geringsten Anzahl von Bytes.
503
und380
?503 -> 五百三
und sein380 -> 三百八十
. Außerdem sagst du das für zehnyou do not need to explicitly say one
. Bedeutet das, dass es keine Rolle spielt, ob wir es tun?五百零三
da es keine Zehner gibt (glaube ich)Antworten:
JavaScript (ES6), 112 Byte
Die Ziffern 一 - 九 werden in Dezimalzahlen umgewandelt und in gespeichert
d
, während 十 und 百 die letzte Ziffer mit 10 bzw. 100 multiplizieren und in akkumulierenn
.零
wird effektiv ignoriert, dad
es bereits Null ist, wenn es angetroffen wird.quelle
Perl, 110 Bytes
98 Bytes Code + 12 für
-plC -Mutf8
.Perl hasst Unicode. Hoffentlich habe ich keine Randfälle verpasst, ich hatte ein Problem mit Zahlen wie,
二百十
aber das habe ich jetzt angesprochen!Verwendungszweck
quelle
PHP, 225 Bytes
quelle
strtr
das nicht multibyte-sicher ist. Sie könnten 23 Bytes sparen. Aber Sie können verwenden0+
statt00?
, speichern ein Byte oder Sie können a) ersetzena
undaa
statt10
und100
, b) Verwendunga+
statt100?
in der Regex und c)a
statt0
fürsubstr_count
(-4).Java 7,
236233229 BytesUngolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
C #,
197210 BytesFalsche Byteanzahl zuvor aufgrund ignorierter Codierung ...
Big5-Codierung
Eine rekursive Lösung, die die Eingabe auffüllt, wenn sie zur einfacheren Verarbeitung zwischen 10 und 19 liegt, und dann von links 2 Zeichen gleichzeitig verarbeitet.
Ungolfed
quelle
Python 3, 128 Bytes
Speichern von 2 + 3 Bytes dank Shebang und 2 für das Ersetzen
(d>9)+(d>10)
durchmax(d-9,0)
Ungolfed:
Erste Antwort
n
wird die endgültige Nummer sein unda
ist die vorherige Ziffer.quelle
find
gibt -1 zurück und das ist kleiner als9
dasn
und bleibta
unberührt.[1,a][a>0]*10 -> 10*a**(a>0)
spart zwei Bytes :)[0,d][d<=9] -> d*(d<10)
spart auch drei Bytes!