En chino, los números se escriben de la siguiente manera:
1 一
2 二
3 三
4 四
5 五
6 六
7 七
8 八
9 九
10 十
Para números superiores a 10, se expresa como el número de decenas y el número de unidades. Si solo hay un diez, no necesita decir explícitamente uno, y si no hay ninguno, no necesita poner nada después:
11 十一
24 二十四
83 八十三
90 九十
Para números superiores a 100, utiliza la misma lógica, pero con el carácter 百
. Sin embargo, esta vez, si solo hay cien, aún debe escribirlo, y si no hay decenas, debe decir 零
.
100 一百
231 二百三十一
803 八百零三
999 九百九十九
Su tarea es convertir estos números chinos en números arábigos. Dado un número N en chino ( 一
(1) <= N <= 九百九十九
(999)), conviértalo en un número árabe.
Recuerde, este es el código de golf , por lo que gana el código con el menor número de bytes.
503
y380
?503 -> 五百三
y380 -> 三百八十
. Además, dices por decenas esoyou do not need to explicitly say one
. ¿Eso significa que no importa si lo hacemos?五百零三
como no hay decenas (creo)Respuestas:
JavaScript (ES6), 112 bytes
Los dígitos 一 - 九 se convierten a decimales y se guardan
d
, mientras que 十 y 百 multiplican el último dígito por 10 o 100 respectivamente y lo acumulann
.零
se ignora efectivamente, ya qued
es cero cuando se encuentra.fuente
Perl, 110 bytes
Código de 98 bytes + 12 para
-plC -Mutf8
.Perl odia a Unicode. Espero que no me haya perdido ninguno de los casos límite, tuve un problema con los números, ¡
二百十
pero ya he abordado eso!Uso
fuente
PHP, 225 bytes
fuente
strtr
no sea multibyte seguro. Podría ahorrarte 23 bytes. Pero puede usar en0+
lugar de00?
guardar un byte o puede a) reemplazar cona
y enaa
lugar de10
y100
, b) usar ena+
lugar de100?
en la expresión regular yc) ena
lugar de0
forsubstr_count
(-4).Java 7,
236233229 bytesUngolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
C #,
197210 bytesRecuento de bytes incorrecto anteriormente debido a la codificación ignorada ...
Codificación Big5
Una solución recursiva que rellena la entrada si es 10-19 para un procesamiento más fácil, luego procesa desde la izquierda 2 caracteres a la vez.
Sin golf
fuente
Python 3, 128 bytes
Ahorro de 2 + 3 bytes gracias a Shebang y 2 por reemplazar
(d>9)+(d>10)
conmax(d-9,0)
Sin golf:
Respuesta inicial
n
será el número final ya
es el dígito anterior.fuente
find
devuelve -1 y eso es más pequeño que9
eson
ya
no se han tocado.[1,a][a>0]*10 -> 10*a**(a>0)
ahorra dos bytes :)[0,d][d<=9] -> d*(d<10)
¡también ahorra tres bytes!