Напишите самую короткую из возможных программ, чтобы при объединении первого символа и каждого N-го символа после него в новую программу выводился N. Это должно работать при N = 1, 2, ..., 16.
Другой способ сказать, что, если вы удалите все символы из вашей программы, кроме первого и каждого N-го после этого, результат оставшегося кода должен быть равен N.
пример
Если ваш код был
ABCDEFGHIJKLMNOP
N = 1 результатов в ABCDEFGHIJKLMNOP
. Выполнение этого должно вывести 1.
N = 2 приводит к ACEGIKMO
. Выполнение этого должно вывести 2.
N = 3 результата в ADGJMP
. Выполнение этого должно вывести 3.
N = 4 результата в AEIM
. Запуск этого должен вывести 4.
N = 5 результатов в AFKP
. Запуск этого должен вывести 5.
N = 6 результатов в AGM
. Запуск этого должен вывести 6.
N = 7 результатов в AHO
. Выполнение этого должно вывести 7.
N = 8 приводит к AI
. Запуск этого должен вывести 8.
N = 9 результатов в AJ
. Выполнение этого должно вывести 9.
N = 10 результатов в AK
. Запуск этого должен вывести 10.
N = 11 результатов в AL
. Запуск этого должен вывести 11.
N = 12 результатов вAM
, Запуск этого должен вывести 12.
N = 13 приводит к AN
. Запуск этого должен вывести 13.
N = 14 результатов в AO
. Запуск этого должен вывести 14.
N = 15 результатов в AP
. Выполнение этого должно вывести 15.
N = 16 приводит к A
. Выполнение этого должно вывести 16.
Детали
- Все символы разрешены, ASCII и не ASCII. (Новые строки и непечатаемый ASCII также допускаются. Обратите внимание, что возврат каретки и перевод строки считаются как отдельные символы.)
- Ваша оценка - длина в символах вашей неизмененной программы (15 в примере). Самый низкий балл побеждает.
- Оценка ниже 16 явно невозможна, потому что тогда как минимум две из измененных программ будут идентичны.
- Вывод может быть в файл или стандартный вывод или что-либо еще разумное. Однако выходные данные 16 различных программ должны идти в одно и то же место (например, это не нормально, если
AO
идет в стандартный вывод, ноA
идет в файл). Там нет ввода. - Вывод должен быть десятичным, а не шестнадцатеричным. Фактический вывод должен содержать только 1 или 2 символа, которые составляют число от 1 до 16, и ничего больше. (Вещи как Matlab's
ans =
в порядке.) - Ваша программа не должна работать для N = 17 или выше.
источник
ABCDEFGHIJKLMNO
иN = 15
, код результата простоA
.Ответы:
APL, 49
Измененные программы
Explaination
Я начну с самого низа, так как это облегчит объяснение
Следует помнить о двух языковых особенностях APL. Во-первых, APL не имеет приоритета операторов, операторы всегда оцениваются справа налево. Во-вторых, многие функции APL ведут себя совершенно по-разному, в зависимости от того, задан ли один аргумент справа (монадический) или два аргумента слева и справа (диадический).
Monadic округляется
⌊
вниз (функция этажа), Dyadic×
- это, очевидно, умножение,⍝
комментарии в остальной части строки.Это должно сделать это очевидным:
9:
⌊/9×1
/
уменьшить. По сути, он принимает функцию слева и массив справа, вставляет функцию между каждой парой элементов массива и выполняет оценку. (В некоторых языках это называется «сгиб»).Здесь правильным аргументом является скаляр, поэтому
/
он ничего не делает.8:
⌊|8×× 2
Monadic
×
- это функция signum, а monadic|
- функция абсолютного значения. Итак,× 2
оценивает1
и,|8×1
конечно,8
7:
⌊11-4 ⍝
должно быть очевидно6:
⌊⍟19×51⍝2
Monadic
⍟
- натуральное бревно.Итак,
⍟19×51
оцениваетln(19×51) = 6.87626...
и⌊
округляет до6
5:
⌊⍟21×○5
Монадические
○
умножает свой аргумент на я⍟21×○5
являетсяln(21×5π) = 5.79869...
4:
⌊7|18××4×1 ⍝2
Диадические
|
является функция мод имеет×4×1
значение1
, и7|18×1
является18 mod 7 = 4
3:
⌊○⍟/119-××5 1 ⍝ 2
разделенные пробелами значения - это массив. Обратите внимание, что в APL, когда большинство скалярных функций дают аргументы массива, это неявное отображение.
Dyadic
⍟
is logИтак
××5 1
, это signum of signum на 5 и 1, который дает1 1
,119-1 1
есть¯118 ¯118
(¯
это просто знак минус. APL должен различать отрицательные числа и вычитание), и⍟/¯118 ¯118
это log -118 (-118) = 12:
⌊⍟7⍟|21189×1×345× 1 ⍝⍝_2
Вы можете решить это самостоятельно
1:
⌊⊃⍟○7⍟⍟1|/2111118 9⍝×-1 ×○3×4_5_× 1_ _⍝_⍝ __2
Этот состоит из более сложного использования
/
. Еслиn
это число,F
функция иA
массив, то онnF/A
принимает каждую группуn
последовательных записейA
и применяетF/
. Например,2×/1 2 3
берет каждую пару последовательных записей (которые есть1 2
и2 3
) и применяется×/
к каждой группе, чтобы дать2 6
So,
1|/2111118 9
просто возвращает2111118 9
(как это применяется|/
к скалярам). Затем⍟○7⍟⍟
применяет ln, затем записывает 7 к этим числам, затем умножает их на π и ln снова. Числа, которые выходят с другой стороны,1.46424... 0.23972...
здесь,
⊃
просто используются для выбора первого элемента массива.источник
Питон -
12011137 (генератор:241218) - Да здравствуют хэши!Стратегия:
Я пытался запустить каждую строку с таким количеством хэшей, сколько нужно для вывода
n
. Тогда все остальные версии полностью пропустят эту строку.Основная трудность, однако, заключалась в том, чтобы добавить правильное количество хэшей, чтобы следующий запуск точно достиг начала следующей строки. Кроме того, могут возникать помехи с другими версиями, например, версия 16 прыгает прямо в
print
команду строки 5 и так далее. Так что это было много проб и ошибок в сочетании со вспомогательным скриптом для быстрого тестирования.Статистика:
1201113710661002 (88,1%)Код:
Тестовый скрипт:
Выход:
Обновление: генерирующий скрипт!
Я подумал о своем решении и о том, что должен быть шаблон для его генерации алгоритмически. Итак, поехали:
Он строит программу построчно:
i
сprint i
командой иi - 1
хэшами между каждыми двумя соседними символами.print i
(из-за смещения) или любоеn
-version сn in range(1, 17)
исключением, добавьте еще один хеш к предыдущей строке.На самом деле программа вернула более короткую программу, чем я обнаружил вручную этим утром. (Поэтому я обновил свое решение выше.) Кроме того, я почти уверен, что более короткая реализация не следует этому шаблону. Но вы никогда не знаете!
Гольф версия -
241218:Обратите внимание, что может быть более короткий генератор, например, путем жесткого кодирования необходимого количества последовательных хэшей для каждой строки. Но этот вычисляет их сам и может быть использован для любого N> 16.
источник
p 1
вместоprint 1
.Befunge 93 - Пять миллионов семьсот шестьдесят пять тысяч семьсот семьдесят шесть символов
Я требую, чтобы меня воспринимали всерьез ...
3 причины почему. 1-я причина: сценарий befunge всегда имеет размер 80x25, поэтому, несмотря ни на что, должно быть что-то, что было сокращено в строках с кодом. 2-я причина: почему это что-то около 5,5 миллионов пробелов, потому что 720 720 - это наименьшее общее кратное от 1 до 16 ... Означает, что при пропуске символов не будет сложностей. Третья причина: вау, это довольно абсурдно.
источник
209 знаков (разные языки)
Я просто старался сделать вещи простыми и не ставить что-либо на позиции с множеством основных факторов. Преимущество - возможность работать на многих языках сценариев. Он должен работать на любом языке, который не является преднамеренно извращенным и имеет следующие особенности:
Например,
Интерпретатор командной строки Python 2 (но не из файла):
MATLAB (просто замените '#' на '%'):
NB. Перед первым «1» должно быть 17 пробелов. Вы, ребята, знаете много языков, поэтому, пожалуйста, помогите мне перечислить больше, на которых он может работать (:
РЕДАКТИРОВАТЬ: Добавлен унарный + в позиции 0 для Python, чтобы избежать отступа строки.
источник
IndentationError
запустить в командной строке. Но, возможно, вы не использовали правильный синтаксис уценки при публикации кода здесь.unexpected indent
в консоли Python 2.7 также. Но это работает в Matlab, поэтому не стоит беспокоиться. Я считаю, что это также работает в Ruby.CJam, 89 байт
Этот подход не использует никаких комментариев.
i
приводит к целочисленному, так что это просто тупик. Его можно заменить пробелами, но буквы кажутся мне более читабельными ...Попробуйте онлайн , выполнив следующий код :
Пример запуска
источник
GolfScript, 61 байт
Для этого используются комментарии (
#
) и недокументированные «супер-комментарии» (все, что следует за непревзойденным}
игнорируется)._
это просто Его можно заменить пробелами, но подчеркивания кажутся мне более читабельными ...Попробуйте онлайн.
Пример запуска
источник