Les chiffres de Suzhou (蘇州 碼子; également 花 碼) sont des nombres décimaux chinois:
0 〇
1 〡 一
2 〢 二
3 〣 三
4 〤
5 〥
6 〦
7 〧
8 〨
9 〩
Ils fonctionnent à peu près comme des chiffres arabes, sauf que lorsqu'il y a des chiffres consécutifs appartenant à l'ensemble {1, 2, 3}
, les chiffres alternent entre la notation de trait vertical {〡,〢,〣}
et la notation de trait horizontal {一,二,三}
pour éviter toute ambiguïté. Le premier chiffre d'un tel groupe consécutif est toujours écrit avec une notation de trait vertical.
La tâche consiste à convertir un entier positif en chiffres de Suzhou.
Cas de test
1 〡
11 〡一
25 〢〥
50 〥〇
99 〩〩
111 〡一〡
511 〥〡一
2018 〢〇〡〨
123321 〡二〣三〢一
1234321 〡二〣〤〣二〡
9876543210 〩〨〧〦〥〤〣二〡〇
Le code le plus court en octets gagne.
Réponses:
Gelée , 35 octets
Essayez-le en ligne!
la source
R , 138 octets
Je parie qu'il existe un moyen plus simple de le faire. Utilisez
gsub
pour obtenir les positions numériques alternées.Essayez-le en ligne!
la source
JavaScript, 81 octets
Essayez-le en ligne!
L'utilisation
14>>c
économise 3 octets. Merci à Arnauld .la source
Rétine , 46 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Faites correspondre deux ou trois chiffres ou tout autre chiffre.
Remplacez le premier caractère de chaque match par son Suzhou.
Remplacez tous les chiffres restants par Suzhou horizontal.
51 octets dans Retina 0.8.2 :
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Divisez l'entrée en chiffres individuels ou en paires de chiffres s'ils sont tous deux 1-3.
Remplacez le premier caractère de chaque ligne par son Suzhou.
Joignez les lignes ensemble et remplacez tous les chiffres restants par Suzhou horizontal.
la source
Perl 5
-pl -Mutf8
,5346 octets-7 octets grâce à Grimy
Essayez-le en ligne!
Explication
la source
s/[123]\K[123]/$&^$;/ge;y/--</一二三〇〡-〩/
( TIO )s/[123]{2}/$&^v0.28/ge;y/--</一二三〇〡-〩/
( TIO ). 48:s/[123]{2}/$&^"\0\34"/ge;y/--</一二三〇〡-〩/
(nécessite l'utilisation de caractères de contrôle littéraux au lieu de\0\34
, idk comment faire cela sur TIO)s/[123]{2}|./OS&$&/ge;y//〇〡-〰一二三/c
( TIO )Java (JDK) , 120 octets
Essayez-le en ligne!
Crédits
la source
c=s[i]-48;if(p>0&p<4&c>0&c<4)
peut êtreif(p>0&p<4&(c=s[i]-48)>0&c<4)
, puis vous pouvez également déposer les crochets autour de la boucle. Aussi,else{p=c;s[i]+=c<1?12247:12272;}
peut êtreelse s[i]+=(p=c)<1?12247:12272;
JavaScript (ES6),
95 8988 octets6 octets enregistrés grâce à @ShieruAsakoto
Prend l'entrée sous forme de chaîne.
Essayez-le en ligne!
la source
Python 3 , 102 octets
Essayez-le en ligne!
mypetlion m'a rappelé un golf insignifiant. -4 octets.
la source
Nettoyer ,
181165 octetsTous les échappements octaux peuvent être remplacés par les caractères mono-octet équivalents (et sont comptés comme un octet chacun), mais utilisés pour la lisibilité et parce qu'autrement, il casse TIO et SE avec UTF-8 invalide.
Essayez-le en ligne!
Un compilateur ignorant l'encodage est à la fois une bénédiction et une malédiction.
la source
Perl 6
-p
,8561 octets-13 octets grâce à Jo King
Essayez-le en ligne!
la source
Rouge ,
198171 octetsEssayez-le en ligne!
la source
Gelée , 38 octets
Essayez-le en ligne!
la source
C, 131 octets
Essayez-le en ligne!
Explication: Tout d'abord - j'utilise char pour toutes les variables pour faire court.
Array
s
contient tous les personnages Suzhou nécessaires.Le reste est à peu près itéré sur le nombre fourni, qui est exprimé sous forme de chaîne.
Lors de l'écriture sur le terminal, j'utilise la valeur du numéro d'entrée (donc le caractère - 48 en ASCII), multipliée par 3, car tous ces caractères font 3 octets de long en UTF-8. La «chaîne» en cours d'impression est toujours de 3 octets - donc un vrai caractère.
Les variables
c
et ned
sont que des «raccourcis» vers le caractère d'entrée actuel et suivant (nombre).Variable
f
contient 0 ou 27 - elle indique si le caractère 1/2/3 suivant doit être déplacé vers l'alternative - 27 est le décalage entre le caractère régulier et alternatif dans le tableau.f=c*d&&(c|d)<4&&!f?27:0
- écrivez 27 à f si c * d! = 0 et s'ils sont tous les deux <4 et si f n'est pas 0, sinon écrivez 0.Pourrait être réécrit comme:
Il y a peut-être quelques octets à raser, mais je ne trouve plus rien d'évident.
la source
Rubis
-p
, 71 octetsEssayez-le en ligne!
la source
K (ngn / k) , 67 octets
Essayez-le en ligne!
10\
obtenir la liste des chiffres décimaux{
}@
appliquer la fonction suivantex&x<4
liste booléenne (0/1) où l'argument est inférieur à 4 et non nul<\
numériser avec moins de. cela transforme les cycles de 1 consécutifs en alternance de 1 et de 0x+9*
multipliez par 9 et ajoutezx
la juxtaposition est l'indexation, alors utilisez-la comme index dans ...
0N 3#"〇一二三〤〥〦〧〨〩〡〢〣"
la chaîne donnée, divisée en une liste de chaînes de 3 octets. k n'est pas unicode, il ne voit donc que les octets,/
enchaînerla source
Wolfram Language (Mathematica) , 117 octets
Essayez-le en ligne!
Notez que sur TIO cela génère le résultat sous forme d'échappement. Dans le front-end Wolfram normal, cela ressemblera à ceci:
la source
f[123]
devrait revenir〡二〣
.Japt , 55 octets
Essayez-le en ligne!
Il est à noter que TIO donne un nombre d'octets différent de celui de mon interprète préféré , mais je ne vois aucune raison de ne pas faire confiance à celui qui me donne un score inférieur.
Explication:
la source
C # (.NET Core) , 107 octets, 81 caractères
Essayez-le en ligne!
17 octets enregistrés grâce à @Jo King
Ancienne réponse
C # (.NET Core) , 124 octets, 98 caractèresEssayez-le en ligne!
Prend l'entrée sous la forme d'une liste et renvoie un IEnumerable. Je ne sais pas si cette entrée / sortie est correcte, alors faites le moi savoir si ce n'est pas le cas.
Explication
Comment cela fonctionne, c'est qu'il transforme tous les entiers en leur forme numérique respective de Suzhou, mais seulement si la variable
b
est vraie.b
est inversé chaque fois que nous rencontrons un entier qui est un, deux ou trois, et défini sur true sinon. Sib
est faux, nous transformons l'entier en l'un des chiffres verticaux.la source
R , 104 octets
Essayez-le en ligne!
Une approche alternative dans R. Utilise certaines fonctionnalités Regex de style Perl (le dernier
T
paramètre de la fonction de substitution signifieperl=TRUE
).Tout d'abord, nous traduisons les chiffres en caractères alphabétiques
a-j
, puis utilisons la substitution Regex pour convertir les occurrences en double debcd
(anciennement123
) en majuscules, et enfin traduisons les caractères en chiffres de Suzhou avec une gestion différente des lettres minuscules et majuscules.Nous remercions J.Doe pour la préparation des cas de test, car ceux-ci sont tirés de sa réponse .
la source
C #, 153 octets
Essayez-le en ligne!
la source