Der vielseitige Ganzzahldrucker

93

Schreiben Sie einen Code, der in mindestens drei verschiedenen Sprachen ausführbar ist. Der Code muss die Ganzzahl 1in der ersten Sprache, 2in der zweiten Sprache , 3in der dritten Sprache usw. ausgeben .

Regeln:

  • Die Ausgabe muss nur die Ganzzahl sein, aber nachfolgende Zeilenumbrüche sind in Ordnung.
  • Der Code kann keinerlei Eingaben entgegennehmen
  • Verschiedene Hauptversionen derselben Sprache gelten als einzigartig. Daher kann Ihr Code in Python 2 und Python 3 ausführbar sein, Python 2.5 und Python 2.7 werden jedoch nicht als eindeutig betrachtet.
  • Sie können eine neue Sprache nur dann verwenden, wenn sie über einen Esolang- / Wiki-Artikel, einen verfügbaren Interpreter und eine Dokumentation verfügt und von mindestens zwei Benutzern in PPCG verwendet wurde, bevor Sie sie in dieser Herausforderung verwenden. Es muss auch diese 4 Regeln einhalten .

Die Bewertung Ihrer Einreichung ergibt sich aus der Anzahl der Bytes in Ihrem Code geteilt durch die Anzahl der Sprachen, die in Cubes ausgeführt werden können. Eine 54-Byte-Lösung, die in drei Sprachen ausführbar ist, hat eine Punktzahl von 2:

54 / 3^3 = 2  

Niedrigere Punktzahl ist besser.


Bestenliste

Stewie Griffin
quelle
6
@muddyfish Sie könnten in der Lage , die kleinere Version innerhalb des Codes zu holen, die Sie dann geben würde freie Lösungen für alle 2.7.1zu 2.7.n. (Tatsächlich macht Sweerpotato genau das mit Hauptversionen.)
Martin Ender
14
Ich denke, vielleicht macht die kürzeste Lösung nach Sprache hier keinen Sinn ...: P
FryAmTheEggman
3
@Mego Ich auch nicht, deshalb hinterlasse ich sarkastische Kommentare zum Problem, damit andere davon erfahren: P
FryAmTheEggman
12
Ich wollte Ihnen nur gratulieren, wie ausgewogen Ihre Wertung ist. Wenn Code-Challenges zwei Größen zu einer Punktzahl mischen, ist der Kontostand fast immer so niedrig, dass die beste Antwort nur eine der Punktzahlen optimiert, ohne die andere überhaupt berücksichtigen zu müssen. Das kubische Gewicht der Anzahl der Sprachen war hier perfekt ... während es immer möglich war, eine andere Sprache hinzuzufügen, war es immer eine sehr schöne (aber machbare) Herausforderung, dies in der Anzahl der verfügbaren Bytes zu tun. :)
Martin Ender
20
In dieser PPCG-Herausforderung haben wir gemeinsam einen Polyglott entwickelt. Es hat jetzt eine bessere Punktzahl für diese Herausforderung als die führenden Beiträge, die für diese Herausforderung eingereicht wurden. Es wäre jedoch nicht sinnvoll, eine Gruppenleistung zu kopieren, die ständig verbessert wird. Deshalb werde ich hier nur in den Kommentaren darauf hinweisen.

Antworten:

90

30 Sprachen, 248 Bytes, 248/30 ^ 3 = 0,009185

#|#?15g,@           kkmNmSaIeoe99+{\#/-;n@0ea
#[9!@>.>.eeaww#-1@*"12" L
#{  
###
#`{
25
print(4^2 +7)/2


"""
Jo is here.
$'main'MoO OOM
 7
>Jo, 30
>X Jo
f::=~27
::=]##}#(prin 29)
print (7/6*24)###;alert 2#-[>+<-----]>-.|#(write(if(= 1/5 .2)26 3))"""

Edit: Beatnik entfernt, da Primalitätstests in Beatnik möglicherweise nicht möglich sind.

Der Code hat Registerkarten es (die durch Stapel von Exchange verstümmelt werden) und eine Hinter Newline, also hier ist die xxd:

