Романизация японского языка - это преобразование японского текста в латинские символы. В этом вызове вам будет предоставлена строка японских символов в качестве входных данных, и ожидается, что они будут преобразованы в правильную строку ASCII.
Что нужно знать
В японском языке есть три системы письма: хирагана (соблазнительная, используемая для коротких слов), катакана (угловая, используемая для звуков и слов, заимствованных из других языков) и кандзи (плотные символы, первоначально взятые из китайского языка). В этом вызове мы будем беспокоиться только о хирагане.
В программе хирагана 46 символов. Каждый символ представляет собой слог. Символы организованы по первому звуку (согласный) и второму звуку (гласный). Столбцы в порядке aiueo
.
: あいうえお
k: かきくけこ
s: さしすせそ
t: たちつてと
n: なにぬねの
h: はひふへほ
m: まみむめも
y: や ゆ よ
r: らりるれろ
w: わ を
N: ん
(если вы скопируете и вставите эту таблицу, обратите внимание, что я использовал идеографические пробелы U + 3000 для разнесения y и w)
Так, например, あ と め должен выдавать результат atome
. Первый символ есть a
, второй есть to
, а третий есть me
.
Исключения
Как и любой хороший язык, у японцев есть исключения из правил, а в таблице хирагана есть несколько. Эти символы произносятся немного иначе, чем подразумевает их расположение в таблице:
し: shi
, не si
ち: chi
, не ti
つ: tsu
, не tu
ふ: fu
, неhu
Дакутен ゛
Слово «дакутен» означает «грязный знак»: дакутен превращает звуки в их озвученные эквиваленты (обычно); например, かka
превращается в か ゛ga
. Полный список изменений:
k
→ g
s
→ z
t
→ d
h
→b
Меняются и исключения: し ゛: ji
(или zhi
), а не zi
ち ゛: ji
, не di
つ ゛: dzu
, не du
(ふ ふ действует так, как вы ожидаете; это не исключение)
Handakuten является дополнительным символом ゜, который применяется к h
строке. Если поместить после персонажа, он меняет звук персонажа на, p
а не b
.
И дакутен, и хандакутен будут даны как отдельные персонажи. Вам не нужно иметь дело с заранее составленными формами или комбинирующими символами.
Маленькие персонажи
Наконец, есть небольшие версии некоторых персонажей. Они изменяют символы, которые идут до или после них.
ゃ ゅ ょ
Это небольшие формы ya
, yu
и yo
. Они помещаются только после звуков в i
колонке; они удаляют i
и добавляют свой звук. Итак, や や превращается в kiya
; ゃ ゃ превращается в kya
.
Если поместить после chi
или shi
(или их dakuten-ed формы), y
тоже удаляется. ゆ ゆ есть shiyu
; ゅ ゅ есть shu
.
Последнее, с чем вам придется иметь дело, это маленький tsu
. っ удваивает согласный, который следует за ним, несмотря ни на что; больше ничего не делает Например, た た есть kita
; た っ た есть kitta
.
Сводка, ввод и вывод
Ваша программа должна быть способна транслитерировать: 46 основных хирагана, их формы дакутен и хандакутен и их комбинации с маленькими символами.
Неопределенное поведение включает в себя: small ya
, yu
а yo
не после символа с i
small tsu
в конце строки, dakuten для незатронутого символа, handakuten для не p
символьного и все остальное, не упомянутое в приведенной выше спецификации / введении.
Вы можете предположить, что все входные данные верны и содержат только японские символы, упомянутые выше.
Дело не имеет значения в выводе; Вы можете также заменить r
с l
или одиночкой n
с m
. Вывод может иметь либо один пробел между каждым слогом, либо не иметь пробелов вообще.
Это код-гольф : выигрывает самый короткий код в байтах.
Тестовые случаи
Многие тестовые случаи для каждой отдельной части приведены в спецификации. Некоторые дополнительные случаи:
ひ ら か ゛ な → hiragana
な た か な → katakana
ん ゛ い き ゛ ゃ く て ん い は は ん → daigyakutensaiban
ふ ゜ ろ く ゛ ら ん ん ゛ は ゜ ゜ る る と ゛ ゛ ふ ふ ふ → puroguramingupazurucoudogorufu
て ゛ ん ほ ゛ っ て → ganbatte
Заметки
Я не знаю много японского, кроме того, что я здесь написал. Пожалуйста, дайте мне знать, если я сделал какие-либо ошибки.
Первоначально я планировал включить и катакану (так что мой контрольный пример транслитерации английского языка мог бы быть немного более точным), но это было бы слишком много для задачи игры в гольф кода.
Имена Unicode включают транслитерацию каждого символа в отдельности, но без исключений. Это может или не может быть полезным для вас.
Спасибо squeamishossifrage за исправление двух опечаток!
Извините, если это слишком долго; Я попытался вписать большинство пристрастий хираганы в вызов, но некоторые вещи (например, маленькая хирагана, состоящая только из гласных, изменение n на m перед некоторыми согласными и знак повторения) пришлось сократить, чтобы сохранить управляемость задачи.
Я совсем не сожалею о названии. Это шедевр.
источник
きっった
?っし
бытьsshi
илиshshi
?I'm not at all sorry for the title. It's a masterpiece.
DownvotedОтветы:
Python 2, 638 байт
Принимает ввод в виде строки Unicode.
Проверьте это на Ideone
источник
print ''.join(R)
наprint''.join(R)
Python 2, 447 байт
Это требует ввода Unicode напрямую, что заставило меня потерять несколько байтов из-за,
decode('utf-8')
но я думаю, что это больше в духе задачи.Я начал с замены каждого символа последними двумя символами его юникодного имени, как это предлагается в примечаниях к загадке. К сожалению, это не делает различий между альтернативными версиями одного и того же символа, поэтому мне пришлось сделать некрасивый хак, чтобы добавить 'x' перед маленькими символами и handakuten.
Остальные циклы for просто исправляют исключения в следующем порядке:
Я хотел бы объединить больше шагов, но в некоторых случаях шаги должны быть выполнены, чтобы избежать конфликтов.
Попробуйте онлайн! (многострочную версию с большим количеством примеров можно найти здесь ).
источник
for b in'AEIOU'
собой во вкладку или один пробел, чтобы сохранить 3 байта. Вы также можете использоватьfrom unicodedata import*
для сохранения некоторых байтов - не уверен.Свифт 3,
6764 персонажаlet r = {(s: String) в s.applyingTransform (.toLatin, reverse: false)}источник
s:String)
и.toLatin,
?Foundation
.Python 3 , 259 байт
Попробуйте онлайн!
объяснение
Нам повезло с этим форматом ввода! Посмотрите, что произойдет, если я пропущу ввод через нормализацию NFKC :
Дакутен заменяется пробелом и комбинацией дакутен. Теперь это пространство - это все, что отделяет は от своего дакутена. Итак, мы избавляемся от этого и нормализуем снова :
Бинго. Пятая строка превращает ввод в нечто вроде
Затем мы применяем 9 скучных замен регулярных выражений
r
, и все готово:(Джонатан Френч сэкономил 4 байта, записав
import re,unicodedata as u
вместоimport re;from unicodedata import*
. Спасибо!)источник
import re,unicodedata as u
как и у Кирилла Л., ответ на связанный вызов экономит 4 байта .