Vous êtes tombé sur un vieux manuscrit indien, qui décrit des monticules de trésors enfouis. Le manuscrit vous indique également l'emplacement du trésor, sauf que certains nombres cruciaux ont été encodés indirectement dans le texte. Vous comprenez que le texte utilise un système «Kaadi», un sous-ensemble restreint du système «Katapayadi» plus courant.
(Le système Katapayadi est un ancien système indien pour coder des chiffres sous forme de lettres, souvent utilisé comme mnémonique pour se souvenir de nombres longs.)
Votre tâche ici est de décoder le texte encodé dans le système Kaadi et d'imprimer la valeur numérique.
Détails
Saisir des caractères
Le système Kaadi est basé sur les règles du système Katapayadi , mais n'utilise que la première rangée de consonnes. Votre texte ici a été translittéré en alphabet latin et ne contient que:
- voyelles 'a', 'e', 'i', 'o', 'u'
- les consonnes «g», «k», «c», «j» et leurs formes majuscules (pour représenter la forme aspirée de ces consonnes), et «ṅ» et «ñ».
(Vous pouvez choisir de recevoir et de gérer «ṅ» comme «ng» et «ñ» comme «ny» si cela est plus pratique dans votre langue.)
Attribution de valeur
Dans ce système,
chaque consonne suivie d'une voyelle est associée à un chiffre. Ceux-ci sont:
'k'=>1, 'K'=>2,
'g'=>3, 'G'=>4,
'ṅ'=>5,
'c'=>6, 'C'=>7,
'j'=>8, 'J'=>9,
'ñ'=>0
Notez cependant que ces valeurs ne s'appliquent que lorsque ces consonnes sont suivies d'une voyelle. kacCi
a la même valeur que kaCi
( ka
, Ci
= (1,7)) car le milieu c n'est pas accompagné d'une voyelle.
En outre, une voyelle ou une séquence de deux voyelles représente un 0.
aikaCi
serait:ai
,ka
,Ci
= (0,1,7)Les voyelles supplémentaires n'importe où ailleurs au milieu du texte n'ont aucune valeur:
kauCia
est la même quekaCi
, les voyelles supplémentaires peuvent être ignorées.
Valeur numérique finale
Une fois que les valeurs des chiffres des lettres ont été déterminées, la valeur numérique finale est obtenue comme l'ordre inverse de ces chiffres, c'est-à-dire que le premier chiffre du texte est le chiffre le moins significatif de la valeur finale.
Par exemple.
GucCi
a Gu
et Ci
, donc (4, 7), donc la valeur finale est 74.
kakakaGo
est (1,1,1,4), donc la réponse est 4111.
guṅKo
est (3,2), donc code 23. ( gungKo
si vous utilisez ASCII -équivalent.)
Contribution
- Une chaîne contenant un texte encodé en Kaadi
- ne contiendra que des voyelles et les consonnes ci-dessus
- les voyelles sont toujours en minuscules et apparaissent en groupes de 2 au maximum
- vous pouvez choisir d'accepter les lettres pour 5 et 0 soit comme leurs caractères Unicode '' 'et' ñ 'ou comme leurs équivalents ASCII' ng 'et' ny '(ils sont en minuscules dans les deux formes)
- vous pouvez supposer qu'il n'y a ni espace ni ponctuation
Production
- La valeur numérique du texte, telle que donnée par les règles ci-dessus
- pour une entrée vide, une sortie vide ou toute sortie faux-y dans la langue de votre choix est acceptable, en plus de 0
- pour une entrée invalide (entrée avec autre chose que des voyelles et les consonnes ci-dessus), la sortie n'est pas définie - tout va
Cas de test
"GucCi"
=> 74
"kakakaGo"
=> 4111
"aiKaCiigukoJe"
=> 913720
""
=> 0 //OR empty/falsey output
"a"
=> 0
"ukkiKagijeCaGaacoJiiKka"
=> 1964783210
"kegJugjugKeg"
=> 2891
"guṅKo"
=> 23
"Guñaaka"
=> 104
"juñiKoṅe"
=>5208
(les derniers peuvent être:
"gungKo"
=> 23
"Gunyaaka"
=> 104
"junyiKonge"
=>5208
si vous préférez.)
Les règles standard pour les E / S et les failles s'appliquent. Que le meilleur golfeur gagne!
aiaKaci
être saisi? (3 voyelles principales)ord(c)%47%10
donne un index unique[0..9]
pour chaque consonne. (Avecord("ṅ")=7749
etord("ñ")=241
.)Réponses:
JavaScript (ES6), 83 octets
Essayez-le en ligne!
Comment?
Nous utilisons l'expression régulière suivante pour faire correspondre le début de la chaîne ou l'une des consonnes de Kaadi, suivie d'une voyelle:
Pour chaque correspondance dans la chaîne d'entrée, nous invoquons la fonction de rappel suivante qui prend le contenu c du groupe de capture en paramètre:
Nous trouvons la valeur de la consonne en recherchant sa position dans l'expression régulière (contraint à une chaîne en l'ajoutant à lui-même).
Les consonnes sont ordonnées de telle sorte que leur valeur soit égale à leur position modulo 10 :
Lorsque nous faisons correspondre le début de la chaîne au lieu d'une consonne, c est une chaîne vide dont la position dans l'expression régulière est 0 - ce qui, commodément, est le résultat attendu dans ce cas.
Enfin, nous insérons ce chiffre au début de la chaîne de sortie o .
la source
Rétine , 41 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explantion:
Traduisez les consonnes suivies des voyelles.
Manipulez une voyelle de tête.
Supprimez tout le reste.
Inverse le résultat.
la source
Python 2 , 93 octets
Une fonction sans nom acceptant une chaîne Unicode qui renvoie une représentation sous forme de chaîne du résultat de base dix.
Essayez-le en ligne!
la source
Java 8,
136126 octetsEssayez-le en ligne.
Explication:
la source
Gelée , 27 octets
Essayez-le en ligne!
Jelly a intégré pour ... 1 octet
ṅ
.Explication
la source
O%47%10
donne un index unique[0...9]
pour chaque consonne. (Ce qui signifieO%47
qu'avec le modulo implicite deị
permettrait de ramasser la valeur correcte dans un tableau de 10 entrées.)6;µe€Øẹœpṫ€0O%47ị“ ʠḷ’Œ?’¤Ṛ
mais aussi 27 sauf s'il peut être joué au golf .Python 2 , 101 octets
Essayez-le en ligne!
Python 3 ,
104102 octetsEssayez-le en ligne!
Enregistré
la source
JavaScript (Node.js) , 126 octets
Essayez-le en ligne!
la source
x=[..."ñkKgGṅcCjJ"]
en justex="ñkKgGṅcCjJ"
puisqueindexOf
fonctionne aussi avec les chaînes0
, échoue donc les cas de test 3 et 6 (comme on peut le voir dans la sortie sur TIO).Rouge ,
152143 octetsEssayez-le en ligne!
Lisible:
la source
MATL ,
484745 octetsEssayez-le en ligne!
('b' au lieu de 'd' pour enregistrer un octet)
(-2 octets grâce à Luis Mendo)
MATLAB (et donc MATL) traitant les chaînes comme une série stupide d'octets a rendu le portage de la solution Python de @ TFeld plus difficile que je ne l'imaginais (peut-être qu'une solution en boucle droite aurait été plus facile ici?). Se terminant à l' aide de l'alternative
'ng'
, la'ny'
méthode d' entrée, et en remplaçantng
avecb
au début pour faciliter le traitement.Explication:
la source
unicode2native
, mais je pense que c'est maintenant ce que vous voulez. Je suis d'accord, le support Unicode dans MATLAB n'est pas le meilleur. Et ne me lancez pas avec Octave :-D Quant à MATL, il a été conçu avant que le nouveau type de données de chaîne n'existe dans MATLAB (et je ne l'aime pas beaucoup de toute façon), donc dans MATL une "chaîne" est la même comme c'était le cas dans les anciennes versions de MATLAB: un vecteur ligne de caractères. J'ai pris une note pour clarifier cela dans la documentation, merci de l'avoir remarqué!Stax , 27 octets
Exécuter et déboguer
la source