Я удваиваю источник, ты удваиваешь вывод!


127

Ваша задача, если вы хотите принять это, - написать программу, которая выводит положительное целое число (больше 0). Сложность в том, что если я продублирую ваш исходный код, результат должен быть в два раза больше исходного целого числа.

правила

  • Вы должны построить полную программу . То есть ваш вывод должен быть распечатан на STDOUT.

  • Исходный источник должен быть длиной не менее 1 байта.

  • Оба целых числа должны быть в базе 10 (вывод их в любую другую базу или с научными обозначениями запрещен).

  • Ваша программа не должна принимать данные (или иметь неиспользуемые пустые данные).

  • Вывод целых чисел с концевыми / ведущими пробелами разрешен.

  • Вы не можете использовать новую строку между копиями вашего источника.

  • Это , поэтому выигрывает самый короткий (оригинальный) код на каждом языке !

  • Применяются стандартные лазейки .

пример

Допустим, ваш исходный код ABCи соответствующий вывод 4. Если я пишу ABCABCвместо этого и запускаю, вывод должен быть 8.

Leaderboard

Это использует макет @ manatwork .


2
@ Mr.Xcoder Тогда мне просто нужно добавить один в мой собственный источник.
Стинберг

3
@ Mr.Xcoder Я думаю, что вы должны были запретить чтение собственного исходного кода.
Caird Coneheringaahing

1
Работать нужно только когда удвоится один раз ? Нам не нужно , чтобы поддержать н много удвоений?
Коди Грей,

6
@Daniel Скажем, ваш источник `` (пустая программа) и он производит 5. Если вы удвоите его, ваш источник будет `` (пустая программа), и он также производит 5, независимо от того, что вы делаете. При этом дублированная пустая программа по-прежнему является пустой программой и всегда выдает один и тот же вывод, за исключением случая, когда пустая программа означает что-то другое (например, генератор случайных чисел), что в любом случае не может быть допустимым.
Мистер Кскодер

1
Это не должно быть сложно для esolangs, которые автоматически сбрасывают вершину стека после завершения программы.
MD XF

Ответы:


152

Python 2 , 33 байта

print len(open(__file__).read())#

Попробуйте онлайн!

Попробуй вдвое

Python 3 , 28 байт

print(len(*open(__file__)))#

Попробуйте онлайн!

Попробуй вдвое

объяснение

Это открывает исходный код с помощью open(__file__)и получает его длину с lenпомощью #предотвращает чтение любого дополнительного кода. Когда источник удваивается, длина тоже.


28
Вау, я ошеломлен ... Это так здорово!
мистер Xcoder

2
32 байта . Работает с помощью режима добавления, устанавливая текущую позицию в конец файла. tell()возвращает текущую позицию в файле
Halvard Hummel

@HalvardHummel Хорошо. Однако я не собираюсь обновлять этот ответ. Если вы хотите опубликовать это самостоятельно, то, на мой взгляд, это существенно отличается.
Sriotchilism О'Зайк

@WheatWizard Это понятно, я сделал отдельный ответ
Халвард Хаммел

96

Желе , 1 байт

Попробуйте онлайн!

или попробуйте это дважды!

Я понятия не имею, как это работает, но, видимо, это так.


55
В тот момент, когда вы понятия не имеете, что вы написали ...
Мистер Xcoder

2
Черт возьми, я просто подумала об этом на 8 минут позже.
HyperNeutrino

17
Все ссылки нуждаются в аргументе. Если первый элемент цепочки является nilad, его результат становится аргументом, а ссылка выполняется монадически. Если нет начального nilad, вместо него используется 0 .
Деннис

65

Google Sheets, 11 5 байт

Формула анонимного рабочего листа, которая не требует ввода и вывода в ячейку, которая содержит формулу

