Zum dritten Mal der Charme

49

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 , 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 noch sein 4. Wenn ich es jedoch schreibe AbcAbcAbcund ausführe, muss die Ausgabe sein 12.


Schamlos gestohlen Abgeleitet von Mr. Xcoders Herausforderung

workoverflow
quelle
Darf unser Code seinen eigenen Quellcode lesen?
AdmBorkBork
@AdmBorkBork würde ich so annehmen, da dies nicht als quine markiert ist .
Erik der Outgolfer
@AdmBorkBork Ja.
Workoverflow
9
Ich denke nicht, dass die 1-Byte-Beschränkung erforderlich ist, da es nicht möglich wäre, den Unterschied zwischen nichts und nichts zu erkennen, das dreimal wiederholt wird.
12.
1
@ r12 "Abc" ist ein Beispiel für ein Programm in Programmiersprache. Wenn Ihr Code ( 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 3
workoverflow

Antworten:

21

Wumpus , 6 Bytes

{~)
@O

Probieren Sie es online!
Probieren Sie es doppelt aus!
Versuchen Sie es verdreifacht!

Drucke 1und 3.

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:

Bildbeschreibung hier eingeben

Der ausgeführte Code lautet also:

{~)O@

{   Turn the IP left by 60°.
~   Swap two implicit zeros on the stack, does nothing.
)   Increment the top zero to 1.
O   Print it.
@   Terminate the program.

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:

Bildbeschreibung hier eingeben

Die IP geht genau einmal um diese Schleife herum, der ausgeführte Code lautet also:

{~){~)){~O@

{~) As before, we end up with a 1 on top of the stack.
{   Turn left by 60° again.
~   Swap the 1 with the 0 underneath.
))  Increment the zero to 2.
{   Turn left by 60° again.
~   Swap the 2 with the 1 underneath.
O   Print the 1.
@   Terminate the program.

Schließlich ist das verdreifachte Programm dem verdoppelten Programm ziemlich ähnlich, aber wir erhalten ein paar wichtigere Befehle in dieser dritten Zeile:

Bildbeschreibung hier eingeben

Der ausgeführte Code lautet also:

{~){~)){~~)O@

{~){~)){~
    As before. We end up with a 1 on top of the stack and a 2 underneath.
~   Swap the 1 with the 2 underneath.
)   Increment the 2 to a 3.
O   Print the 3.
@   Terminate the program.
Martin Ender
quelle
1
Ich glaube, ich bin verliebt in diese Sprache.
Eroberer
11

Schale , 5 Bytes

KΣK+1

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 bist äquivalent zu a.
  • Σ, 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:

   K Σ (K+) 1
== Σ 1
== 1

Das (K+)ist eine unsinnige Funktion, die vom ersten gefressen wird K.

Das zweimal wiederholte Programm wird folgendermaßen interpretiert:

   K Σ (K+1KΣK+) 1
== Σ 1
== 1

Die Funktion in Klammern wird wieder von der ersten übernommen K.

Das dreimal wiederholte Programm wird folgendermaßen interpretiert:

   K (Σ (K (+1) (KΣK+) 1)) (KΣK+1)
== Σ (K (+1) (KΣK+) 1)
== Σ ((+1) 1)
== Σ (+1 1)
== Σ 2
== 3
Zgarb
quelle
Dies dauert sehr lange zu laufen ...
Weijun Zhou
@WeijunZhou Wenn Sie Kin 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 ...
Zgarb
Ich verstehe, danke für deine Erklärung.
Weijun Zhou
2
@ Zgarb +1 für Kek +1
Workoverflow
10

Gelee , 7 5 Bytes

»‘µ*Ḃ

Probieren Sie es online!

Probieren Sie es doppelt aus!

Versuchen Sie es verdreifacht!

Wie es funktioniert

»‘µ*Ḃ            Main link. No arguments. Implicit argument: x = 0

 ‘               Increment; yield x + 1 = 1.
»                Take the maximum of x and 1. Yields 1.
  µ              Begin a new, monadic chain. Argument: y = 1
    Ḃ            Bit; yield 1 if y is odd, 0 if it is even. Yields 1.
   *             Power; yield y**1 = 1.
»‘µ*Ḃ»‘µ*Ḃ       Main link.

