Podwajam źródło, podwoisz moc wyjściową!


127

Twoim zadaniem, jeśli chcesz to zaakceptować, jest napisanie programu, który wyświetli dodatnią liczbę całkowitą (większą niż 0). Problem polega na tym, że jeśli zduplikuję kod źródłowy, wynik musi być podwójną liczbą całkowitą.

Zasady

  • Musisz zbudować pełny program . Oznacza to, że wyjście musi zostać wydrukowane do STDOUT.

  • Początkowe źródło musi mieć co najmniej 1 bajt.

  • Obie liczby całkowite muszą znajdować się w bazie 10 (wyprowadzanie ich w jakiejkolwiek innej bazie lub z notacją naukową jest zabronione).

  • Twój program nie może przyjmować danych wejściowych (lub mieć nieużywane, puste dane wejściowe).

  • Wyprowadzanie liczb całkowitych ze spacjami końcowymi / wiodącymi jest dozwolone.

  • Nie możesz zakładać nowego wiersza między kopiami swojego źródła.

  • To jest , więc wygrywa najkrótszy (oryginalny) kod w każdym języku !

  • Obowiązują domyślne luki .

Przykład

Powiedzmy, że twój kod źródłowy jest, ABCa odpowiadający mu wynik to 4. Jeśli ABCABCzamiast tego napiszę i uruchomię, wynik musi być następujący 8.

Tabela liderów

To używa układu @ manatwork .


2
@ Mr.Xcoder W takim razie będę musiał dołączyć jeden do mojego źródła.
steenbergh

3
@ Mr.Xcoder Myślę, że powinieneś był zapobiec czytaniu własnego kodu źródłowego.
caird coinheringaahing

1
To tylko potrzebuje do pracy, gdy podwoiła raz ? Nie musimy wspierać n wiele zdwojeniach?
Cody Gray,

6
@Daniel Powiedzmy, że twoje źródło to `` (pusty program) i produkuje 5. Jeśli podwoisz to, twoje źródło to `` (pusty program) i to również produkuje 5, bez względu na to, co robisz. To powiedziawszy, zduplikowany pusty program jest nadal pustym programem i zawsze generuje to samo wyjście, z wyjątkiem przypadku, gdy pusty program oznacza coś innego (na przykład generator liczb losowych), co i tak nie może być poprawne.
Pan Xcoder,

1
Nie powinno to być trudne dla esolangów, które automatycznie zrzucają górę stosu po zakończeniu programu.
MD XF

Odpowiedzi:


152

Python 2 , 33 bajty

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

Wypróbuj online!

Spróbuj dwukrotnie

Python 3 , 28 bajtów

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

Wypróbuj online!

Spróbuj dwukrotnie

Wyjaśnienie

Spowoduje to otwarcie kodu źródłowego open(__file__)i uzyskanie jego długości za lenpomocą #zapobiega odczytaniu dodatkowego kodu. Kiedy źródło jest podwojone, zwiększa się również długość.


28
Wow, jestem oszołomiony ... To takie genialne!
Pan Xcoder,

2
32 bajty . Działa przy użyciu trybu dołączania, ustawiając bieżącą pozycję na końcu pliku. tell()zwraca bieżącą pozycję w pliku
Halvard Hummel

@HalvardHummel Nice. Nie mam jednak zamiaru aktualizować tej odpowiedzi. Jeśli chcesz opublikować go na własną rękę, to moim zdaniem jest zupełnie inaczej.
Sriotchilism O'Zaic

@WheatWizard To zrozumiałe, udzieliłem osobnej odpowiedzi
Halvard Hummel

96

Galaretka , 1 bajt

Wypróbuj online!

lub Wypróbuj dwukrotnie!

Nie mam pojęcia, jak to działa, ale najwyraźniej tak.


55
Ten moment, kiedy nie masz pojęcia, co napisałeś ...
Pan Xcoder

2
Cholera, pomyślałem o tych 8 minutach za późno.
HyperNeutrino

17
Wszystkie linki wymagają argumentu. Jeśli pierwszym elementem łańcucha jest nilad, jego wynikiem staje się argument, a połączenie jest wykonywane monadycznie. Jeśli nie ma wiodącego niladu, zamiast tego używane jest 0 .
Dennis