=4/(2

Как одна формула, это оценивает стек вызовов, который выглядит примерно так

=4/(2
=4/(2)
=4/2
=2
2

Однако, когда эта формула рабочего листа удваивается, этот стек вызовов оценивается до

=4/(2=4/(2
=4/(2=4/(2)
=4/(2=4/(2))
=4/(2=2)
=4/(True)
=4/True
=4/1
=4
4

Конечно, следствием использования этого метода является то, что, как только он будет повторяться более одного раза, на третьей и всех последующих итерациях проблемы стек вызовов достигнет =4/(2=4)и, таким образом, оценит =4/0и выдает #DIV/0!ошибку.

-6 байт, переключаясь на алгебру от =DIVIDE(4,2формулы


18
Никогда не ожидал, что Google Sheets будет использоваться в коде гольф. Умное решение
hucancode

11
@hucancode, что действительно интересно, это то, что, поскольку Excel выдает ошибку, если исключить трейлинг ), этот ответ является единственным ответом из Листов Google, который я видел, который не переводится в ответ Excel
Тейлор Скотт,

45

05AB1E , 2 байта

оригинал

XO

Попробуйте онлайн!

двойной

XOXO

Попробуйте онлайн!

объяснение

Х толкает 1 в стек.
O суммирует стек.


48
XOXO, хорошее решение.
г-н Xcoder

4
Вы сделали это нарочно, хотя знали, что могли бы также использовать 1O!
Эрик Outgolfer

12
Где вы, ребята, находите эти нелепые языки?
DavidB

7
@DavidB Обычно они пишут их.
Федерико Полони

3
@DavidB Да, люди изобретают языки для Codegolf, и да, они могут получить впечатляюще низкие оценки, но такие глупые вещи, как изобретение языка после задачи, решающей его в 1 байт, запрещены, и программирование на этих языках обычно далеко от легко.
Esolanging Fruit

43

C (gcc), 37 байт

i;main(){putchar(i+49);}/*
i=1;//*///

Файл не содержит завершающий перевод строки.

Двойная версия, для подсветки синтаксиса:

i;main(){putchar(i+49);}/*
i=1;//*///i;main(){putchar(i+49);}/*
i=1;//*///

TIO ссылки: одинарные , двойные .


3
Не могли бы вы объяснить, как это работает? почему комментарий когда-либо будет без комментариев?
phil294

10
Когда вы удваиваете исходный код, /*он закомментируется символом //, что означает следующее без i=1комментариев. Это легче увидеть, если вы поместите удвоенную версию кода в подсветку синтаксиса
musicman523

1
Вау, предварительный трюк определения. Приятно.
aschepler

39

Гексагония , 7 байт

/)!@.).

Печатает 1 регулярно, затем 2 в два раза.

Попробуйте онлайн! или попробуйте удвоить онлайн!

Расширенные версии:

Regular:

 / )
! @ .
 ) .

Вдвое:

  / ) !
 @ . ) .
/ ) ! @ .
 ) . . .
  . . .

Обычная программа следует по пути: /)!.@который увеличивает край памяти (все инициализируются нулями), а затем печатает его числовое значение. Далее следует дублированная программа, /.)/)!@которая вместо этого увеличивает края дважды перед печатью.


6
Вау, хорошая работа. Я полагаю, вы нашли это вручную? Поскольку 6 байт находятся в диапазоне грубой силы, я решил попробовать, и на самом деле есть 4-байтовое решение [@!)(и около 570 5-байтовых решений). Поскольку вы на самом деле столкнулись с проблемой поиска решения вручную, я очень рад, что вы опубликовали 4-байтовое решение.
Мартин Эндер

1
Если вам интересно, вот полный список, включая напечатанное число: pastebin.com/TtRujjA4
Martin Ender


36

Braingolf , 1 байт

+

Попробуйте онлайн!

Теперь мы говорим!

Выходы 20, или 40когда источник удваивается.

объяснение

+ в Braingolf, конечно, операторы «sum», «add» или «plus», однако он имеет двоичные, монадические и ниладические функции.

Когда в стеке есть как минимум 2 предмета, это двоично и суммирует 2 верхних предмета в стеке.

Когда в стеке только 1 предмет, он монадический и удваивает предмет.

Когда в стеке нет предметов, это ниладично, а толкает 20!

Почему это толкает 20? Ну, потому что пустая программа Braingolf просто печатает новую строку, а значение ASCII новой строки равно 10, поэтому я решил, что я сделаю niladic +push 20, так что это похоже на то, что он на самом деле является монадным на неявной новой строке (даже если это не все)

Следовательно:

+   No input
+   Niladic sum, Push 20
    Implicit output

И когда удвоилось:

++  No input
+   Niladic sum, Push 20
 +  Monadic sum, Double top of stack
    Implicit output

28

Haskell , 26 18 байтов

main=print$0
 +1--

Попробуйте онлайн!

Вдвое:

main=print$0
 +1--main=print$0
 +1--

Попробуйте онлайн!

Я нашел эту версию, отвечая на тройную версию испытания .


26-байтовая версия без комментариев:

main|n<-1,nmain<-2=print n

Попробуйте онлайн! Печать 1.

В шаблоне охрана идентификатор nустановлен в 1и nmainк 2, затем print nгравюры 1.

Двойная программа:

main|n<-1,nmain<-2=print nmain|n<-1,nmain<-2=print n

Попробуйте онлайн! Печать 2.

В первом шаблон охранник снова nустановлен в 1и nmainк 2, однако оператор печати стали print nmain, поэтому 2печатается. Поскольку объявления идентификаторов в функции защиты шаблона оцениваются как true, вторая защита шаблона не может быть достигнута.


23

Mathematica, 5 байтов

(1+1)

выходы 2 и (1 + 1) (1 + 1) выходы 4

и конечно (как многие из вас спрашивали)

Mathematica, 3 байта

(2)

1
Работает ли (2)?
геокавель

9
@geokavel 2и пробел будут работать, как +1и должно быть, но следует отметить, что все они предполагают среду ноутбука Mathematica
Мартин Эндер

1
Если вы запустите его в OpenCloud Mathematica песочница, единое пространство становится x, таким образом, что 2 выходы 2и 2 2 становится , 2x2 что отпечатки 4. Вы можете добавить , что в качестве альтернативного решения.
г-н Xcoder

2
(2)работает так же.
г-н Xcoder

6
2 работает так же.
алефальфа

17

Brain-Flak , 6 байтов

({}())

Попробуйте онлайн!

объяснение

Что это делает, должно быть довольно ясно. {}захватывает значение из стека, которое для начала неявно равно нулю, ()добавляет к нему единицу и (...)выталкивает значение. На втором запуске, так как в стеке уже есть 1, это просто добавляет еще 1 к нему, чтобы получить два. На самом деле, если вы скопируете код nраз, он всегда будет выводиться n.


17

> <> , 7 6 байт

-1 байт благодаря Teal pelican

\ln;
0

Попробуйте онлайн!
Попробуй вдвое!

объяснение

Я использовал, 0но я мог бы также использовать 1- 9, a- fпотому что все они помещают одно значение в стек.

Не в два раза:

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (1) onto stack; STACK: [0, 1]
n pops off the top value (1) and prints it; STACK: [0]
; end of execution

Вдвое:

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
0 pushes zero onto stack; STACK: [0, 0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (2) onto stack; STACK: [0, 0, 2]
n pops off the top value (2) and prints it; STACK: [0, 0]
; end of execution

5
Добро пожаловать в PPCG! Это отличный первый ответ, с очень продуманным объяснением и хорошим кодом. Вы заработали мой голос!
г-н Xcoder

1
Я только что видел этот ответ, и это здорово! Очень хорошее улучшение для пары> <> ответов (включая мои!) - посмотрите ссылку TIO здесь; tio.run/##S8sszvj/PyYnz5rLAEL@/w8A - Все, что я сделал, это переместил 0 в пробел, и это спасло 1 байт. :)
Чирок пеликан

1
@Tealpelican Спасибо! Я не могу поверить, что пропустил такое простое улучшение. (На самом деле я могу, я не очень много использую> <>, и я новичок в гольфе!) Если честно, я не особо подробно рассматривал другие решения, я увидел, что они были относительно большими, и решил попробуйте сыграть в гольф, потому что было бы легче соревноваться.
Borka223

1
Хороший ответ! Просто хотел отметить, что здесь используется тот же метод, что и в моем ответе Кляйна . (Не обвиняю тебя копируя меня Если кто - то , что просто указав две похожие ответы.)
Sriotchilism O'Zaic

14

Сетчатка , 3 байта


1

Попробуйте онлайн!

Печать 2. Удваивая это печатает 4.

1Можно заменить почти все остальное.

объяснение


1

Заменяет пустой ввод на 1.


Подсчитывает количество пустых совпадений, в 1которых два (один до 1и один после него).

Если мы удвоим программу, мы получим дополнительный этап, такой как первый. На этот раз он вставляет 1до и после начального, давая 111. Когда мы теперь посчитаем количество совпадений пустого регулярного выражения, мы получим четыре из них.


14

Python REPL, 2 байта

Также работает в Pip, Dyalog APL, JavaScript, J и R

+1

Я делаю TIO прямо сейчас, я не мог заставить Python Repl работать на TIO


1
+1это именно то, что я буду делать: P, черт возьми, вы меня ниндзя примерно на минуту> <
HyperNeutrino

1
Это также работает в Dyalog APL.
Критиси Литос


1
Не могли бы вы использовать это и это для REPL?
полностью человек

1
У тебя есть мой +1.
Федерико Полони

12

Нейм , 1 байт

>

Просто увеличивает вершину стека.

Стек можно представить как бесконечное количество нулей для начала, так что это увеличивает ноль, чтобы получить единицу, и удваивает, увеличивает его снова, чтобы получить два.

Попробуйте онлайн!

Альтернативное решение:

Добавляет 2 вместо 1.


12

JavaScript, 38 байт

setTimeout('alert(i)',i=1)/*
i++//*///


setTimeout('alert(i)',i=1)/*
i++//*///setTimeout('alert(i)',i=1)/*
i++//*///


1
Хороший! Не могли бы вы просто сделать i++?
Арно

@Arnauld: действительно, спасибо за предложение!
Бенуа

12

Java8, 135 118 110 байт

Одиночный , отпечатки 8

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

Удвоено , отпечатки 16

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

Предварительный ответ, 118 байт

Холост , принты 1

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

Удвоено , отпечатки 2

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

Как это работает

Java-компилятор создает один файл для каждого класса в исходном файле. Поэтому я могу просто проверить, существует ли ресурс с именем B.class.


Оригинальный ответ, 135 байт

Холост , принты 1

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///

Удвоено , отпечатки 2

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///

То, что вы сделали с комментарием, действительно круто. Но тебе действительно нужна новая линия?
vikarjramun

О, нвм, не заметил однострочный комментарий во второй строке
vikarjramun

11

Python 2 , 32 байта

print open(__file__,"a").tell()#

Попробуйте онлайн!

Двойной исходный код

объяснение

Это открывает файл исходного кода в режиме добавления

open(__file__,"a")

Затем мы находим текущую позицию в файле, это будет в конце файла из-за открытия в режиме добавления

open(__file__,"a").tell()

Мы печатаем эту длину

print open(__file__,"a").tell()

И добавьте комментарий, чтобы дублирование исходного кода не выполняло больше кода

print open(__file__,"a").tell()#

9

Excel VBA, 12 байт

Функция анонимного непосредственного окна VBE, которая принимает входные данные и выводит их в диапазон [A1]. Значением диапазона по умолчанию [A1]является ""(пустая строка), и после одного выполнения следующее устанавливает это значение 1и увеличивается 1со всеми последующими выполнениями.

[A1]=[A1+1]:

Ввод, вывод

Одиночная версия

[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 1

Двойная версия

[A1]=[A1+1]:[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 2

8

Japt , 1 байт

Ä

Попробуйте онлайн!
Попробуй вдвое!
Повторяется еще дольше!

Скорее просто. Джапт переносится в JS, и Äпереносится в + 1, поэтому ÄÄпереносится в + 1 + 1и так далее.


Я как раз собирался опубликовать то же самое É- к счастью, я сначала просмотрел ответы.
Лохматый

8

Шелуха , 3 байта

|1"

Попробуйте онлайн!

Оригинальная идея, за то, что я видел в других ответах.

объяснение

|в Husk есть оператор «или», который возвращает свой второй аргумент, если он истинный, в противном случае первый аргумент. Применительно к аргументам разных типов он сначала преобразует их все в числа: преобразование строк (и списков в целом) выполняется путем вычисления их длины.

В исходной программе мы применяем |к 1 пустую строку, которая преобразуется в 0: результат равен 1.

В удвоенной программе мы применяем |к 1 и строке «| 1», которая преобразуется в 2: результат равен 2.



7

CJam, 3 байта

5],

Попробуйте онлайн

Инкапсулируйте 5 в массиве. Возвращаем длину массива. Когда вы дублируете код, ранее возвращенная длина 1 уже находится в стеке, поэтому вы получаете массив [1,5], который возвращает длину 2.



7

Wumpus , 4 байта

" O@

Попробуйте онлайн!

" O@" O@

Попробуйте онлайн!

Нормальный код печатает, 32а дублированный печатает 64.

объяснение

"работает так же, как и во многих других Fungeoids: он переключает строковый режим, где каждый отдельный символьный код помещается в стек вместо выполнения команды. Однако, в отличие от большинства других Fungeoids, игровое поле Wumpus не меняется, поэтому IP вместо этого отражается от конца и отскакивает назад и вперед по коду.

Таким образом, для одной программы фактически выполняется следующий код:

" O@O " O@

Струна толкает 32, 79, 64, 79, 32. Тогда пробел ничего не делает, Oпечатает 32и @завершает программу.

Для удвоенной программы строка вместо этого завершается до того, как IP возвращается в исходное состояние, поэтому код просматривается только один раз:

" O@" O@

На этот раз строка нажимает 32, 79, 64, Oпечатает 64и @завершает программу.

Похоже, это единственное 4-байтовое решение.


6

,,, 2 байта

1∑

объяснение

1∑

1   push 1
 ∑  pop everything and push the sum of the stack

Я что-то упустил или это не будет 3 для удвоенного исходного кода?
Тейлор Скотт

@TaylorScott Извините, я должен был заметить, что все элементы помещаются в стек.
полностью человек

1
Это имеет больше смысла - спасибо за разъяснения
Тейлор Скотт

Сигма это два байта, нет?
nishantjr

1
@nishantjr ,,, использует свою собственную кодовую страницу, которая указана в заголовке.
полностью человек

6

Пакет, 13 байт

@echo %~z0
:

Объяснение: %~z0увеличивается до длины исходного файла, поэтому удвоение файла просто удваивает длину. Вторая строка определяет пустую метку, которая ничего не делает. Когда файл удваивается, он становится меткой с именем @echo %~z0, а третья строка - другой пустой меткой.


6

QBasic,  44  28 байт

В конце нет новой строки. Выходы, 4когда одиночные, 8когда удвоены.

4
READ x,y
?x+y
END
DATA 4,0

объяснение

Для одиночной версии:

  • 4 это номер строки.
  • READ x,yберет первые два значения из DATAоператора и сохраняет их в xи y. Таким образом, xполучает 4и yполучает 0.
  • ?x+y добавляет два числа и печатает их.
  • END выход из программы.

В удвоенной версии, DATAоператор становится DATA 4,04, который присваивает 4оба xи y, таким образом, делая x+yравным 8вместо.


6

Befunge-98 , 5 байт

90g.@

Попробуйте онлайн!

gполучает значение символа по координате (9, 0) в Funge-Space; .печатает его как целое число и @останавливает программу. В не удвоенной версии (9, 0) выходит за пределы программы, и Funge-Space вне программы инициализируется значением по умолчанию пробела, поэтому мы печатаем 32. В удвоенной версии (9, 0) это @символ, поэтому мы печатаем 64.


Я не ожидал, что лучший ответ Befunge-98 будет выглядеть ... действительно креативный ответ!
MildlyMilquetoast


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.