Bei der Umschrift auf Japanisch wird japanischer Text in lateinische Zeichen umgewandelt. In dieser Herausforderung erhalten Sie eine Zeichenfolge mit japanischen Zeichen als Eingabe und müssen diese in die richtige ASCII-Zeichenfolge konvertieren.
Was Sie wissen müssen
Die japanische Sprache hat drei Schriftsysteme: Hiragana (das kurvige für kurze Wörter), Katakana (das Winkel-Y-Schriftsystem für Laute und Wörter, die aus anderen Sprachen entlehnt wurden) und Kanji (die dichten Schriftzeichen, die ursprünglich aus dem Chinesischen stammen). Bei dieser Herausforderung werden wir uns nur um Hiragana kümmern.
Die Hiragana-Silbenschrift enthält 46 Zeichen. Jedes Zeichen steht für eine Silbe. Die Zeichen sind nach erstem Ton (Konsonant) und zweitem Ton (Vokal) organisiert. Die Spalten in der Reihenfolge sind aiueo
.
: あいうえお
k: かきくけこ
s: さしすせそ
t: たちつてと
n: なにぬねの
h: はひふへほ
m: まみむめも
y: や ゆ よ
r: らりるれろ
w: わ を
N: ん
(Wenn Sie diese Tabelle kopieren und einfügen, beachten Sie, dass ich ideografische Leerzeichen U + 3000 verwendet habe, um y und w zu löschen.)
So sollte beispielsweise あ あ と eine Ausgabe von erzeugen atome
. Das erste Zeichen ist a
, das zweite ist to
und das dritte ist me
.
Ausnahmen
Wie jede gute Sprache hat Japanisch Ausnahmen von seinen Regeln und die Hiragana-Tabelle hat mehrere. Diese Zeichen werden geringfügig anders ausgesprochen als es die Position in der Tabelle implizieren würde:
し: shi
, nicht si
ち: chi
, nicht ti
つ: tsu
, nicht tu
ふ: fu
, nichthu
Dakuten ゛
Das Wort "Dakuten" bedeutet "Schlammfleck": Das Dakuten verwandelt Töne (normalerweise) in ihre stimmhaften Entsprechungen. Zum Beispiel wird かka
zu か かga
. Eine vollständige Liste der Änderungen:
k
→ g
s
→ z
t
→ d
h
→b
Auch die Ausnahmen ändern sich: し し: ji
(oder zhi
), nicht zi
ち ち: ji
, nicht di
つ つ: dzu
, nicht du
(ふ ふ verhält sich wie erwartet; es ist keine Ausnahme)
Das handakuten ist ein zusätzliches Zeichen ゜, das für die h
Zeile gilt. Wenn es nach einem Zeichen platziert wird, ändert es den Klang des Zeichens in p
anstatt b
.
Sowohl das Dakuten als auch das Handakuten werden als einzelne Zeichen angegeben. Sie müssen sich nicht mit vorkompositionierten Formularen oder kombinierten Zeichen befassen.
Kleine Charaktere
Schließlich gibt es kleine Versionen einiger Charaktere. Sie ändern Zeichen, die vor oder nach ihnen stehen.
ゃ ゃ ゅ
Dies sind die kleinen Formen ya
, yu
und yo
. Sie werden nur nach Tönen in der i
-Säule platziert. sie entfernen das i
und fügen ihren Ton hinzu. Also verwandelt sich き き in kiya
; き き verwandelt sich in kya
.
Wenn sie nach chi
oder shi
(oder ihren dakutenhaltigen Formen) platziert werden, werden sie ebenfalls y
entfernt. し し ist shiyu
; し し ist shu
.
Das Letzte, womit Sie sich befassen müssen, ist das Kleine tsu
. っ verdoppelt den Konsonanten, der danach kommt, egal was passiert; es macht nichts anderes. Zum Beispiel ist き きkita
; き き っ ist kitta
.
Zusammenfassung, Eingabe und Ausgabe
Ihr Programm muss in der Lage sein, die 46 Hiragana-Grundformen, ihre Dakuten- und Handakutenformen und ihre Kombinationen mit kleinen Buchstaben zu transkribieren.
Undefiniertes Verhalten beinhaltet: klein ya
, yu
und yo
nicht nach einem Charakter mit i
kleinen tsu
am Ende eines Strings, dakuten auf einem nicht betroffenen Charakter, auf einem nicht handakuten p
Charakter, und alles , was nicht in der oben spec / Einleitung erwähnt.
Sie können davon ausgehen, dass alle Eingaben gültig sind und nur die oben genannten japanischen Zeichen enthalten.
Groß- / Kleinschreibung spielt bei der Ausgabe keine Rolle. Sie können auch r
mit l
oder einsam n
mit ersetzen m
. Die Ausgabe kann entweder ein Leerzeichen zwischen jeder Silbe oder gar kein Leerzeichen enthalten.
Das ist Code-Golf : Der kürzeste Code in Bytes gewinnt.
Testfälle
Viele Testfälle für jedes einzelne Teil sind in der Spezifikation angegeben. Einige zusätzliche Fälle:
ひ ひ ら ゛ ゛ → hiragana
か か か か → katakana
. た ゛ い き ゛ く て ん さ い は ん → daigyakutensaiban
. ふ ゜ ろ く ゛ ら.. ゛ は ゜ ふ ふ → puroguramingupazurucoudogorufu
か か ゛ ん ほ ゛ っ → ganbatte
Anmerkungen
Ich kann nicht viel Japanisch außer dem, was ich hier geschrieben habe. Bitte lassen Sie mich wissen, wenn ich Fehler gemacht habe.
Ursprünglich plante ich, auch Katakana einzubeziehen (mein Testfall für die englische Transliteration könnte also etwas genauer sein), aber das wäre zu viel für eine Code-Golf-Herausforderung.
Die Unicode-Namen enthalten die Transliteration jedes Zeichens einzeln, jedoch ohne Ausnahmen. Dies kann für Sie hilfreich sein oder auch nicht.
Danke an squeamishossifrage für die Korrektur von zwei Tippfehlern!
Es tut mir leid, wenn das zu lang ist. Ich habe versucht, die meisten Macken von Hiragana in die Herausforderung einzubauen, aber einige Dinge (wie Hiragana nur mit kleinem Vokal, Änderung von n zu m vor einigen Konsonanten und das Wiederholungszeichen) mussten abgeschnitten werden, um die Herausforderung zu bewältigen.
Der Titel tut mir überhaupt nicht leid. Es ist ein Meisterwerk.
quelle
きっった
?っし
seinsshi
odershshi
?I'm not at all sorry for the title. It's a masterpiece.
DownvotedAntworten:
Python 2, 638 Bytes
Übernimmt die Eingabe als Unicode-Zeichenfolge.
Teste es auf Ideone
quelle
print ''.join(R)
zuprint''.join(R)
Python 2, 447 Bytes
Dies nimmt die Unicode-Eingabe direkt auf, wodurch ich ein paar Bytes verloren habe,
decode('utf-8')
aber ich denke, das liegt eher im Geiste der Herausforderung.Ich begann damit, jedes Zeichen durch die letzten beiden Zeichen seines Unicode-Namens zu ersetzen, wie in den Notizen des Puzzles vorgeschlagen. Leider unterscheidet dies nicht zwischen alternativen Versionen desselben Zeichens, so dass ich einen hässlichen Hack ausführen musste, um ein 'x' vor den kleinen Zeichen und dem handakuten hinzuzufügen.
Die restlichen for-Schleifen beheben nur Ausnahmen, in der Reihenfolge:
Ich wünschte, ich hätte mehr Schritte kombinieren können, aber in einigen Fällen müssen die Schritte ausgeführt werden, um Konflikte zu vermeiden.
Probieren Sie es online! (Eine mehrzeilige Version mit weiteren Beispielen finden Sie hier ).
quelle
for b in'AEIOU'
in einen Tabulator oder ein einzelnes Leerzeichen, um 3 Bytes zu sparen. Sie können möglicherweise auch verwendenfrom unicodedata import*
, um einige Bytes zu speichern - nicht sicher.Swift 3,
6764 Zeichenlass r = {(s: String) in s.applyingTransform (.toLatin, reverse: false)}quelle
s:String)
und hacken.toLatin,
?Foundation
hat.Python 3 , 259 Bytes
Probieren Sie es online!
Erläuterung
Wir haben Glück mit diesem Eingabeformat! Schauen Sie, was passiert, wenn ich die Eingabe durch die NFKC-Normalisierung leite :
Das Dakuten wird durch ein Leerzeichen und ein kombinierendes Dakuten ersetzt. Jetzt ist dieser Raum alles, was das は von seinem Dakuten trennt. Also werden wir es los und normalisieren wieder :
Bingo. Die fünfte Zeile verwandelt die Eingabe in so etwas wie
Dann wenden wir 9 langweilige Regex-Substitutionen an
r
, und wir sind fertig:(Jonathan French sparte 4 Bytes und schrieb
import re,unicodedata as u
stattdessenimport re;from unicodedata import*
. Danke!)quelle
import re,unicodedata as u
Wie bei Kirill L. spart die Antwort auf eine damit verbundene Herausforderung 4 Bytes .