»‘µ*Ḃ            As before.
      ‘          Increment; yield y + 1 = 2.
     »           Take the maximum of 1 and 2. Yields 2.
       µ         Begin a new, monadic chain. Argument: z = 2
         Ḃ       Bit; yield 1 if z is odd, 0 if it is even. Yields 0.
        *        Power; yield z**0 = 1.
»‘µ*Ḃ»‘µ*Ḃ»‘µ*Ḃ  Main link.

»‘µ*Ḃ»‘µ*Ḃ       As before.
           ‘     Increment; yield z + 1 = 3.
          »      Take the maximum of 1 and 3. Yields 3.
            µ    Begin a new, monadic chain. Argument: w = 3
              Ḃ  Bit; yield 1 if w is odd, 0 if it is even. Yields 1.
             *   Power; yield w**1 = 3.
Dennis
quelle
10

Cubix , 5 Bytes

)<@OP

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:

  )
< @ O P
  .

Der IP (Anweisungszeiger) beginnt ganz links in <Richtung Osten. Das zeigt <sofort nach Westen, und es wickelt sich um das P. PPotenzierung 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. Odruckt dann diesen Wert aus und @beendet das Programm.

Doppelprogramm

Schau es dir an!

)<@OP)<@OP

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:

    ) <
    @ O
P ) < @ O P . .
. . . . . . . .
    . .
    . .

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. PErhö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 wird P. Hier sehen wir eine weitere Besonderheit von Cubix: Binäroperatoren (wie P) entfernen ihre Operanden nicht vom Stapel. Da der Stack jetzt ist [3, 0], berechnen wir 3 0 = 1 , was das Programm Oausgibt und @beendet.

Dreifaches Programm

Schau es dir an!

)<@OP)<@OP)<@OP

Wie beim Doppelprogramm kann das Triple auf einen Würfel der Größe 2 passen:

    ) <
    @ O
P ) < @ O P ) <
@ O P . . . . .
    . .
    . .

Dieses Programm startet auf die gleiche Weise wie das vorherige: Pdrückt 1 , )inkrementiert, <zeigt nach Westen, )inkrementiert erneut und Pdrü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 er Pseine Magie erneut ausführt, berechnet er diesmal 3 1 = 3 . Ogibt aus und @endet, und wir beweisen schlüssig, dass das dritte Mal tatsächlich der Reiz ist.

ETHproductions
quelle
1
Ich habe deine Erklärung wirklich genossen. +1
Workoverflow
7

Brain-Flak , 10 Bytes

<>([]{}())

Probieren Sie es online!

Probieren Sie es doppelt aus!

Versuchen Sie es verdreifacht!

Erläuterung:

#Toggle stacks
<>

#Push
(
    #Stack-height (initially 0) + 
    []

    #The TOS (initially 0) + 
    {}

    #1
    ()
)

Wenn wir dies einmal ausführen, wird es (0 + 0 + 1) == 1auf den alternativen Stapel gelegt. Lief ein zweites Mal, legt es das gleiche auf den Hauptstapel. Ein drittes Mal wird jedoch ausgewertet (1 + 1 + 1) == 3und an den alternativen Stapel weitergeleitet und implizit gedruckt.

DJMcMayhem
quelle
7

SQL, 25 24 23 Bytes

( -1 Byte Entfernt ein falsch geschriebenes Zeichen, das immer auskommentiert wurde und nichts tut )
( -1 Byte geändert SELECTin PRINTwie von Razvan Socol empfohlen )

PRINT 2/*
*2+1--*/-1
--

So funktioniert es:
In SQL können Sie die Kommentar-Tags folgendermaßen auskommentieren:

/*
'Comment'--*/

vs

--/*
'Not Comment'--*/

Code in einer Zeile ohne Kommentare:
Erste Iteration: SELECT 2-1Ausgabe: 1
Zweite Iteration: SELECT 2-1*2+1Ausgabe: 1
Dritte Iteration: SELECT 2-1*2+1*2+1Ausgabe:3

Chronozid
quelle
1
PRINTanstatt SELECTwürde ein zusätzliches Byte speichern.
Razvan Socol
6

SOGL V0.12 , 7 5 4 Bytes

ē»«I

Probieren Sie es hier aus!

Probieren Sie es doppelt aus!

Versuchen Sie es verdreifacht!

Erläuterung:

ē»«I
ē     push counter, then increment it.
      First time running this will push 0, then 1, then 2.
             TOS on each: 0  1  2
 »    floor divide by 2   0  0  1
  «   multiply by 2       0  0  2
   I  and increment       1  1  3
