Ich verdopple die Quelle, du verdoppelst die Ausgabe!


127

Wenn Sie dies akzeptieren möchten, müssen Sie ein Programm schreiben, das eine positive Ganzzahl (höher als 0) ausgibt. Der schwierige Teil ist, dass, wenn ich Ihren Quellcode dupliziere, die Ausgabe doppelt so groß sein muss wie die ursprüngliche Ganzzahl.

Regeln

  • Sie müssen ein vollständiges Programm erstellen . Das heißt, Ihre Ausgabe muss auf STDOUT gedruckt werden.

  • Die ursprüngliche Quelle muss mindestens 1 Byte lang sein.

  • Beide Ganzzahlen müssen sich in der Basis 10 befinden (die Ausgabe in einer anderen Basis oder mit wissenschaftlicher Notation ist verboten).

  • Ihr Programm darf keine Eingaben annehmen (oder nicht verwendete, leere Eingaben haben).

  • Die Ausgabe der Ganzzahlen mit nachgestellten / führenden Leerzeichen ist zulässig.

  • Sie dürfen keinen Zeilenumbruch zwischen Kopien Ihrer Quelle annehmen.

  • Das ist , also gewinnt der kürzeste (ursprüngliche) Code in jeder Sprache !

  • Es gelten Standardlücken .

Beispiel

Angenommen, Ihr Quellcode ist ABCund die entsprechende Ausgabe ist 4. Wenn ich ABCABCstattdessen schreibe und es laufen lasse, muss die Ausgabe sein 8.

Bestenliste

Dies verwendet das Layout von @ manatwork .


2
@ Mr.Xcoder Dann muss ich einfach einen in meine eigene Quelle aufnehmen.
Steenbergh

3
@ Mr.Xcoder Ich finde, du hättest das Lesen deines eigenen Quellcodes verhindern sollen.
Caird Coinheringaahing

1
Es muss nur funktionieren, wenn es einmal verdoppelt wurde ? Wir brauchen nicht zu unterstützen n viele Verdoppelungen?
Cody Grey

6
@Daniel Angenommen, Ihre Quelle ist `` (leeres Programm) und es wird produziert 5. Wenn Sie es verdoppeln, ist Ihre Quelle `` (leeres Programm) und das produziert 5auch, egal was Sie tun. Abgesehen davon ist ein dupliziertes leeres Programm immer noch das leere Programm und erzeugt immer die gleiche Ausgabe, außer für den Fall, dass das leere Programm etwas anderes bedeutet (z. B. einen Zufallszahlengenerator), das ohnehin nicht gültig sein könnte.
Mr. Xcoder

1
Dies sollte für Esolangs nicht schwierig sein, die bei Programmbeendigung automatisch den obersten Stapel ausgeben.
MD XF

Antworten:


152

Python 2 , 33 Bytes

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

Probieren Sie es online!

Probieren Sie es doppelt aus

Python 3 , 28 Bytes

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

Probieren Sie es online!

Probieren Sie es doppelt aus

Erläuterung

Dies öffnet den Quellcode mit bis open(__file__)und erhält seine Länge mit lendem #verhindert , dass zusätzlichem Code gelesen werden. Wenn die Quelle verdoppelt wird, wird auch die Länge verdoppelt.


28
Wow, ich bin fassungslos ... Das ist so genial!
Mr. Xcoder

2
32 Bytes . Funktioniert im Anhänge-Modus und setzt die aktuelle Position an das Ende der Datei. tell()
Halvard Hummel

@HalvardHummel Schön. Ich habe jedoch nicht die Absicht, diese Antwort zu aktualisieren. Wenn Sie es selbst posten möchten, ist es meiner Meinung nach wesentlich anders.
Sriotchilism O'Zaic

@ WheatWizard Das ist verständlich, ich machte eine separate Antwort
Halvard Hummel

96

Gelee , 1 Byte

Probieren Sie es online!

oder Probieren Sie es doppelt aus!

Ich habe keine Ahnung, wie das funktioniert, aber anscheinend schon.


55
In dem Moment, in dem Sie keine Ahnung haben, was Sie geschrieben haben ...
Mr. Xcoder

2
Verdammt, ich habe nur 8 Minuten zu spät daran gedacht.
HyperNeutrino

17
Alle Links brauchen ein Argument. Wenn das erste Element der Kette ein Nil ist, wird das Ergebnis zum Argument und die Verknüpfung wird monadisch ausgeführt. Wenn es keinen führenden Nullen gibt, wird stattdessen 0 verwendet.
Dennis

