Os números Suzhou (蘇州 碼子; também 花 碼) são números decimais chineses:
0 〇
1 〡 一
2 〢 二
3 〣 三
4 〤
5 〥
6 〦
7 〧
8 〨
9 〩
Eles funcionam praticamente como algarismos arábicos, exceto que, quando há dígitos consecutivos pertencentes ao conjunto {1, 2, 3}
, os dígitos alternam entre a notação de traço vertical {〡,〢,〣}
e a horizontal, {一,二,三}
para evitar ambiguidade. O primeiro dígito desse grupo consecutivo é sempre escrito com notação de traço vertical.
A tarefa é converter um número inteiro positivo em números de Suzhou.
Casos de teste
1 〡
11 〡一
25 〢〥
50 〥〇
99 〩〩
111 〡一〡
511 〥〡一
2018 〢〇〡〨
123321 〡二〣三〢一
1234321 〡二〣〤〣二〡
9876543210 〩〨〧〦〥〤〣二〡〇
O menor código em bytes vence.
Respostas:
Geléia , 35 bytes
Experimente online!
fonte
R , 138 bytes
Aposto que há uma maneira mais fácil de fazer isso. Use
gsub
para obter as posições numéricas alternadas.Experimente online!
fonte
JavaScript, 81 bytes
Experimente online!
Usando
14>>c
salva 3 bytes. Graças a Arnauld .fonte
Retina , 46 bytes
Experimente online!O link inclui casos de teste. Explicação:
Corresponda dois dígitos 1-3 ou qualquer outro dígito.
Substitua o primeiro caractere de cada partida pelo seu Suzhou.
Substitua todos os dígitos restantes por Suzhou horizontal.
51 bytes na Retina 0.8.2 :
Experimente online! O link inclui casos de teste. Explicação:
Divida a entrada em dígitos individuais ou pares de dígitos, se ambos forem 1-3.
Substitua o primeiro caractere de cada linha pelo seu Suzhou.
Junte as linhas novamente e substitua os dígitos restantes pela Suzhou horizontal.
fonte
Perl 5
-pl -Mutf8
,5346 bytes-7 bytes graças ao Grimy
Experimente online!
Explicação
fonte
s/[123]\K[123]/$&^$;/ge;y/--</一二三〇〡-〩/
( TIO )s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/
( TIO ). 48:s/[123]{2}/$&^"\0\34"/ge;y/--</一二三〇〡-〩/
(requer o uso de caracteres em vez de controle literais\0\34
, idk como fazer isso em TIO)s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c
( TIO )Java (JDK) , 120 bytes
Experimente online!
Créditos
fonte
c=s[i]-48;if(p>0&p<4&c>0&c<4)
pode serif(p>0&p<4&(c=s[i]-48)>0&c<4)
e, em seguida, você também pode soltar os colchetes ao redor do loop. Além disso,else{p=c;s[i]+=c<1?12247:12272;}
pode serelse s[i]+=(p=c)<1?12247:12272;
JavaScript (ES6),
95 8988 bytesGuardado 6 bytes graças a @ShieruAsakoto
Recebe a entrada como uma sequência.
Experimente online!
fonte
Python 3 , 102 bytes
Experimente online!
mypetlion me lembrou um golfe trivial. -4 bytes.
fonte
Limpo ,
181165 bytesTodas as fugas octais podem ser substituídas pelos caracteres equivalentes de um byte (e são contados como um byte cada), mas são usados para facilitar a leitura e, caso contrário, ele quebra o TIO e o SE com UTF-8 inválido.
Experimente online!
Um compilador que ignora a codificação é uma bênção e uma maldição.
fonte
Perl 6
-p
,8561 bytes-13 bytes graças a Jo King
Experimente online!
fonte
Vermelho ,
198171 bytesExperimente online!
fonte
Gelatina , 38 bytes
Experimente online!
fonte
C, 131 bytes
Experimente online!
Explicação: Primeiro de tudo - estou usando char para todas as variáveis para torná-lo curto.
A matriz
s
contém todos os caracteres necessários de Suzhou.O resto é praticamente iterativo sobre o número fornecido, que é expresso como uma sequência.
Ao escrever no terminal, estou usando o valor do número de entrada (portanto, o caractere - 48 em ASCII), multiplicado por 3, porque todos esses caracteres têm 3 bytes de comprimento em UTF-8. A 'string' impressa sempre tem 3 bytes - portanto, um caractere real.
Variáveis
c
ed
são apenas 'atalhos' para o caractere de entrada atual e o próximo (número).A variável
f
mantém 0 ou 27 - indica se o próximo caractere 1/2/3 deve ser deslocado para a alternativa um - 27 é o deslocamento entre o caractere regular e o alternativo na matriz.f=c*d&&(c|d)<4&&!f?27:0
- escreva 27 para f se c * d! = 0 e se forem ambos <4 e se f não for 0, caso contrário, escreva 0.Pode ser reescrito como:
Talvez haja alguns bytes para cortar, mas não consigo mais encontrar nada óbvio.
fonte
Ruby
-p
, 71 bytesExperimente online!
fonte
K (ngn / k) , 67 bytes
Experimente online!
10\
obter lista de dígitos decimais{
}@
aplique a seguinte funçãox&x<4
lista booleana (0/1) de onde o argumento é menor que 4 e diferente de zero<\
digitalize com menos que. isso transforma séries de 1s consecutivas em 1s e 0s alternadasx+9*
multiplique por 9 e adicionex
justaposição é indexação, então use isso como índices em ...
0N 3#"〇一二三〤〥〦〧〨〩〡〢〣"
a sequência especificada, divida em uma lista de sequências de 3 bytes. k não reconhece unicode, portanto, vê apenas bytes,/
concatenarfonte
Wolfram Language (Mathematica) , 117 bytes
Experimente online!
Observe que no TIO isso gera o resultado na forma de escape. No front-end normal da Wolfram, será assim:
fonte
f[123]
deve retornar〡二〣
.Japonês , 55 bytes
Experimente online!
Vale a pena notar que o TIO fornece uma contagem de bytes diferente do meu intérprete preferido , mas não vejo razão para não confiar no que me dá uma pontuação mais baixa.
Explicação:
fonte
C # (.NET Core) , 107 bytes, 81 caracteres
Experimente online!
Guardado 17 bytes graças a @Jo King
Resposta antiga
C # (.NET Core) , 124 bytes, 98 caracteresExperimente online!
Recebe entrada na forma de uma lista e retorna um IEnumerable. Não sei se essa entrada / saída está ok, então deixe-me saber se não está.
Explicação
Como isso funciona é que ele transforma todos os números inteiros na respectiva forma numérica de Suzhou, mas apenas se a variável
b
for verdadeira.b
é invertido sempre que encontramos um número inteiro que seja um, dois ou três e, caso contrário, é definido como true. Seb
for falso, transformamos o número inteiro em um dos números verticais.fonte
R , 104 bytes
Experimente online!
Uma abordagem alternativa em R. Utiliza alguns recursos do Regex no estilo Perl (o último
T
parâmetro na função de substituição significaperl=TRUE
).Primeiro, convertemos números em caracteres alfabéticos e
a-j
, em seguida, usamos a substituição Regex para converter ocorrências duplicadas debcd
(anteriormente123
) em maiúsculas e, finalmente, convertemos caracteres em números de Suzhou com tratamento diferente de letras minúsculas e maiúsculas.Agradecemos a J.Doe pela preparação de casos de teste, pois foram retirados de sua resposta .
fonte
C #, 153 bytes
Experimente online!
fonte