00000000: 237c 233f 3135 672c 4020 2020 0920 2020  #|#?15g,@   .   
00000010: 206b 6b6d 4e6d 5361 4965 6f65 3939 2b7b   kkmNmSaIeoe99+{
00000020: 5c23 2f2d 3b6e 4030 6561 0a23 5b39 2140  \#/-;n@0ea.#[9!@
00000030: 3e2e 3e2e 6565 6177 7723 2d31 402a 2231  >.>.eeaww#-1@*"1
00000040: 3222 094c 0a23 7b20 090a 2323 230a 2360  2".L.#{ ..###.#`
00000050: 7b0a 3235 0a70 7269 6e74 2834 5e32 202b  {.25.print(4^2 +
00000060: 3729 2f32 0a0a 0a22 2222 0a4a 6f20 6973  7)/2...""".Jo is
00000070: 2068 6572 652e 0a24 276d 6169 6e27 4d6f   here..$'main'Mo
00000080: 4f20 4f4f 4d0a 2037 0a3e 4a6f 2c20 3330  O OOM. 7.>Jo, 30
00000090: 0a3e 5820 4a6f 0a66 3a3a 3d7e 3237 0a3a  .>X Jo.f::=~27.:
000000a0: 3a3d 5d23 237d 2328 7072 696e 2032 3929  :=]##}#(prin 29)
000000b0: 0a70 7269 6e74 2028 372f 362a 3234 2923  .print (7/6*24)#
000000c0: 2323 3b61 6c65 7274 2032 232d 5b3e 2b3c  ##;alert 2#-[>+<
000000d0: 2d2d 2d2d 2d5d 3e2d 2e7c 2328 7772 6974  -----]>-.|#(writ
000000e0: 6528 6966 283d 2031 2f35 202e 3229 3236  e(if(= 1/5 .2)26
000000f0: 2033 2929 2222 220a                       3))""".

Alternativ können Sie den Code kopieren und einfügen, indem Sie auf "Online testen" klicken. link .

Das ist ziemlich schlecht, aber ich wollte die Idee ausspielen, dass, wenn Sie genug Sprachen haben, die Byteanzahl nicht mehr so ​​wichtig ist. Trotzdem gibt es einige Sprachen, die ich noch leicht hinzufügen könnte (z. B. Objeck), die aber derzeit zu lang sind, um nützlich zu sein. Ich habe aber keine guten Sprachen mehr, deshalb höre ich vielleicht erst einmal hier auf.

Führen Sie alle Programme mit </dev/null 2>/dev/null(dh leere Eingabe, unterdrücktes STDERR) aus.

Die Erklärung ist ziemlich lang, deshalb hier eine Zusammenfassung:

No.  Lang.              Non-esolang?     2D esolang?      BF/BF-deriv?
--------------------------------------------------------------------------
1    COW                                                       ✓
2    CoffeeScript            ✓
3    Common Lisp             ✓
4    Retina
5    Befunge-93                               ✓
6    Python 2                ✓
7    Rail                                     ✓
8    ETA
9    Prelude
10   Gol><>                                   ✓
11   evil
12   Foo                                                       ✓
13   Ruby                    ✓
14   ><>                                      ✓
15   Brian & Chuck                                             ✓
16   Whitespace
17   3var
18   Axo                                      ✓
19   Labyrinth                                ✓
20   Starry
21   Fission                                  ✓
22   Brainfuck                                                 ✓
23   Julia                   ✓
24   Lily                    ✓
25   GolfScript
26   Chicken Scheme          ✓
27   Thue
28   Perl 6                  ✓
29   Picolisp                ✓
30   TRANSCRIPT

1. KUH

COW ist ein Brainfuck-Derivat mit zusätzlichen Befehlen, von denen einer eine numerische Ausgabe ist. Alles, was ungültig ist, wird ignoriert, das ausgeführte Programm also nur

MoO OOM

Dadurch wird die Zelle auf 1 erhöht und dann als Zahl gedruckt.

2. CoffeeScript (inklusive Dolmetscher)

CoffeeScript sieht:

# comments
###
multiline comment
###;alert 2# comment

das alarmiert einfach 2.

(Ja, es wäre wahrscheinlich besser, wenn eine andere Sprache diesen Platz einnehmen würde, aber ich bin zu faul, um an dieser Stelle neu zu mischen: P)

3. Common Lisp | ideone

Common Lisp (clisp) sieht:

#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""

1/5Ist eine rationale und nicht gleich 0.2, so wird 3 gedruckt. Das Verfahren """ist ein Syntaxfehler.

Beachten Sie, dass printin Common Lisp eine vorangestellte Zeile und ein nachfolgendes Leerzeichen ausgegeben werden. Zum Glück writefunktioniert es jedoch sowohl in Common Lisp als auch in Chicken Scheme.

4. Retina | Probieren Sie es online!

Eingeführte Einschränkungen : Jede zweite Zeile ab der ersten muss ein gültiger regulärer Ausdruck sein.

Jedes Zeilenpaar bildet eine Ersetzungsstufe, in der Übereinstimmungen des regulären Ausdrucks der ersten Zeile durch die zweite Zeile ersetzt werden. In der Mitte haben wir das Paar

"" "

Das ersetzt die anfängliche leere Zeichenfolge durch """. Die letzte leere Zeile, die zu keinem Paar gehört, wird als Übereinstimmungsphase behandelt und zählt die Anzahl der Übereinstimmungen des regulären Ausdrucks. Es gibt vier Fälle von leeren String in """, nämlich 1"2"3"4.

5. Befunge-93 | Dolmetscher

Befunge ist eine 2D-Sprache, und die entsprechenden Anweisungen sind

# # 15g,@

in der ersten Zeile und 5in der 25Zeile. #Überspringt die nächste Anweisung, 15gholt das Zeichen an die Position (1, 5)im Code (das 5in der 25Zeile), ,gibt das Zeichen aus und @hält an.

6. Python 2 | ideone

Python sieht:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6, das wird printed.

7. Schiene | Probieren Sie es online!

Rail ist eine 2D-Sprache und die Ausführung beginnt bei der $Hauptfunktion in Richtung Südosten. Somit ist der relevante Teil des Codes

$'main'
 7
  o
   J

mit den von TRANSCRIPT verwendeten ound Jkommenden Zeilen. Nach der Ausgabe von 7 trifft der Zug eine nicht erkannte JAnweisung, die das Programm zum Absturz bringt.

8. ETA | Probieren Sie es online!

Eingeführte Einschränkungen: Zeichen vor dem ETA-Programm sollten nicht enthalten sein etaoinsh.

ETA erkennt nur die Buchstaben etaoinshund deren Großbuchstaben, dh der Code beginnt mit

NSaIeoe

n...ePusht eine Zahl zur Basis 7 basierend auf dem, was sich innerhalb der Begrenzer SaIbefindet 624, also is oder 312 in Dezimalzahl. ogibt dann als char aus, anscheinend nach modulo 256, und gibt das char aus 8(Code-Punkt 56). eDann wird versucht, mit einem leeren Stapel zu teilen, was fehlschlägt.

9. Vorspiel | Probieren Sie es online!

Eingeführte Einschränkungen: Es wurde nicht mehr als eine ()Spalte gleichzeitig ()gelesen, und es wurden keine Endlosschleifen verursacht durch ().

Dazu muss der Python-Interpreter NUMERIC_OUTPUT = Trueeingestellt sein.

Prelude ist eine Sprache, in der jede Zeile einzeln ausgeführt wird. Viele Zeichen werden ausgeführt, aber der wichtigste Teil ist das

9!

In der zweiten Zeile, die 9 ausgibt, ()bezeichnen Prelude eine Schleife, aber dank der Hervorhebung von #s (die aus dem Stapel herausspringen) sind die Spitzen der Stapel immer 0, wenn eine Schleife getroffen wird, also keine von ihnen laufen. Preludes Quellcode-Einschränkungen bezüglich ()einiger überflüssiger Leerzeichen.

10. Gol> <> | Dolmetscher

Dieser Teil (und> <>) funktionieren wie Martins Antwort . Der relevante Code ist

#                                      ;n@0ea

Gol> <> ist eine 2D-Sprache und #spiegelt die IP wider, sodass sie nach links wandert. Es wickelt sich um, drücke 10, 14 und 0 auf den Stapel. @dreht dann den Stapel, bringt 10 nach oben, ngibt ihn aus und ;hält das Programm an.

11. böse | Probieren Sie es online!

Dieser Teil ähnelt auch Martins Antwort.

Das Böse ignoriert alles außer Kleinbuchstaben. Wenn Sie ein paar weitere Zeichen ignorieren, ist dies der relevante Teil

aeeeaeeaww

wo adie Variable inkrementiert A, eist EvILs weave - Funktion , die die Bits mischt Aund wAusgänge A. Wir geben also 1zweimal aus und geben 11.

Aber was ist mit dem Rest der Anweisungen und insbesondere wmit der letzten Zeile? Sagen wir einfach, dass es manchmal am einfachsten ist, mit dem Code herumzuspielen und zu beten, dass er immer noch in allem funktioniert, was hier irgendwie der Fall war ...

12. Foo | Probieren Sie es online!

Foo gibt alles zwischen doppelten Anführungszeichen aus, der relevante Teil ist also das

"12"

in der zweiten Zeile. Da wir jedoch später doppelte Anführungszeichen benötigen, verwenden wir eine Methode, die Martins Antwort ähnelt, um den Foo-Fehler zu beheben, nämlich die vorhergehende #-1@. Es ist unklar, warum das in einer Sprache funktioniert, die die Soldaten angesichts des leeren Stapels und der Division durch Null-Fehler beherrschen, aber ich bin froh, dass das so ist.

13. Ruby | ideone

Ruby sieht wie Python:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

Allerdings ist es erwähnenswert, dass der mehrzeilige Zeichenfolge tatsächlich drei separate Strings sind ( "", "...", "") miteinander verkettet. Die Druckzeile (4^2+7) = xor(4,2)+7 = 6+7 = 13wird ausgegeben, bevor versucht wird, nildurch 2 zu teilen .

14. > <> | Probieren Sie es online!

Dieser Teil ist der gleiche wie der Gol> <> -Teil, außer dass @die 14 stattdessen nach oben verschoben wird, was ausgegeben wird.

15. Brian & Chuck | Probieren Sie es online!

Brian & Chuck ist ein BF-Derivat mit zwei Bändern, wobei der Befehlszeiger eines Bandes der Speicherzeiger des anderen Bandes ist. Ist dies nicht der Fall ```, werden die ersten beiden Zeilen des Quellcodes zum Initialisieren der Bänder verwendet.

Die relevanten Zeichen in den ersten beiden Zeilen sind:

   ?15
#     >.>.

Das Band ?in Brians übergibt die Kontrolle an Chuck in der Zelle, auf die (das #) zeigt, ist ungleich Null. Chuck wird ausgeführt >.>.und gibt die beiden Zeichen nach dem Fragezeichen aus.

16. Leerzeichen | Dolmetscher

Mit STLfür Leerzeichen, Tabulator und Zeilenvorschub bzw. ist der Start des Programms:

SSSTSSSSL
TL
STL
L
L

Die erste Zeile drückt 16 ( +10000Basis 2), die vorhergehende gibt TLSTsie als Zahl aus. Die nächsten drei Zeilen unterbrechen das Programm.

Beachten Sie jedoch, dass dieses Programm spezifisch für den Interpreter ist. Der Rest der Codesyntaxfehler in den meisten Interpretern, so dass ein milderer Interpreter erforderlich ist, wie der oben verlinkte.

17. 3var | Probieren Sie es online!

In der ersten Zeile werden eine Reihe von Anweisungen ausgeführt, die relevanten jedoch

kkmmao#/

Aufgrund der ETA-Einschränkung wird kdie Variable B dekrementiert und nicht ainkrementiert. kkdekrementiert B auf -2 und mmQuadrate B zweimal auf 16, was mit auf 17 inkrementiert wird a. Dies wird dann mit ausgegeben o.

#wird dann verwendet, um B auf 0 zurückzusetzen, und /bewirkt , dass das Programm durch Division durch 0 einen Fehler macht.

18. Axo | Probieren Sie es online!

Eingeführte Einschränkungen: Keine Anweisungen vor dem Axo-Programm, die die Richtung der IP ändern

Wieder wird in der ersten Zeile eine ganze Reihe von Anweisungen ausgeführt, aber die relevanten sind es

# # 15 ,@            9 9  + {   \

Axo ist eine 2D-Sprache wie Befunge und #in ähnlicher Weise eine Brücke, die den nächsten Befehl überspringt, jedoch nur dann, wenn der obere Rand des Stapels Null ist. 15,auf den Stapel schieben, aber der Stapel wird mit geleert @. 99+dann drückt 18, {gibt aus und \hält an.

19. Labyrinth | Probieren Sie es online!

Labyrinth ist eine andere 2D-Sprache, und die ausgeführten Anweisungen sind

#|#
 [9!@

#Drückt die Länge des Stapels, die beim ersten Mal 0 ist. |ist bitweises ODER, ändert aber nichts, da der Stack zu diesem Zeitpunkt nur 0s hat und der zweite #aufgrund der einsamen Null nun 1 drückt. Wir biegen aufgrund der 1 nach rechts ab, 9konvertieren diese 1 in 1*10+9 = 19, !drucken sie und halten @an.

Dieses Programm [basiert auf der Tatsache, dass es sich derzeit nicht um eine anerkannte Anweisung handelt und daher als Wand behandelt wird.

20. Sternenhimmel | Probieren Sie es online!

Eingeführte Einschränkungen: Alle +s müssen mindestens ein vorangestelltes Leerzeichen enthalten

Wenn wir nicht erkannte Zeichen entfernen, ist der relevante Teil des Codes

,       +.. +

,wird eingegeben, aber da wir von /dev/nulldort keine Pipe geben, drücke 0 auf den Stack. A +mit n >= 5vorangestellten Leerzeichen drückt n-5, so dass der nächste Befehl 2 drückt und ..dann diese beiden Ziffern in umgekehrter Reihenfolge ausgibt.

Als nächstes haben wir ein +mit einem einzelnen vorangestellten Leerzeichen, das sich dupliziert. Der Stack ist jedoch leer, sodass wir einen Fehler machen.

21. Spaltung | Probieren Sie es online!

Der einzige relevante Teil für Fission ist

*"12"L

Lerzeugt ein Atom, das sich nach links bewegt, "21"druckt 21 und *hält an.

22. Brainfuck | Probieren Sie es online!

Eingeführte Einschränkungen: Nein .vor dem ersten[

Dies erfordert einen Interpreter, der bei EOF 0 ergibt und 8-Bit-Zellen hat. Der relevante Code ist

,+-[>.>.-+.>,>]-[>+<-----]>-..

Der Anfang -soll das versetzen +, und der erste [...]wird nicht ausgeführt, da die Zelle 0 ist. Das Folgende -[>+<-----]>-setzt die Zelle auf den Zeichencode von 2und ..gibt ihn zweimal aus.

23. Julia | Probieren Sie es online!

Julia sieht:

# comments
25
print(4^2 +7)/2

Was gedruckt wird 4^2+7 = pow(4,2)+7 = 16+7 = 23, ist , und die Programmfehler versuchen, nothingdurch 2 zu teilen . Beachten Sie, dass Julia nichts dagegen zu haben scheint, dass der Rest des Codes ohnehin einen Syntaxfehler verursachen würde.

24. Lily | Dolmetscher

Lily sieht:

# comment
#[
multiline comment
]## comment
print (7/6*24)# comment

7/6*24 = 1*24 = 24 gedruckt wird.

25. GolfScript | Probieren Sie es online!

GolfScript sieht:

# comments
25
print(

GolfScript ist stapelbasiert, daher werden 25 auf den Stapel geschoben, dann abgelegt und mit gedruckt print. (Dann wird versucht, die implizite leere Zeichenfolge auf dem Stapel zu dekrementieren, was fehlschlägt und das Programm fehlerhaft macht.

26. Hühnerschema | ideone

Das Hühnerschema hat dieselbe #| ... |#mehrzeilige Kommentarsyntax wie Common Lisp. In

(write(if(= 1/5 .2)26 3))

1/5ist ein Schwimmer, ist gleich 0.2, so wird stattdessen 26 ausgegeben.

27. Thue | Probieren Sie es online!

Thue ist eine Sprache, die auf dem Umschreiben von Zeichenfolgen basiert. Der erste relevante Teil ist

f::=~27
::=

die eine Substitution definiert, f -> 27bezeichnet dann das Ende von Substitutionen mit ::=. Der Lone- fIn ifwird dann durch ersetzt 27und ausgegeben.

28. Perl 6 | ideone

Perl 6 hat eine neue Kommentarsyntax, nämlich #`(some bracket)einen mehrzeiligen Kommentar bis zur entsprechenden Klammer. So sieht Perl 6:

# comments
#`{
multiline comment
}# comment
print (7/6*24)# comment

welche druckt 7/6*24 = 28.

29. Picolisp | ideone

Picolisp sieht:

# comment
#{
multiline comment
}#(prin 29)

Die Zeile danach verursacht dann einen Syntaxfehler.

30. TRANSKRIPTIEREN | Probieren Sie es online!

TRANSCRIPT ist ein thematischer Esolang, der Textabenteuern nachempfunden ist. Nicht erkannte Zeilen werden ignoriert (was es Ihnen ermöglicht, zusätzlichen Text für Story / Flavour zu den eigentlichen Code-Anweisungen hinzuzufügen). Die relevanten Zeilen lauten also:

Jo is here.
>Jo, 30
>X Jo

In der ersten Zeile wird eine Zeichenfolgenvariable Jomit einem Namen aus zwei Buchstaben deklariert , da Ein-Buchstaben-Namen scheinbar fehlschlagen. In der zweiten Zeile wird dieser String auf gesetzt "30", der Xin der dritten Zeile von ("exam") ausgegeben wird .

Sp3000
quelle
12
Daaaaaaaaaang ...
AdmBorkBork
9
Ich vermute, dass dies die niedrigste Nicht-Null-Punktzahl bei jeder Frage hier ist.
Morgan Thrapp
Das ist unglaublich. Ich bin voller Ehrfurcht.
Nic Hartley
2
* positiv, es gibt ein paar negative Punkte für kurze Antworten mit Boni.
CalculatorFeline
Ein Tipp aus der Zukunft: Ihre Tabs werden nicht durcheinander gebracht, wenn Sie Ihren Code in preTags einschließen, anstatt einen Markdown-Codeblock zu verwenden.
Jakob,
148

15 Sprachen, 68 66 65 Bytes / 15 ^ 3 = 0,019 ...

Retina , Starry , Prelude , ETA , Axo , Labyrinth , Hexagony , Foo , Brian & Chuck , Gol> <> , böse , Leerzeichen , Fission , > <> und GolfScript .

Nach einer gründlichen Überarbeitung habe ich es geschafft, in vier weitere Sprachen zu passen. Der Code enthält die wenigen Registerkarten für Whitespace. Da Stack Exchange sie in Leerzeichen konvertiert, habe ich sie wie folgt dargestellt \t:

#I5aeeNTH{\?      \t\t + +3;n@"8"ea9
15}7'`--~!@<"31"LSOe.\t
 \teaww`

Ich denke, ich bin fertig mit dem Hinzufügen von Sprachen (obwohl das Hinzufügen von nur einer möglicherweise einige Bytes in dem, was ich bereits habe, spart). Ich frage mich, ob es überhaupt golffähig ist ... 65 Bytes für 15 Sprachen sind ein ziemlicher Sprung von 32 Bytes für 11 Sprachen, und jetzt habe ich mindestens einen nutzlosen Charakter, damit Foo funktioniert.

Retina druckt 1

Probieren Sie es online aus.

Zum Glück ist die erste Zeile ein gültiger regulärer Ausdruck. Allerdings stimmt dieser reguläre Ausdruck offensichtlich nicht mit der leeren Eingabe überein, sodass die erste Stufe (bestehend aus den ersten beiden Zeilen) nichts bewirkt.

Die dritte Zeile ist eine eigene Zeile. Sie wird daher als Match-Phase behandelt, in der standardmäßig die Anzahl der Übereinstimmungen gezählt wird. Das `ist jedoch ein Trennzeichen, das Retina mitteilt, dass der Teil davor ein Konfigurationsstring ist (zufällig kennt es keine der dort angegebenen Optionen) und der Teil danach der reguläre Ausdruck ist. Die Regex ist also leer und Retina findet genau eine Übereinstimmung.

Sternendrucke 2

Probieren Sie es online aus.

Starry ignoriert alles außer Leerzeichen und +*,'`.. Jeder Befehl ist eines dieser Zeichen in Verbindung mit den Leerzeichen seit dem letzten dieser Zeichen. Entfernen wir also den gesamten fremden Code:

       + +'`. `

Sieben Felder gefolgt von +einem 2. Ein Leerzeichen gefolgt von einem +Duplikat. 'ist ein bedingter Sprung. Es springt auf die Oberseite des Stapels, was wahr ist (positiv), also springt es zu dem entsprechenden Etikett (wobei Etiketten durch gekennzeichnet sind `und "entsprechend" bedeutet "mit der gleichen Anzahl von führenden Leerzeichen"), welches das erste ist `. .Ohne Leerzeichen davor wird der obere Teil des Stapels als Zahl gedruckt.

Vorspiel druckt 3

Probieren Sie es online aus.

Dies setzt den Python-Interpreter voraus, der eine numerische Ausgabe verwendet. Lassen Sie uns alle No-Ops entfernen:

# 5        ?         + +3    8   9
15 7  -- !   31

Die erste Stimme macht ein paar Sachen, aber nichts davon ist wichtig, weil es keine !Ergebnisse gibt , die gedruckt werden könnten. Die zweite Stimme drückt a 1, dann a 5, dann a 7. Wir nehmen die Differenz der letzten beiden, um zu erhalten -2, und subtrahieren sie dann von der 1, um zu erhalten 3. !druckt es aus. Die dritte Stimme hat nur No-Ops.

ETA druckt 4

Probieren Sie es online aus.

ETA ignoriert alles außer den Zeichen ETAOINSH(auf jeden Fall). Der Code für ETA lautet also:

IaeeNTHneaSOeea

Iversucht Eingaben zu lesen, kann aber nicht, also drückt es -1. adrückt die aktuelle Zeilennummer plus 1, was ist 2. eist divmod , das diese durch 0und ersetzt 1(oder -1, ich weiß es eigentlich nicht, aber es spielt keine Rolle). Der nächste eersetzt beide durch 0.

Nun der interessante Teil. NTHneist ein Basis-7-Zahlenliteral. Nund esind nur die Begrenzer, und die drei Ziffern sind THN. Das ist 54(wo Tist die Ziffer 1, Hist 0und nist 5). adrückt 2noch einmal. Ssubtrahiert es 52und Ogibt es als Zeichen aus ( 4). Jetzt eversucht divmod wieder, aber der Stapel enthält zwei Nullen, so dass das Programm endet mit einem Fehler (aber nicht STDOUT verschmutzen , während dabei).

Axo druckt 5

Probieren Sie es online aus.

Diese Sprache war so gut wie im Alleingang für das Umschreiben verantwortlich. Ich konnte das nicht }in der ersten Zeile haben, da es für Eingaben in Axo blockiert würde (siehe Revisionsverlauf für das, wovon ich spreche). Für Axo ist nur dieser Teil des Codes relevant:

#I5aeeNTH{\

Zum Glück hat Axo auch implizites 0s am unteren Rand seines Stapels, da es #den oberen Rand des Stapels öffnet (um zu prüfen, ob die nächste Anweisung übersprungen werden sollte oder nicht). Die Buchstaben sind alle No-Ops. Dann 5drückt man a 5, {druckt es aus, \beendet das Programm. Ganz einfach.

Labyrinthdrucke 6

Probieren Sie es online aus.

Ich schneide den Code ein wenig ab, da die rechte Hälfte nie erreicht wird und ich tanstelle von auch verwende \t, damit die Spalten richtig ausgerichtet sind:

#I5aeeNTH{\
15}7'`--~!@
 teaww`

Da Buchstaben, Leerzeichen und Tabulatoren in Labyrinth Wände sind, sieht der zugängliche Code folgendermaßen aus:

# 5      {\
15}7'`--~!@
      `

Der Anweisungszeiger folgt automatisch diesem Pfad. #Schiebt die Tiefe des Hauptstapels ( 0) und 15verwandelt ihn in einen 15. }Verschiebt es auf den Zusatzstapel, und wir werden es nicht mehr verwenden. Das macht die Spitze des Stapels bequem zu Null, damit die IP nicht nach links auf die wechselt 5. 7verwandelt die Null in ein 7, 'ist ein No-Op. Das `ist unäre Verneinung, also bekommen wir -7. Nun -subtrahiert die -7von den impliziten 0darunter machen 7. Dieses Mal dreht sich die IP nach rechts zu der `, was eine unäre Verneinung ist, also bekommen wir es 7wieder. Die IP trifft eine Sackgasse und dreht sich um. Der -macht das selbe wie vorher, damit wir bekommen7einmal mehr. Da die Spitze des Stapels jetzt positiv ist, wird die IP nach rechts gedreht. Es gibt noch einen, -der -7wieder gibt . Dann ~steht bitweise NICHT, was es gibt 6und !druckt. Das ist genau der richtige Moment, denn jetzt ist der Stack wieder leer, so dass die IP nicht links auf die abbiegt, {sondern geradeaus weiter in die, @die das Programm beendet.

Hexagony druckt 7

Probieren Sie es online aus.

Der entfaltete Code sieht folgendermaßen aus:

     # I 5 a e
    e N T H { \
   ? + + 3 ; n @
  " 8 " e a 9 1 5
 } 7 ' - - ~ ! @ <
  " 3 1 " L S O e
   . e a w w . .
    . . . . . .
     . . . . .

Normalerweise wäre das ein furchterregendes Hexagony-Programm, aber die tatsächlich verwendeten Zeichen sind nicht zu viele. Tatsächlich sind sie so ziemlich die gleichen wie die von Labyrinth und ich finde die Art 5und Weise, wie ich mich unterscheide, 6sehr schön. :)

Die oberste Reihe kann grundsätzlich ignoriert werden. #würde normalerweise zu einer anderen IP wechseln, aber die aktuelle Speichergrenze ist 0, also nicht. Die Buchstaben setzen nur einen festen Speicherwert, aber wir werden ihn nicht verwenden. Nach dem Ende der ersten Reihe setzt sich der Kontrollfluss in der mittleren Reihe fort (beginnend von }rechts). Der }bewegt sich zu einem anderen Speicherrand. 7setzt diese Kante auf 7. 'bewegt sich zurück, wo wir herkommen. -subtrahiert die Speicherkante, auf die wir gerade eingestellt haben, 7von einer nicht verwendeten Speicherkante ( 0), sodass wir erhalten -7. Der nächste -macht dasselbe noch einmal, es ist also ein No-Op. Bisher ziemlich ähnlich wie Labyrinth (abgesehen vom Speicherlayout). Aber jetzt~ist nicht bitweise NICHT sondern unäre Negation in Hexagony. Das gibt also 7statt 6. !@, wie in Labyrinth, druckt den Wert und beendet das Programm.

Foo druckt 8

Probieren Sie es online aus.

Wie wir alle seit The Programming Language Quiz wissen, ist das Drucken von Dingen in Foo ziemlich trivial, auch wenn der größte Teil des Codes ein zufälliges Durcheinander von Zeichen ist. Keines der Zeichen beeinflusst die Ausgabe außer dem, "8"was gedruckt wird 8. Nun, es gibt das "31"später, aber Foo bricht mit einem Fehler am Ende der ersten Zeile ab. Ich bin mir nicht ganz sicher, warum das passiert, aber es erfordert die 3(oder eine andere Ziffer) in der obersten Reihe, die nirgendwo anders verwendet wird.

Brian & Chuck druckt 9

Probieren Sie es online aus.

Machen wir das noch einmal, indem wir die dritte Zeile entfernen (sie wird nie analysiert) und alle irrelevanten Zeichen (dh No-Ops oder Zellen, die nicht gelesen werden) durch Leerzeichen ersetzen:

         { ?         + +         9
  }   --   <        .

Zur Erinnerung, jede Zeile ist wie ein Brainfuck, dessen Band der Quellcode des anderen Programms ist. Der Kontrollfluss beginnt in der ersten Zeile (Brian genannt).

Der {bewegt den Bandkopf ganz nach links (wo er sich bereits befindet), und die ?Hände steuern den Fluss zu Chuck (der zweiten Zeile). Dort }bewegt sich das Band den Kopf nach rechts , bis er eine Null - Zelle findet. Das passiert erst am Ende des Programms, so dass der Bandkopf eine Zelle nach dem anderen endet 9. -dekrementiert diese Zelle, aber das ist irrelevant. <Bewegt den Bandkopf auf 9und .druckt ihn aus. Chuck hat kein Programm mehr und bricht ab.

Gol> <> druckt 10

Hier getestet.

#Ist ein Spiegel, springt die IP sofort zum Ende der ersten Zeile (und geht nach links). Das 9kann ignoriert werden. adrückt 10, edrückt 14, "8"drückt den Zeichencode von 8, @dreht die drei obersten Stapelelemente (zieht die hoch 10), so dass das Programm ngedruckt 10und ;beendet wird.

Vielen Dank an Sp3000 für den Vorschlag, @anstelle von zu verwenden !(wodurch ein Byte gespart wurde).

böse Drucke 11

Vielen Dank an Sp3000, der mir einige brachiale Befehlslisten geschickt hat, um einstellige Zahlen zu generieren.

Probieren Sie es online aus.

Das Böse ignoriert alles außer Kleinbuchstaben, sodass der Code folgendermaßen aussieht:

aeeneaeeaww

Auch nwirkt sich einige Zustand , den wir kümmern uns nicht um so wollen wir das auch ignorieren. Erhöht nun adas Register (das bei beginnt 0) und eist die magische "Web" -Operation des Bösen, die die Bits auf eine bestimmte Weise durchläuft. aeeeaeeaergibt zufällig den Wert, 49der der Zeichencode von ist 1. wwdruckt es zweimal aus.

Leerzeichen werden gedruckt 12

Probieren Sie es online aus.

Okay, wir wissen, dass Whitespace nur Leerzeichen, Tabulatoren und Zeilenvorschübe liest. Schreiben Sie also den Code, wie er von Whitespace gesehen wird, mit STL:

SSSSSSTTSSLTLST

Das sind zwei Befehle:

SSSSSSTTSSL
TLST

Der erste drückt die Nummer 12. SSBeginnt speziell ein Zahlenliteral. Das nächste Sist das Vorzeichenbit (positiv). Dann ist alles bis auf Leine binäre Darstellung der Zahl. Es gibt eine Menge führender Nullen, die wir für Starry benötigen, aber sie haben keinen Einfluss auf die Anzahl. Dann ist das TTSSs 12binär. Unterhaltsame Tatsache: Wenn ich eine 16. Sprache hinzufügen würde, könnte ich hier ein Byte speichern, da Starry die vier Sin der binären Represtation von verwenden könnte 16. Ich bezweifle, dass ich es tun werde ...

Der TLSTdruckt einfach die Oberseite des Stapels als Zahl. ( TLMarkiert den Befehl als E / A-Befehl und STgibt Zahlen aus.)

Spaltung druckt 13

Probieren Sie es online aus.

Fission sieht nur diesen Teil des Codes:

           <"31"L

LStartet den Kontrollfluss mit einem nach links gehenden Atom. "Schaltet den Druckmodus um, sodass 31nur gedruckt wird 13. Dann wird das Atom im Keil des eingefangen <, was das Programm beendet.

> <> druckt 14

Hier getestet.

Die Unterscheidung zwischen> <> und Gol> <> ist nicht so einfach, wie ich dachte, da Gol> <> für Befehle, die in beiden und nur in Gol> <vorhanden sind, fast immer das Gleiche tut wie> <> > verursachen einen Absturz von> <>. Allerdings @dreht sich umgekehrt in> <>, so dass sie die nach unten drückt , 7anstatt nach oben ziehen das 10, und dann das 14wird gedruckt statt der 10.

GolfScript druckt 15

Probieren Sie es online aus.

Dieser ist am einfachsten: #Kommentiert die erste Zeile aus. Dann 15drückt sich und }ist ein "Superkommentar", der den gesamten Rest des Programms ignoriert. Das 15wird also am Ende des Programms ausgedruckt.

Martin Ender
quelle
34
Das ist wirklich beeindruckend!
Sweerpotato
1
@YassinHajaj Danke, korrigiert.
Martin Ender
2
Niiice. Toller Job für 15 Sprachen!
ev3commander
1
@ SnoringFrog Nun, los geht's.
Martin Ender
1
@Eumel Danke, aber das Kopfgeld gilt speziell für die "normalen" Sprachen, die in der Beschreibung aufgeführt sind. Daher sollte das Kopfgeld auf eine solche Antwort lauten (wie die sehr schöne Lösung von Sp3000). Ich glaube, ich habe sowieso genug Repräsentanten davon. ;)
Martin Ender
42

Python 1.x, 2.x und 3.x, 32 Byte / 3 ^ 3 = 1,1851 ...

import sys
print(sys.version[0])

Gibt die erste Nummer der Version aus, die sich 1in Python 1.x, 2Python 2.x und 3Python 3.x befindet.

Bis wir Python 9.x bekommen, wird meine Punktzahl eine glorreiche sein 0.04389!

: ~)!

Süßkartoffel
quelle
10
Aus dem Chat: Ja, das ist sowohl günstig als auch gültig =) Dies ist einer der Gründe, warum nur Hauptversionen als einzigartig genug angesehen wurden. Ich weiß nicht, wie viele Python-Versionen es gibt, aber Sie könnten Ihre Punktzahl mit so etwas wahrscheinlich verdammt niedrig bekommen ... Es ist eine der wenigen Lösungen, bei denen ich tatsächlich verstehe, was passiert, also +1 von mir; - )
Stewie Griffin
6
In Python 10.x (sofern vorhanden) würde es nicht gedruckt, 1da es das erste Zeichen der Zeichenfolge "10.was auch immer" ist.
ev3commander
1
@ ev3commander Diese Übermittlung ist jedoch nicht spezifiziert, um eine korrekte Ausgabe in python10 zu erzeugen.
Tyzoid
Fest! Arbeiten an einer zukunftssicheren Version, aber Python 1.x ist nicht so benutzerfreundlich wie die anderen: ~)!
Sweerpotato
1
Alles was ich tun muss, ist eine Sprache zu erstellen, die drei Hauptversionen hat. In diesen drei Hauptversionen wird beim Ausführen einer leeren Datei die Hauptversionsnummer zurückgegeben. Das Ergebnis wäre 0/3 ^ 3 = 0 Perfekt.
Braden Steffaniak
32

3 Sprachen, 2 Bytes / 27 = 0,074

1P

Nun, es schlägt mindestens die Hälfte der Einsendungen: P

1. GolfScript

GolfScript ignoriert das Pund gibt nur das erste aus . Probieren Sie es online aus .

2. Abs

Pist 2-to-the-Power-of, also 1P = 2^1 = 2. Probieren Sie es online aus .

3. Im Ernst

Pgibt die n-te Primzahl mit dem Index Null an. Wir bekommen 3, da dies die zweite Primzahl ist. Probieren Sie es online aus .


Anmerkungen

Mein erstes Ziel war es, eine gültige Antwort in 1 Byte zu finden. Mein erster Versuch war, \x12welcher in Bubblegum und gs2 funktioniert , aber die Herausforderung erfordert mindestens drei Sprachen. \x13würde funktionieren, wenn es eine Sprache gibt, in der 1 ausgegeben wird.

Ich verzichtete auf eine 1-Byte-Antwort und wechselte zu zwei Bytes. 3uist ein enger Aufruf, der 1 in Japt , 3 in GolfScript und 4 in Seriously ausgibt, aber es war schwer, eine Sprache zu finden, die 2 ausgibt , um die Lücke zu füllen.

Das alles hat viel zu lange gedauert: /

Sp3000
quelle
20

6 Sprachen - 44 Bytes / 6 ^ 3 = 0,204 ...

Danke an SnoringFrog für das Speichern von 10 Bytes!

Arbeitet in:

  • Befunge
  • Pyth
  • Brainfuck
  • Hexagonie
  • Leerzeichen
  • AniRad v0.2

2# "1",@"-[----->+<]>.*@@@!4<SSTST
T
ST
 >6=

Hinweis: Bevor Sie es online versuchen, müssen Sie S durch Leerzeichen und T durch Tabulatoren ersetzen oder den folgenden Hexdump in ASCII konvertieren

32 23 20 22 31 22 2c 40 22 2d 5b 2d 2d 2d 2d 2d 3e 2b 3c 5d 3e 2e 2a 40 40 40 21 34 3c 20 20 09 20 09 0d 0a 09 0d 0a 20 09 0d 0a 20 3e 36 3d

Ich werde versuchen, mehr Programmiersprachen zu verwenden :)

Befunge (Drucke 1):

Probieren Sie es online aus

2# "1",@"-[----->+<]>.*@@@!4<
2                             # This puts 2 onto the stack
 #                            # Skips the next op (the space)
   "1"                        # Sets the ASCII value of 1 onto the stack
      ,                       # Pop the last item (1)
       @                      # Terminate program

Pyth (Drucke 2):

Probieren Sie es online aus

2# "1",@"-[----->+<]>.*@@@!4<
2                             # Prints 2
 #                            # Infinite while loop until an error occurs
   "1"                        # String
      ,@                      # This gives the error and terminates the program

Brainfuck (Drucke 3):

Probieren Sie es online aus

2# "1",@"-[----->+<]>.*@@@!4<
2# "1",@"                     # Since these are not brainfuck ops, these will be ignored
         -[----->+<]>         # Puts "3" on the stack
                     .        # Prints the last item (3)     

Hexagony (Drucke 4):

Probieren Sie es online aus

2# "1",@"-[----->+<]>.*@@@!4<   

Eine lesbarere Version:

   2 # " 1       # The steps:
  " , @ " -      # 1 (2) - Hexagony starts at the top-left of the hexagon
 [ - - - - -     #       - This immediately puts 2 onto the stack
> + < ] > . *    # 2 (#) - Since the stack is 2, this makes the 2nd pointer the 
 @ @ @ ! 4 <     #       - new current pointer
  > 6 = . .      # 3 (*) - The position of the 2nd pointer is in the left-most
   . . . .       #       - position. This sets the stack to the product
                         - of the two neighbours which is zero
                 # 4 (<) - Changes the pointer direction to west
                 # 5 (4) - Sets the stack to 4
                 # 6 (!) - Outputs the decimal 4
                 # 7 (@) - Terminates the program

Leerzeichen (Drucke 5):

Probieren Sie es online aus

Da andere Zeichen außer Leerzeichen und Tabulatoren ignoriert werden, bleibt uns Folgendes übrig:

SSTST                 # This pushes 5 onto the stack
T                     # 
ST                    # This prints the decimal

AniRad Version 0.2 (druckt 6):

Irgendwie funktioniert das für Version 0.2, gibt aber einen Fehler für Version 0.4 aus. Ich habe keine Ahnung warum. Sie können Version 0.2 finden Sie hier . Um dies auszuführen, können Sie den Code des Interpreters kopieren und in repl.it einfügen und ausführen. Danach müssen Sie nur noch das Programm in STDIN einfügen und ausführen.

2# "1",@"-[----->+<]>.*@@@!4<      # (#)  Starts at the hashtag (starting point)
                                   #      Direction is down
                                   # (>)  When the pointer gets to the '>', it changes
 >6=                               #      its direction
                                   # (6) Puts 6 onto the stack 
                                   # (=) Pushes the result and terminates
Adnan
quelle
1
Ich denke, mehr Sprachen sind definitiv der richtige Weg ... der kubische Nenner ist wirklich großzügig, so dass es nicht allzu schwer sein sollte, meine Punktzahl zu übertreffen, wenn Sie 5 oder 6 Sprachen haben.
Martin Ender
@ MartinBüttner, Ja, obwohl ich nicht weiß, wie ich eine neue Sprache hinzufügen kann
Adnan
2
@ Martin ja, es ist großzügig. Der kubische Nenner zielte darauf ab, mehr Sprachen zu fördern. Ich denke, 6 Sprachen in 50 Bytes sollten genauso viel wert sein wie 5 Sprachen in 30 Bytes. :-) Es wird definitiv schwieriger, je mehr Sprachen Sie verwenden.
Stewie Griffin
Ihr Leer Code könnte ein wenig reduziert werden (und ich glaube nicht , dass einer Ihrer anderen Sprachen beeinflusst werden. (Mit L für Zeilenvorschub), statt die SSSSSSSSSSTTSTSTLTLSSSie jetzt haben, können Sie das tun SSSTSTLTLST. Dies drückt eine wörtliche 5 auf die stapeln und dann als Ganzzahl
ausgeben
@SnoringFrog Danke! Ich habe es bearbeitet
Adnan
14

6 7 Sprachen, 32 37 Bytes, Ergebnis 0.148 ... 37/7 3 ≈ 0.107872 ...

#7+!"@\"6.@;n5
print(4--int(-3/2)#"
)

Brainfuck-ng

+erhöht die aktuelle Zelle, !druckt als Ganzzahl und beendet das @Programm. #und "sind NOPs.

Python 2

Erste Zeile ist Kommentar. Berechnet 4 - -int(-3 / 2) = 4 - -int(-2) = 4 - -(-2) = 4 - 2 = 2und druckt das Ergebnis mithilfe der Ganzzahldivision .

Python 3

Wie vor, jedoch mit Float-Aufteilung. 4 - -int(-3 / 2) = 4 - -int(-1.5) = 4 - -(-1) = 4 - 1 = 3.

Lua

--Beginnt ein Kommentar, und #in der ersten Zeile steht ein Kommentar, also im Grunde genommen print(4).

> <>

#spiegelt IP wider, 5drückt 5, ndruckt eine Zahl und ;beendet.

Befunge

#überspringt die +, !logisch die Spitze des Stapels negiert, "@\"schiebt die Zeichenfolge @\, 6schiebt 6, .druckt eine Nummer und @wird beendet.

Pyth

#Startet eine Endlosschleife und schließt Fehler aus. 7druckt 7, dann folgt, +!"string")was im Grunde einen Fehler verursacht, weil nicht zwei Operanden für das +Beenden des Programms vorhanden sind.

PurkkaKoodari
quelle
13

JavaC ++ C, 363/27 = 13,4 ....

Java druckt 1, C ++ druckt 2, C druckt 3. Bricht hier keine Rekorde (weil Java), aber ich mag die clevere, missbräuchliche Art, einen Polyglot in diesen Sprachen zu machen, die ich entdeckt habe, wirklich.

//\u000a/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*\u002a/
import static java.lang.System.out;
public class P{//*/
/*\u002a/public static void//*/
main(/*\u002a/String[] args//*/
){//\u000a/*
out.print=p;
//\u002a/
out.print(1);}
/*\u002a/}//*/

Das ist ein Chaos. Hier ist eine Aufschlüsselung, wie es funktioniert. Die Unicode - Literale ( \u000asonst als Zeilenvorschub bekannt, und \u002a, anders als bekannt *) wird von den Java - Compiler in die tatsächlichen Zeichen erweitert. Der Java-Compiler sieht also Folgendes:

//
/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/**/
import static java.lang.System.out;
public class P{//*/
/**/public static void//*/
main(/**/String[] args//*/
){//
/*
out.print=p;
//*/
out.print(1);}
/**/}//*/

Das ganze Zeug am Anfang wird ignoriert, weil es in einen mehrzeiligen Kommentar ( /* ... */) eingeschlossen ist. Später sehen wir, dass wir durch Mischen von einzeiligen und mehrzeiligen Kommentaren genau steuern können, welche Teile in jeder Sprache auskommentiert werden. In der Hauptmethode beginnen wir einen mehrzeiligen Kommentar und haben dann //*/. Normalerweise wäre dies ein einzeiliger Kommentar, aber da wir uns in einem mehrzeiligen Kommentar befinden, //wird nichts unternommen, sodass der Kommentar */geschlossen werden kann.

Dies ist der äquivalente Java-Code, wobei Kommentare entfernt wurden:

import static java.lang.System.out;
public class P{
public static void
main(String[] args
){
out.print(1);}
}

Folgendes sieht der C / C ++ - Compiler (ich habe die Unicode-Literale entfernt, da sie vom Compiler nicht erweitert werden und daher nichts tun):

///*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*/
import static java.lang.System.out;
public class P{//*/
/*/public static void//*/
main(/*/String[] args//*/
){//\/*
out.print=p;
///
out.print(1);}
/*/}//*/

Hier überschreiben die einzeiligen Kommentare die mehrzeiligen Kommentarbegrenzer am Anfang, sodass alle #defines und die #includevorverarbeitet werden. Als nächstes werden mehrzeilige Kommentare verwendet, um den Boiletplate-Code für Java auszukommentieren. Dies ist der entsprechende Code, wobei Kommentare entfernt wurden:

#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
main(
){
out.print=p;
out.print(1);}

Ein standardmäßiger C / C ++ - Polyglottick (the #ifdef __cplusplus) wird verwendet, um ein Token oals entweder "2"oder zu definieren "3", je nachdem, ob es sich um einen C ++ - oder einen C-Compiler handelt, der den Code kompiliert. Als nächstes definieren wir eine Funktion p, die ein einzelnes (ignoriertes) intArgument akzeptiert und printfmit unserem neu definierten oToken aufruft . Wie üblich wird der Rückgabewert weggelassen, da wir uns nicht im strikten Modus befinden. Als nächstes definieren wir a structmit einem einzelnen Member, einem Funktionszeiger, dessen Signatur mit p's übereinstimmt , und konstruieren eine einzelne Instanz mit dem Namen out. In der Hauptmethode (wir lassen das intwie üblich weg ) wird die Adresse von pzugewiesen out.print(also out.printAnrufe angerufen p) und es wird angerufen.

Wenn C ++ nicht in den Sprachen enthalten wäre, könnten wir den gesamten Präprozessorcode löschen und pals definieren int p(int a){puts("2");}. Leider erfordert C ++ eine #includezu erledigende E / A. Wenn C nicht enthalten wäre, könnten wir die Definition von pund das #ifdefPräprozessor-Makro löschen und eine Mitgliedsfunktion direkt in definieren, structanstatt einen Funktionszeiger zu benötigen. Leider unterstützt C keine Mitgliedsfunktionen.

Mego
quelle
12

4 Sprachen, 28 Bytes / 64 = 0,4375

print((0 and 3^1or 1/2>0)+1)

1. Python 2

0ist falsch und /ist ganzzahlig, also

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0 > 0) + 1 = False + 1 = 1

2. Perl (auch Python 3)

0ist falsch und /ist float division, also

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0.5 > 0) + 1 = 1 + 1 = 2

3. Ruby

0ist wahr und ^ist bitweise xor, also

(0 and 3^1 or 1/2 > 0) + 1 = xor(3,1) + 1 = 2 + 1 = 3

4. Lua

0ist wahr und ^ist Potenzierung, also

(0 and 3^1 or 1/2 > 0) + 1 = pow(3,1) + 1 = 3 + 1 = 4

Beachten Sie, dass Lua und Ruby keine Booleschen Werte hinzufügen können, als wären sie ganze Zahlen, daher die Gruppierung dieser Werte. Funktioniert leider 0andnicht in Lua, daher können wir dort kein Byte speichern.


Vorherige 17-Byte-Version, die 1 (Lua), 2 (Ruby), 3 (Python / Perl) ausgibt:

print(2^(0 or 1))

-3 Bytes danke an @xnor für diese Version, was sie viel ordentlicher macht :)

Sp3000
quelle
Würde 2^(0 or 1)funktionieren
xnor
@xnor Ah ja, danke :)
Sp3000
8

BFSRS> <> funge93thon123, 73/343 ≈ 0,212827 ...

Brainfuck, Ernsthaft ,> <>, Befunge-93, Python 1, Python 2, Python 3

# 4['.]@kX21z-[>+<-----]>--.<;n3
import sys;print(3+int(sys.version[0]))

Enthält nicht druckbare Hexdumps (umkehrbar mit xxd -ps -r):

2320345b272e5d406b5832317a7f2d5b3e2b3c2d2d2d2d2d5d3e2d2d2e3c
3b6e330a696d706f7274207379733b7072696e7428332b696e7428737973
2e76657273696f6e5b305d2929

Ich werde im Laufe der Zeit weitere Sprachen (und wahrscheinlich auch Bytes) hinzufügen. Die Sprachen in der Kopfzeile sind in der Reihenfolge aufgeführt, in der sie gedruckt wurden. Angenommen, 8-Bit-Umhüllungszellen und ein Band, das sich nicht darüber beschwert, dass die Ausgangsposition (Umhüllung oder unendlich) für Brainfuck verlassen wird.

Brainfuck:

[.]   initial value of first cell is 0, so loop is skipped
-[>+<-----]>--  push 49 (ASCII ordinal of 1)
.     print "1"
<     move to blank cell
[0]   skip loop because cell is 0
      everything else is ignored

Im Ernst :

# 4['.]@  does some stuff we don't care about
kX        pop entire stack, push as list, discard (essentially the same as é, but is ASCII so we can use Python)
2         push 2
1z        pop 1 item from stack and print (used instead of . so Brainfuck doesn't print here; same as ü in this scenario, but is ASCII so we can use Python)
0x7f      terminate program
          everything else is ignored

><>:

#    mirror, reverse direction
3n;  push 3, print "3", end (reversed because IP is scanning RTL at this point)
     everything else is ignored

Befunge-93:

#     jump over the space
4['.] push 4, print 4 (brackets and ' do nothing)
@     end program
      everything else is ignored

Python 1 (danke Schlammfisch):

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+1=5

Python 2 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+2=6

Python 3 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+3=7
Mego
quelle
Python 1 funktioniert auch. Siehe codegolf.stackexchange.com/a/65652/32686 . Fügt keine Zeichen hinzu (aber ändert sich 3zu 4)
Blau
8

14 Sprachen, 73 Bytes, Score = (73/14 ^ 3) = 0,02660349854

#Y2(3`5n~thneo e        ;n@0d c
#   -[>+<"9"L-----]>+.
14  
print(int(15/2))+3

Ich kann noch etwas langs hinzufügen, aber ich denke, ich werde hinzufügen, was ich hier habe.

1. Brainbool ; Probieren Sie es online!

Der relevante Code:

    [>+<         ]>+.

               + 

Das ist wirklich nur +.+, was 1 ausgibt.

2. Jolf ; Probieren Sie es hier aus!

Das (Zeichen hört auf, den Quellcode zu interpretieren, daher lautet der relavente Code:

#Y2

Dies entspricht (in JavaScript)

var Y = []; toHex(Y); alert(2);

Welche Ausgänge 2.

3. Element; Probieren Sie es online!

Der relevante Code:

    3`

Dies erfasst 3und druckt es.

4. Brainfuck ; Probieren Sie es online!

Der relevante Code lautet:

-[>+<    -----]>+.

  -    -      + 

Dies ist die Standardmethode, um den Zeichencode von 4 zu generieren und auszugeben, und einige andere Dinge danach.

5. Reng; Probieren Sie es hier aus!

~ Beendet das Programm, daher lautet der relevante Code hier:

#Y2(3`5n~

#definiert neu Y, um die TOS zu sein, in diesem Fall 0. 2drückt 2; (dreht den Stapel N-mal und springt N vom Stapel ab; 3`drückt -3; und schließlich 5ndruckt 5.

6. ETA; Probieren Sie es online!

ETA liest nur die Buchstaben E, T, A, O, I, N, S, H, der Code, der nur ausgeführt wird, lautet also:

       n thneo e         n     


  int int          

Superrelevanter Code:

       n thneo

Oder äquivalent: nthne o. n...eist ein Basis-7-Literal und thnist die Basis-7-Zahl für 54. oGibt dieses Zeichen aus. Die Einreichung ist fehlerhaft, aber ich weiß nicht warum.

7. Python 3

Was es sieht:

# comment
# comment
14
print(int(15/2))+3

15/2ergibt 7,5, ebenso wie /die Float Division. int(...)macht die Zahl zu einem int, der dann gedruckt wird. Das Programm gibt einen Fehler aus, wenn er +3auftritt.

8. Julia

Julia sieht:

# comment
# comment
14
print(int(15/2))+3

Anstatt 15/2 abzuschneiden, rundet Julia es auf und gibt 8 aus. Es gibt dies aus und gibt dann Fehler aus, wenn +3 auftritt.

9. Spaltung; Probieren Sie es online!

Relevanter Code:

        <"9"L         

Ich habe diese Idee von Martin's Fission Teil (eher wie es gestohlen). Lbeginnt eine nach links gerichtete Sache, fängt ein 9und endet mit <.

10. Whitespace; Probieren Sie es hier aus!

Der relevante Code, der Leerzeichen in Sund Tabulatoren in übersetzt T:

SSSTSTS
T
ST

Es schiebt 10 auf den Stapel und gibt ihn als Zahl aus ( T\nST).

11. Python 2

Python 2 sieht das so:

# comment
# comment
14
print(int(15/2))+3

(int(15/2))+3 wird mit 11 bewertet und das ist gedruckt.

12. Gol> <>; Probieren Sie es hier aus!

Relevanter Code:

#                      ;n@0d c

Dabei wird der in Martins Antwort verwendete Trick verwendet , @der unterschiedliche Richtungen in> <> und Gol> <> dreht. #spiegelt, cdrückt 12, ddrückt 13, 0drückt 0 und @bringt can die Spitze des Stapels, wird dann ausgegeben und mit gedruckt ;n.

13.> <>; Probieren Sie es online!

Relevanter Code:

#                      ;n@0d c

Wenn Sie das wieder verwenden, werden @unterschiedliche Richtungen in> <> und Gol> <> gedreht. #spiegelt, cdrückt 12, ddrückt 13, 0drückt 0 und @bringt dan die Spitze des Stapels, wird dann ausgegeben und mit gedruckt ;n.

14. Golfscript; Probieren Sie es online!

Was es sieht:

# comment
# comment
    14
print(-int(-15/2))+3

Es drückt 14, prints it und Fehler. Gestohlen, inspiriert von der Antwort von Sp3000 .

Conor O'Brien
quelle
7

Subskin , Brainfuck und Fob 27 Bytes / 3 ^ 3 = 1

0#>&$3#<>$-[----->+<]>-.
31

Subskin

0
31

Wir setzen den Befehlszeiger (spielt hier keine Rolle) 0und das Ausgangsregister auf 31. Wenn der Inhalt des Ausgaberegisters ist >= 0, geben wir den enthaltenen Wert als a aus char. Alle anderen Codes werden ignoriert.

Brainfuck

-[----->+<]>-.

Stellt 3das Register ein, dekrementiert den Wert einmal mit -und gibt schließlich mit aus ..

Fob

#>&$3#<>$

Das ist etwas kniffliger, da Brainfuck auch die <und >Anweisungen in Fob liest . Wir gehen in den Ausführungsmodus #und erhöhen den Zeiger von Brainfuck um eins, was uns später erleichtert. Wir haben noch nichts auszuführen, daher wird nichts ausgeführt.

Wir gehen mit in den Akkumulatormodus $, werfen a ein 3, gehen wieder in den Ausführungsmodus, schieben den Akkumulatorinhalt mit in den Stapel <und geben den Inhalt schließlich mit aus >.

Um zu verhindern, dass Brainfuck mit dem Programm schraubt, wechseln wir mit wieder in den Akkumulationsmodus $.

Süßkartoffel
quelle
7

7 Languages, 55/7 ^ 3 ≈ 0.16035

Läuft in PowerShell v1, v2, v3, v4 und v5, Foo und Pyth

#7.q"6""
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]

Die Ziffern 1-5 verwenden eine ähnliche Logik wie die Antwort von sweerpotato . Die $PSVersionTablespezielle Variable wurde in PowerShell v2 eingeführt und enthält eine vollständige Erstellungsliste, Revisionen usw. Hier ist eine Beispielausgabe der Variablen:

PS C:\Tools\Scripts> $PSVersionTable

Name                           Value                                                                                                                           
----                           -----                               
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

In diesem Code speichern wir ihn zuerst, $pdamit die Codelänge kürzer ist. Anschließend prüfen wir, ob die Variable vorhanden ist, indem wir sie als Index in ein Array mit zwei Elementen umwandeln:

  • Wenn die Variable nicht vorhanden ist, erstellt PowerShell sie dynamisch und weist sie zu $NULL. Dabei !handelt es $TRUEsich um oder 1handelt es sich um das zweite Element im Array, das ausgegeben wird 1.
  • Existiert die Variable (wie in v2 +), !ergibt die der Variablen $FALSEoder 0, das auf das erste Element indiziert, das die Versionsnummer ausgibt.

Wenn Sie Foo for 6 verwenden, verwenden Sie #einen Kommentar in PowerShell, der bei der Ausführung in einer PS-Umgebung ignoriert wird. Foo wird die Nummer jedoch gerne ausspucken 6und dann den Rest des Programms durcharbeiten, was nichts bewirkt.

Wenn Sie Pyth for 7 verwenden, kehren Sie zurück 7und beenden das Programm sofort .q, sodass die Endlos -Schleife, mit #der Sie begonnen haben, keine Rolle spielt. Da haben wir etwas übrig, das implizit gedruckt wird. Vielen Dank an @ FryAmTheEggman für diesen Zusatz.

Bearbeiten - Eine Handvoll Bytes dank Mauris Bearbeiten - Erklärung von Pyth dank Sp3000 geklärt

AdmBorkBork
quelle
Wie wäre es $p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]? Das funktioniert auf meiner Powershell, aber möglicherweise nicht auf allen vorherigen Versionen.
Lynn
7

7 Sprachen, 287/7 ^ 3 = 0,836

Wahrscheinlich die niedrigste Punktzahl, die reinkommt, trotzdem mag ich diese 3 Versionen von C polyglot.

Die langweilige Python-Lösung wurde hinzugefügt, um sich zumindest für das Kopfgeld für "3 einzigartige" Sprachen zu qualifizieren.

Java wurde hinzugefügt, indem C-Trigraphen für verschiedene Kommentarinterpretationen missbraucht wurden.

Arbeitet in:

  • Python 1

  • Python 2

  • Python 3

  • C89

  • C99

  • C ++

  • Java

Golf Version:

/*
*??/
/
#include <stdio.h>
#ifndef __cplusplus
#define true 8/*
import sys
print(sys.version[0])
'''
#*??/
/
#endif
int main(){int a=(true>1)?-6:3;printf("%d",(true//*
+a
//**??/
/+2));}
#define a \
'''
/**\u002f
public class p{public static void main(){System.out.println("7");}}
/**/

Ungolfed:

/*
*??/
/

#include <stdio.h>

#ifndef __cplusplus
#define true 8/*

import sys
print(sys.version[0])
'''
#*??/
/
#endif 

int main()
{
    int a = (true > 1) ? -6 : 3;
    printf ("%d", (true//*
    +a
    //**??/
/
    +2));
}
#define a \
'''

/**\u002f
public class p
{
    public static void main()
    {
        System.out.println("7");
    }
}
/**/

Ok, das wird wahrscheinlich etwas unheimlich und ich hoffe, meine Englischkenntnisse sind gut genug, um es normal zu erklären.

Zunächst erkläre ich die verschiedenen Arten von Kommentaren, mit denen ich die Sprachstrukturen jeweils für sich gekapselt habe.

Nehmen wir also den ersten Block:

/*
*??/
/

Für Java ist dies nur der Anfang eines mehrzeiligen Kommentars. Aber ... in C99 / 89 / ++ ergibt dies

/*
*/

Da ??/es sich \in C um eine Trigraphie handelt, ist das \Zeichen einigermaßen konsistent und verbraucht sogar Zeilenumbrüche in seiner Befehlsfunktionalität. Dies bewirkt, dass das Ergebnis von \nnur "angezeigt" wird, anstatt Zeilenumbrüche zu verursachen. das heißt, wenn dieses Byte-Array den ersten Block darstellt: [ /] [ *] [ \n] [ *] [ ?] [ ?] [ /] [ \n] [ /] würde nach der Trigraph-Auswertung sein: /[ *] [ \n] [ *] [ \] [ \n] [ /] wo die konsequente Funktionalität des \Trigger und "verbraucht" die \nso die verbleibende und finaly in C langs ausgewertet Bytes ist: [ /] [ *] [ \n] [ *] [ /]

Aber über all das weiß Java nichts und behandelt alles, was folgt, als Kommentar, bis dieser Trick rückgängig gemacht wird.

(Fortsetzung folgt!)

Zaibis
quelle
7

4 Sprachen (Befunge-93, Microscript II, Microscript und Foo), Punktzahl 7/64 = 0,109

"4"1.@2

Befunge: 4 drücken, 1 drücken, 1 drucken und beenden.

Mikroskript II: Produzieren Sie die Zeichenfolge "4", verwerfen Sie sie, nehmen Sie die Quadratwurzel von eins, verwerfen Sie diese und setzen Sie schließlich x auf 2. Dies wird dann implizit gedruckt.

Mikroskript: Drücken Sie 52 auf den Stapel (der für den Rest des Programms niemals verwendet wird), erhöhen Sie das Register (anfangs Null) um eins und dann um zwei. Dies wird dann implizit gedruckt.

Foo: Gib die Zeichenfolge "4" aus und drücke dann 2

SuperJedi224
quelle
6

Python 1 | 2 | 3, 27 Bytes / 27 = 1

print(len("\xabc")+(1/2>0))

Die Verwendung von Versionsnummern durch @ sweerpotato ließ mich fragen, ob es möglich war, die Pythons in weniger zu unterscheiden. Hier ist das Beste, was ich gefunden habe.

Erläuterung

Um Python 3 von den früheren Versionen zu unterscheiden, verwenden wir den Trick "Ganzzahldivision vs. Gleitkommadivision". (1/2>0) == (0>0)gibt 0 vor Python 2.3 oder Falseab Python 2.3 zurück und (1/2>0) == (0.5>0)kehrt Truefür Python 3 zurück.

Um Python 1 vom Rest zu unterscheiden, nehmen wir die Länge der Zeichenkette "\xabc" , die in Python 1 die Länge eins und ab Python 2 die Länge zwei ist. Warum? weil

Das \ x-Escape in String-Literalen nimmt jetzt genau 2 Hexadezimalstellen an. Zuvor wurden alle Hexadezimalziffern nach dem 'x' verbraucht und die niedrigsten 8 Bits des Ergebnisses verwendet, sodass \ x123456 \ x56 entsprach.

(Aus den Neuerungen in Python 2.0 )

Sp3000
quelle
6

Python 3, Ruby, Perl, C, C ++, Objective-C 202 Bytes / 6 ^ 3 = 0,935 ...

Das hat wirklich Spaß gemacht und viel mit Booleschen gespielt.

Sie können alle Versionen des Codes auf der folgenden Site kopieren und in den Interpreter einfügen.

#include <stdio.h> /*
print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1
"""""
*/
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}/*
"""
#*/

Python 3 wird gedruckt 1

Der Trick ist der folgende:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Dies wird gedruckt 1

Ruby, druckt 2

Der interpretierte Code für Ruby ist:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Also das druckt 2

Perl, druckt 3

Der interpretierte Code für Perl ist:

print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1

Zunächst __DATA__teilt das Token dem Perl-Compiler mit, dass die Kompilierung abgeschlossen ist. Alles danach wird ignoriert.

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Und druckt 3

C, druckt 4

Der interpretierte Code unterscheidet sich erheblich von den anderen:

#include <stdio.h>
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}

