Los números de Suzhou (蘇州 碼子; también 花 碼) son números decimales chinos:
0 〇
1 〡 一
2 〢 二
3 〣 三
4 〤
5 〥
6 〦
7 〧
8 〨
9 〩
Funcionan prácticamente como números arábigos, excepto que cuando hay dígitos consecutivos que pertenecen al conjunto {1, 2, 3}
, los dígitos alternan entre notación de trazo vertical {〡,〢,〣}
y notación de trazo horizontal {一,二,三}
para evitar la ambigüedad. El primer dígito de dicho grupo consecutivo siempre se escribe con notación de trazo vertical.
La tarea es convertir un número entero positivo en números de Suzhou.
Casos de prueba
1 〡
11 〡一
25 〢〥
50 〥〇
99 〩〩
111 〡一〡
511 〥〡一
2018 〢〇〡〨
123321 〡二〣三〢一
1234321 〡二〣〤〣二〡
9876543210 〩〨〧〦〥〤〣二〡〇
El código más corto en bytes gana.
Respuestas:
Jalea , 35 bytes
Pruébalo en línea!
fuente
R , 138 bytes
Apuesto a que hay una manera más fácil de hacer esto. Use
gsub
para obtener las posiciones numéricas alternas.Pruébalo en línea!
fuente
JavaScript, 81 bytes
Pruébalo en línea!
Usando
14>>c
ahorra 3 bytes. Gracias a Arnauld .fuente
Retina , 46 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Haga coincidir dos dígitos 1-3 o cualquier otro dígito.
Reemplaza el primer personaje de cada partida con su Suzhou.
Reemplace los dígitos restantes con Suzhou horizontal.
51 bytes en Retina 0.8.2 :
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Divida la entrada en dígitos individuales o pares de dígitos si ambos son 1-3.
Reemplace el primer carácter de cada línea con su Suzhou.
Vuelva a unir las líneas y reemplace los dígitos restantes con Suzhou horizontal.
fuente
Perl 5
-pl -Mutf8
,5346 bytes-7 bytes gracias a Grimy
Pruébalo en línea!
Explicación
fuente
s/[123]\K[123]/$&^$;/ge;y/--</一二三〇〡-〩/
( TIO )s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/
( TIO ). 48:s/[123]{2}/$&^"\0\34"/ge;y/--</一二三〇〡-〩/
(requiere el uso de caracteres de control literal en lugar de\0\34
, idk cómo hacer esto en TIO)s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c
( TIO )Java (JDK) , 120 bytes
Pruébalo en línea!
Créditos
fuente
c=s[i]-48;if(p>0&p<4&c>0&c<4)
puede serif(p>0&p<4&(c=s[i]-48)>0&c<4)
, y luego también puede colocar los corchetes alrededor del bucle. Además,else{p=c;s[i]+=c<1?12247:12272;}
puede serelse s[i]+=(p=c)<1?12247:12272;
JavaScript (ES6),
95 8988 bytesGuardado 6 bytes gracias a @ShieruAsakoto
Toma la entrada como una cadena.
Pruébalo en línea!
fuente
Python 3 , 102 bytes
Pruébalo en línea!
Mypetlion me recordó a un golf trivial. -4 bytes.
fuente
Limpio ,
181165 bytesTodos los escapes octales se pueden reemplazar por los caracteres equivalentes de un solo byte (y se cuentan como un byte cada uno), pero se usan para facilitar la lectura y porque de lo contrario se rompen TIO y SE con UTF-8 no válido.
Pruébalo en línea!
Un compilador que no conoce la codificación es tanto una bendición como una maldición.
fuente
Perl 6
-p
,8561 bytes-13 bytes gracias a Jo King
Pruébalo en línea!
fuente
Rojo ,
198171 bytesPruébalo en línea!
fuente
Jalea , 38 bytes
Pruébalo en línea!
fuente
C, 131 bytes
Pruébalo en línea!
Explicación: En primer lugar, estoy usando char para todas las variables para que sea breve.
Formación
s
contiene todos los personajes necesarios de Suzhou.El resto está prácticamente iterando sobre el número proporcionado, que se expresa como una cadena.
Al escribir en el terminal, estoy usando el valor del número de entrada (por lo que el carácter - 48 en ASCII), multiplicado por 3, porque todos estos caracteres tienen 3 bytes de longitud en UTF-8. La 'cadena' que se imprime siempre tiene 3 bytes de longitud, por lo que un carácter real.
Variables
c
yd
son solo 'accesos directos' al carácter de entrada actual y siguiente (número).Variable
f
contiene 0 o 27 - dice si el siguiente 1/2/3 carácter debe cambiarse a la alternativa - 27 es el desplazamiento entre el carácter regular y el alternativo en la matriz.f=c*d&&(c|d)<4&&!f?27:0
- escriba 27 en f si c * d! = 0 y si ambos son <4 y si f no es 0, de lo contrario escriba 0.Podría reescribirse como:
Tal vez hay algunos bytes para eliminar, pero ya no puedo encontrar nada obvio.
fuente
Ruby
-p
, 71 bytesPruébalo en línea!
fuente
K (ngn / k) , 67 bytes
Pruébalo en línea!
10\
obtener una lista de dígitos decimales{
}@
aplicar la siguiente funciónx&x<4
lista booleana (0/1) de donde el argumento es menor que 4 y distinto de cero<\
escanear con menos de. esto convierte series de 1s consecutivos en 1s y 0s alternosx+9*
multiplicar por 9 y agregarx
la yuxtaposición es indexación, así que úsela como índices en ...
0N 3#"〇一二三〤〥〦〧〨〩〡〢〣"
la cadena dada, dividida en una lista de cadenas de 3 bytes. k no es compatible con Unicode, por lo que solo ve bytes,/
concatenarfuente
Wolfram Language (Mathematica) , 117 bytes
Pruébalo en línea!
Tenga en cuenta que en TIO esto genera el resultado en forma de escape. En el extremo frontal normal de Wolfram, se verá así:
fuente
f[123]
debería volver〡二〣
.Japt , 55 bytes
Pruébalo en línea!
Vale la pena señalar que TIO da un recuento de bytes diferente que mi intérprete preferido , pero no veo ninguna razón para no confiar en el que me da una puntuación más baja.
Explicación:
fuente
C # (.NET Core) , 107 bytes, 81 caracteres
Pruébalo en línea!
Guardado 17 bytes gracias a @Jo King
Vieja respuesta
C # (.NET Core) , 124 bytes, 98 caracteresPruébalo en línea!
Toma la entrada en forma de una lista y devuelve un IEnumerable. No sé si esta entrada / salida está bien, así que avíseme si no lo está.
Explicación
Cómo funciona esto es que transforma todos los enteros a su respectiva forma numérica de Suzhou, pero solo si la variable
b
es verdadera.b
se invierte cada vez que nos encontramos con un número entero que es uno, dos o tres, y se establece en verdadero de lo contrario. Sib
es falso, convertimos el número entero en uno de los números verticales.fuente
R , 104 bytes
Pruébalo en línea!
Un enfoque alternativo en R. Hace uso de algunas características de expresión regular de estilo Perl (el último
T
parámetro en la función de sustitución significaperl=TRUE
).Primero, traducimos números a caracteres alfabéticos.
a-j
, luego usamos la sustitución de expresiones regulares para convertir ocurrencias duplicadas debcd
(anteriormente123
) a mayúsculas, y finalmente traducimos caracteres a números de Suzhou con diferente manejo de letras minúsculas y mayúsculas.Gracias a J.Doe por la preparación de casos de prueba, ya que estos fueron tomados de su respuesta .
fuente
C #, 153 bytes
Pruébalo en línea!
fuente