dzaima
quelle
Ich habe versucht, etwas in der Art von zu tun ē1|, aber anscheinend gibt es keinen Befehl für bitweises ODER ...
ETHproductions
@ETHproductions Ja, ich wollte auch so etwas ausprobieren und das Beste, was ich bekommen habe, war ē:2\+: /
dzaima
5

05AB1E , 6 5 Bytes

.gDÈ+

Probieren Sie es online! oder Versuchen Sie es verdoppelt! oder versuchen Sie es verdreifacht!

Erläuterung

.g     # push length of stack
  D    # duplicate
   È   # check if even
    +  # add

Einzel: 0 + (0 % 2 == 0) -> 1
Doppel: 1 + (1 % 2 == 0) -> 1
Dreifach:2 + (2 % 2 == 0) -> 3

Emigna
quelle
Sollte das % 2in der dreifachen Erklärung stehen?
LarsW
@ LarsW: Ja in der Tat :)
Emigna
@Emigna ich denke "check if even" 2%_stimmt eigentlich ?
Magic Octopus Urn
2 + (2 % 2 == 0) -> 2aber 2 + !(2 % 2 == 0) -> 3(für Ihre Erklärung).
Magic Octopus Urn
@MagicOctopusUrn 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.
Emigna
5

> <> 9 Bytes

\5 n;
\\1

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:

\5 n;
\\1\5 n;
\\1
\5 n;
\\1\5 n;
\\1\5 n;
\\1
Kein Baum
quelle
5

Python 2 ,  46 45  39 Bytes

Inspiriert von Halvards Antwort . Ich bin froh, dass meine Herausforderung eine neue inspiriert hat, die ich noch interessanter finde. 6 Bytes gespart dank Kevin Cruijssen .

print open(__file__,"a").tell()/79*3|1#

Probieren Sie es online!

Probieren Sie es doppelt aus!

Versuchen Sie es verdreifacht!

Wie es funktioniert (veraltet)

k=open(__file__,"a").tell() # Read the source code in "append" mode and get its length.
                            # Assign it to a variable k.
;print k>>(k==90)#          # Print k, with the bits shifted to the right by 1 if k
                            # is equal to 90, or without being shifted at all overwise.
                            # By shifting the bits of a number to the right by 1 (>>1),
                            # we basically halve it.

Wenn es verdoppelt wird, wird die Länge zu 90 , aber der neue Code wird dank der ignoriert #, also zu k==90ausgewertet True. Boolesche Werte sind Unterklassen von Ganzzahlen in Python, also k>>Trueäquivalent zu k>>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 zu k==90ausgewertet Falsewird k>>(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.

0and""
True+=1
print True>3and 3or 1

Probieren Sie es online! Probieren Sie es doppelt aus! Versuchen Sie es verdreifacht!

Mr. Xcoder
quelle
Vielen Dank für die Idee, einen Kommentar zu verwenden - sparte mir 6 Bytes.
AdmBorkBork
print open(__file__,"a").tell()/79*3|1#vielleicht?
Kevin Cruijssen
@ KevinCruijssen Großartig, danke!
Mr. Xcoder
Ein Byte weniger, kein Lesen des Quellcodes: tio.run/##K6gsycjPM/r/… Druckt mit führenden Leerzeichen für zwei und drei Wiederholungen, aber das scheint zulässig zu sein.
Aidan F. Pierce
@ AidanF.Pierce Vielen Dank! Ich habe ein bisschen mehr Golf gespielt und es als alternative Lösung gepostet.
Mr. Xcoder
5

R , 37 31 28 Bytes

Vielen Dank an Giuseppe für die letzten 3 Bytes.

length(readLines())%/%2*2+1