Dadurch wird einfach das Zeichen gedruckt 4.

C ++ druckt 5

Entspricht dem C-Code

Dadurch wird das Zeichen gedruckt 5.

Objective-C, druckt 6

Entspricht dem C-Code

Dadurch wird das Zeichen gedruckt 6.

Adnan
quelle
5

5 Sprachen, 18 Bytes / 5 ^ 3 = 0,144

Läuft in Brainbool , Mathematica , Foo , > <> und Befunge-93 .

4!<n;+Print@2"3".5

Brainbool

Brainbool ist wie Brainfuck, arbeitet jedoch nur mit Bits, und seine Eingabe und Ausgabe besteht ausschließlich aus 0und 1.

4!<n;+Print@2"3".5
  <                   move the pointer to the left
     +                logic not
                .     print the current cell

Mathematica

In Mathematica ist alles ein Ausdruck und hat einen Wert. Print@2druckt 2das Symbol und gibt es zurückNull . Danach führt der Code einige symbolische Berechnungen durch, druckt jedoch nichts aus.

Foo

"3" Drucke 3. Ich weiß nicht, was die anderen Teile tun.

> <>

4!<n;+Print@2"3".5
4                     push 4
 !                    skip the next command
   n                  pop and print it as a number
    ;                 end the program

Befunge

