Я подвоюю джерело, ви подвоюєте вихід!


127

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

Правила

  • Ви повинні створити повну програму . Тобто, ваш вихід повинен бути надрукований в STDOUT.

  • Початкове джерело повинно бути принаймні 1 байт.

  • Обидва цілих числа повинні бути в базі 10 (виведення їх у будь-яку іншу базу або з науковими позначеннями заборонено).

  • Ваша програма не повинна приймати дані (або мати невикористаний, порожній вхід).

  • Виведення цілих чисел з проміжними / провідними пробілами дозволено.

  • Ви не можете припускати новий рядок між копіями джерела.

  • Це , тому найкоротший (оригінальний) код на кожній мові виграє!

  • Застосовуються лазівки за замовчуванням .

Приклад

Скажімо, ваш вихідний код є ABCі відповідний його вихід 4. Якщо я напишу ABCABCзамість цього і запускаю його, вихід повинен бути 8.

Таблиця лідерів

Для цього використовується макет @ manatwork .


2
@ Mr.Xcoder Тоді мені просто доведеться включити його у власне джерело.
steenbergh

3
@ Mr.Xcoder Я думаю, що вам слід було б заважати читати власний вихідний код.
caird coinheringaahing

1
Це потрібно тільки працювати , коли в два рази один раз ? Нам не потрібно підтримувати n багатьох подвійних пар?
Коді Грей

6
@Daniel Скажімо, ваше джерело є `` (порожня програма), і воно виробляє 5. Якщо ви подвоїте його, ваше джерело - це `` (порожня програма), і воно також видає 5, незалежно від того, що ви робите. Якщо говорити, порожня програма, що дублюється, все ще залишається порожньою програмою, і завжди виробляє той самий вихід, за винятком випадків, коли порожня програма означає щось інше (наприклад, генератор випадкових чисел), який не міг би бути дійсним.
Містер Xcoder

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 Nice. Однак я не маю наміру оновлювати цю відповідь. Якщо ви хочете опублікувати його самостійно, на мою думку, це істотно відрізняється.
Sriotchilism O'Zaic

@WheatWizard Це зрозуміло, я зробив окрему відповідь
Halvard Hummel

96

Желе , 1 байт

Спробуйте в Інтернеті!

або Спробуйте подвійно!

Я поняття не маю, як це працює, але, мабуть, так і є.


55
Той момент, коли ти поняття не маєш, що ти написав ...
Містер Xcoder

2
Чорт забирай, я просто думав про це на 8 хвилин занадто пізно.
HyperNeutrino

17
Усі посилання потребують аргументу. Якщо першим елементом ланцюга є нилад, його результатом стає аргумент, а ланка виконується монадично. Якщо немає ведучого nilad, замість нього використовується 0 .
Денніс

65

Google Таблиці, 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 Таблиці будуть використовувати в гольф-коді. Розумне рішення
hucancode

11
@hucancode справді цікавий біт про це в тому, що оскільки Excel видає помилку, якщо виключаєте трейлінг ), ця відповідь є єдиною відповіддю Google Sheets, яку я побачив, що не перекладається на відповідь Excel
Тейлор Скотт

45

05AB1E , 2 байти

Оригінал

XO

Спробуйте в Інтернеті!

Удвічі

XOXO

Спробуйте в Інтернеті!

Пояснення

X натискає 1 на стек.
О підсумовує стек.


48
XOXO, приємне рішення.
Містер Xcoder

4
Ви робили це цілеспрямовано, тоді як ви знали, що можете також використати 1O!
Ерік Аутгольфер

12
Де ви, хлопці, знайдете ці смішні мови?
DavidB

7
@DavidB Зазвичай вони їх пишуть.
Федеріко Полоні

3
@DavidB Так, люди вигадують мови для кодогольфа, і так, вони можуть отримати вражаючий низький бал, але робити дурні речі, такі як вигадування мови після завдання вирішити її в 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 вдвічі.

Спробуйте в Інтернеті! Або спробуйте подвоїти онлайн!

Розширені версії:

Регулярні:

 / )
! @ .
 ) .

Удвічі:

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

Звичайна програма слідує шляху: /)!.@який збільшує край пам'яті (всі ініціалізовані до нуля), після чого друкує числове значення. Дана подвійна програма: /.)/)!@яка збільшує край двічі перед друком, замість цього.


6
Нічого гарна робота. Я припускаю, що ви знайшли це вручну? Оскільки 6 байт знаходиться в діапазоні грубої сили, я подумав, що я б його перейшов, і насправді є 4-байтне рішення: [@!)(і деякі 570 5-байтних рішень). Оскільки ви насправді зіткнулися з проблемою пошуку рішення вручну, я абсолютно радий за те, що ви опублікували 4-байтове рішення.
Мартін Ендер

1
Якщо вас цікавить, ось повний список, включаючи номер, який надруковано: pastebin.com/TtRujjA4
Martin Ender


36

Braingolf , 1 байт

+

Спробуйте в Інтернеті!

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

Виходи 20, або 40коли джерело подвоєне.

Пояснення

+ Звичайно, це оператор "сума", "додати" або "плюс" у Брейлінгольфа, однак він виконує діадичну, монадичну та ниладичну функції.

Якщо в стеку є щонайменше 2 елементи, він є діадичним і підсумовує два найкращі елементи стека.

Якщо на стеку є лише 1 предмет, він буде монадичним і подвоїть предмет.

Коли на стеку немає елементів, це niladic, а натискає 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друкується. Оскільки декларації ідентифікаторів у захисному шаблоні оцінюються як істинні, другого захисту шаблону ніколи не можна досягти.


23

Математика, 5 байт

(1+1)

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

і звичайно (як багато хто з вас запитав)

Математика, 3 байти

(2)

1
Чи (2)працює?
geokavel

9
@geokavel 2і простір спрацював би, як би, +1але слід зазначити, що всі вони припускають середовище ноутбука Mathematica
Мартін Ендер

1
Якщо запустити його у відкритій скриньці Mathematica Sandbox, єдиний простір стає xтаким, що 2 виводить 2і 2 2 стає тим, 2x2 що друкує 4. Ви можете додати це як альтернативне рішення.
Містер Xcoder

2
(2)працює також.
Містер Xcoder

6
2 працює також.
алефальфа

17

Мозок-Флак , 6 байт

({}())

Спробуйте в Інтернеті!

Пояснення

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


17

> <> , 7 6 байт

-1 байт завдяки пелікану Тіл

\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
Ви не можете використати це та це для відмови?
повністюлюдський

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

О, nvm, не помітив коментаря в одному рядку щодо другого рядка
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

Лушпиння , 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.