65

Google Sheets, 11 5 Bytes

Anonyme Arbeitsblattformel, die keine Eingaben und Ausgaben in die Zelle übernimmt, in der sich die Formel befindet

=4/(2

Als einzelne Formel ergibt dies einen Aufrufstapel, der ungefähr so ​​aussieht

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

Wenn diese Arbeitsblattformel jedoch verdoppelt wird, wird dieser Aufrufstapel bis auf ausgewertet

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

Die Verwendung dieser Methode impliziert natürlich, dass, wenn dies mehr als einmal wiederholt wird, der Aufrufstapel bei der dritten und allen folgenden Iterationen des Problems einen Fehler erreicht =4/(2=4)und somit auswertet =4/0und auslöst#DIV/0!

-6 Bytes durch Umschalten auf Algebra außerhalb der =DIVIDE(4,2Formel


18
Niemals erwartet, dass Google Sheets Code Golf verwendet. Clevere Lösung
Hucancode

11
@hucancode das wirklich interessante daran ist, dass, weil Excel einen Fehler auslöst, wenn Sie die nachfolgenden ausschließen ), diese Antwort die einzige Google Sheets-Antwort ist, die ich gesehen habe und die sich nicht in eine Excel-Antwort umsetzt
Taylor Scott

45

05AB1E , 2 Bytes

Original

XO

Probieren Sie es online!

Verdoppelt

XOXO

Probieren Sie es online!

Erläuterung

X drückt 1 zum Stapel.
O summiert den Stapel.


48
XOXO, schöne Lösung.
Mr. Xcoder

4
Sie haben das mit Absicht getan, obwohl Sie wussten, dass Sie es auch hätten tun können 1O!
Erik der Outgolfer

12
Wo findet ihr diese lächerlichen Sprachen?
DavidB

7
@ DavidB Normalerweise schreiben sie sie.
Federico Poloni

3
@DavidB Ja, Leute erfinden Sprachen für Codegolf, und ja, sie können beeindruckend niedrige Punktzahlen erzielen, aber alberne Dinge wie das Erfinden einer Sprache nach der Aufforderung, sie in 1 Byte zu lösen, sind verboten, und das Programmieren in diesen Sprachen ist normalerweise weit davon entfernt einfach.
Esolanging Fruit

43

C (gcc), 37 Bytes

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

Die Datei enthält keine nachgestellte Newline.

Doppelte Version, zur Hervorhebung der Syntax:

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

TIO-Verbindungen: einfach , doppelt .


3
Können Sie bitte erklären, wie das funktioniert? Warum sollte der Kommentar jemals unkommentiert sein?
Phil294

10
Wenn Sie den Quellcode verdoppeln, /*wird das durch das auskommentiert //, was bedeutet, dass das Folgende nicht kommentiert i=1ist. Dies ist einfacher zu erkennen, wenn Sie die doppelte Version des Codes in einen Syntax-
Textmarker einfügen

1
Whoa, ein vorläufiger Definitionstrick. Nett.
Aschepler

39

Hexagony , 7 Bytes

/)!@.).

Drucke 1 regelmäßig, dann 2 verdoppelt.

Probieren Sie es online! oder Online verdoppelt!

Erweiterte Versionen:

Regulär:

 / )
! @ .
 ) .

Verdoppelt:

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

Das reguläre Programm folgt dem Pfad: Es /)!.@inkrementiert eine Speicherflanke (alle werden auf Null initialisiert) und gibt dann ihren numerischen Wert aus. Es folgt /.)/)!@das doppelte Programm: Stattdessen wird die Kante vor dem Drucken zweimal erhöht.


6
Wow schöne Arbeit. Ich nehme an, Sie haben das von Hand gefunden? Da sich 6 Byte im Brute-Force-Bereich befinden, dachte ich, ich würde es versuchen, und es gibt tatsächlich eine 4-Byte-Lösung: [@!)(und einige 570 5-Byte-Lösungen). Da Sie sich tatsächlich die Mühe gemacht haben, eine Lösung von Hand zu finden, freue ich mich, dass Sie die 4-Byte-Lösung veröffentlichen.
Martin Ender

1
Wenn Sie interessiert sind, finden Sie hier die vollständige Liste mit der gedruckten Nummer: pastebin.com/TtRujjA4
Martin Ender


36

Braingolf , 1 Byte

+

Probieren Sie es online!

Jetzt reden wir!

Ausgänge 20oder 40wenn die Quelle verdoppelt wird.

Erläuterung

+ ist natürlich der "Summe" -, "Add" - oder "Plus" -Operator in Braingolf, hat jedoch dyadische, monadische und niladische Funktionen.

Wenn sich mindestens 2 Gegenstände auf dem Stapel befinden, ist es dyadisch und summiert die obersten 2 Gegenstände des Stapels.

Wenn sich nur 1 Gegenstand auf dem Stapel befindet, ist er monadisch und verdoppelt den Gegenstand.

Wenn sich keine Gegenstände auf dem Stapel befinden, ist er gleich Null und drückt 20!

Warum drückt es 20? Nun, weil ein leeres Braingolf-Programm einfach eine neue Zeile ausgibt und der ASCII-Wert einer neuen Zeile 10 ist, dachte ich, ich würde niladic +push 20 machen , also ist es so, als wäre es tatsächlich monadisch auf der impliziten neuen Zeile (obwohl es nicht bei ist) alle)

Deshalb:

+   No input
+   Niladic sum, Push 20
    Implicit output

Und wenn verdoppelt:

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

28

Haskell , 26 18 Bytes

main=print$0
 +1--

Probieren Sie es online!

Verdoppelt:

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

Probieren Sie es online!

Ich habe diese Version gefunden, als ich auf die dreifache Version der Challenge geantwortet habe .


26-Byte-Version ohne Missbrauch von Kommentaren:

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

Probieren Sie es online! Druckt 1.

Im Musterschutz wird die Kennung nauf 1und nmainauf gesetzt und 2dann print ngedruckt 1.

Doppelprogramm:

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

Probieren Sie es online! Druckt 2.

Im ersten Muster ist guard wieder nauf 1und nmainauf gesetzt 2, jedoch wurde die print-Anweisung print nmainso 2gedruckt. Da Bezeichnerdeklarationen in einem Pattern Guard als wahr ausgewertet werden, kann der zweite Pattern Guard niemals erreicht werden.


23

Mathematica, 5 Bytes

(1+1)

Ausgänge 2 und (1 + 1) (1 + 1) Ausgänge 4

und natürlich (wie viele von euch gefragt haben)

Mathematica, 3 Bytes

(2)

1
Hat (2)zu arbeiten?
Geokavel

9
@geokavel 2und ein Leerzeichen würden funktionieren, +1aber es sollte beachtet werden, dass alle diese Mathematica Notebook-Umgebung annehmen
Martin Ender

1
Wenn Sie es in der Opencloud Mathematica Sandbox laufen, ein einziger Raum wird x, so dass 2 Ausgaben 2und 2 2 wird 2x2 den Druck 4. Sie , dass als alternative Lösung hinzufügen.
Mr. Xcoder

2
(2)funktioniert auch.
Mr. Xcoder

6
2 funktioniert auch.
Alephalpha

17

Brain-Flak , 6 Bytes

({}())

Probieren Sie es online!

Erläuterung

Was dies tut, sollte ziemlich klar sein. {}greift nach einem Wert aus dem Stapel, der anfangs implizit null ist, ()addiert eins dazu und verschiebt (...)den Wert. Beim zweiten Durchgang, da bereits eine 1 auf dem Stapel vorhanden ist, wird nur eine weitere 1 hinzugefügt, um zwei zu erhalten. In der Tat, wenn Sie den Code nmal kopieren , wird es immer ausgegeben n.


17

> <> , 7 6 Bytes

-1 Byte dank Teal Pelican

\ln;
0

Probieren Sie es online!
Probieren Sie es doppelt aus!

Erläuterung

Ich habe a verwendet, 0aber ich hätte auch 1- 9, a- verwenden können , fweil alle einen einzelnen Wert auf den Stapel schieben.

Nicht verdoppelt:

\ 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

Verdoppelt:

\ 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
Willkommen bei PPCG! Dies ist eine großartige erste Antwort mit einer sehr gut durchdachten Erklärung und gutem Code. Du hast meine Zustimmung verdient!
Mr. Xcoder

1
Ich habe diese Antwort gerade gesehen und es ist großartig! Sehr nette Verbesserung der Antworten des Paares> <> (einschließlich meiner!) - Schauen Sie sich hier den TIO-Link an; tio.run/##S8sszvj/PyYnz5rLAEL@/w8A - Alles, was ich getan habe, ist die 0 in das Leerzeichen zu verschieben und es spart 1 Byte. :)
Teal Pelikan

1
@Tealpelican Danke! Ich kann nicht glauben, dass ich eine so einfache Verbesserung verpasst habe. (Tatsächlich kann ich, ich benutze nicht sehr viel> <> und ich bin neu im Golfen!) Um ehrlich zu sein, habe ich mir die anderen Lösungen nicht wirklich im Detail angesehen, ich sah, dass sie relativ groß waren und entschied mich dafür Versuchen Sie, das Problem zu lösen, da es einfacher wäre, an Wettkämpfen teilzunehmen.
Borka223,

1
Gute Antwort! Ich wollte nur darauf hinweisen, dass dies die gleiche Methode wie meine Klein-Antwort verwendet . (Ich beschuldige Sie nicht, mich zu kopieren. Wenn das jemand wäre, der nur auf zwei ähnliche Antworten hinweist.)
Sriotchilism O'Zaic

14

Netzhaut , 3 Bytes


1

Probieren Sie es online!

Druckt 2. Verdoppeln druckt 4.

Der 1kann durch so ziemlich alles andere ersetzt werden.

Erläuterung


1

Ersetzt die leere Eingabe durch 1.


Zählt die Anzahl der leeren Übereinstimmungen, bei 1denen es sich um zwei handelt (eine vor der 1und eine nach der).

Wenn wir das Programm verdoppeln, erhalten wir eine zusätzliche Stufe wie die erste. Diesmal fügt es ein 1vor und nach dem ersten ein und gibt 111. Wenn wir nun die Anzahl der Übereinstimmungen des leeren Regex zählen, erhalten wir vier davon.



12

Neim , 1 Byte

>

Erhöht einfach die Oberseite des Stapels.

Man kann sich den Stapel als eine unendliche Anzahl von Nullen vorstellen, um anzufangen, also erhöht sich dieser Wert um null, um eins zu werden, und verdoppelt sich, erhöht sich erneut, um zwei zu erhalten.

Probieren Sie es online!

Eine alternative Lösung:

Addiert 2 anstelle von 1.



12

Java8, 135 118 110 Bytes

Single , druckt 8

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

Verdoppelt , druckt 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;}/**///

Vorschau-Antwort, 118 Bytes

Single , druckt 1

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

Verdoppelt , druckt 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{}/**///

Wie das geht

Der Java-Compiler erstellt für jede Klasse in der Quelldatei eine einzelne Datei. Daher kann ich einfach überprüfen, ob eine Ressource mit dem Namen B.class vorhanden ist.


Ursprüngliche Antwort, 135 Bytes

Single , druckt 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{}/**///

Verdoppelt , druckt 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{}/**///

Was du mit dem Kommentar gemacht hast, ist wirklich cool. Aber brauchen Sie wirklich die neue Leitung?
Vikarjramun

Oh nvm, habe den einzeiligen Kommentar in der zweiten Zeile nicht bemerkt
vikarjramun

11

Python 2 , 32 Bytes

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

Probieren Sie es online!

Doppelter Quellcode

Erläuterung

Dadurch wird die Quellcodedatei im Anhänge-Modus geöffnet

open(__file__,"a")

Wir finden dann die aktuelle Position in der Datei, diese befindet sich am Ende der Datei, da sie im Anhänge-Modus geöffnet wird

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

Wir drucken diese Länge

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

Und fügen Sie einen Kommentar hinzu, damit das Verdoppeln des Quellcodes keinen weiteren Code ausführt

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

9

Excel VBA, 12 Bytes

Anonyme VBE-Direktfensterfunktion, die Eingaben von und Ausgaben in den Bereich übernimmt [A1]. Der Standardwert des Bereichs [A1]ist ""(leere Zeichenfolge). Nach einer Ausführung wird dieser Wert auf gesetzt 1und 1bei allen nachfolgenden Ausführungen um inkrementiert .

[A1]=[A1+1]:

Input-Output

Single Version

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

Doppelte Version

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


8

Schale , 3 Bytes

|1"

Probieren Sie es online!

Eine originelle Idee für das, was ich in anderen Antworten gesehen habe.

Erläuterung

|in Husk ist ein "oder" -Operator, der sein zweites Argument zurückgibt, wenn es wahr ist, andernfalls das erste Argument. Bei Anwendung auf Argumente unterschiedlichen Typs werden zunächst alle in Zahlen umgewandelt. Die Umwandlung für Zeichenfolgen (und Listen im Allgemeinen) erfolgt durch Berechnung ihrer Länge.

Im ursprünglichen Programm wenden wir |1 und eine leere Zeichenfolge an, die in 0 konvertiert wird: Das Ergebnis ist 1.

Im doppelten Programm wird |1 und der String "| 1" verwendet, der in 2 konvertiert wird. Das Ergebnis ist 2.



7

CJam, 3 Bytes

5],