4!<n;+Print@2"3".5
4                     push 4
 !                    logical not
  <                   makes the program counter travel to the right
 !                    logical not
4                     push 4
                 5    push 5
                .     pop and print it as a number
             "3"      push the string "3"
            2         push 2
           @          end the program

12 Sprachen, 35 Bytes / 12 ^ 3 = 0,0202546 ...

Mit Sweerpotato-Trick , billig, aber leistungsstark.

Läuft in Brainbool , Mathematica 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 und 10.0 , Foo und > <> .

cn;+"11".Print@Floor@$VersionNumber

Alephalpha
quelle
5

6 Languages, 38/6 ^ 3 = 0.17592̅5̅9̅

Whitespace , Brainfuck, Ruby, Labyrinth , Foo, im Ernst

Legende:

£: tab

: Platz

§: 0x7f

puts•2;#4!@•-[>+<-----]>6.§"5"•£    
£
•£

Dies enthält nicht druckbare Zeichen, daher hier der Hexdump:

7075747320323b23342140202d5b3e2b3c2d2d2d2d2d5d3e362e7f22352220090a090a20090a

Erläuterung:

Leerzeichen

Probieren Sie es online aus. (Hinweis: In meinem Programm fehlen die letzten drei Zeilenvorschübe, um das Programm zu beenden. Ich habe dies auf Whitelips geschrieben / getestet und das Programm gibt dort die richtige Ausgabe aus, jedoch nicht auf Try It Online, sodass dem verknüpften Programm diese beiden Zeichen hinzugefügt wurden.) Einige Dolmetscher lassen das zu, andere bleiben in einer Endlosschleife stecken, ohne dass dies explizit gekündigt wird.

