Wenn Sie dies akzeptieren möchten, müssen Sie ein Programm schreiben, das eine positive Ganzzahl (höher als 0) ausgibt. Wenn der Quellcode dupliziert wird, muss die Ausgabe gleich bleiben. Der schwierige Teil ist, dass wenn der Quellcode dreimal (dreifach?) Eingegeben wird, die Ausgabe mit 3 multipliziert wird.
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.
Führende Nullen sind nur zulässig, wenn die Anzahl der Ziffern übereinstimmt, z. B .: 001 - 001 - 003 oder 004 - 004 - 012
Sie dürfen keinen Zeilenumbruch zwischen Kopien Ihrer Quelle annehmen.
Das ist Code-Golf , also gewinnt der kürzeste (ursprüngliche) Code in jeder Sprache !
Es gelten Standardlücken .
Beispiel
Angenommen, Ihr Quellcode ist Abc
und die entsprechende Ausgabe ist 4
. Wenn ich AbcAbc
stattdessen schreibe und es laufen lasse, muss die Ausgabe noch sein 4
. Wenn ich es jedoch schreibe AbcAbcAbc
und ausführe, muss die Ausgabe sein 12
.
Schamlos gestohlen Abgeleitet von Mr. Xcoders Herausforderung
quelle
int i=1;print i;
) ist, muss der duplizierte Code von (int i=1;print i;int i=1;print i;
) dieselbe Nummer wie der ursprüngliche Code ausgeben, und wenn der Code mit (int i=1;print i;int i=1;print i;int i=1;print i;
) verdreifacht ist, muss er angezeigt werden die Zahl multipliziert mit 3Antworten:
Wumpus , 6 Bytes
Probieren Sie es online!
Probieren Sie es doppelt aus!
Versuchen Sie es verdreifacht!
Drucke
1
und3
.Erläuterung
Ich fand eine Tonne von 6-Byte-Lösungen durch Brute-Force-Suche, aber keine für 5 Bytes. Das bedeutet nicht unbedingt, dass es keine mit 5 Bytes gibt, aber sie würden wahrscheinlich seltsame Zeichen oder ähnliches verwenden.
Ich habe mich für diese Lösung entschieden, weil sie keine führenden Nullen ausgibt (die meisten von ihnen) und einen interessanten Kontrollfluss hat. Beginnen wir mit dem einzelnen Programm:
Der ausgeführte Code lautet also:
Leicht genug. Nun das doppelte Programm. Da die erste Zeile an die zweite Zeile angehängt wird, erstreckt sich das Raster bis zur Breite 5 (und Höhe 3), wodurch sich der Steuerfluss erheblich ändert:
Die IP geht genau einmal um diese Schleife herum, der ausgeführte Code lautet also:
Schließlich ist das verdreifachte Programm dem verdoppelten Programm ziemlich ähnlich, aber wir erhalten ein paar wichtigere Befehle in dieser dritten Zeile:
Der ausgeführte Code lautet also:
quelle
Schale , 5 Bytes
Probieren Sie es online!
Zweimal wiederholt!
Dreimal wiederholt!
Erläuterung
Es ist ziemlich schwierig, in Husk ein wiederholbares Programm zu erstellen. Da das Typsystem eine Funktion verbietet, die auf sich selbst angewendet werden kann, muss ich irgendwie zulassen, dass der erste Teil zu einer Funktion ausgewertet wird und der Rest zu einem Wert ausgewertet wird, und die Typen der vorhandenen eingebauten Funktionen sollen dies verhindern Art von Mehrdeutigkeit. Die Token des Programms sind
K
, die eine konstante Funktion aufbaut.K a b
ist äquivalent zua
.Σ
, der eine ganze Zahl n annimmt und die n- te Dreieckszahl zurückgibt .+
, das zwei Zahlen addiert.1
, das ist das wörtliche 1.Das ursprüngliche Programm wird folgendermaßen interpretiert:
Das
(K+)
ist eine unsinnige Funktion, die vom ersten gefressen wirdK
.Das zweimal wiederholte Programm wird folgendermaßen interpretiert:
Die Funktion in Klammern wird wieder von der ersten übernommen
K
.Das dreimal wiederholte Programm wird folgendermaßen interpretiert:
quelle
K
in einem Programm häufig vorkommen, wird die Typinferenz sehr langsam, da jeder von ihnen möglicherweise eine beliebige Anzahl von Tokens "frisst" und der Interpreter alle Kombinationen ausprobiert ...Gelee ,
75 BytesProbieren Sie es online!
Probieren Sie es doppelt aus!
Versuchen Sie es verdreifacht!
Wie es funktioniert
quelle
Haskell , 24 Bytes
Prints
1
: Online ausprobieren!Auch druckt
1
: Probieren Sie es online!Prints
3
: Online ausprobieren!quelle
Cubix , 5 Bytes
Probieren Sie es online aus: einmal , zweimal , dreimal .
Erläuterung
Cubix ist eine stapelbasierte Sprache, deren Anweisungen außerhalb eines Cubes angeordnet sind. Es ist wichtig zu beachten, dass der Stapel anfänglich mit unendlichen Nullen gefüllt ist, was es uns ermöglicht, mit Operatoren "Werte aus dem Nichts herauszuholen", anstatt sie explizit zu verschieben.
Ich muss zugeben, dass dies von einem Brute-Forcer gefunden wurde; Ich hätte es niemals alleine gefunden. Tatsächlich war @MartinEnder derjenige, der mich gebeten hat, es mit Brute-Forcing zu versuchen, da er ohne Glück nach dieser Lösung gesucht hatte. Dies ist die einzige Lösung, die der Brute-Forcer gefunden hat, und ich glaube, es ist die einzige und kürzeste Lösung in Cubix.
Einzelprogramm
Schau es dir an!
Das ursprüngliche Programm passt auf einen Einheitswürfel. Hier ist das aufgeklappte Netz:
Der IP (Anweisungszeiger) beginnt ganz links in
<
Richtung Osten. Das zeigt<
sofort nach Westen, und es wickelt sich um dasP
.P
Potenzierung ist, und da gibt es nichts auf dem Stapel, der Interpreter zieht aus zwei 0 s und berechnet 0 0 , das ist 1 nach JavaScript.O
druckt dann diesen Wert aus und@
beendet das Programm.Doppelprogramm
Schau es dir an!
Das 10-Byte-Programm ist zu lang, um auf einen Einheitswürfel zu passen, und wird daher zu einem Würfel der Größe 2 erweitert:
Wie zuvor beginnt die IP oben links auf der linken Seite. Diesmal ist die allererste Anweisung
P
, die wie zuvor eine 1 drückt . Als nächstes wird)
das oberste Element inkrementiert und in eine 2 umgewandelt . Dann<
dreht sich die IP um, und es trifft)
erneut und verwandelt die 2 in eine 3 .Hier wird es interessant.
P
Erhöht das zweithöchste Item zur Potenz des ersten Items, was 0 3 = 0 ergibt . Dann dreht sich die IP ganz nach rechts und durchläuft zwei No-Ops,.
bevor eine weitere getroffen wirdP
. Hier sehen wir eine weitere Besonderheit von Cubix: Binäroperatoren (wieP
) entfernen ihre Operanden nicht vom Stapel. Da der Stack jetzt ist[3, 0]
, berechnen wir 3 0 = 1 , was das ProgrammO
ausgibt und@
beendet.Dreifaches Programm
Schau es dir an!
Wie beim Doppelprogramm kann das Triple auf einen Würfel der Größe 2 passen:
Dieses Programm startet auf die gleiche Weise wie das vorherige:
P
drückt 1 ,)
inkrementiert,<
zeigt nach Westen,)
inkrementiert erneut undP
drückt jetzt 0 . Die IP wird dann ganz<
rechts herum gewickelt , was nichts bewirkt, da die IP bereits nach Westen zeigt.Hier ist der einzige Unterschied zum Doppelprogramm: Das
)
erhöht die 0 oben auf dem Stapel auf eine 1 . Wenn erP
seine Magie erneut ausführt, berechnet er diesmal 3 1 = 3 .O
gibt aus und@
endet, und wir beweisen schlüssig, dass das dritte Mal tatsächlich der Reiz ist.quelle
Brain-Flak , 10 Bytes
Probieren Sie es online!
Probieren Sie es doppelt aus!
Versuchen Sie es verdreifacht!
Erläuterung:
Wenn wir dies einmal ausführen, wird es
(0 + 0 + 1) == 1
auf den alternativen Stapel gelegt. Lief ein zweites Mal, legt es das gleiche auf den Hauptstapel. Ein drittes Mal wird jedoch ausgewertet(1 + 1 + 1) == 3
und an den alternativen Stapel weitergeleitet und implizit gedruckt.quelle
SQL,
252423 Bytes( -1 Byte Entfernt ein falsch geschriebenes Zeichen, das immer auskommentiert wurde und nichts tut )
( -1 Byte geändert
SELECT
inPRINT
wie von Razvan Socol empfohlen )So funktioniert es:
In SQL können Sie die Kommentar-Tags folgendermaßen auskommentieren:
vs
Code in einer Zeile ohne Kommentare:
Erste Iteration:
SELECT 2-1
Ausgabe:1
Zweite Iteration:
SELECT 2-1*2+1
Ausgabe:1
Dritte Iteration:
SELECT 2-1*2+1*2+1
Ausgabe:3
quelle
PRINT
anstattSELECT
würde ein zusätzliches Byte speichern.SOGL V0.12 ,
754 BytesProbieren Sie es hier aus!
Probieren Sie es doppelt aus!
Versuchen Sie es verdreifacht!
Erläuterung:
quelle
ē1|
, aber anscheinend gibt es keinen Befehl für bitweises ODER ...ē:2\+
: /05AB1E ,
65 BytesProbieren Sie es online! oder Versuchen Sie es verdoppelt! oder versuchen Sie es verdreifacht!
Erläuterung
Einzel:
0 + (0 % 2 == 0) -> 1
Doppel:
1 + (1 % 2 == 0) -> 1
Dreifach:
2 + (2 % 2 == 0) -> 3
quelle
% 2
in der dreifachen Erklärung stehen?2%_
stimmt eigentlich ?2 + (2 % 2 == 0) -> 2
aber2 + !(2 % 2 == 0) -> 3
(für Ihre Erklärung).2%_
ist dasselbe wieÈ
yes. Ich bin mir nicht sicher, was du mit der Erklärung meinst.2+(2%2==0) = 2+(0==0) = 2+1 = 3
. Es wäre wahrscheinlich klarer gewesen, wenn ich die Berechnungen erklärt hätte.> <> 9 Bytes
Probieren Sie es online!
Probieren Sie es doppelt aus!
Versuchen Sie es verdreifacht!
Ich fand diese Art von Glück, indem ich die Philosophie benutzte, dass "wenn man den Weg des Fisches genug verwirrt, wird irgendwann etwas funktionieren". Die ursprüngliche und die doppelte Version geben eine 5 aus, und die dreifache Version gibt 1 und dann 5 aus, um 15 = 3 × 5 zu erhalten. Hier sind die multiplizierten Versionen zu Ihrer Kenntnisnahme:
quelle
Python 2 ,
46 4539 BytesInspiriert von Halvards Antwort . Ich bin froh, dass meine Herausforderung eine neue inspiriert hat, die ich noch interessanter finde. 6 Bytes gespart dank Kevin Cruijssen .
Probieren Sie es online!
Probieren Sie es doppelt aus!
Versuchen Sie es verdreifacht!
Wie es funktioniert (veraltet)
Wenn es verdoppelt wird, wird die Länge zu 90 , aber der neue Code wird dank der ignoriert
#
, also zuk==90
ausgewertetTrue
. Boolesche Werte sind Unterklassen von Ganzzahlen in Python, alsok>>True
äquivalent zuk>>1
, was im Wesentlichen k / 2 = 45 ist . Wenn es verdreifacht wird, wird der neue Code wieder ignoriert, daher ist die neue Länge 135 , was nicht verschoben wird, weil es zuk==90
ausgewertetFalse
wirdk>>(k==90) ⟶ k>>(135==90) ⟶ k>>False ⟶ k>>0 ⟶ k
, und k wird so gedruckt, wie es ist.Python 2 , 36 Bytes
Dies war ein Vorschlag von Aidan F. Pierce mit 38 Bytes, und ich habe 2 Bytes Golf gespielt. Ich poste dies nicht als meine Hauptlösung, weil ich es mir nicht selbst ausgedacht habe.
Probieren Sie es online! Probieren Sie es doppelt aus! Versuchen Sie es verdreifacht!
quelle
print open(__file__,"a").tell()/79*3|1#
vielleicht?R ,
373128 BytesVielen Dank an Giuseppe für die letzten 3 Bytes.
(mit einem abschließenden Zeilenumbruch).
Probieren Sie es einmal aus!
Probieren Sie es zweimal!
Probieren Sie es dreimal aus!
Hierbei wird der
readLines()
Trick aus Giuseppes Antwort auf die 8-Ball-Herausforderung verwendet , bei derstdin
zur Quelldatei umgeleitet wird. Dieser Code zählt im Grunde genommen nur die Anzahl der Zeilen unterhalb der ersten Zeile und gibt aus,1
ob es 1 oder 3 Zeilen gibt (dh der Code ist einfach oder doppelt) oder3
ob es 5 Zeilen gibt (dh der Code ist verdreifacht).quelle
s
, um richtig zu funktionieren, ABER Sie sollten in der Lage sein, sie auf 28 Bytes zu golfen, indem Sie einige der Berechnungen überarbeiten .%/%2
, sollte es funktionierenVerloren , 38 Bytes
Probieren Sie es online!
Probieren Sie es online!
Probieren Sie es online!
Erläuterung
Lost ist eine sehr interessante Sprache für diese Herausforderung. Die übliche Lost-Technik besteht darin, eine "Falle" zu bauen. Eine Falle ist ein Programmabschnitt, mit dem alle ips an einem Ort aufgefangen werden, sodass ihre Stapel gelöscht und gesteuert werden können, um in eine bestimmte Richtung zu gehen. Das macht das Schreiben von Programmen in Lost viel einfacher. Da das Programm jedoch dupliziert ist, müssen wir auch das Duplizieren von Traps vermeiden. Dazu müssen wir eine neue Falle entwerfen, die ordnungsgemäß funktioniert, aber wenn sie dupliziert wird, funktioniert nur eine der Fallen. Meine Grundidee hier ist die folgende
Solange der Stapel nicht leer ist,
?
wird ein Gegenstand entfernt und zum Anfang zurückgesprungen, wenn dieser Gegenstand nicht Null ist. Der Schlüssel hier ist, dass, wenn dies gestapelt wird, die^^
s-AufstellungDas bedeutet, dass Sie, egal wie Sie eintreten, immer an derselben Stelle austreten.
Von hier aus können wir versuchen, die gleiche Idee aus meiner Klein-Antwort umzusetzen .
Das Rückgrat unseres Programms ist die linke Seite, die eine Reihe von
2
s drückt . Jedes Mal, wenn wir eine Kopie des Programms hinzufügen, wird eine weitere Kopie2
zum Backbone des Programms hinzugefügt, was bedeutet, dass eine weitere 2 in den Stapel verschoben wird. Sobald es vom Boden abprallt, springt es durch\\>
und führt den Code ausDies entfernt die ersten 2 Stapelelemente, fügt eins zu den verbleibenden hinzu und beendet das Programm. Sobald unser Backbone 3 2s hat, werden wir 1 addieren und 3 bekommen. Wenn wir weniger als 3 Items haben, werden wir einfach den gesamten Stack ablegen und 1 zurückgeben.
Jetzt bleibt nur noch das Problem, dass das
!
in unserem Programm eine Endlosschleife verursachen kann. Wenn die IP!
aufwärts geht, springt sie und landet genau dort, wo sie war. Das heißt, wir müssen eine weitere Zeile darunter einfügen, um die Schleife zu verhindern.Dies hat das leichte Problem, einige Schrägstriche zwischen unsere
^
s in der Falle zu setzen. Aber auf wundersame Weise funktioniert alles. Unser ips hüpft richtig herum, so dass es keinen Unterschied macht.quelle
Stax , 5 Bytes
Online ausführen und debuggen! · Verdoppelt · Verdreifacht
Erläuterung
quelle
C (GCC) ,
959185 BytesProbieren Sie es online!
quelle
Japt ,
865 Bytes-1 Byte dank @ETHproductions
Erläuterung:
Dies ergibt
1-0 = 1
Verdoppelt bewertet zu
2-1 = 1
Verdreifacht bewertet zu
3-0 = 3
quelle
°U-v
umstellen, können Sie (plus Zeilenvorschub) in der Sekunde sparenU
.v
ist perfekt für diese Herausforderung :-)Pure Bash (keine
wc
oder andere externe Utensilien), 27quelle
EXIT
durch0
Perl 5 ,
1815131211 Bytes-3 bytes dank nwellnhof
Einmal online ausprobieren!
Zweimal online ausprobieren!
Dreimal online testen !
quelle
n;$_=$a++|1;say
(15 Bytes)> <> ,
10 98 BytesProbieren Sie es online!
Probieren Sie es doppelt aus!
Versuchen Sie es verdreifacht!
Ich bin mir sicher, dass es irgendwo da draußen eine 8-Byte-Lösung gibt.Das am Ende nicht druckbare Objekt hat den ASCII-Wert 1 und wird erst
g
beim dritten Durchlauf mit dem Befehl et abgerufen. Bei den ersten beiden wird gedruckt05
und dann gedruckt15
.quelle
C (gcc) , 107 Bytes
Meine erste Einreichung in C (gcc). Viel zu lang ...
TIO-Verbindungen: einfach , doppelt , dreifach .
quelle
Labyrinth ,
12119 BytesTIO (1x) , TIO (2x) , TIO (3x)
quelle
JavaScript,
81 77 7470 Bytes4 Bytes dank Shaggy gespart
Ziemlich lahme JS-Lösung. Übernimmt die Werte aus dem
[3,1,1]
Array von rechts (pop()
). Registriert eine Zeitüberschreitung, um den aktuellen Wert in der Zukunft anzuzeigen. Wenn bereits eine Zeitüberschreitung registriert wurde, brechen Sie diese ab. Beruht auf der schmutzigen Natur vonvar
, die variable Erklärungen hochzieht .Zweimal:
Code-Snippet anzeigen
Drei Mal:
Code-Snippet anzeigen
quelle
a
als 3. Argument Folgendes übergebensetTimeout
:setTimeout(alert,9,a)
C (GCC) ,
5352 BytesBeachten Sie das Leerzeichen nach
#endif
.Probieren Sie es online!
quelle
Kohle , 12 Bytes
Probieren Sie es online! Link ist zum ausführlichen Code.
Probieren Sie es doppelt aus!
Versuchen Sie es verdreifacht!
Erläuterung
quelle
MapAssignRight(Plus, 1, i)
Speichert Sie ein Byte, wodurch Sie auf die gleiche Länge wie ein Port meiner Antwort an @Mr reduziert werden. XCoders Herausforderung:PI∨›³L⊞Oυω³
PI⊕⊗÷L⊞Oυω³
ist eine andere Version meiner Antwort, aber immer noch 11 Bytes ...MapAssign(Incremented, i)
JavaScript,
4340 Bytes2x:
Code-Snippet anzeigen
3x:
Code-Snippet anzeigen
quelle
PowerShell ,
54484544 ByteProbieren Sie es online!
Probieren Sie es doppelt aus!
Versuchen Sie es verdreifacht!
Ruft einen eigenen Aufruf Pfad mit
$PSCOMMANDPATH
und führt eineg
et-c
ontent auf die Datei.If
Die Zeichenanzahl dieser Datei ist kleiner als99
(wc -c
von Coreutils geprüft ), dann geben wir aus1
undexit
(dh beenden die Ausführung). Das erklärt den ursprünglichen Code und den doppelten Code. Ansonsten geben wir aus3
und beenden. Der eigentliche Code, der in den Abschnitten double oder tripled enthalten ist, ist bedeutungslos, da er entwederexit
vor der Ausführung oder hinter einem Kommentar steht#
.6 Bytes dank Mr. Xcoder gespeichert
34 Bytes dank Pavel gespeichertquelle
-lt99
auf eine99-gt
der Casting Arbeit richtig zu bekommen, aber das ist in der Tat ein Byte kürzer. Vielen Dank!C # (178 Bytes)
verrückte C # -Lösung, aber ich bin froh, dass es in C # überhaupt in einer Zeile möglich ist. :)
Für mich war es am schwierigsten, ein gültiges C # zu haben, mit dem dieselbe Variable entweder initialisiert oder inkrementiert werden konnte. Daher missbrauchte ich den ConfigurationManager, da ich eine globale statische NameValueCollection benötigte, und der ConfigurationManager war der einzige, an den ich denken konnte, dass ich ihn im Speicher aktualisieren könnte. EnvironmentVariables war eine weitere Option, die ich mir angeschaut habe, die aber keinen Indexer hat. Daher bin ich mir nicht sicher, wie ich das in einer Zeile machen soll, die kopiert und eingefügt werden kann, um die erforderliche Ausgabe gemäß der Spezifikation zu erzielen.
quelle
Runenverzauberungen , 35 Bytes
Probieren Sie es online!
Die Arbeit an diesem Parser ermöglichte es mir, einen Fehler in meinem Parser zu finden, der sich mit den neuen Verzögerungsmodifikatorzeichen befasst, obwohl das Endergebnis davon nicht betroffen ist, da ich sie letztendlich nicht benötigte.
Funktioniert aufgrund der Tatsache, dass die letzte Zeile keine nachgestellte neue Zeile (oder im Übrigen nachgestellte Leerzeichen) enthält, sodass die doppelten IP-Adressen an einer anderen Stelle erscheinen können. Das obere linke Ende bildet eine große Schleife um das Gitter, während das zweite IP eine Reflektionsoperation ausführt, um das
\
in der 6. Zeile durch ein zu ersetzen. Diese IP wird dann für immer durchlaufen und nichts tun.
Die dritte IP-Adresse ersetzt diese ebenfalls zur gleichen Zeit. Da sie sich jedoch in der 13. Zeile befindet, wird sie von der Kopie dieses Reflektors nach oben gesendet und führt die
1f'3w
in der oberen rechten Ecke vorhandene Sequenz aus, die die in der 14. Zeile1
durch eine ersetzt3
Linie, kurz vor dem ursprünglichen IP es ausgeführt wird , die das Dreifache Programm zur Ausgabe verursacht ,3
statt1
(auch Werte sein könnte ,2
und6
,3
und9
,4
und12
oder5
und15
aufgrund der Verfügbarkeit vona-f
numerischen Konstanten;1
und3
wurden willkürlich gewählt). Es wird dann in einer Endlosschleife belassen, die mehr Reflektionsbefehle ausführt, die nichts bewirken.Probieren Sie es dreifach aus!
quelle
Perl 5,
2825 Bytes-3 Bytes dank @neil!
Bewegt den Cursor rückwärts (führt am Zeilenanfang nichts aus) und gibt den Wert des
$a
ersten und dritten Mal aus (dh beim dritten Mal wird eine 1 gedruckt, der Cursor bewegt sich und eine 3 wird an der Position der 1 gedruckt).quelle
print"\e[D$a"if(++$a!=2);
vielleicht?QBasic, 19 Bytes
Die Quelle sollte einen nachgestellten Zeilenumbruch enthalten.
Erläuterung
Wir wollen Ausgabe von
1
,1
,3
. Beachten Sie, dass diese Zahlen eins weniger sind als Potenzen von 2. Also:quelle