Probieren Sie es online

Verkapseln Sie 5 in einem Array. Länge des Arrays zurückgeben. Wenn Sie Code duplizieren, befindet sich die zuvor zurückgegebene Länge 1 bereits auf dem Stapel, sodass Sie ein Array von [1,5] erhalten, das die Länge 2 zurückgibt.



7

Wumpus , 4 Bytes

" O@

Probieren Sie es online!

" O@" O@

Probieren Sie es online!

Der normale 32und der doppelte Code werden gedruckt 64.

Erläuterung

"Funktioniert wie in vielen anderen Fungeoids: Schaltet den Zeichenkettenmodus um, in dem jeder einzelne Zeichencode auf den Stapel geschrieben wird, anstatt den Befehl auszuführen. Im Gegensatz zu den meisten anderen Fungeoids wird das Spielfeld von Wumpus jedoch nicht umbrochen, sodass die IP-Adresse stattdessen vom Ende reflektiert wird und durch den Code hin und her springt.

Für das einzelne Programm wird also tatsächlich der folgende Code ausgeführt:

" O@O " O@

Die Saite drückt 32, 79, 64, 79, 32. Dann macht der Space nichts, Odruckt 32und @beendet das Programm.

Für das verdoppelte Programm wird die Zeichenfolge stattdessen beendet, bevor die IP zurückspringt, sodass der Code nur einmal durchlaufen wird:

" O@" O@

Diesmal drückt der String 32, 79, 64, Odruckt das 64und @beendet das Programm.

Dies scheint die einzige 4-Byte-Lösung zu sein.


6

,,,, 2 bytes

1∑

Erläuterung

1∑

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

Vermisse ich etwas oder wäre das nicht 3 für einen doppelten Quellcode?
Taylor Scott

@ TaylorScott Es tut mir leid, ich hätte beachten sollen, dass alle Elemente auf dem Stapel angezeigt werden .
totalhuman

1
Das macht viel mehr Sinn - danke für die Klarstellung
Taylor Scott

Sigma ist zwei Bytes, nein?
Nishantjr

1
@nishantjr ,,, verwendet eine eigene Codepage, die im Header verlinkt ist.
Totalhuman

6

Batch, 13 Bytes

@echo %~z0
:

Erläuterung: %~z0Wird auf die Länge der Quelldatei erweitert, sodass durch das Verdoppeln der Datei einfach die Länge verdoppelt wird. Die zweite Zeile definiert ein leeres Etikett, das nichts tut. Wenn die Datei verdoppelt wird, wird sie @echo %~z0stattdessen zu einer Bezeichnung , während die dritte Zeile eine weitere leere Bezeichnung ist.


6

QBasic,  44  28 Bytes