(ignorierte Zeichen weglassen)

spacespacespacetabenter: Eine 1 auf den Stapel schieben

tabenterspacetab: gibt die Oberseite des Stapels aus

Rubin

Sollte nicht erklärt werden müssen. Gibt 2 aus, behandelt den Rest dieser Zeile (also das Brainfuck-Programm) als Kommentar, behandelt den Rest der Datei als leer.

Brainfuck

Probieren Sie es online aus.

Benötigt einen Interpreter, der Unterlauf unterstützt. Unterläuft die erste Zelle zu 255, verwendet dies dann für einen Schleifenzähler, um 51 zu generieren, was der ASCII-Code für 3 ist.

Labyrinth

Probieren Sie es online aus.

(Aus Gründen der Lesbarkeit werden die letzten beiden Zeilen weggelassen, da sie nie erreicht werden.)

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•                            skipped
     2                           push 2 onto stack
      ;                          pop 2 from stack
       #                         push current stack depth (0) to stack
        4                        push 4 to stack
         !                       print top of stack as integer
          @                      program terminates

Foo

Probieren Sie es online aus.

Das einzige, was die Ausgabe beeinflusst, ist "5", was 5 ausgibt.

Ernsthaft

Probieren Sie es online aus.

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•2;#4!@ -[>+<-----]>           assorted stack manipulation that doesn't affect this program
                        6          push 6 to the stack
                         .         output top of the stack
                          §        (0x7f) terminate program
