Создайте функцию, которая принимает строку слога пиньинь в качестве аргумента и возвращает true, если комбинация существует, в противном случае - false.
Используйте «V» для «ü».
Вот полный список комбинаций. http://www.pinyin.info/rules/initials_finals.html
Примеры
f("bu") == true
f("zheng") == true
f("nv") == true
f("ri") == true
f("cei") == false
f("ia") == false
f("kian") == false
f("qa") == false
Пожалуйста, не делайте таких вещей, как очистка веб-страниц или чтение файлов методов ввода, чтобы уменьшить количество символов. (Если вы это сделаете, длина данных будет учитываться при подсчете символов). Одна из целей этого кода состоит в том, чтобы увидеть, как можно упростить правила. Самый короткий код выигрывает.
code-golf
kolmogorov-complexity
Мин-Tang
источник
источник
nar
? : Pnvi
это когда-либо является допустимой комбинацией.Ответы:
JavaScript 1.6,
503496477 символовРазметил немного более читабельно (за исключением ошибок при разбивке кода на несколько строк):
Начальные с нуля плюс несколько раз проверяются с помощью регулярного выражения. После этого таблица кодируется в виде (каскадной) серии из 6 цифр, основанных на 36 чисел, по одному на каждый исходный звук. Затем поиск использует пару
indexOf
вызовов и сдвиг для выбора правильного бита.Проверено на соответствие всем ячейкам таблицы комбинаций (заполненные ячейки проверены на истинность, пустые ячейки проверены на ложность).
Редактировать: Заменены некоторые из 36 символов поиска по основанию 36 сравнениями, поскольку g–, k–, h–, j–, q– и z– имеют плотные блоки true / false.
Изменить: Переставить битовый тест, чтобы избежать ненужного
!!
и сжал регулярное выражение больше.источник
!!
? Я не уверен, что понимаю, зачем тебе нужен двойник, не ...if (g(s) == (validList.indexOf(s) >= 0)
которого возвращается false16 == true
; Я обсудил это с точки зрения «что значит« истинно »на самом деле» »и оставил это дело. В любом случае, у меня есть запланированное изменение на сегодня, которое покончит с!!
заменой1<<r&*parseInt
на (более или менее),(parseInt>>r)&1
чтобы возврат равен 1, и я сбрею два символа.PHP, 548 символов
Конечно, это, вероятно, не оптимально, но я написал регулярное выражение для сопоставления действительных комбинаций пиньинь. Сокращение символов путем замены повторяющихся подстрок переменными.
Код
использование
источник
F #, 681 символов
Не совсем получаются слоги без правильного начального согласного (Y, W и т. Д.).
источник
APL (Dyalog Extended) , 475 байтов
Попробуйте онлайн!
Гольф в прогрессе.
Ungolfed
Попробуйте онлайн!
Вспомогательная функция
s
распаковывает строку, разделенную пробелом:Сначала я сохраняю возможные начальные и конечные строки в слоге, затем составляю таблицу
tab
содержащую конкатенацию каждой строки из первого списка с каждой строкой из второго списка.Далее я храню двоичные данные в виде списка целых чисел. Некоторые из целых чисел повторяются и поэтому могут храниться в переменных, что также позволяет исключить некоторые пробелы.
Каждое целое число декодируется в двоичную форму и представляет одну строку таблицы. Каждый бит числа представляет, является ли определенный слог в этой строке действительным слогом, а MSB представляет первый столбец. Все недействительные слоги удаляются из таблицы.
Мы сведем таблицу в список, добавим формы без начального согласного в качестве особого случая и, наконец, проверим, есть ли наш вход в списке.
Возможный дальнейший потенциал игры в гольф:
Полезный скрипт на Python и генератор тест-кейсов: попробуйте онлайн!
источник