Wie allgemein bekannt ,
Chuck Norris zählte bis unendlich. Zweimal
Außerdem ,
Chuck Norris kann rückwärts bis unendlich zählen.
Auch wenn Chuck Norris vielleicht weniger bekannt ist, kann er neben Englisch auch ein wenig Spanisch .
Die Herausforderung
Schreiben Sie ein Programm (oder eine Funktion), das bzw. die in zwei verschiedenen Sprachen ausgeführt werden kann. In einer Sprache sollte das Programm die Sequenz ausgeben
1, 1, 2, 2, 3, 3, 4, 4, ...
und in der anderen Sprache sollte es die Sequenz erzeugen (einschließlich führender Nullen)
1, 2, ..., 9, 01, 11, 21, 31, ..., 89, 99, 001, 101, 201, ...
Regeln
- Programme oder Funktionen sind in jeder Programmiersprache zulässig . Standardlücken sind verboten.
- Verschiedene Versionen derselben Sprache (wie Python 2/3) zählen nicht als verschiedene Sprachen. Verwandte Sprachen (wie C / C ++ oder Matlab / Octave) gelten als unterschiedlich.
- Es werden keine Eingaben gemacht.
- Das Programm sollte weiterhin Terme der Sequenz ausgeben, bis es vom Benutzer gestoppt wird. Da das Programm nicht von selbst stoppt, kann am Ende keine Ausgabe erzeugt werden. Es muss entweder kontinuierlich oder stapelweise im laufenden Programm produziert werden.
- Die Ausgabe kann über STDOUT oder ein Äquivalent erfolgen oder in einem Grafikfenster angezeigt werden. Jedes nicht-numerische Trennzeichen zwischen Sequenztermen ist zulässig, sofern jedes Term klar von seinen Nachbartermen unterschieden werden kann. Es ist auch akzeptabel, wenn der Bildschirm zwischen den Begriffen gelöscht wird.
- Jede Sequenz kann bei
0
anstelle von beginnen1
. In diesem Fall sollte in der Sequenz "zweimal" das0
genau wie bei den anderen Zahlen wiederholt werden. - Führende Nullen sind in der Reihenfolge "rückwärts" von Bedeutung. Zum Beispiel ist der zehnte Ausdruck
01
; Weder sind1
noch001
akzeptabel. - Wenn die beiden Sprachen unterschiedliche Zeichenkodierungen verwenden, wird das Programm durch seine Bytes und nicht durch seine Zeichen definiert. Das heißt, die Bytes sollten in beiden Sprachen gleich sein.
- Kürzester Code in Bytes gewinnt.
Antworten:
05AB1E / Jelly ,
1413 Bytes-1 Byte dank Adnan (Vermeiden Sie Triplicate mit nicht knallendem Druck)
Rohbytes (hexadezimal):
In 05AB1E ‚s Code-Seite :
Probieren Sie es online!
In Jelly ‚s Code-Seite :
Probieren Sie es online!
Wie?
Das Programm 05AB1E druckt die Doppelzählung mit jedem Eintrag, der durch Zeilenumbrüche getrennt ist:
Das Jelly- Programm gibt die umgekehrte Anzahl aus, wobei jeder Eintrag durch Zeilenumbrüche getrennt ist.
Der Parser behandelt ein gültiges Literal zwischen
[
und]
als das eingeschlossene Literal, andernfalls sind diese Bytes undefinierte Token und werden als solche zu Token, die den Code in Zeilen unterteilen.==>
Wird nicht als Literal analysiert, daher lautet der Code effektiv:quelle
Ð,,
durch==
.Python 2 / C (clang) ,
10910710084958889888784 BytesPython: Probieren Sie es online!
C: Probieren Sie es online!
Das L im Python-Code ist Teil des Begrenzers.
Erläuterung:
Im C-Code setzt es zuerst i auf 0. Dann startet es einen Kommentar (
#
ist gültiger Code in C für#include
Anweisungen), wohin der Python-Code geht. Am Ende des Kommentars wird eine Funktion definiert, die eine Variable für immer inkrementiert und durch Leerzeichen getrennt zweimal ausgibt. Es beginnt dann ein Kommentar.i=0;
Setzt i im Python-Code auf Null. Python ignoriert die nächste Zeile, da#
ein einzeiliger Kommentar beginnt. Dann wird es für immer inkrementiert, in eine lange Zahl umgewandelt und die umgekehrte Zeichenfolgendarstellung gedruckt. Das "L" vom langen ist ein Teil des Begrenzers. Danach wird eine mehrzeilige Zeichenfolge gestartet, um den C-Code zu kommentieren, der später endet.-2 Bytes dank @LuisMendo. -7 Bytes dank @ZacharyT. -6 weitere Bytes dank @ZacharyT. +11 Bytes, um einen Fehler zu beheben, dank @ mbomb007. -7 Bytes dank @Doorknob. +1 Byte, um einen Fehler zu beheben, dank @Doorknob. -1 Byte danke an @yoann. -1 weiteres Byte dank @yoann. -3 Bytes dank @Cyoce.
quelle
a(i){printf("%i %i ",i,i);a(i+1)}
while
Schleife für C-Code verwenden?`i`
anstelle vonstr(i)
for(;;)printf("%i %1$i ",i++);
ein Byte speichern. Das1$
ist ein Positionsargument, das angibtprintf
, dass das erste Argument (nach der Formatzeichenfolge) angezeigt werden soll.Jelly / Pyth, 15 Bytes
Nicht druckbare Dateien werden von der SE-Software entstellt. Hier ist ein Hexdump:
Führen Sie mit
jelly f file
undpyth file
jeweils.Erläuterung
Zuerst kommt der Pyth-Teil.
.V
Läuft eine Endlosschleife über die inkrementierende Sequenz, beginnend mit ihrer Eingabe, die hier ist1
. Dann kehren wir_
den stringified (`
) - Schleifenindex (b
) um ( ) und geben ihn implizit aus. Das;
ist da, um die Schleife zu beenden, und das"
ist notwendig, um den Rest des Programms als String-Literal zu behandeln, damit der Parser nicht daran erstickt.Der Jelly-Teil wird erklärt, indem zuerst der Rest des Programms von der Jelly-Codepage übersetzt wird:
Das
¶
fungiert als Zeilenvorschub und ignoriert den ersten Teil des Programms, indem es eine Verknüpfung herstellt, die niemals aufgerufen wird. Dann beginnen wir mit1
und führen eine while-Schleife (¿
) aus, dieṄṄ$
zweimal als Bedingung (print) verwendet und‘
den Wert als Schleifenkörper inkrementiert ( ).Das Ersetzen des Pyth-Teils durch
1[DR,>]
würde übrigens eine gültige Jelly / 05AB1E-Übermittlung in 14 Bytes erzeugen, aber der aktuelle Interpeter enthält einen Fehler , der dies verhindert.quelle
Perl / JavaScript, 87 Bytes
Perl
Ein Mechanismus ich eine Menge in JS / Perl Polyglotten verwendet habe , ist die Tatsache zu missbrauchen , dass die Substitution ziemlich jeden delimiter annehmen kann, unter Verwendung von
=
Mitteln I die anfänglichen sinnlosen Substitutionen kann (erstes Ersetzen0;print
mitconsole.log;m
einer Flagge/s
in$_
, das derzeitundef
) und dann$_
auf das Ergebnis des Ersetzenss
durchs
im Mehrzeilenmodus (/m
) einstellen , d. h0
. Jetzt$_
ist0
und ich starte diewhile
Schleife, diese erhöht sich dann$_
. Als nächstes rufe ich aufprint
, gebe einen regulären Ausdruck ein, der passt (weil||
am Ende ein leerer String passt) und benutze den&&
Operator, um dann die Umkehrung der$_
Verkettung mit einer neuen Zeile zu senden ($/
ist vorinitialisiert auf"\n"
). Das zählt bis unendlich rückwärts.JavaScript
Viele Variablenzuweisungen hier, maskiert in den Perl-
s///
Aufrufen. Ich habe Variablen aufs
undm
wie0
aliasconsole.log
zuprint
, etwas sinnlos Division ausgeführt wird , stellen$_
auf0
und beginnenwhile
Schleife Inkrementieren$_
, rufen Sieprint
vorbei in0
(m/s
dies den Aufruf beginntm
in Perl, sondern als Standard Division in JS) behandelt und unser Ziel string ($_+"\n"+$_
) über den Komma-Operator, der das letzte Element in der Liste zurückgibt. Ich vermeide das letzte Stück Perl-Code (&&reverse.$/
), weil$_+"\n"+$_
es der Wahrheit entspricht und ich damit||
einRegExp
Objekt erzeugen kann, das das Ende des Perl-Codes enthält, das niemals ausgewertet wird.Getestet mit Perl 5 und Node 6.
quelle
NodeJS / PHP,
131106 Bytes-25 Bytes dank @Titus
Verwenden von NodeJS anstelle von Browser-JS für eine bessere Ausgabeformatierung und eine bessere Endlosschleifenbehandlung.
Probieren Sie das JavaScript online aus
Probieren Sie das PHP online aus
Beachten Sie, dass der TIO-Ausgang nach 128 KB abgeschnitten wird.
quelle
<!--←printf=(_,i)=>process.stdout.write(i),strrev=i=i>>1//--><?←for($i=0;;)printf("%s ",strrev($i++));
. 84 Bytes (aber nicht halb so schön wie Ihr Ansatz):<!--←for(i=1;;)process.stdout.write(i+" "+i+++" ")//--><?for(;;)echo strrev(++$i),_;
oder<!--←for(i=1;;)process.stdout.write((++i>>1)++" ")//--><?for(;;)echo strrev(++$i),_;
.i>>1
, die Nummer zu wiederholen, aber ich musste die ändernwrite(i)
, um ein Leerzeichen einzuschließen , und weilwrite()
keine Nummer akzeptiert. Und Sie hatten einen Tippfehler (strrev=i=i>>1
->strrev=i=>i>>1
), der ein weiteres Byte hinzufügte. Letztendlich war es kürzer zu machenwrite(i+i)
undstrrev=i=>i+" "
.V / Brain-Flak Classic ,
27, 26 BytesHexdump:
Probieren Sie es online! in V (geringfügig geändert, damit die Ausgabe beendet wird. In TIO wird V nur ausgegeben, wenn das Programm beendet wird.)
Probieren Sie es online! in Brain-Flak Classic
Dies ist nicht die interessanteste von Polyglots, da der V-Code keine Auswirkungen auf Brain-Flak-Klassiker hat und umgekehrt. Es macht jedoch wirklich Spaß, bei einer Herausforderung beide meiner eigenen Sprachen zu verwenden, und die beiden Lösungen sind ziemlich interessant alleine.
V Erklärung:
BFC Erklärung:
quelle
Retina / Python 2, 61 Bytes
Retina | Python 2
quelle
str()
durch `` zu ersetzen , aber anscheinend den Retina-Code gestört. Ich weiß nicht warum?str
, sonst werden SieL
in die Ergebnisse eingehen. Aber es funktioniert tatsächlich in Retina. Sie müssen sich mehr verändert haben, als Sie gesagt haben, als wenn Sie etwas in eine andere Zeile verschoben hätten.R / Octave ,
83807871 Bytes-3 Bytes dank Luis Mendo
#{ }#
ist ein Octave-Blockkommentar und ist#
zufällig der Kommentar für R. Der R-Interpreter sieht nur die nächste Zeile als den Hauptteil derwhile
Schleife, und der Octave-Interpreter springt direkt vor dem Octave-CodeDer R-Teil gibt Zahlenpaare aus, die bei 1 beginnen, und der Oktavteil gibt die Rückwärtszahlen aus, die bei 0 beginnen.
Ich erwarte voll und ganz, dass ich überfordert bin (auch durch die gleiche Kombination von Sprachen); Ich habe kürzlich so viel Matlab- und R-Code geschrieben, dass ich dachte, ich würde es versuchen.
Probieren Sie es online! - Oktavverbindung
quelle
i=i+1
?+=
nicht in R, also muss es so sein.end
nötig?while(1)
), könnten Sie diese Bytes speichern.Ruby / Python2:
6864 BytesRuby Perspektive
einfaches Init der Variablen:
"#{}"
ist die Syntax für die String-Interpolation. Ich verwende es stattdessen, um einen Ausdruck auszuführen.p
ist eine Abkürzung fürputs
.loop
erstellt eine Endlosschleife.Weiter gibt es das
exec
Ding, aber es wird nie ausgewertet, da die Endlosschleife per Definition unendlich ist. Mussexec
keinen Syntaxfehler mit Python-Code ergeben.Python-Perspektive
Aus Sicht von Python gibt es eine gemeinsame
i=0
. Als nächstes hat Python eine andere Syntax für die String-Interpolation, sodass diese Zeile einfach verworfen wird. Als nächstes gibt es eine Endlosschleife, ähnlich wie bei anderen.quelle
Bash / Check ,
5028 BytesVielen Dank an @Doorknob für das Speichern einiger Bytes durch den Wechsel von Python zu Bash
Zu Bash:
Dies sind nur einige Kommentare, die ignoriert werden.
Starten Sie eine Sequenz von 1 bis unendlich und leiten Sie das Ergebnis an weiter
rev
.Überprüfen:
Dies schaltet sofort nach rechts in den 2D-Modus.
>
Lenkt das IP-Recht, was keine Auswirkung hat. Es springt zum Zeilenanfang und schlägt#
erneut zu, wodurch der 2D-Modus beendet wird. Es trifft dann>
im 1D-Modus, der 0 auf den Stapel schiebt. Da es sich im 1D-Modus befindet, wird die IP in die nächste Zeile umgebrochen.#
schaltet die IP wieder in den 2D-Modus undv
lenkt sie nach unten.Der erste
#
schaltet wieder in den 1D-Modus zurück.p
gibt den TOS als Zahl aus (ohne ihn zu platzieren) und<
druckt dann eine neue Zeile. Dies geschieht zweimal und dann wird die Nummer mit erhöht)
.#
wechselt wieder in den 2D-Modus, sodass die IP an den Zeilenanfang springt, trifft#
, um in den 1D-Modus zu wechseln, usw.quelle
#
für Kommentare und kann sehr einfach die „umgekehrte Zahlen“ Aufgabe ausführen:seq 1 inf|rev
.i=1;loop{puts i.to_s.reverse;i+=1}
ist ein Byte kürzerCJam /> <>,
2723 BytesAn CJam:
Probieren Sie es online! - Beachten Sie, dass Sie bis zur 60-Sekunden-Grenze warten müssen, um die Ausgabe zu sehen, diese jedoch offline funktioniert.
Dies definiert ein mehrzeiliges String-Literal, das niemals verwendet wird.
Die zweite Zeile lautet wie folgt:
An> <>:
Beginnt ein String-Literal.
Inhalt des String-Literal. Jeder der Zeichencodes wird einzeln auf den Stapel geschoben.
Die IP wickelt sich um, um
"
wieder zu erreichen , was den String-Modus beendet.l
Nimmt die Länge des Stapels,a
drückt 10 und,
teilt. Dies gibt uns die Länge des Stapels / 10.:
dupliziert,n
druckt als Zahl,a
drückt 10 undo
druckt als Zeichencode (eine neue Zeile).Gleiche Sache. Geben Sie die Nummer gefolgt von einer neuen Zeile ein. Der Stack hat jetzt wieder die Länge 10 (der Inhalt des ursprünglichen String-Literal befindet sich auf dem Stack).
Die IP wandelt sich dann
"
wieder um, was dazu führt, dass 10 weitere Elemente gepusht werden müssen. Beim nächsten Mal wirdl
20 zurückgegeben, sodass 2 gedruckt wird usw.Die zweite Zeile wird von der IP nie berührt.
quelle
Röda / C (gcc) , 90 Bytes
Röda: Online ausprobieren!
C: Probieren Sie es online!
Erläuterung
Dies missbraucht die Tatsache, dass
//
es sich bei Röda um eine int-Spaltung handelt, bei C jedoch um einen Zeilenkommentar.main(){}
Bezeichnet in beiden Sprachen das Hauptprogramm und ruft beide Funktionenf
mit einem Dummy-Argument von auf0
.In Röda
a=1//1
macht Int Division und ordnet das Ergebnis1
zua
. C siehta=1
und tut dasselbe, aber alles nach dieser Zuordnung ist ein Kommentar für C. Von dort zweigen die beiden Sprachen ab.Röda
Wir haben eine Endlosschleife mit
while[]
( eine leere Bedingung ist wahr ). Innerhalb daß,` $a`
wandelt die ganze Zahla
in eine Zeichenfolge (mit einem führenden Raum) , nach der[::-1]
es umkehrt (und gibt sie mit einem Leerzeichen). Dann wird der Wert vona
um eins erhöht.Außerhalb der while-Schleife beginnt
/*
und endet ein mehrzeiliger Kommentar kurz vor dem Ende der Funktion.C
Nachdem der Rest der Zeile ignoriert wurde, wechselt das Programm in die zweite Zeile. Wir beginnen mit einem Semikolon, da die
a=1
Anweisung beendet werden muss. Danach stoßen wir auf eine einfache for-Schleife, die die iterierende Variablea
zweimal bei jeder Iteration ausgibt.Außerhalb der for-Schleife können Sie den
/*
Endkommentar von Röda einfach ignorieren*/
.quelle
QBIC / QBasic 4.5 , 58 Byte
Dies missbraucht in hohem Maße die Tatsache, dass alle Kleinbuchstaben vom QBIC-Interpreter als wörtlicher QBasic-Code angesehen und daher nur an die QBasic-Schicht von QBIC weitergeleitet werden. So sehen beide Sprachen diesen Code nebeneinander:
quelle
laserLANG / > <> , 163 Bytes
Zum ersten Mal Golf spielen, also ist es etwas größer, als es wahrscheinlich sein könnte. Ich wollte> <> verwenden, aber da einige Leute es bereits zum Erstellen der zweiten Sequenz verwendeten, beschloss ich, das Erstellen der ersten Sequenz zu probieren.
Versuchen Sie> <> online!
Für laserLANG wird ein Offline-Interpreter benötigt, um es auszuprobieren. Es kann hier gefunden werden .
laserLANG
Ausführung beginnt, bei
!
der vollständig ignoriert wird. Es erreicht dann die\
und beginnt, an mehreren Zeichen vorbeizufahren, die es vollständig ignoriert. Endlich kommt es zu einem anderen\
und der Spaß beginnt. Ich habe im Grunde genommen die Idee hinter dem "Hallo, Welt!" Schleife und verdichtete es so gut ich konnte. Es war eine Herausforderung, sich mit der Tatsache auseinanderzusetzen, dass laserLANG den Speicherzähler nur dekrementieren / inkrementieren will, wenn der Programmzähler nach links / rechts läuft. Ich habe das Gefühl, dass die meisten Bytes hier durch einige Tricks gespeichert werden könnten, an die ich nicht gedacht habe.> <>
Die Ausführung beginnt,
!
wodurch der Befehl übersprungen wird\
. Dann geht es weiter, als ob der laserLANG-Code nicht da wäre. Mir war nicht klar, dass> <> nur die Float-Division unterstützt, daher war ein kurzes und einfaches Abschneiden zunächst etwas verwirrend.quelle
Befunge-98 / > <> , 32 Bytes
Schrieb dies, bevor ich sah, wie viele
><>
Antworten es gab. Hintergrund:\
Ist ein Richtungsänderungsoperator in> <>, der es in diesem Fall nach unten drückt, während er in Befunge die beiden obersten Elemente auf dem Stapel vertauscht. Der Befunge-Code sieht folgendermaßen aus:Probieren Sie es online!
Gibt die durch Zeilenumbrüche getrennten Rückwärtszahlen aus. Befunge druckt nach jeder Zahl automatisch ein Leerzeichen, sodass jede Ziffer durch Leerzeichen getrennt ist. Ruft wiederholt die letzte Ziffer ab, druckt sie aus und teilt die Zahl durch 10, bis sie 0 ist. Dann inkrementieren und wiederholen.
Der Code> <> wechselt sofort in die zweite Zeile.
Probieren Sie es online!
Und ist ziemlich einfach. Holen Sie sich die Länge des Stapels, drucken Sie zweimal mit Zeilenumbrüchen und belassen Sie eine Kopie der Länge auf dem Stapel für die nächste Schleife.
quelle
Ruby / Stacked , 37 Bytes
Probieren Sie es online!
Dies druckt
1 1 2 2
... in Ruby und1 2 3 ... 01 11 21...
in Stacked.Erläuterung
In Ruby:
Nach dem Entfernen des Kommentars wird dies:
Die einzig relevante Zeile ist hier die letzte.
p
Gibt sein Argument zurück,p p
druckt es also zweimal aus.$.
beginnt bei0
,$.+=1
erhöht sich also$.
und gibt den erhöhten Wert zurück. Daher druckt dies jede Zahl1
zweimal aus.In gestapelten:
Dies entspricht den folgenden Token:
Die ersten beiden sind nicht relevant (Umwandlung
0
in eine Reduktionsfunktion). Dann0
wird auf den Stapel geschoben. Danach wird die Funktion[1+:tostr rev out]
auf den Stapel geschoben.loop
öffnet diese Funktion und führt sie unbegrenzt aus.Das Innere der Funktion erhöht den oberen Rand des Stapels (
1+
), dupliziert ihn (:
), konvertiert ihn in einen String (tostr
), kehrt ihn um (rev
) und gibt ihn aus (out
). Dieser Vorgang wird unendlich oft wiederholt. Da die Schleife unendlich ist, wird alles, was nach diesem Token kommt, vom Interpreter im Wesentlichen ignoriert.quelle
> <> / Jelly , 37 Bytes (25 in Jellys Codepage)
Versuchen Sie> <> online!
Probieren Sie Jelly online aus!
> <> druckt die Sequenz zweimal bis unendlich, Jelly zählt rückwärts.
> <> befasst sich nur mit der obersten Zeile:
Und danke an @ Challenger5 für das Speichern einiger Bytes hier im Zeilenvorschub
Jelly führt seinen Code von unten nach oben aus. Nur die letzten beiden Zeilen sind relevant.
quelle
><>
Code verwendeten Zeichen haben ASCII-Codepunkte, die der Jelly-Codepage entsprechen. Ich weiß nicht viel über dieses Codepage-Geschäft, aber ich denke, dies würde zu denselben Bytes führen, die zur Darstellung des Codes verwendet werden. Die Zeichen in den unteren Zeilen werden von ignoriert,><>
sodass es keine Rolle spielt, ob sie zwischen den Codepages genau gleich sind. Die Byteanzahl wurde aus der><>
TIO-Verbindung entnommen .","
einfach den ASCII-Wert von,
auf den Stapel, damit Sie ihna
stattdessen als Trennzeichen für Zeilenumbrüche verwenden können.C (gcc) / PHP ,
1028680 BytesGibt die doppelte Sequenz in C und die umgekehrte Sequenz in PHP aus.
Probieren Sie es in C!
Probieren Sie es in PHP!
Erklärungen
C
In C das
#
Formular-Präprozessor-Zeug. Ich weiß nicht viel über C, aber es beklagt sich nicht, wenn es für dieses Zeug eine leere Zeile gibt. Das//
bildet einen Zeilenkommentar. Ein\
am Ende einer Zeile bedeutet im Wesentlichen, die neue Zeile zu "maskieren" und die beiden Zeilen als eine zu behandeln. Dies funktioniert auch für Zeilenkommentare, sodass die zweite Zeile als Kommentar in C angesehen wird. In der dritten Zeile werden die Zahlen mit einer einfachen for-Schleife ausgegeben. Danach gibt es einfach einen Kommentar.PHP
Bildet in PHP
#
einen Zeilenkommentar, sodass die erste Zeile vollständig ignoriert wird. Die zweite Zeile gibt die mit einer for-Schleife umgekehrten Zahlen aus und trennt sie mit\nint main(i){for(;;i++)printf("%d %d ",i,i);}//
(dem in eine Zeichenfolge eingeschlossenen C-Code).quelle