<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 65641; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 31516; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d?\.?\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
2.7.1
zu2.7.n
. (Tatsächlich macht Sweerpotato genau das mit Hauptversionen.)Antworten:
30 Sprachen, 248 Bytes, 248/30 ^ 3 = 0,009185
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
: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:
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
Dadurch wird die Zelle auf 1 erhöht und dann als Zahl gedruckt.
2. CoffeeScript (inklusive Dolmetscher)
CoffeeScript sieht:
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:
1/5
Ist eine rationale und nicht gleich0.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ückwrite
funktioniert 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ämlich1"2"3"4
.5. Befunge-93 | Dolmetscher
Befunge ist eine 2D-Sprache, und die entsprechenden Anweisungen sind
in der ersten Zeile und
5
in der25
Zeile.#
Überspringt die nächste Anweisung,15g
holt das Zeichen an die Position(1, 5)
im Code (das5
in der25
Zeile),,
gibt das Zeichen aus und@
hält an.6. Python 2 | ideone
Python sieht:
(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6
, das wirdprint
ed.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 Codesmit den von TRANSCRIPT verwendeten
o
undJ
kommenden Zeilen. Nach der Ausgabe von 7 trifft der Zug eine nicht erkannteJ
Anweisung, 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
etaoinsh
und deren Großbuchstaben, dh der Code beginnt mitn...e
Pusht eine Zahl zur Basis 7 basierend auf dem, was sich innerhalb der BegrenzerSaI
befindet624
, also is oder 312 in Dezimalzahl.o
gibt dann als char aus, anscheinend nach modulo 256, und gibt das char aus8
(Code-Punkt 56).e
Dann 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 = 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
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
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.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
wo
a
die Variable inkrementiertA
,e
ist EvILs weave - Funktion , die die Bits mischtA
undw
AusgängeA
. Wir geben also1
zweimal aus und geben11
.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 ...12. Foo | Probieren Sie es online!
Foo gibt alles zwischen doppelten Anführungszeichen aus, der relevante Teil ist also das
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:
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 .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:
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
STL
für Leerzeichen, Tabulator und Zeilenvorschub bzw. ist der Start des Programms:Die erste Zeile drückt 16 (
+10000
Basis 2), die vorhergehende gibtTLST
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.
17. 3var | Probieren Sie es online!
In der ersten Zeile werden eine Reihe von Anweisungen ausgeführt, die relevanten jedoch
Aufgrund der ETA-Einschränkung wird
k
die Variable B dekrementiert und nichta
inkrementiert.kk
dekrementiert B auf -2 undmm
Quadrate B zweimal auf 16, was mit auf 17 inkrementiert wirda
. Dies wird dann mit ausgegebeno
.#
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
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
#
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 in1*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 enthaltenWenn 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+
mitn >= 5
vorangestellten Leerzeichen drücktn-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
L
erzeugt 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 von2
und..
gibt ihn zweimal aus.23. Julia | Probieren Sie es online!
Julia sieht:
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.24. Lily | Dolmetscher
Lily sieht:
7/6*24 = 1*24 = 24
gedruckt wird.25. GolfScript | Probieren Sie es online!
GolfScript sieht:
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. In1/5
ist ein Schwimmer, ist gleich0.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
die eine Substitution definiert,
f -> 27
bezeichnet dann das Ende von Substitutionen mit::=
. Der Lone-f
Inif
wird dann durch ersetzt27
und 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:welche druckt
7/6*24 = 28
.29. Picolisp | ideone
Picolisp sieht:
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:
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"
, derX
in der dritten Zeile von ("exam") ausgegeben wird .quelle
pre
Tags einschließen, anstatt einen Markdown-Codeblock zu verwenden.15 Sprachen,
686665 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
: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
+
einem2
. 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:
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 a1
, dann a5
, dann a7
. Wir nehmen die Differenz der letzten beiden, um zu erhalten-2
, und subtrahieren sie dann von der1
, um zu erhalten3
.!
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:I
versucht Eingaben zu lesen, kann aber nicht, also drückt es-1
.a
drückt die aktuelle Zeilennummer plus 1, was ist2
.e
ist divmod , das diese durch0
und ersetzt1
(oder-1
, ich weiß es eigentlich nicht, aber es spielt keine Rolle). Der nächstee
ersetzt beide durch0
.Nun der interessante Teil.
NTHne
ist ein Basis-7-Zahlenliteral.N
unde
sind nur die Begrenzer, und die drei Ziffern sindTHN
. Das ist54
(woT
ist die Ziffer1
,H
ist0
undn
ist5
).a
drückt2
noch einmal.S
subtrahiert es52
undO
gibt es als Zeichen aus (4
). Jetzte
versucht 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:Zum Glück hat Axo auch implizites
0
s 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. Dann5
drückt man a5
,{
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
t
anstelle von auch verwende\t
, damit die Spalten richtig ausgerichtet sind:Da Buchstaben, Leerzeichen und Tabulatoren in Labyrinth Wände sind, sieht der zugängliche Code folgendermaßen aus:
Der Anweisungszeiger folgt automatisch diesem Pfad.
#
Schiebt die Tiefe des Hauptstapels (0
) und15
verwandelt ihn in einen15
.}
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 wechselt5
.7
verwandelt die Null in ein7
,'
ist ein No-Op. Das`
ist unäre Verneinung, also bekommen wir-7
. Nun-
subtrahiert die-7
von den impliziten0
darunter machen7
. Dieses Mal dreht sich die IP nach rechts zu der`
, was eine unäre Verneinung ist, also bekommen wir es7
wieder. Die IP trifft eine Sackgasse und dreht sich um. Der-
macht das selbe wie vorher, damit wir bekommen7
einmal mehr. Da die Spitze des Stapels jetzt positiv ist, wird die IP nach rechts gedreht. Es gibt noch einen,-
der-7
wieder gibt . Dann~
steht bitweise NICHT, was es gibt6
und!
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:
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
5
und Weise, wie ich mich unterscheide,6
sehr schön. :)Die oberste Reihe kann grundsätzlich ignoriert werden.
#
würde normalerweise zu einer anderen IP wechseln, aber die aktuelle Speichergrenze ist0
, 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.7
setzt diese Kante auf7
.'
bewegt sich zurück, wo wir herkommen.-
subtrahiert die Speicherkante, auf die wir gerade eingestellt haben,7
von 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 also7
statt6
.!@
, 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 wird8
. 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 die3
(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:
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 endet9
.-
dekrementiert diese Zelle, aber das ist irrelevant.<
Bewegt den Bandkopf auf9
und.
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). Das9
kann ignoriert werden.a
drückt10
,e
drückt14
,"8"
drückt den Zeichencode von8
,@
dreht die drei obersten Stapelelemente (zieht die hoch10
), so dass das Programmn
gedruckt10
und;
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:
Auch
n
wirkt sich einige Zustand , den wir kümmern uns nicht um so wollen wir das auch ignorieren. Erhöht nuna
das Register (das bei beginnt0
) unde
ist die magische "Web" -Operation des Bösen, die die Bits auf eine bestimmte Weise durchläuft.aeeeaeea
ergibt zufällig den Wert,49
der der Zeichencode von ist1
.ww
druckt 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
:Das sind zwei Befehle:
Der erste drückt die Nummer
12
.SS
Beginnt speziell ein Zahlenliteral. Das nächsteS
ist das Vorzeichenbit (positiv). Dann ist alles bis aufL
eine 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 dasTTSS
s12
binär. Unterhaltsame Tatsache: Wenn ich eine 16. Sprache hinzufügen würde, könnte ich hier ein Byte speichern, da Starry die vierS
in der binären Represtation von verwenden könnte16
. Ich bezweifle, dass ich es tun werde ...Der
TLST
druckt einfach die Oberseite des Stapels als Zahl. (TL
Markiert den Befehl als E / A-Befehl undST
gibt Zahlen aus.)Spaltung druckt
13
Probieren Sie es online aus.
Fission sieht nur diesen Teil des Codes:
L
Startet den Kontrollfluss mit einem nach links gehenden Atom."
Schaltet den Druckmodus um, sodass31
nur gedruckt wird13
. 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 ,7
anstatt nach oben ziehen das10
, und dann das14
wird gedruckt statt der10
.GolfScript druckt
15
Probieren Sie es online aus.
Dieser ist am einfachsten:
#
Kommentiert die erste Zeile aus. Dann15
drückt sich und}
ist ein "Superkommentar", der den gesamten Rest des Programms ignoriert. Das15
wird also am Ende des Programms ausgedruckt.quelle
Python 1.x, 2.x und 3.x, 32 Byte / 3 ^ 3 = 1,1851 ...
Gibt die erste Nummer der Version aus, die sich
1
in Python 1.x,2
Python 2.x und3
Python 3.x befindet.Bis wir Python 9.x bekommen, wird meine Punktzahl eine glorreiche sein
0.04389
!: ~)!
quelle
1
da es das erste Zeichen der Zeichenfolge "10.was auch immer" ist.3 Sprachen, 2 Bytes / 27 = 0,074
Nun, es schlägt mindestens die Hälfte der Einsendungen: P
1. GolfScript
GolfScript ignoriert das
P
und gibt nur das erste aus . Probieren Sie es online aus .2. Abs
P
ist 2-to-the-Power-of, also1P = 2^1 = 2
. Probieren Sie es online aus .3. Im Ernst
P
gibt 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,
\x12
welcher in Bubblegum und gs2 funktioniert , aber die Herausforderung erfordert mindestens drei Sprachen.\x13
würde funktionieren, wenn es eine Sprache gibt, in der 1 ausgegeben wird.Ich verzichtete auf eine 1-Byte-Antwort und wechselte zu zwei Bytes.
3u
ist 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: /
quelle
6 Sprachen - 44 Bytes / 6 ^ 3 = 0,204 ...
Danke an SnoringFrog für das Speichern von 10 Bytes!
Arbeitet in:
Hinweis: Bevor Sie es online versuchen, müssen Sie S durch Leerzeichen und T durch Tabulatoren ersetzen oder den folgenden Hexdump in ASCII konvertieren
Ich werde versuchen, mehr Programmiersprachen zu verwenden :)
Befunge (Drucke
1
):Probieren Sie es online aus
Pyth (Drucke
2
):Probieren Sie es online aus
Brainfuck (Drucke
3
):Probieren Sie es online aus
Hexagony (Drucke
4
):Probieren Sie es online aus
Eine lesbarere Version:
Leerzeichen (Drucke
5
):Probieren Sie es online aus
Da andere Zeichen außer Leerzeichen und Tabulatoren ignoriert werden, bleibt uns Folgendes übrig:
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.
quelle
SSSSSSSSSSTTSTSTLTLSS
Sie jetzt haben, können Sie das tunSSSTSTLTLST
. Dies drückt eine wörtliche 5 auf die stapeln und dann als Ganzzahl67 Sprachen,3237 Bytes, Ergebnis0.148 ...37/7 3 ≈ 0.107872 ...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 = 2
und 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 genommenprint(4)
.> <>
#
spiegelt IP wider,5
drückt 5,n
druckt eine Zahl und;
beendet.Befunge
#
überspringt die+
,!
logisch die Spitze des Stapels negiert,"@\"
schiebt die Zeichenfolge@\
,6
schiebt 6,.
druckt eine Nummer und@
wird beendet.Pyth
#
Startet eine Endlosschleife und schließt Fehler aus.7
druckt 7, dann folgt,+!"string")
was im Grunde einen Fehler verursacht, weil nicht zwei Operanden für das+
Beenden des Programms vorhanden sind.quelle
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.
Das ist ein Chaos. Hier ist eine Aufschlüsselung, wie es funktioniert. Die Unicode - Literale (
\u000a
sonst 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: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:
Folgendes sieht der C / C ++ - Compiler (ich habe die Unicode-Literale entfernt, da sie vom Compiler nicht erweitert werden und daher nichts tun):
Hier überschreiben die einzeiligen Kommentare die mehrzeiligen Kommentarbegrenzer am Anfang, sodass alle
#define
s und die#include
vorverarbeitet 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:Ein standardmäßiger C / C ++ - Polyglottick (the
#ifdef __cplusplus
) wird verwendet, um ein Tokeno
als 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 Funktionp
, die ein einzelnes (ignoriertes)int
Argument akzeptiert undprintf
mit unserem neu definierteno
Token aufruft . Wie üblich wird der Rückgabewert weggelassen, da wir uns nicht im strikten Modus befinden. Als nächstes definieren wir astruct
mit einem einzelnen Member, einem Funktionszeiger, dessen Signatur mitp
's übereinstimmt , und konstruieren eine einzelne Instanz mit dem Namenout
. In der Hauptmethode (wir lassen dasint
wie üblich weg ) wird die Adresse vonp
zugewiesenout.print
(alsoout.print
Anrufe angerufenp
) und es wird angerufen.Wenn C ++ nicht in den Sprachen enthalten wäre, könnten wir den gesamten Präprozessorcode löschen und
p
als definierenint p(int a){puts("2");}
. Leider erfordert C ++ eine#include
zu erledigende E / A. Wenn C nicht enthalten wäre, könnten wir die Definition vonp
und das#ifdef
Präprozessor-Makro löschen und eine Mitgliedsfunktion direkt in definieren,struct
anstatt einen Funktionszeiger zu benötigen. Leider unterstützt C keine Mitgliedsfunktionen.quelle
4 Sprachen, 28 Bytes / 64 = 0,4375
1. Python 2
0
ist falsch und/
ist ganzzahlig, also2. Perl (auch Python 3)
0
ist falsch und/
ist float division, also3. Ruby
0
ist wahr und^
ist bitweise xor, also4. Lua
0
ist wahr und^
ist Potenzierung, alsoBeachten 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
0and
nicht in Lua, daher können wir dort kein Byte speichern.Vorherige 17-Byte-Version, die 1 (Lua), 2 (Ruby), 3 (Python / Perl) ausgibt:
-3 Bytes danke an @xnor für diese Version, was sie viel ordentlicher macht :)
quelle
2^(0 or 1)
funktionierenBFSRS> <> funge93thon123, 73/343 ≈ 0,212827 ...
Brainfuck, Ernsthaft ,> <>, Befunge-93, Python 1, Python 2, Python 3
Enthält nicht druckbare Hexdumps (umkehrbar mit
xxd -ps -r
):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:
Im Ernst :
><>
:Befunge-93:
Python 1 (danke Schlammfisch):
Python 2 :
Python 3 :
quelle
3
zu4
)14 Sprachen, 73 Bytes, Score = (73/14 ^ 3) = 0,02660349854
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:Dies entspricht (in JavaScript)
Welche Ausgänge 2.
3. Element; Probieren Sie es online!
Der relevante Code:
Dies erfasst
3
und 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:#
definiert neuY
, um die TOS zu sein, in diesem Fall0
.2
drückt 2;(
dreht den Stapel N-mal und springt N vom Stapel ab;3`
drückt -3; und schließlich5n
druckt5
.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:
Superrelevanter Code:
Oder äquivalent:
nthne o
.n...e
ist ein Basis-7-Literal undthn
ist die Basis-7-Zahl für 54.o
Gibt dieses Zeichen aus. Die Einreichung ist fehlerhaft, aber ich weiß nicht warum.7. Python 3
Was es sieht:
15/2
ergibt 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+3
auftritt.8. Julia
Julia sieht:
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:
Ich habe diese Idee von Martin's Fission Teil (eher wie es gestohlen).
L
beginnt eine nach links gerichtete Sache, fängt ein9
und endet mit<
.10. Whitespace; Probieren Sie es hier aus!
Der relevante Code, der Leerzeichen in
S
und Tabulatoren in übersetztT
:Es schiebt 10 auf den Stapel und gibt ihn als Zahl aus (
T\nST
).11. Python 2
Python 2 sieht das so:
(int(15/2))+3
wird mit 11 bewertet und das ist gedruckt.12. Gol> <>; Probieren Sie es hier aus!
Relevanter Code:
Dabei wird der in Martins Antwort verwendete Trick verwendet ,
@
der unterschiedliche Richtungen in> <> und Gol> <> dreht.#
spiegelt,c
drückt 12,d
drückt 13,0
drückt 0 und@
bringtc
an die Spitze des Stapels, wird dann ausgegeben und mit gedruckt;n
.13.> <>; Probieren Sie es online!
Relevanter Code:
Wenn Sie das wieder verwenden, werden
@
unterschiedliche Richtungen in> <> und Gol> <> gedreht.#
spiegelt,c
drückt 12,d
drückt 13,0
drückt 0 und@
bringtd
an die Spitze des Stapels, wird dann ausgegeben und mit gedruckt;n
.14. Golfscript; Probieren Sie es online!
Was es sieht:
Es drückt
14
,print
s it und Fehler.Gestohlen,inspiriert von der Antwort von Sp3000 .quelle
Subskin , Brainfuck und Fob 27 Bytes / 3 ^ 3 = 1
Subskin
Wir setzen den Befehlszeiger (spielt hier keine Rolle)
0
und das Ausgangsregister auf31
. Wenn der Inhalt des Ausgaberegisters ist>= 0
, geben wir den enthaltenen Wert als a auschar
. Alle anderen Codes werden ignoriert.Brainfuck
Stellt
3
das Register ein, dekrementiert den Wert einmal mit-
und gibt schließlich mit aus.
.Fob
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 ein3
, 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
$
.quelle
7 Languages, 55/7 ^ 3 ≈ 0.16035
Läuft in PowerShell v1, v2, v3, v4 und v5, Foo und Pyth
Die Ziffern 1-5 verwenden eine ähnliche Logik wie die Antwort von sweerpotato . Die
$PSVersionTable
spezielle Variable wurde in PowerShell v2 eingeführt und enthält eine vollständige Erstellungsliste, Revisionen usw. Hier ist eine Beispielausgabe der Variablen:In diesem Code speichern wir ihn zuerst,
$p
damit 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:$NULL
. Dabei!
handelt es$TRUE
sich um oder1
handelt es sich um das zweite Element im Array, das ausgegeben wird1
.!
ergibt die der Variablen$FALSE
oder0
, 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 ausspucken6
und dann den Rest des Programms durcharbeiten, was nichts bewirkt.Wenn Sie Pyth for 7 verwenden, kehren Sie zurück
7
und 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
quelle
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]
? Das funktioniert auf meiner Powershell, aber möglicherweise nicht auf allen vorherigen Versionen.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:
Ungolfed:
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\n
nur "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\n
so 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!)
quelle
4 Sprachen (Befunge-93, Microscript II, Microscript und Foo), Punktzahl 7/64 = 0,109
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
quelle
Python 1 | 2 | 3, 27 Bytes / 27 = 1
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 oderFalse
ab Python 2.3 zurück und(1/2>0) == (0.5>0)
kehrtTrue
fü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(Aus den Neuerungen in Python 2.0 )
quelle
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.
Python 3 wird gedruckt
1
Der Trick ist der folgende:
Dies wird gedruckt
1
Ruby, druckt
2
Der interpretierte Code für Ruby ist:
Also das druckt
2
Perl, druckt
3
Der interpretierte Code für Perl ist:
Zunächst
__DATA__
teilt das Token dem Perl-Compiler mit, dass die Kompilierung abgeschlossen ist. Alles danach wird ignoriert.Und druckt
3
C, druckt
4
Der interpretierte Code unterscheidet sich erheblich von den anderen:
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
.quelle
5 Sprachen, 18 Bytes / 5 ^ 3 = 0,144
Läuft in Brainbool , Mathematica , Foo , > <> und Befunge-93 .
Brainbool
Brainbool ist wie Brainfuck, arbeitet jedoch nur mit Bits, und seine Eingabe und Ausgabe besteht ausschließlich aus
0
und1
.Mathematica
In Mathematica ist alles ein Ausdruck und hat einen Wert.
Print@2
druckt2
das 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.> <>
Befunge
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 > <> .
quelle
6 Languages, 38/6 ^ 3 = 0.17592̅5̅9̅
Whitespace , Brainfuck, Ruby, Labyrinth , Foo, im Ernst
Legende:
£
: tab•
: Platz§
: 0x7fDies 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.)
Foo
Probieren Sie es online aus.
Das einzige, was die Ausgabe beeinflusst, ist "5", was 5 ausgibt.
Ernsthaft
Probieren Sie es online aus.
quelle
5 Sprachen, Chaîne , Minkolang , Foo , Brainf ** k-ng und Vitsy , 21/5 ^ 3 = 0,168
Brainf ** k-ng
Chaîne
Foo
Minkolang
Vitsy
Ich kann wahrscheinlich> <> oder etwas hinzufügen.
quelle
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:
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<...>
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.
quelle
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.
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):
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):
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.3
ist das oberste Element am Ende des Programms, daher wird es ausgegeben.quelle
5 Sprachen, 18 Bytes / 5 ^ 3 = 0,144
Ouroboros , Pip , QBasic, Foo und Pyth
1. Ouroboros
Jede Zeile des Programms stellt eine Schlange dar, die ihren Schwanz frisst.
Schlange 1
Push
5
,'
ist ein No-op, Push52
(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 Sie3
,'
ist ein No-Op.@
Dreht das Symbol1
oben auf den Stapel undn
gibt es als Zahl aus, wobei das3
Symbol 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
2
gedruckt.3. QBasic
Alles danach
'
ist ein Kommentar. Die erste Zeile ergibt also5
eine Zeilennummer. In der zweiten Zeile1
steht eine Zeilennummer und?3
eine Abkürzung fürPRINT 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"
druckt4
. 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
5
ausgegeben wird. Dann trifft das Programm auf'"4"
, das versucht, aus einer Datei mit dem Namen zu lesen4
. Solange keine solche Datei existiert, denke ich, sollte dies das Programm mit einem Fehler beenden. (In der Online-Version steht -name 'open' is not defined
Ich 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.quelle
4 Sprachen, 24 Bytes, 24/4 ^ 3 = 0,375
1. PHP
PHP wird ausgeführt
print(1);
, was 1 entspricht2. Lua
Lua wird hingerichtet
print(1//0.5);
, was 2 entspricht3. 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)quelle
Brainfuck-ng, Foo,> <>, 9 Bytes / 3 ^ 3 = 0,333 ...
Brainfuck-ng
Die einzigen Zeichen, die es erkennt, sind
+
und!
:Druckt
1
Foo
Druckt alles in Anführungszeichen.
Druckt
2
> <>
#
Spiegelt den linken Punkt,3
drückt 3 auf den Stapel,n
gibt ihn als Ganzzahl aus und;
stoppt das Programm.quelle
3 Sprachen,
8283/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:
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 Zeichen1
.2. Leerzeichen
Whitespace ist eine Sprache, die alle Nicht-Whitespace-Zeichen ignoriert. Hier habe ich es in eine leicht lesbare Form umgewandelt. Die erste Zeile wird
2
auf den Stapel geschoben, und die zweiten beiden Zeilen geben hier die Oberseite des Stapels als Zahl aus2
.Beachten Sie, dass ich im kombinierten Code aus technischen Gründen Tabulatoren durch vier Leerzeichen ersetzt habe.
3. Beatnik
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
17
auf 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 Verdreifachung17
in51
. In der letzten Zeile wird das Zeichen oben im Stapel gedruckt3
.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.
quelle
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
quelle
3 Sprachen, 15 Bytes, Score 0,555 ...
Ich werde später weitere Sprachen hinzufügen.
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 der2
Teil ausgeführt wird.3. Python 2/3 REPL
Kommentare in Python beginnen mit
#
, sodass nur der2//1+1
Teil 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.quelle
4 Sprachen, 97 Bytes, 0,37890625
Rubin
Diese setzt
s
auf"1"
, vergleicht mit=~
gegen-3
in einem leeren Kontext, versucht zu teilen ,2
indem/2;'''/.to_s.ord
dann beginnt eine neue Zeichenfolge enthält=;print 4; __DATA__ =1;
, trifft einen Kommentar, dannprint
s ,s
die nach wie vor ist1
.Python
Setzt
s
auf"1"
wie oben und setzt es dann wieder auf~-3
was ist2
. Wir führen eine ganze Teilung2//2
, dann gibt es eine docstring enthält/.to_s.ord;"=;print 4; __DATA__ =1; ";#
, gefolgt von einem Kommentar, schließlichprint
ings
, die nach wie vor ist2
.JavaScript
Setzt
s
auf"1"
dann setzt es wieder auf~-3
wie oben, dann steht2
in der Zeile ein Kommentar. Dann setzen wir die Variable__DATA__
auf1
. Es gibt eine kurze Zeichenfolge,;#'''#
gefolgt von einer Definition der Funktion,print
die 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;"/
, dieprint
s entspricht ,4
und der Rest der Zeichenfolge wird hinter dem__DATA__
Bezeichner maskiert .quelle
QBasic, QBIC und> <>, 18 Bytes / 3 ^ 3 Sprachen = 0,66666 Punkte
Nervenzusammenbruch:
1. QBasic ( Holen Sie sich die IDE )
2. QBIC ( Holen Sie sich den Dolmetscher )
3.> <> ( Online ausprobieren )
quelle
JavaScript, HTML und PHP, 72 Byte / 3 ^ 3 = 2,67
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:2
2 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 HTML1
durch3
.quelle