Эта задача состоит из двух частей. Победителем станет решение с самым низким общим количеством байтов. Один и тот же язык должен использоваться для обеих задач.
Часть 1:
Напишите функцию или программу, которая принимает предложение с использованием только допустимых слов в качестве входных данных и выводит список использованных символов, количество раз, которое используется каждая буква, и количество букв в каждом из слов в исходном предложении. Выходные данные из этой программы должны быть действительными входными данными для следующей программы (в точности так, как они выводятся)
Я добавлю примеры и подробные правила ниже.
Часть 2:
Напишите функцию или программу, которая принимает выходные данные из первой программы в качестве входных данных и использует этот список английских слов и воссоздает предложение с информацией из выходных данных. Предложение не должно совпадать с исходным предложением.
Дополнительная информация. правила и ограничения:
Часть 1:
- Первый ввод может быть в любом подходящем формате, с кавычками или без них, в качестве аргумента функции или из STDIN, с или без скобок и т. Д.
- Входное предложение не будет содержать знаков препинания или специальных символов, за исключением точки / точки в конце. За исключением символа точки, все символы, которые находятся на входе, будут в списке слов.
- Первая буква предложения будет прописной, остальные - строчными.
- Вывод части 2 должен начинаться с той же буквы верхнего регистра, что и исходное предложение (поэтому преобразование ввода в нижний регистр не рекомендуется (но хорошо).
- Вывод может быть в любом подходящем формате:
- Должна быть возможность скопировать и вставить вывод непосредственно в следующую программу / функцию.
- Никакие изменения не могут быть сделаны при копировании, весь вывод должен быть скопирован и вставлен целиком, а не по частям.
- Например, вы можете вывести гистограмму всех букв алфавита или только используемых (в общем, все, что необходимо для завершения части 2)
- Вы не можете вывести список символов, где повторяются несколько вхождений. Например,
The queue
не может дать выход:Teeehquu (3,5)
он должен быть что - то вроде:Tehqu, (1 3 1 1 2),(3 5)
.
Часть 2:
- Программа / функция должна принимать ввод точно так же, как и в части 1 (одно исключение, см. Комментарий ниже о принятии имени файла в качестве ввода.).
- Если для анализа входных данных необходимы окружающие скобки, кавычки и т. П., То они должны быть частью выходных данных части 1.
- Список слов можно найти здесь.
- Список слов может быть сохранен как локально
w.txt
, так и извлечен из URL. URL будет считаться только 5 байтами, поэтому вам не нужно сокращать URL. - Если программа не может открыть файл , не читая имя в качестве входных данных из STDIN (я считаю , что это
естьи в случае Pyth , по крайней мере), то имя файла может быть принято в качестве отдельного входного аргумента.
- Список слов может быть сохранен как локально
- Выводом должно быть только предложение (список допустимых слов), заканчивающееся точкой и необязательным переводом строки.
- Вывод должен содержать слова с тем же количеством букв, что и в оригинальном предложении в части 1 (в правильном порядке).
- Все буквы, которые использовались в исходном предложении, должны использоваться в новом выводе.
- Предложение должно начинаться с той же буквы в верхнем регистре, что и исходное предложение, и заканчиваться точкой.
Обе части:
- Ни одна из частей не должна выполняться более 2 минут (случайный выбор слов до тех пор, пока не будет найдено решение, не принимается).
При соблюдении правил, перечисленных выше, должна быть реальная вероятность того, что воспроизводится точно такое же предложение, однако это не является обязательным требованием.
Примеры:
В приведенных ниже примерах показаны несколько различных форматов ввода и вывода. Многие другие принимаются.
Часть 1:
Входные данные:
Zulus win.
Тип выхода 1:
Z i l n s u w
1 1 1 1 1 2 1
5 3
Тип выхода 2:
(('Z',1),('i',1),('l',1),('n',1),('s',1),('u',2),('w',1)), (5,2)
Тип выхода 3:
'Zilnsuuw',[1,1,1,1,1,2,1],[5,2]
Часть 2:
Вход: точная копия вывода из части 1. Выход:
Zulus win.
Обратите внимание, что другие словосочетания принимаются до тех пор, пока они начинаются с Z
буквы « a» , а первое слово состоит из 5 букв, а второе - из 3.
Самый короткий код в байтах побеждает.
f1
который вставлен в,f2
должен содержать все данные, указанные в задании. Никакие дополнительные данные не могут быть частью выводаf1
. Никакие данные не могут быть "сохранены",f1
чтобы сделать информацию доступной при ее вызовеf2
.f1
может принимать только одну строку в качестве ввода для вызова.Ответы:
LabVIEW, 166 примитивов LabVIEW
Во-первых, я не создавал 2 отдельные программы, потому что Labview выполняет поток данных, поэтому в этом нет необходимости.
Сохраняет гистограмму с первым элементом = ascii, код первой буквы покоится из 1-26 ходов по количеству. Длина просто сохраняется в массиве.
У первого слова есть 3 проверки, первая буква, длина и доступные буквы в гистограмме. Проверка первой буквы прекращается после первого слова.
Я проверяю гистограмму, уменьшая ее для каждой буквы и проверяя, не опустится ли она ниже 0.
Если я нашел свое N-е слово и нет слов, которые можно построить из оставшихся букв, то я начну удалять слова из диктонары и повторять N-е слово и так далее, пока не найду решение.
Это может или не может работать для предложений, которые есть, так как это займет целую вечность (мой пример занял несколько секунд).
Что я пробовал
источник
Python 2.7, 353 байта
К сожалению, я не могу проверить это с фактическим w.txt файлом ATM, потому что QPython для Android не может обрабатывать файловый ввод / вывод. Это работало с данными, которые я скопировал и вставил все же.
Часть 1, 76 байт
В:
'Hi there.'
Вне:
{'H':1, 'i':1, 't':1, 'h':1, 'e':2, 'r':1}, (2, 5)
Итак, список, содержащий:
хэш-карта с гистограммой
список букв
Часть 2, 277 байт
Я очень рад, что мне удалось сделать его на 100% чисто функциональным. Не уверен, поможет ли это с фактическим игрой в гольф, но я, конечно, получил правильную часть обфускации: D Вот более дружелюбная версия pt. 2 (точно такой же поток, но с именами переменных):
источник
Perl,
516504 байтавключает 2x +1 для
-p
Требуется иметь
w.txt
в формате unix (\n
окончания строк). Используетcat
для чтения файла; изменитьtype
для Windows.Сохраните oneliner выше в
534.pl
и запустите какecho Test. | perl -p 534.pl
.Довольно большой, но это только начало - множество возможностей для игры в гольф, но я просто хотел опубликовать его, чтобы сделать ответ LabVIEW менее одиноким ;-). Я пропустил оптимизацию для выполнения менее чем за секунду, экономя более 30 байт.
Первый фрагмент (73 байта):
Он производит гистограмму и слово длины в компактном формате. Для ввода
Zulus win.
он производит вывод типа 2 без(,)
, которые здесь не нужны:Вот он, бездельник
Второй фрагмент (441 байт)
Эта основная часть касается ввода-вывода и специальной обработки первой буквы, с использованием подпрограмм
g
иh
перечисленных ниже.Эта рекурсивная функция берет копию гистограммы, копию количества оставшихся слов и текущего слова. Если массив длины слова пуст, возвращает true. В противном случае он уменьшает количество гистограмм для букв в данном слове, берет следующую длину слова и находит список подходящих слов из списка слов. Для каждого подходящего слова оно повторяется.
И наконец, этой подпрограмме дают слово и гистограмму предложения. Он рассчитывает новую гистограмму для слова и проверяет, встречаются ли все буквы чаще, чем это разрешено гистограммой предложения.
Вы можете вставить фрагменты ungolfed (
sub i/o/g/h
) в один файл и добавить приведенный ниже тестовый код.substr
и параметр дляsub g
.источник