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
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)
Common Lisp (clisp) sieht:
#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""
1/5
Ist eine rationale und nicht gleich 0.2
, so wird 3 gedruckt. Das Verfahren """
ist ein Syntaxfehler.
Beachten Sie, dass print
in Common Lisp eine vorangestellte Zeile und ein nachfolgendes Leerzeichen ausgegeben werden. Zum Glück write
funktioniert es jedoch sowohl in Common Lisp als auch in Chicken Scheme.
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
.
Befunge ist eine 2D-Sprache, und die entsprechenden Anweisungen sind
# # 15g,@
in der ersten Zeile und 5
in der 25
Zeile. #
Überspringt die nächste Anweisung, 15g
holt das Zeichen an die Position (1, 5)
im Code (das 5
in der 25
Zeile), ,
gibt das Zeichen aus und @
hält an.
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 print
ed.
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 o
und J
kommenden Zeilen. Nach der Ausgabe von 7 trifft der Zug eine nicht erkannte J
Anweisung, die das Programm zum Absturz bringt.
Eingeführte Einschränkungen: Zeichen vor dem ETA-Programm sollten nicht enthalten sein etaoinsh
.
ETA erkennt nur die Buchstaben etaoinsh
und deren Großbuchstaben, dh der Code beginnt mit
NSaIeoe
n...e
Pusht eine Zahl zur Basis 7 basierend auf dem, was sich innerhalb der Begrenzer SaI
befindet 624
, also is oder 312 in Dezimalzahl. o
gibt dann als char aus, anscheinend nach modulo 256, und gibt das char aus 8
(Code-Punkt 56). e
Dann wird versucht, mit einem leeren Stapel zu teilen, was fehlschlägt.
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 = True
eingestellt 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.
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, n
gibt ihn aus und ;
hält das Programm an.
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 a
die Variable inkrementiert A
, e
ist EvILs weave - Funktion , die die Bits mischt A
und w
Ausgänge A
. Wir geben also 1
zweimal aus und geben 11
.
Aber was ist mit dem Rest der Anweisungen und insbesondere w
mit 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 ...
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.
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 = 13
wird ausgegeben, bevor versucht wird, nil
durch 2 zu teilen .
Dieser Teil ist der gleiche wie der Gol> <> -Teil, außer dass @
die 14 stattdessen nach oben verschoben wird, was ausgegeben wird.
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.
Mit STL
für Leerzeichen, Tabulator und Zeilenvorschub bzw. ist der Start des Programms:
SSSTSSSSL
TL
STL
L
L
Die erste Zeile drückt 16 ( +10000
Basis 2), die vorhergehende gibt TLST
sie 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.
In der ersten Zeile werden eine Reihe von Anweisungen ausgeführt, die relevanten jedoch
kkmmao#/
Aufgrund der ETA-Einschränkung wird k
die Variable B dekrementiert und nicht a
inkrementiert. kk
dekrementiert B auf -2 und mm
Quadrate 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.
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.
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, 9
konvertieren 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.
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/null
dort keine Pipe geben, drücke 0 auf den Stack. A +
mit n >= 5
vorangestellten 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.
Der einzige relevante Teil für Fission ist
*"12"L
L
erzeugt ein Atom, das sich nach links bewegt, "21"
druckt 21 und *
hält an.
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 2
und ..
gibt ihn zweimal aus.
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, nothing
durch 2 zu teilen . Beachten Sie, dass Julia nichts dagegen zu haben scheint, dass der Rest des Codes ohnehin einen Syntaxfehler verursachen würde.
Lily sieht:
# comment
#[
multiline comment
]## comment
print (7/6*24)# comment
7/6*24 = 1*24 = 24
gedruckt wird.
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.
Das Hühnerschema hat dieselbe #| ... |#
mehrzeilige Kommentarsyntax wie Common Lisp. In
(write(if(= 1/5 .2)26 3))
1/5
ist ein Schwimmer, ist gleich 0.2
, so wird stattdessen 26 ausgegeben.
Thue ist eine Sprache, die auf dem Umschreiben von Zeichenfolgen basiert. Der erste relevante Teil ist
f::=~27
::=
die eine Substitution definiert, f -> 27
bezeichnet dann das Ende von Substitutionen mit ::=
. Der Lone- f
In if
wird dann durch ersetzt 27
und ausgegeben.
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
.
Picolisp sieht:
# comment
#{
multiline comment
}#(prin 29)
Die Zeile danach verursacht dann einen Syntaxfehler.
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 Jo
mit einem Namen aus zwei Buchstaben deklariert , da Ein-Buchstaben-Namen scheinbar fehlschlagen. In der zweiten Zeile wird dieser String auf gesetzt "30"
, der X
in der dritten Zeile von ("exam") ausgegeben wird .
2.7.1
zu2.7.n
. (Tatsächlich macht Sweerpotato genau das mit Hauptversionen.)