65

Arkusze Google, 11 5 bajtów

Anonimowa formuła arkusza roboczego, która nie pobiera danych wejściowych i wyjściowych do komórki zawierającej formułę

=4/(2

Jako pojedyncza formuła ocenia to stos wywołań, który wygląda trochę podobnie

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

Jednak gdy ta formuła arkusza roboczego zostanie podwojona, stos wywołań jest oceniany w dół do

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

Oczywiście implikacją użycia tej metody jest to, że gdy powtórzy się to więcej niż raz, przy trzeciej i wszystkich kolejnych iteracjach problemu, stos wywołań osiągnie, =4/(2=4)a tym samym oszacuje =4/0i wyrzuci #DIV/0!błąd

-6 bajtów, przechodząc do algebry od =DIVIDE(4,2formuły


18
Nigdy nie spodziewałem się, że Arkusze Google znajdą zastosowanie w golfie kodowym. Sprytne rozwiązanie
hucancode

11
@ hucancode naprawdę interesujące jest to, że ponieważ Excel zgłasza błąd, jeśli wykluczysz końcową )odpowiedź, ta odpowiedź jest jedyną odpowiedzią w Arkuszach Google, którą widziałem i która nie przekłada się na odpowiedź Excela
Taylor Scott,

45

05AB1E , 2 bajty

Oryginał

XO

Wypróbuj online!

Podwojony

XOXO

Wypróbuj online!

Wyjaśnienie

X przesuwa 1 na stos.
O sumuje stos.


48
XOXO, fajne rozwiązanie.
Pan Xcoder,

4
Zrobiłeś to celowo, podczas gdy wiedziałeś, że możesz również użyć 1O!
Erik the Outgolfer

12
Gdzie znajdujecie te śmieszne języki?
DavidB

7
@DavidB Zwykle piszą je.
Federico Poloni,

3
@DavidB Tak, ludzie wymyślają języki dla codegolf i tak, mogą uzyskać imponująco niskie wyniki, ale głupie rzeczy, takie jak wymyślanie języka po wyzwaniu rozwiązania go w 1 bajcie, są niedozwolone, a programowanie w tych językach jest zwykle dalekie od łatwo.
Esolanging Fruit

43

C (gcc), 37 bajtów

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

Plik nie zawiera końcowego nowego wiersza.

Wersja podwójna do podświetlania składni:

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

Linki TIO: pojedyncze , podwójne .


3
Czy możesz wyjaśnić, jak to działa? dlaczego komentarz miałby nigdy nie zostać skomentowany?
phil294

10
Po podwojeniu kodu źródłowego /*komentarz jest oznaczony jako //, co oznacza, że ​​następujące i=1komentarze nie są komentowane . Łatwiej to zobaczyć, jeśli umieścisz podwójną wersję kodu w wyróżniaczu składni
musicman523

1
Whoa, niepewna sztuczka definicji. Miły.
aschepler

39

Sześciokąt , 7 bajtów

/)!@.).

Drukuje 1 regularnie, a następnie 2 dwukrotnie.

Wypróbuj online! lub Wypróbuj podwojony online!

Rozszerzone wersje:

Regularny:

 / )
! @ .
 ) .

Podwojony:

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

Zwykły program podąża ścieżką: /)!.@która zwiększa krawędź pamięci (wszystkie są inicjowane do zera), a następnie wypisuje jej wartość liczbową. Następuje podwojony program: /.)/)!@zamiast tego dwukrotnie zwiększa krawędź przed drukowaniem.


6
Wow, dobra robota. Zakładam, że znalazłeś to ręcznie? Ponieważ 6 bajtów jest w zakresie brutalnej siły, pomyślałem, że spróbuję, a tak naprawdę istnieje rozwiązanie 4-bajtowe: [@!)(i jakieś 570 rozwiązań 5-bajtowych). Ponieważ faktycznie zadałeś sobie trud znalezienia rozwiązania ręcznie, cieszę się, że opublikowałeś 4-bajtowe rozwiązanie.
Martin Ender

1
Jeśli jesteś zainteresowany, oto pełna lista, w tym numer, który jest wydrukowany: pastebin.com/TtRujjA4
Martin Ender


36

Braingolf , 1 bajt

+

Wypróbuj online!

Teraz rozmawiamy!

Wyjścia 20lub 40gdy źródło jest podwojone.

Wyjaśnienie

+ jest oczywiście operatorem „sumy”, „dodania” lub „plus” w Braingolfie, jednak ma on funkcje dyadyczne, monadyczne i niladyczne.

Gdy na stosie znajdują się co najmniej 2 przedmioty, jest to diadem i sumuje 2 górne elementy stosu.

Gdy na stosie znajduje się tylko 1 przedmiot, jest monadyczny i podwaja przedmiot.

Kiedy na stosie nie ma żadnych przedmiotów, jest niladyczny i wypycha 20!

Dlaczego popycha 20? Cóż, ponieważ pusty program Braingolfa po prostu drukuje nową linię, a wartość ASCII nowej linii wynosi 10, więc pomyślałem, że wykonam niladic +push 20, więc to tak, jakby faktycznie było monadyczne na ukrytej nowej linii (nawet jeśli nie ma wszystko)

W związku z tym:

+   No input
+   Niladic sum, Push 20
    Implicit output

A kiedy się podwoi:

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

28

Haskell , 26 18 bajtów

main=print$0
 +1--

Wypróbuj online!

Podwojony:

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

Wypróbuj online!

Znalazłem tę wersję, odpowiadając na potrójną wersję wyzwania .


Wersja 26-bajtowa bez nadużywania komentarzy:

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

Wypróbuj online! Wydruki 1.

W straży wzorów identyfikator njest ustawiany na 1i nmaindo 2, a następnie print ndrukowany 1.

Podwójny program:

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

Wypróbuj online! Wydruki 2.

W pierwszej straży wzór ponownie nustawiony jest 1i nmaindo 2jednak oświadczenie print stało print nmain, więc 2jest drukowana. Ponieważ deklaracje identyfikatora w strażniku wzorców mają wartość true, nigdy nie można osiągnąć drugiego strażnika wzorców.


23

Mathematica, 5 bajtów

(1+1)

wyjścia 2 i (1 + 1) (1 + 1) wyjścia 4

i oczywiście (jak wielu z was pytało)

Mathematica, 3 bajty

(2)

1
Czy (2)działa
geokavel

9
@geokavel 2i spacja działałyby tak samo, +1ale należy zauważyć, że wszystkie z nich zakładają środowisko notebooków Mathematiki
Martin Ender

1
Jeśli uruchomisz go w piaskownicy Mathematica w opencloud, powstanie pojedyncza spacja x, która 2 wyświetli się 2i 2 2 będzie 2x2 drukować 4. Możesz to dodać jako alternatywne rozwiązanie.
Pan Xcoder,

2
(2)działa również.
Pan Xcoder,

6
2 działa również.
alephalpha

17

Brain-Flak , 6 bajtów

({}())

Wypróbuj online!

Wyjaśnienie

To, co to robi, powinno być całkiem jasne. {}pobiera wartość ze stosu, która na początku domyślnie zero, ()dodaje do niej jedną i (...)wypycha wartość. Przy drugim uruchomieniu, ponieważ na stosie jest już 1, dodaje to tylko 1, aby otrzymać dwa. W rzeczywistości, jeśli skopiujesz nczasy kodu , zawsze będzie ono generowane n.


17

> <> , 7 6 bajtów

-1 bajt dzięki pelikanowi Teal

\ln;
0

Wypróbuj online!
Spróbuj dwukrotnie!

Wyjaśnienie

Użyłem a, 0ale mogłem również użyć 1- 9, a- fponieważ wszystkie wypychają jedną wartość na stos.

Nie podwojony:

\ 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

Podwojony:

\ 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
Witamy w PPCG! To świetna pierwsza odpowiedź z bardzo przemyślanym wyjaśnieniem i dobrym kodem. Zasłużyłeś na moje poparcie!
Pan Xcoder,

1
Właśnie widziałem tę odpowiedź i jest świetna! Bardzo fajna poprawa dla kilku> <> odpowiedzi (w tym moich!) - spójrz na link TIO tutaj; tio.run/##S8sszvj/PyYnz5rLAEL@/w8A - Wszystko, co zrobiłem, to przesunięcie 0 na miejsce i zapisanie 1 bajtu. :)
Teal pelikan

1
@Tealpelican Thanks! Nie mogę uwierzyć, że przegapiłem tak prostą poprawę. (Właściwie mogę, nie używam zbyt często> <> i jestem nowy w golfie!) Szczerze mówiąc, tak naprawdę nie przyjrzałem się szczegółowo innym rozwiązaniom, zauważyłem, że były one stosunkowo duże i postanowiłem spróbuj zagrać w golfa, ponieważ łatwiej będzie konkurować.
Borka223,

1
Niezła odpowiedź! Chciałem tylko zaznaczyć, że używa tej samej metody, co moja odpowiedź Kleina . (Nie oskarżam cię o kopiowanie mnie, gdyby ktoś wskazywał tylko dwie podobne odpowiedzi).
Sriotchilism O'Zaic

14

Siatkówka , 3 bajty


1

Wypróbuj online!

Wydruki 2. Podwajanie to drukuje 4.

1Można zastąpić prawie cokolwiek innego.

Wyjaśnienie


1

Zamienia puste wejście na 1.


Liczy liczbę pustych dopasowań, w 1których są dwa (jeden przed 1i jeden po nim).

Jeśli podwoimy program, otrzymamy dodatkowy etap, taki jak pierwszy. Tym razem wstawia 1przed i po pierwszym, dając 111. Kiedy teraz policzymy liczbę dopasowań pustego wyrażenia regularnego, otrzymujemy cztery z nich.



12

Neim , 1 bajt

>

Po prostu zwiększa górę stosu.

Stos można wyobrazić sobie jako nieskończoną liczbę zer na początek, więc to zwiększa zero, aby uzyskać jeden, a podwojone, zwiększa je ponownie, aby uzyskać dwa.

Wypróbuj online!

Alternatywne rozwiązanie:

Dodaje 2 zamiast 1.



12

Java8, 135 118 110 bajtów

Pojedyncze , wydruki 8

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

Dwukrotnie , drukuje 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;}/**///

Podgląd odpowiedzi, 118 bajtów

Pojedyncze , wydruki 1

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

Dwukrotnie , odciski 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{}/**///

Jak to działa

Kompilator Java tworzy jeden plik dla każdej klasy w pliku źródłowym. Dlatego mogę po prostu sprawdzić, czy istnieje zasób o nazwie B.class.


Oryginalna odpowiedź, 135 bajtów

Pojedyncze , wydruki 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{}/**///

Dwukrotnie , odciski 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{}/**///

To, co zrobiłeś z komentarzem, jest naprawdę fajne. Ale czy naprawdę potrzebujesz nowej linii?
vikarjramun

Oh nvm, nie zauważyłem komentarza do drugiej linii
vikarjramun,

11

Python 2 , 32 bajty

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

Wypróbuj online!

Podwójny kod źródłowy

Wyjaśnienie

Spowoduje to otwarcie pliku kodu źródłowego w trybie dołączania

open(__file__,"a")

Następnie znajdujemy bieżącą pozycję w pliku, która będzie na końcu pliku z powodu otwarcia w trybie dołączania

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

Drukujemy tę długość

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

I dodaj komentarz, aby podwojenie kodu źródłowego nie spowodowało wykonania więcej kodu

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

9

Excel VBA, 12 bajtów

Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe i wyjściowe do zakresu [A1]. Domyślna wartość zakresu [A1]to ""(pusty ciąg), a po jednym wykonaniu następujące ustawienie ustawia to 1i zwiększa 1o wszystkie kolejne wykonania.

[A1]=[A1+1]:

Wejście wyjście

Jedna wersja

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

Wersja podwójna

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


8

Łuska , 3 bajty

|1"

Wypróbuj online!

Oryginalny pomysł na to, co widziałem w innych odpowiedziach.

Wyjaśnienie

|in Husk jest operatorem „lub”, który zwraca drugi argument, jeśli jest wierny, w przeciwnym razie pierwszy argument. Po zastosowaniu do argumentów różnych typów najpierw przekształca je wszystkie w liczby: transformacja ciągów (i ogólnie list) odbywa się poprzez obliczenie ich długości.

W oryginalnym programie stosujemy |do 1 i pustego ciągu, który jest konwertowany na 0: wynik to 1.

W programie podwójnym stosujemy |do 1 i łańcucha „| 1”, który jest konwertowany na 2: wynik to 2.



7

CJam, 3 bajty

5],

