Sie sind auf ein altes indisches Manuskript gestoßen, das Hügel vergrabener Schätze beschreibt. Das Manuskript informiert Sie auch über die Position des Schatzes, mit der Ausnahme, dass einige wichtige Zahlen indirekt in den Text kodiert wurden. Sie stellen fest, dass der Text ein 'Kaadi'-System verwendet, eine eingeschränkte Teilmenge des allgemeineren' Katapayadi'-Systems.
(Das Katapayadi- System ist ein altes indisches System zum Kodieren von Ziffern als Buchstaben, das häufig als Mnemonik zum Speichern langer Zahlen verwendet wird.)
Ihre Aufgabe hier ist es, im Kaadi-System kodierten Text zu dekodieren und den numerischen Wert auszudrucken.
Einzelheiten
Zeichen eingeben
Das Kaadi-System basiert auf den Regeln des Katapayadi-Systems , verwendet jedoch nur die erste Reihe von Konsonanten. Ihr Text hier wurde ins lateinische Alphabet übersetzt und enthält bekanntermaßen nur:
- Vokale 'a', 'e', 'i', 'o', 'u'
- Konsonanten 'g', 'k', 'c', 'j' und ihre Kapitalformen (um die aspirierte Form dieser Konsonanten darzustellen ) sowie 'ṅ' und 'ñ'.
(Sie können wählen, ob Sie 'ṅ' als 'ng' und 'ñ' als 'ny' empfangen und verarbeiten möchten, wenn dies in Ihrer Sprache praktischer ist.)
Wertzuweisung
In diesem System
Jedem Konsonanten, dem ein Vokal folgt, ist eine Ziffer zugeordnet. Diese sind:
'k'=>1, 'K'=>2,
'g'=>3, 'G'=>4,
'ṅ'=>5,
'c'=>6, 'C'=>7,
'j'=>8, 'J'=>9,
'ñ'=>0
Beachten Sie jedoch, dass diese Werte nur gelten, wenn auf diese Konsonanten ein Vokal folgt. kacCi
hat den gleichen Wert wie kaCi
( ka
, Ci
= (1,7)), da das mittlere c nicht von einem Vokal begleitet wird.
Zusätzlich ist eine erste Vokal oder eine Folge von zwei Vokalen a 0
aikaCi
wäre:ai
,ka
,Ci
= (0,1,7)Zusätzliche Vokale an einer anderen Stelle in der Mitte des Textes haben keinen Wert:
kauCia
Entspricht demkaCi
, dass die zusätzlichen Vokale ignoriert werden können.
Endgültiger numerischer Wert
Sobald die Ziffernwerte der Buchstaben herausgefunden worden sind, wird der endgültige numerische Wert in umgekehrter Reihenfolge dieser Ziffern erhalten, dh die erste Ziffer aus dem Text ist die am wenigsten signifikante Ziffer im endgültigen Wert.
Z.B.
GucCi
hat Gu
und Ci
, also (4, 7), also ist der Endwert 74.
kakakaGo
ist (1,1,1,4), also ist die Antwort 4111.
guṅKo
ist (3,2), also codiert 23. ( gungKo
wenn ASCII verwendet wird) -Äquivalent.)
Eingang
- Eine Zeichenfolge, die einen Kaadi-codierten Text enthält
- wird nur Vokale und die oben genannten Konsonanten enthalten
- Die Vokale sind immer in Kleinbuchstaben und kommen in Gruppen von nicht mehr als 2 vor
- Sie können die Buchstaben für 5 und 0 entweder als Unicode-Zeichen 'ṅ' und 'ñ' oder als ASCII-Entsprechungen 'ng' und 'ny' akzeptieren (in beiden Formaten in Kleinbuchstaben).
- Sie können davon ausgehen, dass es keine Leerzeichen oder Interpunktionen gibt
Ausgabe
- Der numerische Wert des Texts gemäß den obigen Regeln
- Für leere Eingaben ist eine leere Ausgabe oder eine falsche y-Ausgabe in der Sprache Ihrer Wahl zulässig, zusätzlich zu 0
- Für ungültige Eingaben (Eingaben mit Ausnahme von Vokalen und den oben genannten Konsonanten) ist die Ausgabe undefiniert - alles ist möglich
Testfälle
"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
(Die letzten können sein:
"gungKo"
=> 23
"Gunyaaka"
=> 104
"junyiKonge"
=>5208
wenn du das vorziehst.)
Es gelten die Standardregeln für E / A und Lücken . Möge der beste Golfer gewinnen!
aiaKaci
eingegeben werden? (3 führende Vokale)ord(c)%47%10
hilfreich ist : Gibt einen eindeutigen Index[0..9]
für jeden Konsonanten an. (Mitord("ṅ")=7749
undord("ñ")=241
.)Antworten:
JavaScript (ES6), 83 Byte
Probieren Sie es online!
Wie?
Wir verwenden den folgenden regulären Ausdruck, um entweder den Anfang der Zeichenfolge oder einen der Kaadi-Konsonanten abzubilden, gefolgt von einem Vokal:
Für jede Übereinstimmung in der Eingabezeichenfolge rufen wir die folgende Rückruffunktion auf, die den Inhalt c der Erfassungsgruppe als Parameter verwendet:
Wir finden den Wert des Konsonanten, indem wir nach seiner Position im regulären Ausdruck suchen (erzwungen zu einer Zeichenfolge, indem wir ihn zu sich selbst hinzufügen).
Die Konsonanten sind so angeordnet, dass ihr Wert gleich ihrer Position modulo 10 ist :
Wenn wir den Anfang der Zeichenfolge anstelle eines Konsonanten abgleichen, ist c eine leere Zeichenfolge, deren Position im regulären Ausdruck 0 ist - was günstigerweise das erwartete Ergebnis in diesem Fall ist.
Schließlich fügen wir diese Ziffer am Anfang der Ausgabezeichenfolge o ein .
quelle
Retina , 41 Bytes
Probieren Sie es online! Link enthält Testfälle. Erklärung:
Übersetzen Sie die Konsonanten, auf die Vokale folgen.
Fassen Sie einen führenden Vokal an.
Alles andere löschen.
Kehre das Ergebnis um.
quelle
Python 2 , 93 Bytes
Eine unbenannte Funktion, die eine Unicode-Zeichenfolge akzeptiert, die eine Zeichenfolgendarstellung des Basis-Zehn-Ergebnisses zurückgibt.
Probieren Sie es online!
quelle
Java 8,
136126 BytesProbieren Sie es online aus.
Erläuterung:
quelle
Gelee , 27 Bytes
Probieren Sie es online!
Jelly ist für 1 Byte integriert
ṅ
.Erläuterung
quelle
O%47%10
einen eindeutigen Index angegeben[0...9]
. (Dies bedeutet, dassO%47
mit dem impliziten Modulo vonị
in einem Array von 10 Einträgen der richtige Wert abgerufen werden kann .)6;µe€Øẹœpṫ€0O%47ị“ ʠḷ’Œ?’¤Ṛ
aber auch 27 sofern nicht golfen werden kann.Python 2 , 101 Bytes
Probieren Sie es online!
Python 3 ,
104102 BytesProbieren Sie es online!
Gerettet
quelle
JavaScript (Node.js) , 126 Byte
Probieren Sie es online!
quelle
x=[..."ñkKgGṅcCjJ"]
,x="ñkKgGṅcCjJ"
da dies auchindexOf
mit Strings funktioniert0
, so dass die Testfälle 3 und 6 nicht bestanden werden (wie in der Ausgabe auf TIO zu sehen ist).Rot ,
152143 BytesProbieren Sie es online!
Lesbar:
quelle
MATL ,
484745 BytesProbieren Sie es online!
('b' statt 'd', um ein Byte zu speichern)
(-2 Byte dank Luis Mendo)
MATLAB (und damit MATL) hat die Portierung von @ TFelds Python-Lösung schwieriger gemacht, als ich es mir vorgestellt hatte (vielleicht wäre eine Straight-Loop-Lösung hier einfacher gewesen?). Am Ende mit dem alternativen
'ng'
,'ny'
Eingabeverfahren, und das Ersetzenng
mitb
am Anfang für eine einfachere Verarbeitung.Erläuterung:
quelle
unicode2native
, aber ich denke, das ist jetzt, was Sie wollen. Ich bin damit einverstanden, dass die Unicode-Unterstützung in MATLAB nicht die beste ist. Und lass mich nicht mit Octave anfangen :-D Wie bei MATL wurde es entworfen, bevor der neue String-Datentyp in MATLAB existierte (und ich mag es sowieso nicht sehr), also ist in MATL ein "String" der gleiche wie es früher in alten MATLAB-Versionen war: ein Zeilenvektor aus Zeichen. Ich habe eine Notiz gemacht, um das in der Dokumentation zu verdeutlichen, danke für das Bemerken!Stax , 27 Bytes
Führen Sie es aus und debuggen Sie es
quelle