Ваша задача - написать программу для перевода (английский) leetspeak / lolspeak / txtspk на обычный английский. Ваша программа должна читать из стандартного ввода и вывода в стандартный вывод, если ваш язык не поддерживает их.
Вы можете использовать файл, содержащий список слов на английском языке, разделенных новыми строками. Он должен быть вызван W
и находиться в том же каталоге, что и ваша программа. (В системах GNU / Linux и, возможно, в других вы можете сделать W
ссылку на /usr/share/dict/words
этот список). Список не обязательно должен быть в нижнем регистре, вы можете использовать его, чтобы определить, должны ли слова иметь заглавные буквы.
Это основано на удаленном вопросе, опубликованном Никосом М., который можно найти здесь . Это не дубликат, так как этот оригинальный вопрос был закрыт и не получил никаких ответов, потому что не было критерия выигрыша, и пользователь не хотел его вводить.
счет
Подсчет очков немного сложнее!
ваш счет
(leet items + bonuses) * 10 / (code length)
Самый высокий балл выигрывает.
Ваша программа не должна быть и, вероятно, не может быть идеальной, но чем она точнее, тем больше бонусов!
Так как $
может означать и то, s
и другое S
, вы получаете бонус в 5 баллов за каждый элемент leet за решение, должно ли оно иметь заглавную букву (то есть заглавные буквы в начале предложений).
Вы получаете дополнительный бонус в 5 баллов за элемент leet для реализации собственных имен (слов, которые всегда имеют заглавные буквы) - способ, которым это работает, заключается в том, что вы просматриваете список слов, делаете вывод заглавными, если в нем присутствует только заглавная версия. список, и если обе версии есть, просто угадайте.
Если персонаж имеет два значения (например, 1
может означать L
или I
), вы получаете 20 баллов за элемент leet за выбор только тех переводов элемента, которые составляют настоящие английские слова - используйте для этого список слов. Если более одного перевода элемента leet представляет собой реальное английское слово, вы можете произвольно выбрать один из действительных переводов и при этом получить бонус.
Список Leet
Это те элементы, которые вы можете реализовать. Вам не нужно реализовывать их все, но чем больше вы добавляете, тем больше очков вы получаете.
Вы никогда не сможете набрать очки, переводя предмет или персонажа на себя. Это правило отменяет любые ошибки, которые я мог допустить в списке.
Это заманчиво сделать простой tr
или s/.../.../g
. Реальная задача состоит в том, чтобы определить, какое из нескольких значений может и не может быть правильным, используя список слов.
Leet Items (каждый из них добавляет 1 к leet items
формуле)
$ -> s, S (-> C, C 5 -> с, с @ -> а, а 4 -> а, а 3 -> е, е 7 -> т, т + -> т, т # -> ч, ч это 'd -> ed pwnd -> pwned pwnt -> pwned К, К -> ОК кк -> ОК 0 [ноль] -> о, о у, у -> почему 4 -> для TXT -> текст Дафук -> что за ** / \, ^ -> а, а \ / -> V, V d00d -> чувак n00b -> новичок \ / \ / -> ш, ш 8 -> б, б | _ | -> ты, ты | - | -> ч, ч Я -> R, R J00 -> Вы Джу -> ты VV, VV -> W, W Томоз -> завтра | <-> к, к [), |) -> д, д <3 -> любовь > <-> х, х 10100111001 -> leet (двоичное представление 1337) 2 -> чтобы тоже ур, UR -> твой, ты (нет необходимости правильно различать два) ты, ты -> ты 8 -> -ate-, 8 x, X -> -ks -, - cks- z, Z -> s, S 1 -> я, я, л, л ! -> Я, я! C, C -> см., C, море б, б -> бе, б, пчела [акцентированное письмо] -> [не акцентированная форма] (оценка 1 за акцентированное письмо поддерживается) &, 7 -> и anned, ant (можно использовать в середине слова)
Сложнее "Лет": набери 30 очков за leet items
каждого
!!! 1 !! 1-> !!!!!!! (переведите 1 в последовательности! в!) !!! один! -> !!!!! ! одиннадцать-> !!!
Примеры
Это примеры того, что может сделать программа, которая реализует все приведенные выше символы leet, и некоторые бонусы:
Пример предложения: |-|3 15 $|_|(# @ n00b
=He is such a newbie
Leet-на-основе цензура: $#!+
=s**t
Extreme Leet: \/\/ 1 |< 1 P 3 [) 1 A
=Wikipedia
суффикс -xor: H4X0R
=hacker
Более экстремальный взгляд: @1\/\/4Y5 p0$+ ur n3VV qu35710nz 1n teh $&80x
=Always post your new questions in the sandbox
Пример подсчета очков
Баш, 10 персонажей, 3 предмета, без бонусов:
tr 137 let
Это баллы ( 1 * 3 ) * 10 / 10 = 3
.
источник
tr
илиs/.../.../g
. Простой перевод таких вещей может стать скучной задачей, поэтому нам нужно поощрять лучшие переводы, использующие список словsed
сценарий.)sed
сценарий, я имею в виду не простоs/.../.../g
файл, а файл, который анализируется и выполняетсяsed
сам по себе. Каким бы кратким ни был язык, это может быть приличный язык для игры в гольф ...sed
Сценарии также хороши и могут быть очень интересными, они могут очень хорошо справляться с этим из-за короткого синтаксиса подстановки, вы можете читать из списка слов, либо с расширениями GNU, либо используяsed
как часть более крупной программы BashОтветы:
Javascript (49 + 5635) * 10/2174 = 26,14
Демо онлайн:
Опция «Настоящий словарь» не работает в выпадающем списке, но она будет работать при запуске на реальном веб-сервере. Протестировано в Visual Studio разработки сервера и Google Chrome.
https://dl.dropboxusercontent.com/u/141246873/leettranslator/index.html
Гол:
49 летов = 49
Бонус капитализации = 5 * 49 = 245
словарь поиска бонус = 20 * 49 = 980
восклицательный бонус * 3 = 90 * 49 = 4410
(детали + бонусы) * 10 / (длина кода)
(49 + 5635) * 10/2174 = 26,14
Код:
Ungolfed:
Результаты теста:
Заметки:
Словарь представляет собой отдельный файл javascript с объектом W, который содержит все слова. Это просто содержит слова, которые мне нужны для запуска соответствующих тестов.
источник
W.js
если она будет удалена)Haskell - Счет 1.421421421: (37 предметов + (21 бонус (заглавная буква) * 5)) * 10 / (999 байт)
Это мой окончательный ответ.
тесты
Когда программа скомпилирована в файл с именем
min-lt
, вы можете написать следующий скрипт оболочкикоторый напечатает это
источник
-ks-
я имел в видуks
в середине слова. Я посмотрю на это, как только найду компилятор haskellhaskell-platform
пакет. У вас есть пример дляks
?<insertnamehere> rocX
илиroX
Расширенный BrainFuck : 0,6757
Таким образом, это делает 15 переводов "$ (5 @ 437 + # 0821! &", Без бонусов и имеет 222 байта (дополнительные строки не включены). 15 * 10/222 = 0,6757
Использование:
EBF на самом деле не предназначен для игры в гольф, но его особенность, макросы и функции печати строк облегчают сжатие, чем BrainFuck. Конечный скомпилированный двоичный файл BrainFuck выглядит так:
источник
~"OTLHEAND"
я мог сделать все символы один раз для 107-байтового объектного кода вместо того, чтобы делать их из 0 каждый раз, используя 354, но мой ответ оптимизирован для размера кода EBF :)Java: 1,236
Так что он делает следующие преобразования
Расчет баллов сложен
((39 + (21 * 5)) * 10) / 1165 = 1,236
Un-Golfed код:
источник
C # оценка 45 * 10/2556 = 0,176
Программа может выводить практически все строчные и прописные буквы. Поскольку я не использую список английских слов, используется первый ключ, найденный в словаре. Например, \ / \ / становится vav. Если char - первая буква слова, применяется ToUpper.
Вот мой тестовый вывод:
источник