Schnarchfrosch
quelle
5

5 Sprachen, Chaîne , Minkolang , Foo , Brainf ** k-ng und Vitsy , 21/5 ^ 3 = 0,168

2|<«+!@"3".N+m

5N»

Brainf ** k-ng

2|<«+!@"3".N+m

5N»
  <            go left (should still be ok)
    +!         output 1
      @        halt execution

Chaîne

2|<«+!@"3".N+m

5N»
2              «add 2 to the current string»
 |<            «take off and put on the string (no op)»
   «           «comment»

  »
               «implicit output»

Foo

2|<«+!@"3".N+m

5N»
       "3"     print three

Minkolang

2|<«+!@"3".N+m

5N»
2              C push 2 to the stack [2] C
 |             C mirror C
2              C push 2 to the stack [2,2] C
             m C ignored C
            +  C add top two [4] C
           N   C output C
          .    C terminate program C

Vitsy

2|<«+!@"3".N+m

5N»
2              push 2
 |             mirror
2              push 2
             m pop 2, goto line 2
5              push 5
 N             output 5
  »            ignored

Ich kann wahrscheinlich> <> oder etwas hinzufügen.

Conor O'Brien
quelle
1
Weißt du, ich habe noch nie eine gute Verwendung für den Spiegel gefunden. xD
Addison Crump
5

