Введение
Вы преступник, которому поручено украсть секретные планы нового технологического стартапа Dejavu. Вы пробираетесь через заднюю стену, но находите дверь, для которой требуется булавка, чтобы открыть ее. Вы узнаете марку замка и знаете, что для этого требуется 5-значный пин-код, используя все цифры от 0 до 4. После каждой введенной цифры замок проверяет последние 5 введенных цифр и открывает, если код правильный. Вы должны пройти этот замок и быстро.
Суперперестановки в двух словах
Перестановка - это все возможные комбинации определенного набора цифр. например, все перестановки цифр 0, 1, 2:
012, 021, 102, 120, 201 и 210.
Если мы объединим все эти перестановки вместе, мы получим суперперестановку:
012021102120201210
эта суперперестановка содержит все перестановки 0, 1, 2, но можно сделать одну короче этой. Я собираюсь немного пропустить здесь, но самая короткая супермутация из этих цифр:
012010210
Для наших намерений и целей, это, по сути, самая короткая строка цифр, которая содержит все возможные перестановки этих цифр, т.е. суперпермутация.
задача
Ваша задача немного сложнее, чем в примере с суперперестановкой, как показано выше, потому что у вас есть еще две цифры для беспокойства. - Если вы не читали о суперперестановках, или мой приведенный выше пример немного неясен, я настоятельно рекомендую вам прочитать эту замечательную статью Патрика Хоннера на эту тему (этот вызов был в значительной степени вдохновлен его статьей, так что слава ему): https://www.quantamagazine.org/unscrabing-the-hidden-secrets-of-superpermutations-20190116/ . Ваша цель - написать максимально короткую программу, которая генерирует суперперестановку цифр от 0 до 4.
счет
Ваша программа не принимает никаких вводных данных и выдает суперперестановку цифр от 0 до 4. Эта результирующая суперперестановка должна быть распечатана на консоли или визуально отображена для пользователя в той степени, в какой это обеспечивает выбранный вами язык. Это не должно быть самой короткой из возможных перестановок, это просто должна быть действительная суперпермутация. По этой причине цель состоит в том, чтобы написать самую короткую программу с самой короткой супермутацией, поэтому вы должны рассчитать свой результат следующим образом:
размер файла (в байтах) * генерируемая длина суперперестановки (цифры)
например, если у меня была 40-байтовая программа, и моя суперперестановка имеет длину 153 цифры, мой результат будет:
40 * 153 = 6120
как всегда, цель состоит в том, чтобы получить этот счет как можно ниже.
шаблон
Вот как вы должны опубликовать свой ответ:
Язык | Гол
ссылка на код в рабочей среде (если возможно)
code snippet
объяснение кода и т. д.
Finalities
Это один из моих первых вопросов на этом сайте. Поэтому, пожалуйста, скажите мне, если я что-то упустил, или раздел моей задачи неясен. Спасибо, и получайте удовольствие от игры в гольф!
источник
Ответы:
05AB1E , оценка = 1673 (7 байт · 239)
Попробуйте онлайн!
Как это работает
Pyth , оценка = 1944 (9 байт · 216)
Попробуйте онлайн!
Как это работает
источник
vy3yJ
сохраняет байтm+d
->+R
сохраняет байт.Брахилог , оценка = 2907 (19 байт × 153)
Слишком медленно, чтобы что-то увидеть, но если вы измените
4
,2
вы можете проверить это: попробуйте онлайн!Это находит самую короткую суперперестановку как таковую:
источник
JavaScript (ES6), 26975 (325 * 83 байта)
С этой системой подсчета очков мало места для чего-то между «жестким кодом оптимальной перестановки» и «просто использовать короткую встроенную функцию для объединения всех перестановок» , по крайней мере, в несолангах.
Вот попытка в любом случае.
Попробуйте онлайн!
Он генерирует строку из 325 байтов:
источник
26975/153-153>23
n
суффикс по умолчанию, которыйconsole.log
выводит)Python 2 , оценка:
24327151471285212628 (154 * 82 байта)Попробуйте онлайн!
Также:
Python 2 , 12628 (154 * 82 байта)
Попробуйте онлайн!
источник
05AB1E , оценка:
53552160 (216 * 10 байт )Порт @AndersKaseorg 's Pyth answer , так что обязательно проголосуйте за него!
Попробуйте онлайн.
Объяснение:
источник
Октава , 27 х 442 = 11934
Попробуйте онлайн!
Таким образом, получается, наивно генерируя все перестановки, а затем обрезая до самой короткой подстроки, которая все еще является допустимой суперпермутацией, короче, чем генерируя самую короткую суперпермутацию. К сожалению, на этот раз оценка не является палиндромом.
Октава , 97 х 153 = 14841
Попробуйте онлайн!
Запись обновлена для нескольких вещей
a++
не реализовано для символических чисел.contains()
не реализован в октаве. Заменено наany(regexp())
.a
очень близкую к суперспеременности 153 длины. Это позволяет проверить решение.источник
CJam (6 * 240 = 1440)
Демонстрация онлайн , проверка (выводит индекс, по которому каждая перестановка
0..4
может быть найдена ; ей нужно сгладить вывод, потому что исходная программа дает подходящий вывод для stdout, но то, что она помещает в стек, не может использоваться напрямую).Подход, украденный из Sanchises , хотя порядок перестановок CJam отличается, давая другую подстроку.
CJam (22 * 207 = 4554)
Демо онлайн , валидация .
рассечение
Это использует простую рекурсивную конструкцию.
источник
Желе , 3000 (600 * 5 байт)
Попробуйте онлайн!
источник
Древесный уголь , 29 байтов, длина вывода 153, оценка 4437
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение: Как и @TFeld, я просто печатаю половину суперперестановки и отражаю ее. Я вычислил суперперестановку, используя следующий код:
Это переводит 45-байтовую программу в Charcoal, поэтому набрал бы 6885.
источник
MATL , 16 х 442 = 7072
Попробуйте онлайн!
MATL порт моего октавного ответа. -442 благодаря Луису Мендо
источник
Japt -P, 2376 (11 x 216)
Попытайся!
-1 байт благодаря @ Shaggy!
Порт Андерса Касегорга Pyth ответ .
источник
q<space>
;)Perl 6 , 7191 (153 * 47 байт)
Попробуйте онлайн!
Находит первое число, которое содержит все перестановки цифр от 0 до 4. Это займет много времени для выполнения, но вы можете проверить его с помощью первых двух перестановок
0
и0,1
источник
Wolfram Language (Mathematica) , 153 * 95 байт, 14535
Попробуйте онлайн!
источник