Этот вопрос предполагает принятие ввода в азбуке Морзе как. (точка) и - (минус символ), с пробелами для разделения ввода. Ваша задача - преобразовать код в стандартный вывод. Можно предположить, что единственный ввод содержит символьные символы в алфавите международного кода Морзе, который находится здесь: http://en.wikipedia.org/wiki/Morse_code#Letters.2C_numbers.2C_punctuation .
Все выходные должны использовать строчные буквы. Двойной пробел следует интерпретировать как пробел.
Пример ввода:
. -..- .- -- .--. .-.. . .-.-.- ... --- ...
Выход:
example. sos
Самый короткий код после двух недель побед.
Ответы:
Mathematica 62
Mathematica позволяет нам обманывать
Первые два символа
.
и.-
необходим для правильной интерпретации небольших кодов.источник
f=ToLowerCase@StringDrop[WolframAlpha[". .- "<>#,"Result"],2]&
на нижний регистр.Драт, я надеялся попасть сюда до прибытия GolfScripters :-(
Anyhoo ...
C: 228 символов:
Я думал, что добавлю объяснение того, как это работает.
Входные данные анализируются в соответствии с данными дерева в
*c
, которые могут быть расширены следующим образом (используя·
для представления свободного узла):Начиная сверху дерева, двигайтесь вниз, двигаясь влево для точки и вправо для тире. Затем выведите любой символ, в котором вы оказались, когда заканчивается строка ввода (т. Е. Когда встречается символ пробела). Так, например, три точки и тире будет принимать вас
v
черезe
,i
иs
. Вместо явной проверки на наличие точек (ASCII\x2e
) и тире (ASCII\x2d
) нам нужно только проверить последний бит (m[n]&1
), который равен 0 для.
и 1 для-
.Шесть строк достаточно, чтобы закодировать все, кроме
$
, у которого есть 7 точек / тире:,...-..-
но поскольку входные данные гарантированно будут действительными, это можно легко исправить, обрезав ввод до 6 символов (m[6]=0
) и интерпретации ,...-..
как$
вместо этого. Мы также можем вырезать последние 7 байтов из данных дерева, так как они все пусты и не нужны, если входные данные верны.источник
c
. Возможно, вы могли бы использовать модуль & смещение, чтобы попытаться объединить более высокие значения вместе; это то, что я делаю в своем решении. Во всяком случае, хорошая работа!GolfScript (
116 11397 символов)Это включает в себя непечатаемые символы, используемые в таблице поиска, поэтому я передаю их как вывод xxd:
Это декодирует в программу, эквивалентную
что по сути
При этом используется (не минимальный) идеальный хеш, основанный на основной идее оптимального алгоритма генерации минимальных идеальных хеш-функций; Чешский, хавас и маевский; 1992 . Их основная идея заключается в том, что вы используете две хеш-функции
f1
иf2
вместе с таблицей поискаg
и идеальный хеш(g[f1(str)] + g[f2(str)]) % m
(гдеm
находится число строк, которые мы хотим различить); умный бит - способ, которым они строятg
. Рассмотрим все значенияf1(str)
и представляющие интересf2(str)
строкиstr
как узлы в неориентированном графе и добавьте грань междуf1(str)
иf2(str)
для каждой строки. Они требуют не только того, чтобы каждое ребро было четким, но и граф должен быть ациклическим; тогда это просто DFS, чтобы назначить веса узлам (то есть заполнить таблицу поискаg
) так, чтобы у каждого ребра была необходимая сумма.Чехия и др генерации случайных функций
f1
иf2
которые выражаются с помощью таблиц поиска, но это не явно не годится: я искал подходящий хэш , используя простые преобразования базовых с двумя различных основаниями от -10 до 9. Я также ослабленных ациклического требование. Я не хотел присваивать строки значениям от 0 до 54, а соответствовал кодам ASCII, поэтому вместо того, чтобы брать,(g[f1(str)] + g[f2(str)]) % m
я хотел получить(g[f1(str)] + g[f2(str)]) % N
некоторыеN > 'z'
. Но это позволяет свободно пробовать различные вариантыN
и видеть, разрешают ли какие-либо из них корректную таблицу поиска.g
, независимо от того, существуют ли циклы. В отличие от Чешского и др. Мне все равно, если поиск идеальной хеш-функции - это O (n ^ 4).График, сгенерированный
-4base
и5base
модом59
:что довольно неплохо, за исключением самого большого связного компонента, который имеет три цикла длины 1. Нам нужно подняться до того,
N=233
как мы сможем найтиg
согласованное значение.источник
C 169 символов
Я не мог найти лучшую хэш-функцию ..
(Я опубликовал неинициализированный код, но посчитал его минимизированным; чтобы минимизировать, просто сделайте
:%s/ //g | %j!
в vim, а затем верните пробел в строковый литерал обратно.)Тестовый забег
(
morse.in
это просто весь алфавит в азбуке Морзе на отдельных строках):объяснение
Это довольно просто.
c < 33
находит пробел / разделитель (,
\n
, EOF, ...).c % 2
переводит точку или тире в немного. Идея состоит в том, чтобы создать уникальное число для каждого символа, просто интерпретируя его как двоичное число (после того, как перед ним стоит 1, чтобы иметь дело с переменной длиной) (эта интерпретация являетсяv*2 + c%2
частью). Затем я получаю 137-символьную LUT, которую я сжал, хэшируя результирующее значение (v < 64? v : v % 51 + 33
константы, найденные методом проб и ошибок и, глядя на распределение и пытаясь найти огромный разрыв). К сожалению, эта хеш-функция имеет единственное столкновение, поэтому мне приходится специально40 → '&'
сопоставлять отображение.источник
R 145 байтов
Переводит точку в 2, тире в 1 и интерпретирует число в троичной форме, используя мод 89, который дает уникальное число, которое мы можем использовать в хеш-таблице. Наличие 13 (111 base-3) означает добавление 1, потому что ASCII 13 не работает в TIO.
Попробуйте онлайн!
R , 236 байт (не конкурирует)
Это не будет конкурентоспособным, но позволяет нам показать кое-что интересное в R: сохранить дерево кода Морзе внутри структуры языка в кавычках
m
и извлечь его из кода точек и тире очень просто, используя тот факт, что[[
его можно применять рекурсивно к списки. Напримерm[[c(2,2,3,2)]]
возвращает точку, точку, тире, точку или «f».Попробуйте онлайн!
источник
Powershell, 193 байта
Сценарий Less Golfed Test:
Выход:
источник
JavaScript (165 байт, только реализация четырех плоскостей.)
Входные данные должны быть назначены
n
, выполнить следующий код, чтобы получить выходные данные:источник
Cannot read property '42' of undefined
, а IdeOne также сообщает об ошибке (хотя и без полезного сообщения).. -..- .- -- .--. .-.. . .-.-.-
качестве входных данных, так как последний код имеет длину 6 символов. В примере сценария я опускаю его и обозначаю. -..- .- -- .--. .-..
, какие оповещения (example
).