Craneflak , Brain-Flak Classic , Rain-Flak , BrainHack , Brain-Flueue , Miniflak , miniHack : .1020

(([]()()()<()()()>)()()){}#{}({}())

Probieren Sie es online!

Erläuterung

Das Erste, was hier vor sich geht, ist, dass es einen Unterschied in der Art und Weise gibt, wie Kommentare zwischen den Interpreten BrainHack, CraneFlak und Rain-Flak gelesen werden. Craneflak hat keine Kommentare, in Rain-Flak #kommentiert er den Rest der Zeile und in BrainHack #{...}die Innenseiten.

Also hier ist, was jede Sprache liest:

Rain-Flak: (([]()()()<()()()>)()()){}         -> 3
BrainHack: (([]()()()<()()()>)()()){}({}())   -> 4
Craneflak: (([]()()()<()()()>)()()){}{}({}()) -> 1

Das nächste ist der Unterschied zwischen den Brain-Flaks und den Miniflaks. Sowohl Rain-Flak als auch BrainHack unterstützen Miniflak, bei dem alle zusätzlichen Operationen einfach entfernt werden. Dies bedeutet, dass sie das []und verlieren<...>

Rain-Flak: (()()()()()())         -> 6
BrainHack: (()()()()()())({}())   -> 7

Als nächstes haben wir den Unterschied zwischen Brain-Flak und Brain-Flak Classic. In Klassik []ist-1 anstelle der Stapelhöhe, was bedeutet, dass unser Ergebnis 1 weniger ist als bei normalem Rain-Flak, was es zu 2 macht.

Zuletzt haben wir den Unterschied zwischen Brain-Flak und Brain-Flueue. In brain-flueue wird eine Warteschlange anstelle eines Stapels verwendet. Normalerweise drückt Brain-Flak 3, dann 5 und wirft die 5 weg, aber im Brain-Flueue werden die 3 und nicht die 5 vom Pop entfernt.

Weizen-Assistent
quelle
4

Milky Way 1.0.2 , CJam und STXTRM , 20 Bytes / 3 ^ 3 = 0,741

Ich stelle mir vor, dass es mindestens eine andere Sprache gibt, die ich hinzufügen könnte.

'2"3""1"1<<1>;;"2"3;

Erläuterung


Milchstraße ,1

In der Milchstraße werden Zeichenfolgen nur durch Anführungszeichenpaare angegeben. Ein einfaches Anführungszeichen liest die Eingabe von der Befehlszeile; Wenn es keine gibt, wird eine leere Zeichenfolge verschoben. Größer als und kleiner als Zeichen drehen den gesamten Stapel nach rechts bzw. links. Schließlich tauscht ein Semikolon die beiden obersten Stapelelemente aus.

Hier ist eine Stapelvisualisierung (der angezeigte Stapel ist das Ergebnis der aufgelisteten Operation, nachdem er aufgetreten ist):

["", 0]                                             #  default stack

["", 0, ""]                                 #   '   #  read input from command line
["", 0, "", 2]                              #   2   #  push 2 to the stack
["", 0, "", 2, "3"]                         #  "3"  #  push "3" to the stack
["", 0, "", 2, "3", "1"]                    #  "1"  #  push "1" to the stack
["", 0, "", 2, "3", "1", 1]                 #   1   #  push 1 to the stack
[0, "", 2, "3", "1", 1, ""]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0, 1]              #   1   #  push 1 to the stack
[1, "", 2, "3", "1", 1, "", 0]              #   >   #  rotate the stack rightward
[1, "", 2, "3", "1", 1, 0, ""]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0, "", 2]       #  "2"  #  push 2 to the stack
[1, "", 2, "3", "1", 1, "", 0, "", 2, "3"]  #   3   #  push "3" to the stack
[1, "", 2, "3", "1", 1, "", 0, "", "3", 2]  #   ;   #  swap the top two stack elements

CJam ,2

In CJam werden Zeichenfolgen auch durch doppelte Anführungszeichenpaare angegeben. Ein einfaches Anführungszeichen drückt den Zeichencode des folgenden Zeichens. Wenn ein Zeichencode ausgegeben wird, wird er als entsprechendes Zeichen ausgegeben. Größer als und kleiner als Zeichen verhalten sich wie erwartet und bewerten die Reihenfolge der beiden obersten Stapelelemente. Schließlich verwirft ein Semikolon das oberste Stapelelement. Bei Programmende wird der Inhalt des Stacks ausgegeben.

Hier ist eine Stapelvisualisierung (der angezeigte Stapel ist das Ergebnis der aufgelisteten Operation, nachdem er aufgetreten ist):

[]                         #  default stack