Wypróbuj online

Hermetyzuj 5 w tablicy. Zwraca długość tablicy. Kiedy powielasz kod, poprzednio zwrócona długość 1 jest już na stosie, więc otrzymujesz tablicę [1,5], która zwraca długość 2.



7

Wumpus , 4 bajty

" O@

Wypróbuj online!

" O@" O@

Wypróbuj online!

Drukuje się normalny kod 32i drukowany jest podwójny 64.

Wyjaśnienie

"działa tak jak w wielu innych fungeoidach: przełącza tryb łańcuchowy, w którym każdy kod znaku jest wypychany na stos, zamiast wykonywania polecenia. Jednak, w przeciwieństwie do większości innych fungeoidów, pole gry Wumpusa nie zawija się, więc IP zamiast tego odbija się od końca i odbija w przód iw tył przez kod.

W przypadku pojedynczego programu wykonywany jest następujący kod:

" O@O " O@

Sznurek popycha 32, 79, 64, 79, 32. Następnie przestrzeń nic nie robi, Odrukuje 32i @kończy działanie programu.

W przypadku programu podwójnego łańcuch zostaje zamiast tego zakończony, zanim adres IP zostanie odesłany, więc kod jest przetwarzany tylko raz:

" O@" O@

Tym razem ciąg popycha 32, 79, 64, Odrukuje 64i @kończy działanie programu.