Am Ende steht kein Zeilenumbruch. Ausgänge, 4wenn sie einzeln oder 8verdoppelt sind.

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

Erläuterung

Für die Single-Version:

  • 4 ist eine Zeilennummer.
  • READ x,yNimmt die ersten beiden Werte aus der DATAAnweisung und speichert sie in xund y. So xwird 4und ywird 0.
  • ?x+y addiert die beiden Zahlen und druckt sie aus.
  • END Beendet das Programm.

In der doppelten Fassung wird die DATAAnweisung DATA 4,04, die 4beiden zuweist xund ysomit stattdessen x+ygleich macht 8.


6

Befunge-98 , 5 Bytes

90g.@

Probieren Sie es online!

gRuft den Zeichenwert an der Koordinate (9, 0) im Funge-Space ab. .Gibt es als Ganzzahl aus und @hält das Programm an. In der unverdoppelten Version ist (9, 0) außerhalb der Programmgrenzen, und der Funge-Space außerhalb des Programms wird auf den Standardwert eines Leerzeichens initialisiert, sodass wir 32 ausgeben. In der verdoppelten Version ist (9, 0) 0) ist das @Zeichen, also drucken wir 64.


Ich hatte nicht erwartet, dass die beste Befunge-98-Antwort so aussieht ... wirklich kreative Antwort!
MildlyMilquetoast


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.