Текст может быть переведен в письменную версию языка TUT , заменив каждую букву соответствующим «словом TUT», как указано в следующей таблице (адаптировано из связанной статьи) * :
a e h hash o o u yu
b bub i ay p pup v vuv
c kut j jag q kwak w waks
d dud k kak r rut x eks
e i l lul s sus y yak
f fuf m mum t tut z zuz
g jug n nun
* Exceptions:
(1) Upper case letters have corresponding TUT words in upper case.
(2) A doubled letter becomes 'skwer' ('SKWER') followed by the TUT word for that letter.
- An n-fold letter is treated as a number of doubles, followed by a single if needed.
- To be considered a double or n-fold letter, the letters must be in the same case.
(3) 'rut' ('RUT') is replaced by 'rud' ('RUD') if immediately followed by 'dud' ('DUD').
Напишите программу со следующим поведением ввода / вывода:
Входные данные (из стандартного ввода ): двоичный (0/1) индикатор i и строка ASCII s .
- Если i = 0, то s может содержать любой текст ASCII.
- Если i = 1, тогда s должен быть выходом языка TUT для некоторого допустимого ввода.
Выход (в стандартный вывод): двоичный (0/1) индикатор j и строка ASCII t .
- Если i = 0, то j = 1 и t - перевод s на язык TUT.
- Если i = 1, то j = 0 и t перевод s из языка TUT.
- Для любого допустимого ввода применение программы к собственному выводу должно точно воспроизводить исходный ввод; то есть программа ( программа ( i , s )) = ( i , s ). Вход и выход должны иметь точно такой же формат.
Подсчет очков : Оценка - это количество символов в программе - выигрывает самая низкая оценка.
Примеры
(0, 'Look for the birds.')
(1, 'LULskwerokak fuforut tuthashi bubayruddudsus.')
(0, '"Mrs. Hogwallop up and R-U-N-N-O-F-T."')
(1, '"MUMrutsus. HASHojugwakseskwerlulopup yupup enundud RUT-YU-NUN-NUN-O-FUF-TUT."')
( в )
(0, 'QWX WWW Rrrrd deeeeep')
(1, 'KWAKWAKSEKS SKWERWAKSWAKS RUTskwerrutruddud dudskweriskweriipup')
( г )
(0, 'aa AA aA Aa rd RD rD Rd')
(1, 'skwere SKWERE eE Ee ruddud RUDDUD rutDUD RUTdud)
((( В сторону о произношении: The TUT слова для гласных ( e
, i
, ay
, o
, yu
) должны представлять обычные звуки (а, е, я, о, и) при чтении алфавита - то есть, рифмы с (может , мне, мое, косить, линьки) в ТПИ слов три или более-буквы, символы (. u
, a
, e
) , как предполагается, звук , как и в (но, летучая мышь, бет) , соответственно - это ASCII заменители ( ʌ
æ
ɛ
) в связанной статье.)))
AA
,SKWERE
илиskwerE
? А как насчет тройных букв? является тоwakswakswaks
,skwerwakswaks
,waksskwerwaks
или дажеkyubwaks
, или мы можем выбрать?rrd
следует перевестиskwerruddud
; мы можем оставить это вskwerrutdud
?0,"AA"
переводить на1,"ee"
? Что касается1,"SKWERE"
, я полагаю, вы имели в виду0,"AA"
, а не0,"EE"
.Ответы:
Рубин,
310311 символовПравильно обрабатывает:
AA
должно получитьсяskwerE
, поменяйте местами строки № 3 и № 4aA
иAa
должен превращаться вeE
иEe
соответственноrrd
переводится как `skwerruddud (нефикс получает 3 символа)rrrd
превращается вskwerrutruddud
.rrrrd
становитсяskwerrutskwerruddud
Для ввода требуется, чтобы между индикатором и строкой не было новой строки, вывод выводит ее туда (исправление: 1 символ).В этот момент вывод на консоль подавлен, чтобы предотвратить смешивание с STDIN. Нефиксированный, просто немного страшнее.Пример ввода:
Вывод:
источник
getc
с префиксомSTDIN.
(еще шесть символов).For any valid input, applying the program to its own output must exactly reproduce the original input; i.e., program (program (i, s)) = (i, s).
но это будет стоить всего 1 символ, чтобы это исправить.Perl,
453443309307303299Тестовые случаи:
Я успешно проверил (a), (b), (c) и (d) контрольные примеры, представленные в OP.
* Несколько * более читаемая версия:
источник
qw(bub kut ... yak zuz)
на(bub,kut ... yak,zuz)
), также вы можете заменитьkeys%x
на@b
(так как вы знаете, из-за каких ключей$x
). Небольшое изменение, чтобы сохранить еще три,$1eq uc($1)
чтобыuc$1eq$1
. Вы также можете оставить+
перед!
печатью этот дополнительный байт, чтобы довести вас до 443. Надеюсь, это все верно, я тестировал ограниченные тестовые случаи!uc$1eq$1
может бытьuc$1 eq$1
, но я не уверен ... Извините, если это не так!APL (Дьялог) (372)
Вы действительно можете сказать, что APL не имеет встроенных функций обработки строк (за исключением общих массивов). Я должен был написать свой собственный
tolower
(этоL
). Как всегда с многострочным Dyalog APL, чтобы проверить его, вставьте его в окно редактирования и затем вызовите его (T
).Применение:
источник
Tcl,
395394392Ноты:
skwerruddud
дляrrd
.skwereskweree
дляaaaaa
.Пример ввода:
Вывод:
Как это работает:
m
в начале строка.ঙ
).источник
\ufff
IIRC. Не имеет значения Подойдет любой не-ascii персонаж.\u999
. Как я уже сказал, единственной важной вещью было: не характер ascii.1KWAKWAKSEKS skwerWAKSWAKS RUTskwerrutruddud dudskweriskweriipup
.A doubled letter is replaced by `skwer` followed by the TUT word for that letter.
нет упоминания оSKWER
.Perl 385
Подсветка синтаксиса ненавидит этот ...
Ожидается ввод на STDIN, формат
0 (or 1) String to convert here.
:Редактировать : я заметил проблему с переводом X (он становится 'aks' в реверсии, я рассмотрю это позже. Возможно, потребуется переупорядочить хэш :(.
источник
GNU Sed, 514
Возможно, может быть сокращен, хотя я уже сделал.
Использует таблицу поиска для обработки преобразований в обоих направлениях, должна обрабатывать все исключения, включая skwer case и ruddud / RUDDUD.
ввод, взятый в каждой строке как 0/1, за которым следует строка. Использует
\v
(вертикальная вкладка) в качестве курсора.источник