La romanización del japonés está convirtiendo el texto japonés en caracteres latinos. En este desafío, se le dará una cadena de caracteres japoneses como entrada y se espera que los convierta a la cadena ASCII correcta.
Lo que necesita saber
El idioma japonés tiene tres sistemas de escritura: hiragana (el curvilíneo usado para palabras cortas), katakana (el ángulo-y usado para sonidos y palabras tomadas de otros idiomas) y kanji (los caracteres densos originalmente del chino). En este desafío solo nos preocuparemos por hiragana.
Hay 46 caracteres en el silabario hiragana. Cada personaje representa una sílaba. Los caracteres están organizados por primer sonido (consonante) y segundo sonido (vocal). Las columnas en orden son aiueo
.
: あいうえお
k: かきくけこ
s: さしすせそ
t: たちつてと
n: なにぬねの
h: はひふへほ
m: まみむめも
y: や ゆ よ
r: らりるれろ
w: わ を
N: ん
(si copia y pega esta tabla, tenga en cuenta que he usado espacios ideográficos U + 3000 para espaciar y y w)
Entonces, por ejemplo, あ と め debería producir una salida de atome
. El primer personaje es a
, el segundo es to
y el tercero es me
.
Excepciones
Como cualquier buen idioma, el japonés tiene excepciones a sus reglas, y la tabla hiragana tiene varias. Estos caracteres se pronuncian de forma ligeramente diferente de lo que su ubicación en la tabla implicaría:
し: shi
no si
ち: chi
no ti
つ: tsu
no tu
ふ: fu
nohu
Dakuten ゛
La palabra 'dakuten' significa 'marca fangosa': el dakuten convierte los sonidos en sus equivalentes sonoros (generalmente); por ejemplo, か se ka
convierte en か ゛ga
. Una lista completa de los cambios:
k
→ g
s
→ z
t
→ d
h
→b
Las excepciones también cambian: し ゛: ji
(o zhi
), no zi
ち ゛: ji
, no di
つ ゛: dzu
, no du
(ふ ゛ actúa como cabría esperar; no es una excepción)
El handakuten es un carácter adicional゜ que se aplica a la h
fila. Si se coloca después de un personaje, cambia el sonido del personaje en p
lugar de hacerlo b
.
Tanto el dakuten como el handakuten se darán como personajes individuales. No necesitará lidiar con las formas precompuestas o los caracteres combinados.
Pequeños personajes
Finalmente, hay versiones pequeñas de algunos de los personajes. Modifican los caracteres que vienen antes o después de ellos.
ゃ ゅ ょ
Estas son las pequeñas formas de ya
, yu
y yo
. Solo se colocan después de los sonidos en la i
columna; quitan el i
y agregan su sonido. Entonces, き や se convierte en kiya
; き ゃ se convierte en kya
.
Si se coloca después de chi
o shi
(o sus formas dakuten-ED), el y
se elimina también. し ゆ es shiyu
; ゅ ゅ es shu
.
Lo último con lo que tendrá que lidiar es con lo pequeño tsu
. っ duplica la consonante que le sigue, pase lo que pase; No hace nada más. Por ejemplo, き た es kita
; き っ た es kitta
.
Resumen, entrada y salida
Su programa debe ser capaz de transcribir: los 46 hiragana básicos, sus formas dakuten y handakuten, y sus combinaciones con caracteres pequeños.
El comportamiento indefinido incluye: pequeño ya
, yu
y yo
no después de un carácter con i
, pequeño tsu
al final de una cadena, dakuten en un carácter no afectado, handakuten en un no p
carácter y cualquier otra cosa no mencionada en la especificación / introducción anterior.
Puede suponer que todas las entradas son válidas y contienen solo los caracteres japoneses mencionados anteriormente.
El caso no importa en la salida; También puede reemplazar r
con l
o solo n
con m
. La salida puede tener un espacio entre cada sílaba o ningún espacio en absoluto.
Esto es code-golf : el código más corto en bytes gana.
Casos de prueba
Muchos casos de prueba para cada parte individual se dan en la especificación. Algunos casos adicionales:
ひ ら か ゛ な → hiragana
か た か な → katakana
た ゛ い き ゛ ゃ く て ん さ い は ゛ ん → daigyakutensaiban
ふ ゜ ろ く ゛ ら み ん く ゛ は ゜ す ゛ る こ う と ゛ こ ゛ る ふ → puroguramingupazurucoudogorufu
か ゛ ん ほ ゛ っ て → ganbatte
Notas
No sé mucho japonés además de lo que he escrito aquí. Avísame si he cometido algún error.
Originalmente planeaba incluir katakana también (por lo que mi caso de prueba de transliteración en inglés podría ser un poco más preciso), pero eso sería demasiado para un desafío de golf de código.
Los nombres Unicode incluyen la transcripción de cada carácter individualmente, pero sin las excepciones. Esto puede o no ser útil para usted.
¡Gracias a squeamishossifrage por corregir dos errores tipográficos!
Lo siento si esto es demasiado largo; Intenté adaptar la mayoría de las peculiaridades de hiragana al desafío, pero algunas cosas (como hiragana de solo vocal pequeña, cambiar de n a m frente a algunas consonantes y la marca de repetición) tuvieron que cortarse para mantener el desafío manejable.
No siento nada por el título. Es una obra de arte.
fuente
きっった
?っし
sersshi
oshshi
?I'm not at all sorry for the title. It's a masterpiece.
Votación negativaRespuestas:
Python 2, 638 bytes
Toma la entrada como cadena unicode.
Pruébalo en Ideone
fuente
print ''.join(R)
aprint''.join(R)
Python 2, 447 bytes
Esto toma la entrada de Unicode directamente, lo que me hizo perder algunos bytes debido al,
decode('utf-8')
pero creo que está más en el espíritu del desafío.Comencé reemplazando cada personaje por los dos últimos caracteres de su nombre Unicode, como se sugiere en las notas del rompecabezas. Desafortunadamente, esto no distingue entre versiones alternativas del mismo personaje, así que tuve que hacer un truco feo para agregar una 'x' antes de los personajes pequeños y el handakuten.
El resto de los bucles for solo están arreglando excepciones, en orden:
Desearía haber combinado más pasos, pero en algunos casos los pasos deben realizarse para evitar conflictos.
Pruébalo en línea! (una versión de varias líneas con más ejemplos se puede encontrar aquí ).
fuente
for b in'AEIOU'
en una pestaña o un solo espacio para ahorrar 3 bytes. También puede usarlofrom unicodedata import*
para guardar algunos bytes, no estoy seguro.Swift 3,
6764 caractereslet r = {(s: String) en s.applyingTransform (.toLatin, reverse: false)}fuente
s:String)
y.toLatin,
?Foundation
tiene.Python 3 , 259 bytes
Pruébalo en línea!
Explicación
¡Estamos de suerte con este formato de entrada! Mira lo que sucede si paso la entrada a través de la normalización NFKC :
El dakuten se reemplaza por un espacio y una combinación de dakuten. Ahora ese espacio es todo lo que separa el は de su dakuten. Entonces nos deshacemos de él y normalizamos nuevamente :
Bingo. La quinta línea convierte la entrada en algo como
Luego aplicamos 9 sustituciones aburridas de expresiones regulares encerradas
r
, y listo:(Jonathan French guardó 4 bytes, escribiendo en
import re,unicodedata as u
lugar deimport re;from unicodedata import*
. ¡Gracias!)fuente
import re,unicodedata as u
como en Kirill L., la respuesta a un desafío relacionado ahorra 4 bytes .