['2]               #  '2   #  push the character code of "2" to the stack
['2, "3"]          #  "3"  #  push "3" to the stack
['2, "3", "1"]     #  "1"  #  push "1" to the stack
['2, "3", "1", 1]  #   1   #  push 1 to the stack
['2, "3", "1"]     #   <   #  leave the greater of the top two stack elements on the stack
['2, 0]            #   <   #  leave the greater of the top two stack elements on the stack
['2, 0, 1]         #   1   #  push 1 to the stack
['2, 1]            #   >   #  leave the lesser of the top two stack elements on the stack
['2]               #   ;   #  pop the top stack value
[]                 #   ;   #  pop the top stack value
['2]               #  "2"  #  push the character code of "2" to the stack
['2, "3"]          #   3   #  push "3" to the stack
['2]               #   ;   #  pop the top stack item

STXTRM ,3

In MSM wird alles, was kein Operator ist, als Zeichen auf den Stapel verschoben. Ein Semikolon dupliziert das oberste Stapelelement. Das Programm wird fortgesetzt, bis keine Operatoren mehr vorhanden sind oder ein einzelnes Element auf dem Stapel vorhanden ist.

Das letzte Zeichen auf dem Stapel ist 3, das vom letzten Operator dupliziert wird. 3ist das oberste Element am Ende des Programms, daher wird es ausgegeben.

Zach Gates
quelle
4

5 Sprachen, 18 Bytes / 5 ^ 3 = 0,144

Ouroboros , Pip , QBasic, Foo und Pyth

5'"4"()"
1?3'@n()2

1. Ouroboros

Jede Zeile des Programms stellt eine Schlange dar, die ihren Schwanz frisst.

Schlange 1

Push 5, 'ist ein No-op, Push 52(ASCII - Code "4"). (veranlasst die Schlange, eine Zahl zu platzen und so viele Zeichen ihres Schwanzes zu essen. Da dies zum Verschlucken des Befehlszeigers (und der gesamten Schlange) führt, wird die Ausführung angehalten.

Schlange 2

Drücken Sie 1, drücken Sie eine Zufallszahl ( ?), drücken Sie 3, 'ist ein No-Op. @Dreht das Symbol 1oben auf den Stapel und ngibt es als Zahl aus, wobei das 3Symbol oben auf dem Stapel verbleibt . Dann (isst so viele Zeichen am Ende der Schlange, Schlucken den Befehlszeiger und Anhalten.

Sie können dieses Programm online im Stack Snippet Interpreter hier ausführen .

2. Pip

Der größte Teil des Programms besteht aus Ausdrücken, die ausgewertet und verworfen werden:

  • 5
  • '" (Zeichenliteral)
  • 4
  • "()"
  • 1?3'@ (ternärer Ausdruck)
  • n (Variable, = Newline)
  • () (Null)

Schließlich wird der letzte Ausdruck 2gedruckt.

3. QBasic

Alles danach 'ist ein Kommentar. Die erste Zeile ergibt also 5eine Zeilennummer. In der zweiten Zeile 1steht eine Zeilennummer und ?3eine Abkürzung für PRINT 3.

(Offensichtlich ist es kein Problem, Zeilennummern in einer falschen Reihenfolge zu haben, obwohl dies leicht zu beheben wäre.)

4. Foo

Fast alles ist No-Ops. "4"druckt 4. Die Klammern (x2) sind eine Schleife, die ausgeführt wird, bis die aktuelle Array-Zelle Null ist. Dies ist sofort der Fall und die Schleife wird beendet. @Wenn keine Zahl folgt, wird der Wert der aktuellen Array-Zelle (initialisiert auf 0) übernommen und auf den Stapel verschoben.

Ich bin mir nicht ganz sicher, wie der zweite, unerreichte ", gehandhabt werden soll. Die Online-Version scheint der Ausgabe eine neue Zeile hinzuzufügen, die die Regeln der Challenge zulassen.

5. Pyth

5ausgegeben wird. Dann trifft das Programm auf '"4", das versucht, aus einer Datei mit dem Namen zu lesen 4. Solange keine solche Datei existiert, denke ich, sollte dies das Programm mit einem Fehler beenden. (In der Online-Version steht - name 'open' is not definedIch gehe davon aus, dass das Öffnen von Dateien online nicht erlaubt ist.)

Der Streueffekt "am Ende von Zeile 1 stellt sicher, dass Zeile 2 vor der Ausführung keinen Syntaxfehler verursacht.

DLosc
quelle
@ Tennis Danke! Die Esolangs-Seite hatte keinen Link zu diesem Interpreter.
DLosc
Hier ist der Index der aktuell verfügbaren Sprachen. Wenn Sie jemals möchten, dass ich einen hinzufüge, rufen Sie mich einfach im Chat an.
Dennis
4

4 Sprachen, 24 Bytes, 24/4 ^ 3 = 0,375

print(1//0.5--1+1/2*2
);

1. PHP

PHP wird ausgeführt print(1); , was 1 entspricht

2. Lua

Lua wird hingerichtet print(1//0.5); , was 2 entspricht

3. Python 2

Python 2 wird ausgeführt print(1//0.5--1+1/2*2);, was 3 entspricht (Ganzzahldivision)

4. Python 3

Python 3 wird ausgeführt print(1//0.5--1+1/2*2);, was 4 entspricht (Float Division)

penalosa
quelle
Gute Antwort, ich mag Antworten in herkömmlichen Sprachen :-) Ich hoffe, Sie werden Spaß beim Golfen auf ppcg haben :-) Bitte probieren Sie eine meiner vorherigen Herausforderungen aus, wenn Sie sie interessant finden :-) Einige sind etwas knifflig, andere mehr basic :-)
Stewie Griffin
Möglicherweise interessieren Sie sich für das in der Challenge beschriebene Open 100 Rep Bounty. Outgolf Sp3000 (28 Bytes, 4 Sprachen) verwendet nur herkömmliche Sprachen (im Link definiert) und es gehört Ihnen :-) Leider werden Python 2 und 3 in der Bounty-Challenge nicht als einzigartig angesehen.
Stewie Griffin
3

Brainfuck-ng, Foo,> <>, 9 Bytes / 3 ^ 3 = 0,333 ...

#+!"2";n3

Brainfuck-ng

Die einzigen Zeichen, die es erkennt, sind +und !:

+ Increment cell by one
! Print as integer

Druckt 1

Foo

Druckt alles in Anführungszeichen.

"2"

Druckt 2

> <>

#Spiegelt den linken Punkt, 3drückt 3 auf den Stapel, ngibt ihn als Ganzzahl aus und ;stoppt das Programm.

#      ;n3
Phase
quelle
2

3 Sprachen, 82 83/3 ^ 3 = 3,074 ...

Arbeitet in ??? , Whitespace und Beatnik . Oder besser gesagt, es sollte in diesen Sprachen funktionieren, aber ich werde sie einige Tage lang nicht testen können. Wie auch immer, hier ist der Code:

K... Jax... Jy... Jy...   ...
My...    My...
... ...     ......................XO!

1. ???

.................................................!

??? ist im Grunde genommen Brainfuck, verwendet jedoch anstelle der herkömmlichen Zeichen die gängige Zeichensetzung als Befehl. .Inkrementiert die aktuelle Speicherzelle. Dies geschieht 49-mal. !Nimmt die aktuelle Speicherzelle und druckt sie hier als Zeichen 1.

2. Leerzeichen

[Space][Space][Space][Tab][Line Feed]
[Tab][Line Feed]
[Space][Tab]

Whitespace ist eine Sprache, die alle Nicht-Whitespace-Zeichen ignoriert. Hier habe ich es in eine leicht lesbare Form umgewandelt. Die erste Zeile wird 2auf den Stapel geschoben, und die zweiten beiden Zeilen geben hier die Oberseite des Stapels als Zahl aus 2.
Beachten Sie, dass ich im kombinierten Code aus technischen Gründen Tabulatoren durch vier Leerzeichen ersetzt habe.

3. Beatnik

K Jax
Jy Jy
My My
XO

Beatnik ist eine Sprache, in der jedes Wort in seinen Scrabble-Score konvertiert wird. Diese Scores werden dann als Befehle interpretiert. Die erste Zeile wird 17auf den Stapel geschoben. Die zweite Zeile dupliziert die Oberseite des Stapels zweimal und die dritte Zeile addiert die oben auf Elemente des Stapels zusammen zweimal, effektiv Verdreifachung 17in 51. In der letzten Zeile wird das Zeichen oben im Stapel gedruckt 3.
Beachten Sie, dass ich Beatnik zum Nennwert verwende, vorausgesetzt, die ursprüngliche Beatnik-Spezifikation enthält keinen Fehler. Beachten Sie auch, dass ich das nordamerikanische Scrabble-Bewertungssystem verwende.

Wenn es bis jetzt nicht klar ist, akzeptiert jede dieser Sprachen nur eine bestimmte Art von Zeichen (Interpunktion, Leerzeichen bzw. Buchstaben), so dass das Schreiben dieser Polyglotte so einfach war wie das Schreiben der einzelnen Programme. Der einzige echte "Trick" ist die Verwendung des Whitespace-Codes, um die Wörter von Beatnik zu trennen. Darüber hinaus überlappen sich die einzelnen Programme nicht.

Mike Bufardeci
quelle
2
3 ^ 3 = 27 ==> 82/27 = 3.037037037037037 ...
AdmBorkBork
1
Ihr Whitespace-Code gibt 0 und nicht 2 aus. Hier und hier getestet .
Dennis
@Dennis Danke, ich hatte das Vorzeichenbit weggelassen.
Mike Bufardeci
2

5 Sprachen, 175/5 ^ 3 = 1,4

Ich habe mich dazu entschlossen, eine andere Antwort zu posten, da sich die Anforderungen durch das Kopfgeld so geändert haben, dass ich mich mit meiner ersten Antwort nicht zufrieden gefühlt habe (was mich aber immer noch im Hinblick auf die allgemeine Herausforderung befriedigt!).

Also hier ist meine Lösung, die sich für die Bounty-Herausforderung qualifiziert:

Es kompiliert in

  • C99
  • objC90
  • C ++ 0x
  • Rubin
  • Perl
#if __cplusplus
#define x\
=begin\
=pod
#endif
int a=
#ifndef x
1//**/
+1
#else
3
#endif
;int main(){printf("%d",a);}
#ifdef f
=end
puts 5;
=begin
=cut
print"4";
=end
#endif
Zaibis
quelle
2

3 Sprachen, 15 Bytes, Score 0,555 ...

Ich werde später weitere Sprachen hinzufügen.

2//1+1#😅😨

1. Emotinomicon

Emotinomicon ignoriert so ziemlich jeden Text, der kein String ist. 😅drückt 1 zum Stapeln und 😨gibt die TOS als Zahl aus.

2. Javascript

Kommentare in Javascript beginnen mit //, sodass nur der 2Teil ausgeführt wird.

3. Python 2/3 REPL

Kommentare in Python beginnen mit #, sodass nur der 2//1+1Teil ausgeführt wird. //ist eine Ganzzahldivision in Python 3 und dieselbe wie /in Python 2. 2 geteilt durch 1 ist 2, plus 1 ist 3.

Akrolith
quelle
2

4 Sprachen, 97 Bytes, 0,37890625

s="1";s=~-3;2//2;'''/.to_s.ord;"=;print 4;
__DATA__
=1;
";#'''#";print=s=>console.log(3)
print(s)

Rubin

Diese setzt sauf "1", vergleicht mit =~gegen -3in einem leeren Kontext, versucht zu teilen , 2indem /2;'''/.to_s.orddann beginnt eine neue Zeichenfolge enthält =;print 4; __DATA__ =1;, trifft einen Kommentar, dann prints , sdie nach wie vor ist 1.

Python

Setzt sauf "1"wie oben und setzt es dann wieder auf ~-3was ist 2. Wir führen eine ganze Teilung 2//2, dann gibt es eine docstring enthält /.to_s.ord;"=;print 4; __DATA__ =1; ";#, gefolgt von einem Kommentar, schließlich printing s, die nach wie vor ist 2.

JavaScript

Setzt sauf "1"dann setzt es wieder auf ~-3wie oben, dann steht 2in der Zeile ein Kommentar. Dann setzen wir die Variable __DATA__auf 1. Es gibt eine kurze Zeichenfolge, ;#'''#gefolgt von einer Definition der Funktion, printdie die Ausgabe auf 3 fest codiert und in der nächsten Zeile aufgerufen wird.

Perl

Führt eine Ersetzung aus s/"1";s/~-3;2\/\/2;'''\/.to_s.ord;"/, die prints entspricht , 4und der Rest der Zeichenfolge wird hinter dem __DATA__Bezeichner maskiert .

Dom Hastings
quelle
2

QBasic, QBIC und> <>, 18 Bytes / 3 ^ 3 Sprachen = 0,66666 Punkte

1:?v+1'-5`
''`>3n;

Nervenzusammenbruch:

1. QBasic ( Holen Sie sich die IDE )

1:          Line number 1
  ?         Print
   v+1      undefined var v = 0 + 1 = 1
'-5`        The rest of theis code is a QBasic comment
''`>3n;     As is this

2. QBIC ( Holen Sie sich den Dolmetscher )

1     inserts a 1 in the code - mostly harmless
:     Reads from the cmd line. Nothing there, creates an empty variable a
?     Print
v+1   v is initialised to 6, +1 = 7
'     Code Literal: everything till the ` is passed to QBasic without processing
 -5`  7-5 = 2

''`>3n; Code literal with the first literal being a ': comment in QBasic

3.> <> ( Online ausprobieren )

1:  Push a 1 on the stack, duplicate stack
?   Pop top off the stack and skip next instruction if that's a 0
v   Move downwards - rest of the line is ignored

>   move to the right
3   Push 3 onto the stack
n   Print the top of the stack as a number
;   End the program
steenbergh
quelle
1
Ich denke, Sie möchten die Anzahl der Sprachen in Ihrer Partitur würfeln (dh 18 / (3 ^ 3))
würfeln
1

JavaScript, HTML und PHP, 72 Byte / 3 ^ 3 = 2,67

1<!top?2:2//><!--<?='--'.'><script>document.body.innerHTML=3</script>'?>

In HTML wird die führende 1 ausgegeben, das <!window?2:2//>Tag ignoriert und der Rest ist ein HTML-Kommentar.

In JavaScript wird 1<!window?2:22 ausgewertet und ausgegeben (dies muss in einer Konsole ausgeführt werden), und der Rest ist ein Kommentar.

In PHP wird Folgendes vom Server ausgegeben: 1<!top?2:2//><!----><script>document.body.innerHTML=3</script> Ersetzt HTML 1durch 3.

Cuniculus
quelle
1
Willkommen bei PPCG.SE! Toller erster Beitrag! Zwei Dinge: Wir mögen normalerweise keine REPL-basierten Antworten (das Javascript-Programm). Außerdem scheint der PHP-Code nicht zu funktionieren, wenn ich ihn in einen Online-Interpreter stelle. Wie genau funktioniert PHP?
GamrCorps
Vielen Dank! Nun, es ist technisch gesehen PHP + HTML (dh wenn dies der Quellcode für code.php ist, zeigt der Besuch von site / code.php in einem Browser 3.
Cuniculus
Versuchen Sie es hier: mowbl.com/se.php .
Cuniculus