Ваша задача, если вы хотите принять это, - написать программу, которая выводит положительное целое число (больше 0). Если исходный код дублируется, вывод должен остаться прежним. Сложность в том, что если исходный код напечатан три раза ( трижды ?) Результат будет умножен на 3.
правила
Вы должны построить полную программу . То есть ваш вывод должен быть распечатан на STDOUT.
Исходный источник должен быть длиной не менее 1 байта.
Оба целых числа должны быть в базе 10 (вывод их в любую другую базу или с научными обозначениями запрещен).
Ваша программа не должна принимать данные (или иметь неиспользуемые пустые данные).
Вывод целых чисел с концевыми / ведущими пробелами разрешен.
Ведущие нули допускаются только в том случае, если цифры совпадают, например: 001 - 001 - 003 или 004 - 004 - 012
Вы не можете использовать новую строку между копиями вашего источника.
Это код-гольф , поэтому выигрывает самый короткий (оригинальный) код на каждом языке !
Применяются стандартные лазейки .
пример
Допустим, ваш исходный код Abc
и соответствующий вывод 4
. Если я пишу AbcAbc
вместо этого и запускаю его, вывод все равно должен быть 4
. Однако, если я пишу AbcAbcAbc
и запускаю его, вывод должен быть 12
.
Бесстыдно украденные производный от г для Xcoder вызова
источник
int i=1;print i;
), то дублированный код (int i=1;print i;int i=1;print i;
) должен выводить то же число, что и исходный код, а когда код трижды дублируется (int i=1;print i;int i=1;print i;int i=1;print i;
), он должен показывать число, умноженное на 3Ответы:
Wumpus , 6 байт
Попробуйте онлайн!
Попробуй вдвое!
Попробуй втрое!
Принты
1
и3
.объяснение
Я нашел тонну 6-байтовых решений с помощью перебора, но ни одного за 5 байт. Это не обязательно означает, что нет 5 байтов, но они, вероятно, будут использовать странные символы или что-то в этом роде.
Я выбрал это решение, потому что оно не печатает никаких ведущих нулей (большинство из них делают), и у него есть некоторый интересный поток управления. Начнем с одной программы:
Итак, исполняемый код:
Достаточно просто. Теперь дублированная программа. Поскольку первая строка добавляется ко второй строке, сетка расширяется до ширины 5 (и высоты 3), что значительно меняет поток управления:
IP проходит этот цикл ровно один раз, поэтому исполняемый код:
Наконец, утроенная программа очень похожа на удвоенную, но мы добавим еще пару важных команд в эту третью строку:
Итак, исполняемый код:
источник
Шелуха , 5 байт
Попробуйте онлайн!
Повторяется дважды!
Повторяется трижды!
объяснение
Довольно сложно построить повторяющуюся программу в Husk. Поскольку система типов запрещает функцию, которая может быть применена к самой себе, я должен как-то позволить первой части выполнить оценку функции, а оставшуюся часть - оценке значения, а типы существующих встроенных функций предназначены для предотвращения этого. вид двусмысленности. Токены программы
K
, который строит постоянную функцию.K a b
эквивалентноa
.Σ
, который принимает целое число n и возвращает n- е треугольное число.+
, который добавляет два числа.1
, который является буквальным 1.Оригинальная программа интерпретируется так:
Это
(K+)
бессмысленная функция, которая съедается первымK
.Дважды повторенная программа интерпретируется так:
Функция в скобках снова поедается первой
K
.Трижды повторенная программа интерпретируется так:
источник
K
в программе, вывод типов становится очень медленным, потому что каждый из них потенциально может «съесть» любое количество токенов, и интерпретатор попробует все комбинации ...Желе ,
75 байтПопробуйте онлайн!
Попробуй вдвое!
Попробуйте это втрое!
Как это устроено
источник
Haskell , 24 байта
Принты
1
: попробуйте онлайн!Также печатает
1
: попробуйте онлайн!Принты
3
: попробуйте онлайн!источник
Cubix , 5 байтов
Попробуйте онлайн: один раз , два раза , трижды .
объяснение
Cubix - это основанный на стеке язык, инструкции которого обернуты вокруг куба. Важно отметить, что стек изначально заполнен бесконечными нулями, что позволяет нам «извлекать значения из воздуха» с операторами, а не выдвигать их явно.
Я должен признать, что это было найдено грубой силой; Я бы никогда не нашел его самостоятельно. Фактически, @MartinEnder был тем, кто попросил меня попробовать перебор, так как он безуспешно искал это решение. Это единственное решение, найденное брутфорсером, и я верю, что это единственное и самое короткое решение в Cubix.
Одиночная программа
Смотреть это бежать!
Оригинальная программа помещается на единичный куб. Вот развернутая сеть:
IP (указатель инструкции) начинается с самого левого лица (
<
), направленного на восток. Тот<
немедленно указывает на запад, и он оборачивается вокругP
.P
это возведение в степень, и поскольку в стеке ничего нет, интерпретатор вытягивает два 0 с и вычисляет 0 0 , что равно 1 в соответствии с JavaScript.O
затем печатает это значение и@
завершает программу.Двойная программа
Смотреть это бежать!
10-байтовая программа слишком длинна, чтобы поместиться в единичный куб, поэтому она расширяется до куба размера 2:
Как и прежде, IP начинается в верхнем левом углу самого левого лица. На этот раз самая первая инструкция
P
, которая нажимает 1, как и раньше. Далее идет)
, который увеличивает верхний элемент, превращая его в 2 . Затем<
переворачивает IP, и он)
снова попадает в , превращая 2 в 3 .Вот где это становится интересным.
P
поднимает второй элемент сверху до уровня первого элемента, что дает 0 3 = 0 . Затем IP-адрес оборачивается к крайнему правому лицу и проходит через две неоперативные операции,.
прежде чем ударить другуюP
. Здесь мы видим еще одну причуду Cubix: бинарные операторы (такие какP
) не удаляют свои операнды из стека. Итак, поскольку стек теперь[3, 0]
, мы вычисляем 3 0 = 1 , которыйO
выводит и@
завершает программу.Тройная программа
Смотреть это бежать!
Как и в случае двойной программы, тройка может поместиться в куб размера 2:
Эта программа запускается так же, как и предыдущая:
P
нажимает 1 ,)
увеличивает,<
указывает IP на запад,)
снова увеличивает, аP
теперь нажимает 0 . Затем IP оборачивается<
на крайний правый край, который ничего не делает, так как IP уже направлен на запад.Вот одно отличие от двойной программы:
)
увеличивает 0 на вершине стека до 1 . КогдаP
снова выполняет свою магию, на этот раз он вычисляет 3 1 = 3 .O
выводится и@
заканчивается, и мы окончательно доказываем, что третий раз действительно очаровывает.источник
Brain-Flak , 10 байт
Попробуйте онлайн!
Попробуй вдвое!
Попробуйте это втрое!
Объяснение:
Когда мы запустим это один раз, он будет помещен
(0 + 0 + 1) == 1
в альтернативный стек. Запущенный во второй раз, он помещает то же самое в основной стек. Запустите третий раз, однако он оценивает(1 + 1 + 1) == 3
и помещает его в альтернативный стек и неявно печатает.источник
SQL,
252423 байта( -1 байт удален опечатанный символ, который всегда закомментировался и ничего не делал )
( -1 байт изменен
SELECT
наPRINT
рекомендованный Разваном Соколом )Как это работает:
в SQL вы можете закомментировать теги комментария, например так:
против
Код в 1 строке без комментариев:
первая итерация:
SELECT 2-1
вывод:1
вторая итерация:
SELECT 2-1*2+1
вывод:1
третья итерация:
SELECT 2-1*2+1*2+1
вывод:3
источник
PRINT
вместо того,SELECT
чтобы сохранить дополнительный байт.SOGL V0.12 ,
754 байтаПопробуй это здесь!
Попробуй вдвое!
Попробуйте это втрое!
Объяснение:
источник
ē1|
, но, очевидно, нет команды для побитового ИЛИ ...ē:2\+
: /05AB1E ,
65 байтПопробуйте онлайн! или попробуйте вдвое! или попробуй втрое!
объяснение
Одноместный:
0 + (0 % 2 == 0) -> 1
двухместный:
1 + (1 % 2 == 0) -> 1
трехместный:
2 + (2 % 2 == 0) -> 3
источник
% 2
в тройном объяснении?2%_
правильно?2 + (2 % 2 == 0) -> 2
но2 + !(2 % 2 == 0) -> 3
(для вашего объяснения).2%_
- это то же самое, что иÈ
yes. Не уверен, что вы имеете в виду по поводу объяснения.2+(2%2==0) = 2+(0==0) = 2+1 = 3
, Возможно, было бы яснее, если бы я объяснил вычисления.> <> , 9 байт
Попробуйте онлайн!
Попробуй вдвое!
Попробуйте это втрое!
Я нашел такую удачу, используя философию, что «если вы сделаете путь рыбы достаточно запутанным, в конечном итоге что-то сработает». Исходная и дублированная версии печатают 5, а утроенная версия печатает 1, а затем 5, чтобы получить 15 = 3 × 5. Вот умноженные версии, для вашего прочтения:
источник
Python 2 ,
46 4539 байтВдохновлен ответом Халварда . Я рад, что мой вызов вдохновил новый, который я считаю еще более интересным. Сохранено 6 байтов благодаря Кевину Круйссену .
Попробуйте онлайн!
Попробуй вдвое!
Попробуйте это втрое!
Как это работает (устарело)
Когда он удваивается, длина становится 90 , но новый код игнорируется благодаря
#
, поэтомуk==90
оценивается какTrue
. Логические значения являются подклассами целых чисел в Python, поэтомуk>>True
эквивалентныk>>1
, что по существу равно k / 2 = 45 . Когда она в три раза, новый код снова игнорируется, поэтому новая длина 135 , которая не сдвигаются , потому что имеетk==90
значениеFalse
, такk>>(k==90) ⟶ k>>(135==90) ⟶ k>>False ⟶ k>>0 ⟶ k
и к печатается как есть.Python 2 , 36 байт
Это было предложение Эйдана Ф. Пирса в 38 байт, и я сыграл в гольф 2 байта. Я не публикую это как свое основное решение, потому что я не придумал это сам.
Попробуйте онлайн! Попробуй вдвое! Попробуй втрое!
источник
print open(__file__,"a").tell()/79*3|1#
возможно?R ,
373128 байтСпасибо Джузеппе за то, что он сыграл в гольф последние 3 байта.
(с завершающим переводом строки).
Попробуйте один раз!
Попробуйте дважды!
Попробуйте трижды!
Это использует
readLines()
трюк из ответа Джузеппе на вызов из 8 шаров , гдеstdin
перенаправляет в исходный файл. Этот код в основном просто подсчитывает, сколько строк существует ниже первой строки, и выводит,1
если есть 1 или 3 строки (т. Е. Код одинарный или удвоенный), или3
если есть 5 строк (т. Е. Код утроен).источник
s
чтобы это работало должным образом, НО вы должны иметь возможность увеличить его до 28 байт , заново обработав некоторые вычисления.%/%2
это, это должно работатьПотерян , 38 байт
Попробуйте онлайн!
Попробуйте онлайн!
Попробуйте онлайн!
объяснение
Потерянный - очень интересный язык для этой задачи. Обычная техника Lost - это построить «ловушку». Ловушка - это раздел программы, предназначенный для перехвата всех ips в одном месте, чтобы их стеки можно было очистить и ими можно было управлять в определенном направлении. Это делает написание программ в Lost намного более управляемым. Однако, поскольку программа дублируется, нам также нужно избегать дублирования ловушек. Это требует, чтобы мы разработали новую ловушку, которая работает должным образом, но при дублировании работает только одна из ловушек. Моя основная идея здесь заключается в следующем
Пока стек не пуст,
?
он удалит элемент и заставит его вернуться к началу, если этот элемент ненулевой. Ключевым моментом здесь является то, что, когда это складывает линию^^
sЭто означает, что независимо от того, как вы входите, вы всегда будете выходить в одном и том же месте.
Отсюда мы можем попытаться реализовать ту же идею из моего ответа Кляйна .
Основой нашей программы является левая сторона, которая выдвигает число
2
s. Каждый раз, когда мы добавляем копию программы,2
в ее основную часть добавляется другая, что означает добавление дополнительных 2 в стек. Как только он уходит вниз, он прыгает\\>
и выполняет кодЭто удаляет первые 2 элемента стека, добавляет один к тому, что осталось, и выходит. Как только у нашей магистрали будет 3 2, мы добавим 1 и получим 3, если у нас будет меньше 3 предметов, мы просто отбросим весь стек и вернем 1.
Теперь единственной проблемой остается то, что
!
в нашей программе может возникнуть бесконечный цикл. Если ip начинает!
идти вверх, он прыгнет и приземлится обратно туда, где он был. Это означает, что мы должны добавить еще одну строку внизу, чтобы предотвратить цикл.В этом есть небольшая проблема, заключающаяся в том, чтобы поместить несколько слэшей между нашими
^
в ловушке. Однако, как ни странно, все работает. Наши ips правильно отскакивают, так что это ничего не меняет.источник
Stax , 5 байт
Запускать и отлаживать онлайн! · Рскладной · утроилось
объяснение
источник
C (gcc) ,
959185 байтПопробуйте онлайн!
источник
Japt ,
865 байт-1 байт благодаря @ETHproductions
Объяснение:
Это оценивает
1-0 = 1
Удвоенная оценка
2-1 = 1
Утроенный оценивает
3-0 = 3
источник
°U-v
(плюс перевод строки), чтобы сэкономить на второмU
.v
идеально подходит для этого испытания :-)Чистый Баш (нет
wc
или другие внешние утилиты), 27источник
EXIT
на0
Perl 5 ,
1815131211 байт-3 байта благодаря nwellnhof
Один раз попробуйте онлайн!
Дважды Попробуйте онлайн!
Трижды Попробуйте онлайн!
источник
n;$_=$a++|1;say
(15 байт)> <> ,
10 98 байтПопробуйте онлайн!
Попробуй вдвое!
Попробуйте это втрое!
Я уверен, что где-то там есть 8-байтовое решение.Непечатаемый конец имеет значение ASCII 1 и выбирается только командой
g
et на третьей итерации. Для первых двух он печатает05
, а затем печатает15
.источник
C (gcc) , 107 байт
Моя первая подача в C (GCC). Слишком долго ...
TIO ссылки: одинарные , двойные , тройные .
источник
Лабиринт ,
12119 байтTIO (1x) , TIO (2x) , TIO (3x)
источник
JavaScript,
81 77 7470 байтСохранено 4 байта благодаря Shaggy
Довольно слабое решение JS. Потребляет значения из
[3,1,1]
массива справа (pop()
). Регистрирует тайм-аут для отображения текущего значения в будущем. Если тайм-аут уже зарегистрирован, отмените его. Полагается на грязную природуvar
, которая поднимает переменные объявления.Два раза:
Показать фрагмент кода
Три раза:
Показать фрагмент кода
источник
a
3-й аргументsetTimeout
:setTimeout(alert,9,a)
C (gcc) ,
5352 байтаОбратите внимание на пробел после
#endif
.Попробуйте онлайн!
источник
Древесный уголь , 12 байт
Попробуйте онлайн! Ссылка на подробный код.
Попробуй вдвое!
Попробуйте это втрое!
объяснение
источник
MapAssignRight(Plus, 1, i)
экономит вам байт, который сокращает длину моего ответа на @Mr. Задача XCoder:PI∨›³L⊞Oυω³
PI⊕⊗÷L⊞Oυω³
это еще одна версия моего ответа, но все же 11 байтов ...MapAssign(Incremented, i)
JavaScript,
4340 байт2x:
Показать фрагмент кода
3x:
Показать фрагмент кода
источник
PowerShell ,
54484544 байтаПопробуйте онлайн!
Попробуй вдвое!
Попробуйте это втрое!
Получает свой путь вызова с
$PSCOMMANDPATH
и выполняетg
ЕТc
ontent на файл.If
количество символов в этом файле меньше99
(проверено с помощьюwc -c
coreutils), затем мы выводим1
иexit
(то есть прекращаем выполнение). Это объясняет оригинальный код и удвоенный код. В противном случае мы выводим3
и выходим. Фактический код, который находится в удвоенных или тройных разделах, не имеет смысла, поскольку либо мыexit
до этого доберемся, либо за комментарием#
.Сохраненные 6 байт благодаря г Xcoder
сохраненных
34 байта благодаря Павлуисточник
-lt99
на a,99-gt
чтобы заставить кастинг работать правильно, но это действительно на один байт короче. Спасибо!C # (178 байт)
сумасшедшее решение C #, но я рад, что это вообще возможно в одной строке в C #. :)
Для меня самой сложной частью было наличие действующего C #, который либо инициализировал бы, либо увеличивал ту же самую переменную, поэтому я в конечном итоге злоупотребил ConfigurationManager, потому что мне требовалась глобальная статическая коллекция NameValueCollection, и ConfigurationManager был единственным, о чем я мог думать, что я мог обновить в памяти. EnvironmentVariables был еще одним вариантом, на который я обратил внимание, но у него нет индексатора, поэтому я не уверен, как сделать это в одной строке, которую можно скопировать, чтобы получить требуемый вывод в соответствии со спецификацией.
источник
Рунические чары , 35 байт
Попробуйте онлайн!
Работа над этим позволила мне найти ошибку в моем парсере, связанную с новыми символами модификатора задержки, хотя в конечном итоге он не был затронут, так как в итоге я не нуждался в них.
Функции из-за того, что в последней строке нет завершающего символа новой строки (или, в этом отношении, конечных пробелов), что позволяет дублирующимся IP-адресам появляться в другом месте. Верхний левый завершает создание большого цикла вокруг сетки, в то время как второй IP-адрес выполняет операцию Reflection, чтобы заменить в
\
6-й строке на a. Этот IP тогда будет зацикливаться вечно и ничего не делать.
Третий IP также делает такую же замену в то же время, а потому , что она находится на 13 - й линии, ее копия этого отражателя посылает его вверх , и он выполняет
1f'3w
присутствующие последовательности в верхнем правом углу, заменяющий1
с3
14 - го линии, непосредственно перед тем, как исходный IP-адрес выполнит его, что приведет к выводу утроенной программы3
вместо1
(значения также могут быть2
и6
,3
и9
,4
и12
, или,5
и15
из-за наличияa-f
числовых констант;1
и3
были выбраны произвольно). Затем он остается в бесконечном цикле, выполняя больше команд отражения, которые ничего не делают.Попробуйте в трех экземплярах!
источник
Perl 5,
2825 байт-3 байта благодаря @neil!
Перемещает курсор назад (ничего не делает в начале строки) и печатает значение в
$a
первый и третий раз (т. Е. В третий раз, когда печатается 1, курсор перемещается, а 3 печатается в позиции 1).источник
print"\e[D$a"if(++$a!=2);
возможно?QBasic, 19 байтов
Источник должен включать завершающий перевод строки.
объяснение
Мы хотим , чтобы выход
1
,1
,3
. Заметьте, что эти числа на единицу меньше степеней 2. Итак:источник