To wydaje się być jedynym 4-bajtowym rozwiązaniem.


6

,,, 2 bajty

1∑

Wyjaśnienie

1∑

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

Czy coś brakuje, czy nie byłoby 3 dla podwójnego kodu źródłowego?
Taylor Scott,

@TaylorScott Przepraszam, powinienem zauważyć, że wyskakują wszystkie elementy na stosie.
całkowicie ludzki,

1
To ma o wiele więcej sensu - dzięki za wyjaśnienie
Taylor Scott

Sigma ma dwa bajty, nie?
nishantjr

1
@nishantjr ,,, używa własnej strony kodowej, do której prowadzi link.
całkowicie ludzki,

6

Partia, 13 bajtów

@echo %~z0
:

Objaśnienie: %~z0rozwija się do długości pliku źródłowego, więc podwojenie pliku po prostu podwaja długość. Drugi wiersz określa pustą etykietę, która nic nie robi. Gdy plik jest podwojony, staje się etykietą o nazwie @echo %~z0zamiast tego, a trzeci wiersz to kolejna pusta etykieta.


6

QBasic,  44  28 bajtów

Na końcu nie ma nowego wiersza. Wyjścia są 4pojedyncze, 8gdy podwójne.

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

Wyjaśnienie

W przypadku pojedynczej wersji:

  • 4 jest numerem linii.
  • READ x,ypobiera dwie pierwsze wartości z DATAinstrukcji i przechowuje je w xoraz y. W ten sposób xdostaje się 4i ydostaje 0.
  • ?x+y dodaje dwie liczby i drukuje je.
  • END wychodzi z programu.

W wersji podwójnej DATAstaje się instrukcją DATA 4,04, która przypisuje 4do obu xi ytym samym czyni je x+yrównymi 8.


6

Befunge-98 , 5 bajtów

90g.@

Wypróbuj online!

gpobiera wartość znaku o współrzędnych (9, 0) w Funge-Space; .wypisuje go jako liczbę całkowitą i @zatrzymuje program. W wersji podwójnej (9, 0) jest poza zakresem programu, a Funge-Space poza programem jest inicjalizowany do domyślnej wartości spacji, więc wypisujemy 32. W wersji podwójnej (9, 0) jest @znakiem, więc wypisujemy 64.


Nie tego oczekiwałem najlepszej odpowiedzi Befunge-98 ... naprawdę kreatywnej odpowiedzi!
MildlyMilquetoast


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.