Les habitants de Flapus utilisent un système de numérotation en base 8. Les chiffres sont les suivants:
0 - Kuzla
1 - Ponara
2 - Boqkel
3 - Colopee
4 - Vruenat
5 - Foham
6 - Stikty
7 - Kricola
Pour les nombres supérieurs à 7, le nom complet du dernier chiffre vient en premier, suivi de l'apostrophe et des premiers caractères des autres chiffres, jusqu'à et y compris la première voyelle:
11 - Ponara (1) 'po (1)
13 - Colopee (3)' po (1)
64 - Vruenat'sti
55 - Foham'fo
47 - Kricola'vru
Au fur et à mesure que les chiffres augmentent, la formule reste la même - le nom complet du dernier chiffre vient en premier, suivi d'une apostrophe et des premiers caractères des autres chiffres, jusqu'à et y compris la première voyelle. Notez qu'à part le dernier chiffre (premier mot), l'ordre reste le même.
123 - Colopee (3) 'po (1) bo (2)
205 - Foham (5)' bo (2) ku (0)
1123 - Colopee'popobo
7654 - Vruenat'kristifo
L'exception à la règle est pour les nombres se terminant par 0. Ici, le mot commence par Ku et se termine par les premières lettres des autres chiffres, jusqu'à et y compris la première voyelle. Aucune apostrophe n'est utilisée.
10 - Kupo
70 - Kukri
350 - Kucofo
630 - Kustico
1000 - Kupokuku
Défi
Écrivez un programme ou une fonction qui accepte un nombre de base 8 valide et génère l'équivalent parlé. Vous pouvez supposer que vous recevrez toujours un numéro valide. Espace blanc / saut de ligne unique après votre réponse est correct. Le premier caractère doit être en majuscule, selon les exemples.
C'est du code-golf . Le code le plus court en octets gagne. Des échappatoires standard s'appliquent. Les réponses dont les longueurs sont converties et soumises en plus en flapussien reçoivent des cookies supplémentaires.
Cas de test
0 -> Kuzla
1 -> Ponara
2 -> Boqkel
3 -> Colopee
4 -> Vruenat
5 -> Foham
6 -> Stikty
7 -> Kricola
10 -> Kupo
11 -> Ponara'po
23 -> Colopee'bo
56 - > Stikty'fo
70 -> Kukri
100 -> Kupoku
222 -> Boqkel'bobo
2345 -> Foham'bocovru
Réponses:
Pyth, 117 octets (Kricola'popo)
Transformé à la main en pseudocode pythonique:
la source
if ... else
en ternaire en changeant votrefor
boucle enmap
opération, puis en apportant quelques modifications mineures. Voici ce que j'ai. Je voudrais également attirer votre attention sur."
ce qui peut être utilisé sur les chaînes compressées.Retina , Colopee'pokri,
165157143127123 octetsLe saut de ligne arrière est important.
Essayez-le en ligne!
Explication
Nous commençons par amener le dernier chiffre à l'avant et en insérant une apostrophe après. Notez que cela laisse les nombres à un chiffre inchangés, car l'expression régulière ne correspond pas - donc ceux-ci n'obtiennent jamais une apostrophe en premier lieu.
Cela remplace chaque chiffre par son nom complet, peu importe où il apparaît.
Cela raccourcit tous les noms de chiffres qui apparaissent après une apostrophe. Notez que seules les voyelles
iou
apparaissent en premier dans un nom de chiffre, nous vérifions donc une position juste après l'une d'elles, et après une apostrophe, puis nous comparons (et supprimons) toutes les lettres minuscules qui suivent cette position. Puisque nous avons inséré les noms des chiffres dans la casse du titre, cela s'arrêtera avant le chiffre suivant.Cela utilise la translittération pour transformer tous les caractères majuscules
L
en leur homologue minusculel
, à condition qu'ils se trouvent dans une correspondance commençant par'
(afin de ne pas toucher à la première majuscule).La seule chose qui reste est de gérer correctement les multiples de (octal) 10. Dans ce cas, nous aurons un résultat commençant par
Kuzla'
, avec lequel nous voulons commencer à laKu
place. Nous supprimons donc simplement toutes les occurrences dezla'
.la source
JavaScript (ES6), 171
Tester
la source
Java (1.8) - Vruenat'fobo (
486340 octets)Juste au moment où je pensais que je ne pouvais plus jouer au golf, j'ai trouvé 33 autres octets! Très content! Les plus grandes économies ont été réalisées en passant aux tableaux de caractères (plus courts en majuscules / minuscules) et en réutilisant le tableau de chaînes d'entrée pour les mots.
Découvrez de nombreuses astuces de golf, jusqu'à moins de 400! En théorie, je pourrais encore réduire cela, comme je l'ai dit, une fonction serait ok dans les règles, alors que c'est un programme complet.
Mise à jour En utilisant l'approche de Martin Büttner, j'ai refactorisé pour utiliser l'expression régulière à la place. Géré pour économiser encore 10 octets! Merci Martin.
Non golfé
la source
interface F
et supprimer la déclaration publique sur la méthode principale. Vous pouvez également supprimer l'espace à l'intérieurString[] x
et à l'intérieur.substring(0, v+1)
."Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",")
70 octets, tandis que le tableau en ligne est 74.Python (3,5)
225222217202 octetsUne solution de travail avec compréhension de liste en python
Explication
Gagnez 3 octets avec la version partagée (version précédente:
d="Kuzla","Ponara",...
)Initialisation du résultat en fonction du dernier chiffre
Modifiez la liste d pour conserver les 2 ou 3 premiers caractères et mettez-les en minuscules
Cat la chaîne
la source
Javascript ES6,
231228225222204 octetsSauvegardé un tas d'octets grâce à Neil.
la source
[...s]
au lieu des.split``
;b=b==c[0]?"Ku":b+"'"
au lieu deif(b==c[0]){b="Ku"}else b+="'"
; de même pour leif(a.length)
(juste utiliser0
pour laelse
partie);a.map(d=>b+=c[d].match...)
au lieu de jouer avecfor
etshift
. Je pense que c'est déjà 29 octets enregistrés.[iou]
comme classe "voyelle".F #,
364288250 octets (Kubofo)Renvoie une fonction qui prend un entier et renvoie son équivalent Flapus. = D
la source
Python
3-181177 octets (Ponara'bosti)Méfiez-vous de l'utilisation la plus étonnante de
pow
votre vie.u**v
est équivalent sur le contexte booléen commeu|(not v)
qui était auparavant joué à la belle~v+2|u
expression!la source