(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 der stdinzur Quelldatei umgeleitet wird. Dieser Code zählt im Grunde genommen nur die Anzahl der Zeilen unterhalb der ersten Zeile und gibt aus, 1ob es 1 oder 3 Zeilen gibt (dh der Code ist einfach oder doppelt) oder 3ob es 5 Zeilen gibt (dh der Code ist verdreifacht).

rturnbull
quelle
oh, ordentlich, +1! War mir nicht sicher, wie ich das in R machen soll. Ich glaube, Sie brauchen eine neue Zeile s, um richtig zu funktionieren, ABER Sie sollten in der Lage sein, sie auf 28 Bytes zu golfen, indem Sie einige der Berechnungen überarbeiten .
Giuseppe
@ Giuseppe Danke für den Hinweis auf das Newline-Problem! Ich konnte Ihre Version nicht zum Laufen bringen, wenn der Code verdreifacht wurde. Fehlt mir etwas?
Rturnbull
oh seltsam, ich muss einen nachgestellten Zeilenumbruch gehabt haben, aber wenn du das machst %/%2, sollte es funktionieren
Giuseppe
5

Verloren , 38 Bytes

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Probieren Sie es online!

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Probieren Sie es online!

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

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

v<<<<>
>%?!^^

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-Aufstellung

v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^

Das 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 .

\\<<<<<v<<<<>
2>((1+@>?!^%^

Das Rückgrat unseres Programms ist die linke Seite, die eine Reihe von 2s drückt . Jedes Mal, wenn wir eine Kopie des Programms hinzufügen, wird eine weitere Kopie 2zum 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 aus

((1+@

Dies 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.

\\<<<<</<<<<>
2>((1+@>?!^%^
.........^

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.

Weizen-Assistent
quelle
@scherz leider stecke ich vorerst auf handy fest. Könnten Sie es als Antwort mit einer Erklärung posten?
Wheat Wizard
Gepostet
Jo King
4

C (GCC) , 95 91 85 Bytes

#ifndef a
#define a-1
main(){puts(3
#include __FILE__
?"1":"3");}
#define a
#endif
a

Probieren Sie es online!

l4m2
quelle
Dann schlage ich vor, dass Sie den richtigen TIO-Link bearbeiten.
Erik the Outgolfer
Ich kann manchmal keine Verbindung zu TIO herstellen, ich weiß nicht warum
l4m2
4

Japt , 8 6 5 Bytes

-1 Byte dank @ETHproductions

°U-v

Erläuterung:

°U-v
 U     # variable U=0                # U=0
°U     # ++U                         # U=1
  -    # minus:
   v   #   1 if U is divisible by 2  
       #     else
       #   0                         # U=1

Dies ergibt 1-0 = 1

Verdoppelt bewertet zu 2-1 = 1

Verdreifacht bewertet zu 3-0 = 3

Oliver
quelle
1
Wenn Sie ein wenig °U-vumstellen, können Sie (plus Zeilenvorschub) in der Sekunde sparen U.
ETHproductions
@ETHproductions Danke! vist perfekt für diese Herausforderung :-)
Oliver
4

> <> , 10 9 8 Bytes

562gn|

Probieren 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 gbeim dritten Durchlauf mit dem Befehl et abgerufen. Bei den ersten beiden wird gedruckt 05und dann gedruckt 15.

Scherzen
quelle
Die 8-Byte-Lösung ist schwer fassbar, aber hier sind noch ein paar 9-Byte-Lösungen, falls sie Sie inspirieren: TIO , TIO
Kein Baum
1
@Notatree Erhielt das 8-Byte mit einem nicht druckbaren
Jo King
4

C (gcc) , 107 Bytes

Meine erste Einreichung in C (gcc). Viel zu lang ...

i;
#ifdef c
#define c
#ifdef b
i=2;
#else
#define b
#endif
#else
#define c main(){putchar(i+49);}
#endif
c

TIO-Verbindungen: einfach , doppelt , dreifach .

Weijun Zhou
quelle
3

JavaScript, 81 77 74 70 Bytes

4 Bytes dank Shaggy gespart

var t,i=(i||[3,1,1]),a=i.pop()
clearTimeout(t)
t=setTimeout(alert,9,a)

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 von var, die variable Erklärungen hochzieht .

Zweimal:

Drei Mal:

Cristian Lupascu
quelle
Dies erfordert ein nachgestelltes Semikolon oder eine neue Zeile, um zu funktionieren, aber Sie können 4 Bytes sparen, indem Sie aals 3. Argument Folgendes übergeben setTimeout:setTimeout(alert,9,a)
Shaggy
@ Shaggy Danke! Es funktioniert auch ohne ein zusätzliches Semikolon.
Cristian Lupascu
2

Kohle , 12 Bytes

⎚≔⁺ι¹ιI⁻ι⁼ι²

Probieren Sie es online! Link ist zum ausführlichen Code.

Probieren Sie es doppelt aus!

Versuchen Sie es verdreifacht!

Erläuterung

⎚             Clear
 ≔⁺ι¹ι        Assign plus(i, 1) to i
       I      Cast (and implicitly print)
         ⁻ ⁼ι² Subtract equals(i, 2) from
          ι    i
Nur ASCII
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υω³
Neil
PI⊕⊗÷L⊞Oυω³ist eine andere Version meiner Antwort, aber immer noch 11 Bytes ...
Neil
10-Byte gefunden!
Neil
: / Ich sollte wirklich behebenMapAssign(Incremented, i)
ASCII-only
2

JavaScript, 43 40 Bytes

var t=t?--t:~!setTimeout`t=alert(1|~t)`;

2x:

3x:

l4m2
quelle
ps diese lösung schadet der
umwelt
2

PowerShell , 54 48 45 44 Byte

if(99-gt(gc $PSCOMMANDPATH|wc -c)){1;exit}3#

Probieren Sie es online!

Probieren Sie es doppelt aus!

Versuchen Sie es verdreifacht!

Ruft einen eigenen Aufruf Pfad mit $PSCOMMANDPATHund führt eine get- content auf die Datei. IfDie Zeichenanzahl dieser Datei ist kleiner als 99( wc -cvon Coreutils geprüft ), dann geben wir aus 1und exit(dh beenden die Ausführung). Das erklärt den ursprünglichen Code und den doppelten Code. Ansonsten geben wir aus 3und beenden. Der eigentliche Code, der in den Abschnitten double oder tripled enthalten ist, ist bedeutungslos, da er entweder exitvor der Ausführung oder hinter einem Kommentar steht #.

6 Bytes dank Mr. Xcoder gespeichert 3 4 Bytes dank Pavel gespeichert

AdmBorkBork
quelle
@Pavel Aha, ja. Ich muss Swap um die -lt99auf eine 99-gtder Casting Arbeit richtig zu bekommen, aber das ist in der Tat ein Byte kürzer. Vielen Dank!
AdmBorkBork
2

C # (178 Bytes)

Console.WriteLine(1+2*4%int.Parse(System.Configuration.ConfigurationManager.AppSettings["z"]=(int.Parse(System.Configuration.ConfigurationManager.AppSettings["z"]??"0"))+1+""));

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.

Lee
quelle
2

Runenverzauberungen , 35 Bytes

^w3'\
    f
    1
/1@
/
 '54\w
/yyy

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'3win der oberen rechten Ecke vorhandene Sequenz aus, die die in der 14. Zeile 1durch eine ersetzt 3Linie, kurz vor dem ursprünglichen IP es ausgeführt wird , die das Dreifache Programm zur Ausgabe verursacht , 3statt 1(auch Werte sein könnte , 2und 6, 3und 9, 4und 12oder 5und 15aufgrund der Verfügbarkeit von a-fnumerischen Konstanten; 1und 3wurden willkürlich gewählt). Es wird dann in einer Endlosschleife belassen, die mehr Reflektionsbefehle ausführt, die nichts bewirken.

Probieren Sie es dreifach aus!

Draco18s
quelle
29 Bytes , obwohl ich denke, ich könnte es senken, wenn ich es wirklich verstehe: P
Jo King
@JoKing Nicht wirklich überrascht, dass so viel Whitespace rauskommen könnte. Hat dies bei der Arbeit funktioniert und da ich auf ein Problem mit dem Interpreter gestoßen bin, war ich froh, dass etwas funktioniert hat (mein Original hatte 52 Bytes und nachdem der Interpreter repariert wurde, konnte ich einen guten Teil entfernen).
Draco18s
1

Perl 5, 28 25 Bytes

-3 Bytes dank @neil!

print"\e[D$a"if(++$a!=2);

Bewegt den Cursor rückwärts (führt am Zeilenanfang nichts aus) und gibt den Wert des $aersten 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).

Marijn
quelle
1
print"\e[D$a"if(++$a!=2);vielleicht?
Neil
1

QBasic, 19 Bytes

CLS
x=2^x
?x-1OR 1

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:

CLS      ' CLear Screen of any output from previous copies of the code

x        ' Numeric variables are preset to 0...
 =2^x    ' so as this statement is repeated, the value of x goes 1, 2, 4

 x-1     ' Therefore x-1 goes 0, 1, 3...
    OR 1 ' and we bitwise OR it with 1 to change the 0 to 1...
?        ' and print.
DLosc
quelle