Wann wurde diese Sprache veröffentlicht?


92

Ihre Herausforderung ist einfach. Sie müssen ein Programm schreiben, das in dem Jahr, in dem die Sprache veröffentlicht wurde, entweder in STDOUT oder in einer Datei gedruckt wird. Da dies eine so einfache Aufgabe ist, ist die Wendung, dass es in so vielen verschiedenen Sprachen wie möglich geschrieben werden muss.

Ihre Punktzahl ist die Gesamtzahl der verschiedenen Jahre, die korrekt gedruckt wurden.

Für jede Sprache, die Sie verwenden, müssen Sie

  • Geben Sie an, welche Version der Sprache Sie verwenden. (Wenn es mehrere Versionen gibt)

  • Geben Sie an, in welchem ​​Jahr diese Version zum ersten Mal veröffentlicht wurde, und

  • Stellen Sie einen Link zu einer Seite bereit, auf der das Datum Ihrer Version / Sprache angegeben ist.

Jede dieser Angaben gilt als Nachweis des Veröffentlichungsdatums, sofern darin die Versionsnummer (falls zutreffend) und ein Veröffentlichungsdatum angegeben sind.

  • Eine Wikipedia-Seite.

  • Eine Esolangs- Seite.

  • Die offizielle Website der Sprache. Eine Github-Seite oder ähnliches zählt, solange sie ein Veröffentlichungsdatum hat. (Der letzte Commit zählt nicht, es sei denn, der Code enthält eine Versionsnummer.)

Wenn es nicht mehrere Versionen oder Versionen einer Sprache gibt, verwenden Sie einfach das ursprüngliche Veröffentlichungsdatum der Sprache.

Kleinere Versionen derselben Sprache Sie gelten als verschiedene Sprachen, solange sie aus verschiedenen Jahren kommen und produzieren nach wie vor die richtige Ausgabe. Sie können nicht alle eingebauten Funktionen , die Ihnen Informationen (einschließlich Release - Datum) gibt über die aktuelle Version der Sprache , die Sie verwenden. Dies ist beispielsweise eine ungültige Python-Übermittlung:

import platform
i = platform.python_version()
if i == '3.5':
    print(2015)
if i == '3.4':
    print(2014)
if i == '3.3':
    print(2012)
...

Welcher Beitrag auch immer die deutlichsten Jahreszahlen korrekt ausgibt, gewinnt!

Regeln

  • Jedes Programm muss das Sprachjahr und nichts mehr ausdrucken . Ein abschließender Zeilenumbruch (Windows-Stil oder * nix-Stil) ist zulässig.

  • Es dürfen keine Programme Eingaben machen.

  • Bei einem Gleichstand gewinnt der kürzeste in Bytes gewertete Code. Sie können dafür eine beliebige Codierung verwenden, aber alle Programme müssen dieselbe Codierung verwenden.

  • Jedes der Programme kann auf STDERR drucken oder Laufzeit- / Kompilierungsfehler und -warnungen ausgeben, solange die korrekte Ausgabe auf STDOUT oder in einer Datei gedruckt wird.

  • Verschiedene Sprachen können unterschiedliche E / A-Methoden verwenden, aber es handelt sich meistens um vollständige Programme (Funktionen, die für diese Herausforderung nicht zulässig sind), die einer unserer zulässigen Standard-E / A-Methoden folgen .

Viel Spaß beim Polyglotten!


Da Pip keine Wikipedia- oder Esolangs-Seite hat, nur einen GitHub und keine "Veröffentlichungen" im GitHub-Sinne hat, kann er für diese Herausforderung nicht verwendet werden? (Es hat eine Versionsnummer, die bei jedem Commit aktualisiert wird.)
DLosc

1
@dlosc Nun, ich möchte keine Sprachen unnötig ausschließen, aber ich möchte sicherstellen, dass das "Veröffentlichungsdatum" absolut objektiv bleibt. Können Sie sich bessere Möglichkeiten vorstellen, um ein Veröffentlichungsdatum durchzusetzen, das mehr Sprachen umfasst?
DJMcMayhem

4
( Fügt beiläufig Whitespace-Code ein, um 2003 in praktisch jeder einzelnen Einreichung zu drucken. )
Value Ink

8
„Sie können nicht alle eingebauten Funktionen , die Sie Informationen über die aktuelle geben Version der Sprache , die Sie verwenden.“ Mein Schwerpunkt. Darf ich nach dem Erstellungsdatum in der Interpreter-Datei suchen?
Adám

2
Ich denke nicht, dass dies ein Duplikat ist. Auch wenn dies der Fall ist, sollte diese Herausforderung als "Original" akzeptiert werden, da die Benutzer im Gegensatz zu der anderen Herausforderung dazu ermutigt werden, etwas über ihre Verwendung zu lernen.

Antworten:


159

Eine kurze Geschichte der 2D-Programmiersprachen: 16 (+2) Jahre

v19977/2{@{{4{\_______>/02&&&#????        *    P+++++1P1P-1P+1E     *                         *
\'\02'oo100@n590@n;                       *                         *                         *
>"8991",,,;5-;,@                          *                         *                         *
   *                                      *                         *                         *
  \ *              ++++++++++++++++++++++++  ++++++++++++++++++++++++  ++O--OO++++++++OX*******      *
     *   #2018O@       *                  *      *                  *      *                  *      *
      *                *                  *      *                  *      *                  *      *
       *               *                  *      *                  *      *                  *      *
        *           ****    ****          *   ****    ****          *   ****    ****          *   ****    *****
         *         *   *   *    *         *  *   *   *    *         *  *   *   *    *         *  *   *   *
          *        *   *  *      *        *  *   *  *      *        *  *   *  *      *        *  *   *  *
           *      *    * ****     *       * *    * ****     *       * *    * ****     *       * *    * ****
            *     *    *     *            * *    *     *            * *    *     *            * *    *     *
R"2014";     *****      *******       ******      *******       ******      *******       ******      *******

 x
x%"2010"x
 x

$'main'        \/\/\/\
 \-[2005]o-#   \++++++\
               /++++++/
               \++++++\
               /++++++/
               \/\/\/\++.--..+++.#

S1^2^2^6^8MAOUOAOOF

      /K:0:1:@

  >      "7102"4&o@

|        }+++++[>++++++++++<-]>.--..++++++.@

Habe ich erwähnt, dass ich 2D-Programmiersprachen mag?

1993: Befunge

Die Sprache, mit der (angeblich im letzten Abschnitt) alles begann. In Befunge können Sie den Kontrollfluss mit umleiten <v>^, aber die jetzt allgegenwärtigen Spiegel \und /waren noch keine Sache. Der Befunge-Interpreter von Anarchy Golf ignoriert unbekannte Befehle. Damit können wir die Familie Befunge von der Familie> <> unterscheiden. Daher lautet der von Befunge ausgeführte Code wie folgt:

v
\
>"8991",,,;5-;,@

Der "8991"schiebt die einzelnen Zeichen auf den Stapel. ,,,druckt die ersten drei aus. Dann ;ist unbekannt (was wir benutzen, um es von Befunge 98 zu unterscheiden), 5-verwandelt das 8in ein 3und ,druckt das auch, bevor @das Programm beendet wird.

1997: Wierd

Das Schreiben dieses Teils der Lösung hat wahrscheinlich so lange gedauert, bis ich alle anderen geschrieben und zusammengesetzt hatte ...

Wierd kennt nur zwei Symbole: Leerzeichen und alles andere. Der Anweisungszeiger versucht, dem Pfad zu folgen, der durch die Nicht-Leerzeichen gebildet wird, wobei er diagonal von der oberen linken Ecke beginnt und immer versucht, so gerade wie möglich zu verlaufen. Die Kurven im Pfad bilden die tatsächlichen Anweisungen (wobei die Gradzahl der Drehung bestimmt, welche Anweisung ausgeführt werden soll). Wierd sieht also folgenden Code:

v1997                                     *                         *                         *
 '                                        *                         *                         *
  8                                       *                         *                         *
   *                                      *                         *                         *
    *              ++++++++++++++++++++++++  ++++++++++++++++++++++++  ++O--OO++++++++OX*******      *
     *                 *                  *      *                  *      *                  *      *
      *                *                  *      *                  *      *                  *      *
       *               *                  *      *                  *      *                  *      *
        *           ****    ****          *   ****    ****          *   ****    ****          *   ****    *****
         *         *   *   *    *         *  *   *   *    *         *  *   *   *    *         *  *   *   *
          *        *   *  *      *        *  *   *  *      *        *  *   *  *      *        *  *   *  *
           *      *    * ****     *       * *    * ****     *       * *    * ****     *       * *    * ****
            *     *    *     *            * *    *     *            * *    *     *            * *    *     *
             *****      *******       ******      *******       ******      *******       ******      *******

Das 1997oben stehende wird nicht wirklich ausgeführt, aber Wierd lässt es uns aus dem Quellcode lesen, was viel kürzer ist als der Versuch, die Zeichencodes für die vier Ziffern selbst zu konstruieren (auch wenn es nicht so aussieht). .). Ich habe keine Lust, das Ganze zusammenzubrechen, aber Sie können die vier wiederholten Abschnitte deutlich sehen. Dies bedeutet, dass wir zuerst 1auf dem Stapel speichern und dann in jedem dieser vier Abschnitte dies inkrementieren 1und dann verzweigen. Der untere Ast drückt einen anderen1, ruft das Quellzeichen an diesen Koordinaten ab und druckt es aus, während der obere Zweig zum nächsten Abschnitt umgeleitet wird. Sie mögen sich fragen, warum die Enden der Pfade so unnötig lang sind, aber das liegt daran, dass Wierd versucht, zu einem nahe gelegenen Pfad zu springen, bevor er entscheidet, dass der aktuelle Zweig beendet werden soll. Um dies zu vermeiden, müssen wir diese Enden weit genug von anderen Codes entfernen.

1998: Befunge 98

Befunge erhielt 1998 ein ziemlich bekanntes Update mit einer sehr strengen Spezifikation, die auf beliebige Dimensionen (und ich denke auch beliebige Topologien) verallgemeinert werden kann. Es ist jedoch weitgehend abwärtskompatibel mit Befunge, was es ziemlich einfach macht, die beiden zu polyglotten. Diese Befunge hatte noch keine Spiegel, daher ist der ausgeführte Pfad derselbe wie bei Befunge 93:

v
\
>"8991",,,;5-;,@

Der Unterschied ist, dass Befunge 98 das nicht ignoriert ;. Stattdessen verhält es sich ein bisschen wie ein Kommentar, bei dem alle Befehle bis zum nächsten ;ignoriert werden. Auf diese Weise, wir verringern das nicht 8zu 3und der Druck 1998ist. Die

2001: Ein Space Od ... PingPong

2001 ist das Jahr von Piet, aber ich hatte wirklich keine Lust, eine Bilddatei mit all den anderen Programmen zu polyglotten, daher hier eine weniger bekannte 2D-Sprache. Es scheint ziemlich viele Funktionen zu haben (die wir nicht verwenden werden). Vielen Dank an Sp3000 für das Auffinden des Originaldolmetschers (der einzige tote Link in der archivierten Version der offiziellen Website).

PingPong ist insofern etwas ungewöhnlich, als es nur Spiegel und keine <v>^Redirectors hat. Dieser bewegt sich also v19977am Anfang durch den Spiegel und trifft dann auf den Spiegel, der ihn unten einwickelt. Der relevante Code lautet dann:

v19977/

...

      /K:0:1:@

...

Der eigentliche Code ist ganz einfach: Kdrückt 20, die Ziffern drücken sich selbst, gibt :eine ganze Zahl aus und @beendet das Programm.

2003: SNUSP

Dies ist die erste Sprache, in der es etwas einfacher wird, da SNUSP einen expliziten Einstiegspunkt unterstützt. Dieser Einstiegspunkt ist mit gekennzeichnet $. Nach einigen Artikeln über Esolangs zu urteilen, hat diese Sprache einige andere inspiriert, aber letztendlich handelt es sich leider nur um ein Brainfuck-Derivat. Trotzdem denke ich, dass die Art und Weise, wie die aktuelle Zelle auf 48 gesetzt wird, ziemlich ordentlich ist (und aus dem Esolangs-Artikel gestohlen wurde). Hier ist der relevante Teil des Codes:

$'main'        \/\/\/\
               \++++++\
               /++++++/
               \++++++\
               /++++++/
               \/\/\/\++.--..+++.#

Das sind 24 +s und die Spiegel senden die IP jeweils genau zweimal durch.

2004: Axo

Aus welchem Grund auch immer, diese Sprache hat die haben <^>Redirectoren aber statt der üblichen ves verwendet %. Dies bewegt sich also nur über die erste Zeile. Der relevante Code lautet:

v19977/2{@{{4{\

Wir geben zunächst einige Ziffern ein und führen eine Division durch. Dann 2{druckt der 2, @löscht den Stapel. {{druckt zwei (implizite) 0s. 4{druckt das 4und \beendet das Programm.

2005: Schiene

2005 war eine schwierige Wahl. In keinem anderen Jahr habe ich so viele 2D-Sprachen gefunden, und es gibt ADJUST und Archway, die beide in der unteren linken Ecke beginnen (was das Hinzufügen erleichtert hätte). Ich mag Rail, und da es einen expliziten Einstiegspunkt gibt, ist es auch nicht schwer, ihn hinzuzufügen. Rail sucht nach einer Startlinie $'main'und beginnt, sich von der aus nach Südosten zu bewegen $. Das heißt, der relevante Code lautet:

$'main'
 \-[2005]o-#

Die \und -sind nur Tracks (No-Ops). Das [2005]ist ein Zeichenkettenliteral, das ogedruckt wird, bevor #das Programm beendet wird.

2006: BestFriends.js

Ein zweidimensionaler Brainfuck. Für dieses Jahr gibt es eine weitere interessante Sprache namens Schwarz, die bei der Koordinate (3,3)(1-basiert) beginnt und die Verwendung dieser Sprache in einem Polyglott ebenfalls interessant gemacht hätte. Ich konnte jedoch keinen Dolmetscher finden. Also müssen wir stattdessen mit einem anderen BF-Derivat arbeiten ...

Das Interessante an diesem ist, dass es das Raster nicht wie die meisten anderen 2D-Sprachen in Linien mit Zeilenvorschüben formatiert. Stattdessen |wird als Zeilentrennzeichen verwendet. Da ich |keine anderen Sprachen verwendet habe, könnte ich einfach eine |in die letzte Zeile setzen, wodurch der gesamte Rest des Programms für BF.js eine einzige Zeile wird. Der relevante Code lautet dann |:

v19977/2{...
        }+++++[>++++++++++<-]>.--..++++++.@

BF.js verwendet weder <v>^ Spiegel noch Spiegel. Die einzige Möglichkeit, den Kontrollfluss umzuleiten, besteht darin {}, die IP-Richtung um 90 ° zu drehen. Diese Klammern verschieben also die IP in die zweite Zeile. Der Rest ist eine einfache Brainfuck-Lösung (nicht besonders gut gemustert), die eine Zelle auf 50(Codepunkt von 2) setzt und dann druckt, 2006indem der Wert um ein Bit verschoben wird. @Beendet das Programm.

2008: BrainSpace 1.0

Für dieses Jahr wollte ich unbedingt DOBELA verwenden, das mehrere Einstiegspunkte verwendet und wie das Liebeskind von Fission und Ziim aussieht . Leider konnte ich den Dolmetscher nicht zum Laufen bringen. Also hier ist ein weiteres BF-Derivat (das letzte, das ich verspreche).

Im Gegensatz zum letzten kennt dieser sowohl <v>^ als auch Spiegel, daher lautet der relevante Code:

v
\'\
  8

  \ *              ++++++++++++++++++++++++  ++++++++++++++++++++++++  ++O--OO++++++++OX

Diese hat nicht die übliche BF-artige []Schleife (stattdessen müssten Sie eine tatsächliche 2D-Schleife bilden), deshalb habe ich mich nur dafür entschieden, die fest zu codieren, 50da ich sowieso eine Tonne Zeichen in einer Reihe von Wierd hatte. Beachten Sie, dass die 'und 8ignoriert werden, das *ist ein bedingtes Trampolin, das wir ignorieren können, und das Oist Brainfucks .. Der Xbeendet das Programm.

2009: > <>

Wahrscheinlich das beliebteste Fungeoid (außer Befunge selbst) zumindest in dieser Gegend. > <> hat sowohl <v>^Spiegel als auch Zeichenkettenliterale. Der ausgeführte Code lautet also:

v
\'\02'oo100@n590@n;

Das String-Literal dient hauptsächlich zum Überspringen der \Zeichen, die wir für BrainSpace 1.0 verwendet haben, aber während wir dabei sind, können wir auch die ersten beiden Zeichen eingeben. oodruckt sie aus. Dann 100drückt man drei Ziffern, @schiebt die obere nach unten und ndruckt die 0Unterseite. Wir machen das selbe nochmal mit 590dem der druckt 9. Wenn Sie sich fragen, warum ich nicht einfach so drucke 2009, warten Sie auf 2015. ;Beendet das Programm.

2010: Kardinal

Dieses war einfach, weil es einen expliziten Einstiegspunkt bei hat %. Dieser erstellt jedoch 4 IPs in alle Richtungen (daher der Name der Sprache, nehme ich an), und wir müssen 3 davon entfernen. Hier ist der relevante Code:

 x
x%"2010"x
 x

Gut ja. (In Cardinal wird im Zeichenfolgenmodus direkt gedruckt, anstatt die Zeichen auf einem Stapel abzulegen.)

2011: RunR

Eine weitere Sprache mit einem expliziten Einstiegspunkt (von David Catt, der einige andere sehr nette Esolangs erstellt hat), diesmal um S. Dies macht den relevanten Code zu diesem Teil:

S1^2^2^6^8MAOUOAOOF

RunR ist etwas interessant, da die meisten Operationen mit einer Art Register arbeiten und Werte für Binäroperationen explizit in den Stack verschoben werden müssen. Die Ziffern setzen die Registerwerte auf sich selbst und verschieben ^das aktuelle Register in den Stapel. Dann Merfolgt die Multiplikation (Register-Zeiten-Wert aus dem Stapel), Udie Subtraktion, Adie Addition und Odie Ausgabe. FBeendet das Programm.

2012: Ropy

Wie Wierd versucht Ropy, Abschnitten von Nicht-Leerzeichen zu folgen, aber hier bestimmen die Kurven nicht die Befehle. Tatsächlich stellt sich heraus, dass Ropy meinem eigenen Labyrinth ähnlicher ist, da die gewählte Richtung von der Oberseite des Stapels abhängt. Darüber müssen wir uns hier jedoch nicht wirklich Gedanken machen, denn Ropy bewegt sich einfach entlang der ersten Zeile:

v19977/2{@{{4{\_______>/02&&&#????

Es gibt eine Menge Dinge, die wir ignorieren können >. Alles, was wir wissen müssen, ist, dass der obere Teil des Stapels zu diesem Zeitpunkt a ist 4und dass er 2unten liegt.

>dupliziert das 4, /macht Division daraus ein 1. Dann schieben wir 02. &&&Verbindet die oberen vier Zahlen des Stapels in umgekehrter Reihenfolge und gibt 2012. #gibt es aus. ????Löscht nur den Stapel, da sonst auch der obere Teil des Stapels ausgegeben wird.

Ein Punkt von Interesse ist , dass der zweite 7in 19977wurde hinzugefügt , weil der ropy. Die /Unterteilung in Ropy macht top / second(entgegen der üblichen Reihenfolge in vielen Stack-basierten Sprachen), wo 7 / 9es geben würde 0. Wenn wir oben auf dem Stapel eine Null hätten, würde Ropy ein paar wilde Dinge mit seiner Bewegungsrichtung anstellen, also müssen wir die andere drängen, 7um sicherzustellen, dass die Oberseite des Stapels positiv bleibt und Ropy sich weiter nach Osten bewegt.

2014: Spaltung

Mit seinen expliziten Einstiegspunkten ist dieser einfach. RDLUErzeugen Sie Atome (Anweisungszeiger) in der entsprechenden Richtung. Das relevante Bit ist also genau dies:

R"2014";

Beachten Sie, dass es auch einen Uim Quellcode gibt, dieser Atom jedoch irgendwann einen *von Wierd trifft , wodurch das Programm beendet wird (und dieser Atom dauert viel länger als der RDruck 2014).

2015: Gol> <>

Das mächtigere> <> Derivat von Sp3000. Es ist weitgehend abwärtskompatibel mit> <>, daher ist der ausgeführte Code immer noch:

v
\'\02'oo100@n590@n;

Die Drehrichtung von @wurde jedoch geändert. Dies ist der Standardtrick zur Unterscheidung von> <> und Gol> <> in Polyglots. Daher wird dieser Trick 15anstelle von gedruckt 09. Daher die Verrücktheit in der zweiten Hälfte des Programms.

2016: CSL

CSL ist insofern sehr interessant, als Befehle nicht sofort ausgeführt werden. Stattdessen wird jeder Befehl auf einen Befehlsstapel verschoben eund Ekann verwendet werden, um Befehle von diesem auszuführen. Der relevante Code wird:

v19977/2{@{{4{\_______>/02&&&#????        *    P+++++1P1P-1P+1E

Der Eführt also den gesamten Befehlsstapel aus, was bedeutet, dass das Zeug davor in umgekehrter Reihenfolge ausgeführt wird. Wir müssen uns nur um Folgendes kümmern *:

1+P1-P1P1+++++P*

Die 1s schieben sich auf den Datenstapel. +und -sind Dekrement / Inkrement. Pdruckt die Oberseite des Stapels. Dann wird *versucht, die beiden obersten Werte des Stapels zu multiplizieren. Der Stack ist jedoch leer, so dass das Programm beendet wird.


An diesem Punkt kommen wir zu den Sprachen, die nach dem Veröffentlichen dieser Herausforderung veröffentlicht wurden. Daher zähle ich sie nicht wirklich für die Punktzahl, zumal ich sie selbst erstellt habe (allerdings nicht mit Blick auf diese Herausforderung). Sie verfügen jedoch über einige neuartige IP-Bewegungssemantiken, die es einfach machten, sie in die Mehrsprachigkeit einzufügen, und die diesem Schaufenster von 2D-Sprachen etwas Interessantes hinzufügten.

2017: Alice

Alice wurde entworfen, um ein Fungeoid mit vielen Funktionen zu sein. Ein interessanter Unterschied zu den meisten (aber nicht allen) anderen 2D-Sprachen besteht darin, dass sich die IP entweder orthogonal oder diagonal bewegen kann. Durch das Umschalten zwischen diesen Befehlen wird auch die Semantik fast aller Befehle in der Sprache geändert. Darüber hinaus unterstützt Alice sowohl die traditionellen <^>vRichtungssetzer als auch die \/Spiegel, aber Spiegel haben in Alice ein sehr einzigartiges Verhalten (wodurch es einfach ist, die Alice-IP zu einem bislang nicht verwendeten Teil des Codes zu führen).

Während der meisten Sprachen behandeln \und , /als ob sie von Spiegeln in einem Winkel von 45 °, und die IP als Lichtstrahl aus der es Prellen, behandelt Alice sich als einen 67,5 ° Winkel (der den Winkel des tatsächlichen slash Glyphen näher ist) und die IP bewegt sich auch durch den Spiegel (daher der Name der Sprache). Aufgrund dieses Winkels wechseln die Spiegel zwischen Bewegungen in orthogonalen oder diagonalen Richtungen. Im Ordinal-Modus (dh während sich die IP entlang der Diagonalen bewegt) springt das Gitter nicht umher und stattdessen springt die IP von den Rändern ab (während sie im Cardinal-Modus umher springt).

Alles in allem ist der von Alice ausgeführte Code der folgende:

v19
\ \

...

  >      "7102"4&o@

...

Die IP beginnt wie gewohnt in der linken oberen Ecke, vschickt sie nach Süden. Jetzt \reflektiert das IP, um sich nach Nordwesten zu bewegen, wo es sofort vom linken Rand des Gitters abprallt (und sich stattdessen nach Nordosten bewegt). 1ignoriert werden kann, prallt die IP von der oberen Kante ab, um sich als nächstes nach Südosten zu bewegen. Wir treffen einen anderen, \der die IP Nord widerspiegelt. 9kann auch ignoriert werden und die IP wird dann an den unteren Rand des Gitters verschoben. Nach ein paar Zeilen leiten wir es >aus Bequemlichkeitsgründen nach Osten um. Dann "7102"drückt der die Codepunkte 2017, 4&odruckt diese vier Zeichen und @beendet das Programm.

2018: Wumpus

Wumpus ist die erste 2D-Sprache in einem Dreiecksgitter, die die Bewegung durch den Code ganz anders macht (und uns wieder leicht zu einem unbenutzten Teil des Codes gelangen lässt). Anstatt sich jedes Zeichen im Raster als kleines Quadrat vorzustellen, sollten Sie sie als abwechselnde Dreiecke nach oben und unten betrachten. Die linke obere Ecke ist immer ein Dreieck nach oben.

Wumpus hat keine Richtungssetzer wie <^>v, aber es hat Spiegel \/. Aufgrund des dreieckigen Rasters funktionieren diese jedoch anders als die meisten anderen Sprachen. Die IP prallt von ihnen ab wie ein Lichtstrahl (wie üblich), aber Sie sollten sich vorstellen, dass sie einen Winkel von 60 ° haben. Ein IP, das sich nach Osten bewegt, bewegt sich am Ende entlang der Nordwestachse des Gitters.

Ein weiterer Unterschied zu den meisten anderen Sprachen besteht darin, dass die Kanten des Rasters nicht umbrochen werden, sondern dass die IP-Adresse stattdessen von den Kanten abprallt (als ob diese Kantenzellen die entsprechenden Spiegel enthalten würden). Ein weiteres lustiges kleines Detail ist, dass Diagonalen durch das Dreiecksgitter tatsächlich wie Treppen im Quellcode aussehen.

In diesem Sinne sieht der von Wumpus ausgeführte Code wie folgt aus (wobei ich .aus Gründen der Übersichtlichkeit Leerzeichen durch ersetzt habe :

v19977/
   02
  89
 ..
..
.....*...#2018O@

Das v19977sind nur Schrott, den wir ignorieren können. /sendet die IP nach Nordwesten, wo sie sich 977(von rechts) erneut bewegt, während sie von der oberen Kante abprallt. Dann bewegt sich die IP nach Südwesten durch die 2089und eine Reihe von Räumen, bevor sie den linken Rand trifft, um wieder nach Osten reflektiert zu werden. *ist auch Müll. Dann endlich #2018drückt 2018, Odruckt und @beendet das Programm.


Fehlende Jahre

Zum Schluss einige Anmerkungen zu Jahren, die ich nicht behandelt habe.

Als ich über die Jahre nach geeigneten 2D-Sprachen suchte, die in einem Polyglott verwendet werden konnten, stellte ich fest, dass Befunge entgegen der landläufigen Meinung nicht die erste 2D-Sprache war. Dieser Titel scheint von Biota gehalten zu werden, der bereits 1991 erstellt wurde. Leider hat die Sprache keine Ausgabe, so dass ich ihn für diese Herausforderung nicht verwenden konnte.

Soweit ich weiß, wurden 1992 und 1995 keine 2D-Sprachen erstellt. Daher habe ich einige Jahre nicht behandelt:

  • 1994: Orthagonal wird unabhängig von Befunge gegründet. Die Sprachen sind semantisch ziemlich ähnlich, aber Orthagonal legt den Quellcode nicht in 2D an. Stattdessen ist jede Zeile ein (x, y, instruction)Tupel. Ich habe sogar die Sprachspezifikation und den Originalinterpreter vom Schöpfer Jeff Epler erhalten, aber am Ende machte die Tatsache, dass die Syntax nicht 2D ist, die Sprache für diesen Polyglott ungeeignet.
  • 1996: Orthogonal , ein Nachfolger von Orthagonal (von jemand anderem erstellt), wurde erstellt, aber für die Zwecke dieses Polyglots treten die gleichen Probleme auf wie bei Orthagonal.
  • 1999: Die einzige Sprache, die ich finden konnte, war Chris Presseys Handy- Automat REDGREEN . Leider scheint es im Gegensatz zu seinem Vorgänger RUBE keine I / O-Semantik zu haben.
  • 2000: Es gibt einen anderen Zellularautomaten von Chris Pressey, der noit o'mnain worb heißt, aber auch keinen I / O hat. Es gibt auch Numberix, das ich nicht zum Laufen gebracht habe, und ich bin mir nicht sicher, ob es nicht-hexadezimale Zeichen im Quellcode ignorieren würde.
  • 2002: Es gibt Clunk ohne E / A und ZT, dessen Sprachspezifikation mich erschreckt.
  • 2007: Ich habe hier drei Sprachen gefunden. Zetaplex ist bildbasiert (also nein) und RubE On Conveyor Belts scheint einen Header mit einem ziemlich strengen Format zu erfordern, der mit der ersten Zeile des Programms durcheinander gekommen wäre. Es gibt auch Cellbrain von Quintopia, aber es scheint auch einen bestimmten Header zu erfordern.
  • 2013: Wieder habe ich drei Sprachen gefunden. Das Fischen könnte mit einer guten Restrukturierung möglich sein, aber es würde erfordern, dass das Programm mit einem gültigen Dock beginnt. Aus dem Gedächtnis betrachtet, ist Quipu in seiner Syntax viel zu streng, um viel Polyglotten zuzulassen. Und Swordfish ist ein weiteres Mitglied der Familie> <>, aber leider konnte ich keinen Dolmetscher finden. Andernfalls wäre dies wahrscheinlich ziemlich einfach hinzuzufügen.

Wenn jemand Interesse hat, ist hier die vollständige Liste der implementierten 2D-Sprachen, sortiert nach Jahren , soweit ich sie finden konnte (zu dem Zeitpunkt, als diese Antwort gepostet wurde). Wenn welche in dieser Liste fehlen, lass es mich bitte im Chat wissen, da ich wirklich an einer vollständigen Liste interessiert bin.


8
Beeindruckend. Das ist wirklich beeindruckend
DJMcMayhem

@MartinEnder Haben Sie darüber nachgedacht, Ihre Liste der 2D-Programmiersprachen nach Jahr auf Esolang selbst zu übertragen?
Doppelgreener

@doppelgreener Ich bin mir nicht ganz sicher, wie es dort passen würde. Es ist im Wesentlichen nur der Schnittpunkt der 2D-Kategorie mit den verschiedenen Jahreskategorien.
Martin Ender

Ich werde die RubE On Conveyor Belts-Kopfzeile korrigieren, wenn Sie eine Zeitmaschine haben, die ich mir ausleihen kann, um dem 13-Jährigen das Lesen einer Datei beizubringen, ohne die Größe im Voraus zu kennen. (Dies ist der einzige Grund, warum es eine Kopfzeile gab; IMO können Sie sich frei fühlen, den Größen-Header nicht als Teil des Programms zu zählen, obwohl es genau genommen so ist)
immibis

1
@cairdcoinheringaahing Los geht's. Und Wumpus für 2018, als ich dabei war.
Martin Ender

117

15 Jahre, Python

Versionen: 0.9.1 , 2.0.0 , 2.2.0, 2.2.2, 2.5.0, 2.5.1, 3.0.0, 3.1.0, 3.1.3, 3.2.1, 3.3.0, 3.3.3, 3.4.0, 3.5.0 und 3.6.0a4 . Versionen, die nicht verlinkt sind, finden Sie auf der Downloadseite .

Das Erscheinungsdatum von 0.9.1 finden Sie hier . Leider musste ich viele Jahre überspringen, da alte Versionen und Kompilierungsprobleme auf meinem Computer fehlten. Die vertretenen Jahre sind 1991, 2000-2002 und 2006-2016.

Getestet unter Arch Linux mit den gzippten Versionen.

# Note: This file needs a trailing newline due to 0.9.1

# 0.9.1: No bitwise operators
# This one errors out by division by zero.
try:
    eval('1&2')
except:
    print(1991)
    1/0

import sys

# 2.0.0: repr('\n') gives "'\012'" instead of "'\n'"
# == doesn't exist until Python 0.9.3 and <> doesn't exist in Python 3, hence we
# use <. Also, 0.9.1 doesn't have double quoted strings.
if repr('\n') < '\'\\n\'':
    print(2000)
    sys.exit()

# 2.2.0: email module still has a _Parser class - module revamped in 2.2.2
# I would use whether or not True exists as a name here, but weirdly "True"
# worked in 2.2.2 even though the docs say it was introduced in 2.3...
try:
    import email
    email._Parser
    print(2001)
    sys.exit()
except AttributeError:
    pass

# 2.2.2: a in b only works for strings a of length 1.
try:
    eval('"art" in "Martin"')
except TypeError:
    print(2002)
    sys.exit()

# 2.5.0: int() allows null bytes in integer to convert when given an explicit
# base.
try:
    print(int('2006\x00Hello, World!', 10))
    exit()
except ValueError:
    pass

# 2.5.1: pow overflows
# Note that we can't use ** here since that doesn't exist in 0.9.1.
if pow(2, 100) < 1:
    print(2007)
    exit()

# 3.0.0: round returns a float rather than an int.
if str(round(1, 0)) > '1':
    print(2008)
    exit()

# 3.1.0: bug caused complex formatting to sometimes drop the real part.
if format(complex(-0.0, 2.0), '-') < '(-':
    print(2009)
    exit()

# 3.1.3: str of a float is shorter than the repr of the same float.
if str(1.0/7) < repr(1.0/7):
    print(2010)
    exit()

# 3.2.1: For some weird reason, u'...' Unicode strings were disabled then
# re-enabled later.
try:
    eval('u"abc"')
except:
    print(2011)
    exit()

# 3.3.0: int still works without a first argument.
try:
    int(base=10)
    print(2012)
    exit()
except TypeError:
    pass

# 3.3.3: no enum module :(
try:
    import enum
except ImportError:
    print(2013)
    exit()

# 3.4.0: PEP 448 (additional unpacking generalisations) not implemented yet
try:
    eval('[*[1], *[2], *[3]]')
except SyntaxError:
    print(2014)
    exit()

# 3.5.0: No f-strings
try:
    eval('f"abc"')
except SyntaxError:
    print(2015)
    exit()

print(2016)

18
... Wow. Es wundert mich immer noch, wie gut manche Leute ihre Sprachen sprechen. Es ist wie ein Rückblick auf die Zeit ...
wizzwizz4

Unterstützt Python 0 try / except ??
OldBunny2800

8
@ OldBunny2800 Erstaunlicherweise ja
Sp3000

54

Kurz und bündig; die drei APL s ( K , J201 , Dyalog 7.1 ) in 8 Bytes

1993+1^2

1993 plus ...

K: die erste 1-Ganzzahl {0} mit Ausnahme von {2}, dh {0}; 1993 - Probieren Sie es online!

J: 1 2 = 1; 1994 - Probieren Sie es online!

APL: LCM (1,2) = 2; 1995 - Probieren Sie es online!


Sehr schön! Denken Sie, Sie könnten mehr der Iverson-Sprachen kombinieren?
Meilen

@miles K ist hart im Nehmen, und APL2 / APLX / APL * PLUS sind zu ähnlich.
Adám

Kennen Sie eine J-Version aus dem Jahr 2000? In 2e3+?1diesem Fall können wir Dyalog 9.0.1 verwenden.
Adám

Eine weitere coole Perspektive sind X^Yeinige Zahlen X und Y sowie die ^Potenz in J, aber die LCM in APL.
Adám

2
Ich habe eine Seite mit Features über Releases mit einem Datum bis 2000 gefunden, jsoftware.com/release/status.htm
Meilen

46

10 Jahre, 12 Sprachen, 2430 Bytes

Diese Antwort ist eine Zusammenarbeit zwischen mir und dem Benutzer 1000000000 .

Eine kurze Liste der Sprachen:

Brainfuck    1993
Befunge      1993
Piet         2001
Whitespace   2003
Braincopter  2005
Grass        2007
Starry       2008
Paintfuck    2008
Brainbool    2010 (11111011010)
Python 2.7.2 2011
Fission      2014
Brainflak    2016 

Hier ist der Code:

P3v="";print(sum([ord(x)for x in"~~~~~~~~~~~~~~~y"]));"""{}{}     + + +---[.     + +..  '.. +. +.. +. +. +.] + + + + + + +(((((()()()()){}){}){}){})({({} +-[<() + + + + + + +>-()])}{}<[. + + + + + + + +..-------  `             +.[-]]>)[< '
 17 12 
# > 7*::,8 +:,,2 +,@<>R"2014";]*ne*e*es*s*swWWW*swWWWW*sw*e*e*e*eeev*wn*n*n*n*ne*e*se*s*s*s*sWWwWWWw**e*eeee*vwn*n*n*n*ne*e*se*s*s*s*sWWWw*eeee*e*ne*n*nWWWWWw*ne*nWWWWWWw*w*sw*se*sWWWWWWWw*s*WWWWWWwwwWWWWWWWWWWwWWWWWWWWWWwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWwvwWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwv `
255 0 255 255   0   192 192 0   192 192 0 192 192   192 255
255 192
255 255 192
255
255
0 255 255 0 255 255 0 255 255 0 255 255 0 192 192 192 255 255 255 255 255 0 192 192 0 0 255 255 255
255 0 0 255 0 192 192 0 192 192 0 192 192 192 255 255 192 255 255 192 255 255 192 255 255 0 255 255 0 255 255 0 255 255 0 192 192 255 255 255 255 255 255 255 255 255 255 255 255 0 192
192 0 0 255 0 192 192 0 192 192 0 192 192 0 192 192 192 255 255 192 255 255 192 255 255 0 255 255 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0
255 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255
255 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 192
192 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 0
255 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255
255 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 192
192 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 0
192 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 0 0 0 0 0 255 255
255 0 192 192 0 0 255 0 0 255 255 255 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 0 0 255 0 0 255 0 255 255 0 0 0 0 192 192 0 0
255 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 0 0 0 192 192 0 192 192
#   """

Um dies in eine Antwort einzufügen, werde ich auf vollständige TIO-Links verzichten und stattdessen einen Link zu einem gültigen Interpreter veröffentlichen, in den der Code vom Benutzer eingegeben werden kann. Hier ist ein Pastebin-Link für diesen Zweck.

Piet

Das PPM-Dateiformat , eines der Bildformate, aus denen der von uns verwendete Piet-Interpreter lesen kann, hat eine ASCII-Klartextversion. Auf diese Weise konnten wir den Code anderer Sprachen als Junk in die von Piet und Braincopter gelesene Bilddatei einbetten.

Das Bild sieht so aus:

Rohes Bild

Nicht alle Bilder sind für Piet wichtig. Hier ist eine Version mit einer Linie, die den Pfad hervorhebt, dem Piet durch den Code folgt:

Piet Weg

Trotz etwas komplizierter Methoden zum Erstellen des Programms ist das Programm selbst recht einfach. Am oberen Rand des Bildes wird es 1 10 10 10 2zum Stapel geschoben. entlang der Seite multipliziert es dreimal und fügt einmal hinzu. In der unteren Ecke wird das Ergebnis (2001) ausgegeben und dann angehalten.

Braincopter

Braincopter ist die andere visuelle Sprache. Dieselbe ppmImage-Datei wird auch zum Ausführen benötigt. Aufgrund sehr strenger Einschränkungen in npiet kann unser Braincopter-Code nur eine Teilmenge der ursprünglichen Braincopter-Operationen verwenden. Wir dürfen nur Farben verwenden, die in Piet gültig sind. Dadurch wird der -Operator von Braincopter entfernt.

Hier ist der Pfad, den der Braincopter-Code verfolgt:

Braincopter-Pfad

Das Braincopter-Programm ist etwas seltsam, weil es keinen -Operator gibt. Die Wände von Cyan und Dark Cyan dienen dazu, den Zeiger umzulenken, aber ansonsten ist er mit dem folgenden Brainfuck identisch:

++++++++++++++++++++++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++++++++++++++++..+++++.

Dies druckt 2005.

Paintfuck

Paintfuck ist die dritte visuelle Programmiersprache auf unserer Liste. Anstatt jedoch ein Bild aufzunehmen und Text auszugeben, nimmt Paintfuck Text auf und gibt ein Bild aus.

Da Paintfuck irrelevante Zeichen als No-Op ignoriert, ist der größte Teil des Codes unwichtig. Der relevante Abschnitt des Codes lautet:

nsn**ne*e*es*s*sw*sw*sw*e*e*e*eee*wn*n*n*n*ne*e*se*s*s*s*sww**e*eeee*wn*n*n*n*ne*e*se*s*s*s*sw*eeee*e*ne*n*nw*ne*nw*w*sw*se*sw*s*wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwnsn**ne*e*es*s*sw*sw*sw*e*e*e*eee*wn*n*n*n*ne*e*se*s*s*s*sww**e*eeee*wn*n*n*n*ne*e*se*s*s*s*sw*eeee*e*ne*n*nw*ne*nw*w*sw*se*sw*s*wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

Während sie keine No-Ops sind, wtun die s am Ende des Codes nichts. Sie sind für den Grasanteil der Lösung da. n, e, s, Und wwerden verwendet , um das Bild zu bewegen , und *verwendet wird , einen Punkt , an diesem Ort zu plotten. Das Programm gibt aus:

Paintfuck-Ausgabe

Eine größere Version:

Painfuck Ausgabe, aber es ist größer

Brainfuck

Wie Paintfuck ignoriert Brainfuck die meisten Charaktere. Hier noch einmal die wichtigsten:

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

Das meiste davon ist für die Umstände irrelevant und nur zufällig Zeichen, die eine andere Sprache benötigt. Die schlankere Version dieses Codes lautet:

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

Das druckt ziemlich einfach 1993.

Brainbool

Brainbool ist Brainfuck in seiner Charakterauswahl sehr ähnlich. Der große Unterschied, der das Zusammenweben der beiden ermöglicht, ist das Fehlen eines -in Brainbool. Die wichtigen Charaktere für Brainbool sind:

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

Die Ausgänge von Brainbool und Brainfuck schließen sich gegenseitig aus. Brainbool versteckt seine Ausgabe im zweiten Satz von []. Brainfuck trifft sich, +++---bevor es die [Einstellung Null erreicht und die Ausgabe überspringt, während Brainbool nur die +++Einstellung 1 erkennt, wodurch es die Schleife passiert. In ähnlicher Weise wird Brainbool bei der 4. Schleife auf Null gesetzt, wodurch es überspringt, während Brainfuck mit einem Wert von 49 in die Schleife eintritt.

Da Brainbool keine dezimale Ausgabe hat, gibt es das 2010 in binärer Form aus:

11111011010

Fission

Der einzige Teil des Codes, der für die Spaltung wichtig ist, ist:

R"2014";

Die RBeschwörungen in einem Atom, das sich nach rechts bewegt, die "2014"Drucke 2014und die ;angehaltene Ausführung.

Befunge

Befunge geht nur durch folgende Zeichen:

P3v
  7
  > 7*::,8 +:,,2 +,@

Sie P3sind erforderlich, um ein gültiges PPM-Bild für piet zu erstellen und kumulativ eine 3 auf den Stapel zu legen. Das vwird platziert, um den Zeiger nach unten zu lenken. Es geht dann durch die 7in den 17verwendet , um die Breite des .ppm Bild anzuzeigen. Das >leitet den Zeiger nach rechts um. 7*multipliziert die Oberseite des Stapels mit 7, wobei 49 (ASCII-Wert von 1) auf der Oberseite des Stapels verbleibt . ::dupliziert die Oberseite des Stapels zweimal. Das 1wird ausgegeben von ,. 8 +Fügt 8 zum oberen ASCII-Inkrement hinzu 9. :,,Ausgänge 9zweimal. 2 +Inkrementiert den ASCII-Wert 1in einen ASCII-Wert 3und ,druckt. Beendet schließlich @das Programm.

Alles in allem druckt es 1993.

Leerzeichen

Wie der Name vermuten lässt, verwendet Whitespace in seinen Programmen nur Whitespace. Dies sieht der Whitespace-Interpreter:

[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][LF]
[Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Tab][Tab][Tab][Tab][Tab][Space][Tab][Space][Space][Tab][Tab][LF]
[Tab][LF]
[Space][Tab][LF]
[LF]
[LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][LF]

Die meisten Funktionen dieses Codes sind für die Ausführung des Programms nicht relevant (alle Zeilen, die nur Leerzeichen enthalten, geben einfach Null an den Stapel weiter). Der wichtige Teil:

[Space][Space][Space][Tab][Tab][Tab][Tab][Tab][Space][Tab][Space][Space][Tab][Tab][LF]
[Tab][LF]
[Space][Tab][LF]
[LF]
[LF]

Die erste Zeile drückt 2003 auf den Stapel. Danach [Tab][LF][Space][Tab]wird der obere Teil des Stapels (2003) als Zahl ausgedruckt. Schließlich beenden die letzten drei Zeilenvorschübe die Programmausführung.

Gras

Grass ignoriert alle Zeichen bis zum ersten win der Datei und nach , dass alle Zeichen , die nicht sind w, Woder v. Der Grass-Interpreter liest:

wWWWwWWWWwv
wWWwWWWwv
wWWWwWWWWWwWWWWWWwwwWWWWWWWwWWWWWWwwwWWWWWWWWWWwWWWWWWWWWWwv
wWWWwWWWWwv
wWWwWWWwv
wWWwWWWwv
wWWwWWWwv
wWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwv

In der ersten Zeile wird eine Funktion definiert, die zu jeder Übergabe zwei hinzufügt. In der zweiten Zeile wird eine Funktion definiert, die zu jedem übergebenen Wert vier hinzufügt. Die dritte Funktion definiert eine Funktion, die zwei plus Argument ausgibt, das Argument zweimal ausgibt und schließlich sieben plus Argument ausgibt (Grass druckt Zeichen basierend auf dem ASCII-Wert aus). Die vierte, fünfte und sechste Zeile definieren Funktionen, die jeweils acht, 16, 32 und 64 zu ihrem Argument hinzufügen. In der letzten Zeile wird die Hauptfunktion definiert, die das Zeichen w(die einzige vordefinierte Zahl in Grass, ASCII-Wert 119) verwendet und mit den im Programm definierten Additionsfunktionen sowie der integrierten Additionsfunktion um 185 ergänzt. Gras umschließt die Zahl mit 256 und das Ergebnis ist 48 (entsprechend dem Zeichen)0). Die Funktion übergibt dies dann an die Funktion der dritten Zeile, die 2007 ausgibt.

Sternenhimmel

Starry ignoriert alles außer Raum, +, *, ., ,, `, und '. So sieht der Sternendolmetscher nur:

       + + +.     + +..  '.. +. +.. +. +. +. + + + + + + + + + + + + + + +. + + + + + + + +..  `             +. '
     *, +,, +,************************************************* `

Die Anweisungen label und jump werden jedoch verwendet, um Abschnitte des Codes zu überspringen, die bei der Ausführung Probleme verursachen können. Der Code sieht also folgendermaßen aus:

       + + +.     + +..  '  `             +. ' `

Dieser Code legt zwei auf den Stapel, dupliziert sie zweimal und druckt dann eine davon als Zahl. Dann drücke Null, dupliziere sie und drucke beide Nullen als Zahlen. Als nächstes wirft es eines der Zweien aus und springt und drückt dann sieben auf den Stapel und wirft und druckt als Zahl. Schließlich werden die letzten beiden auf dem Stapel abgelegt und zum Ende des Programms gesprungen.

Python 2.7.2

Der Python-Code folgt dem Format:

P3v="";print(sum([ord(x)for x in"~~~~~~~~~~~~~~~y"]));"""..."""

Wo ...steht für all den anderen Müll.

Die erste Zeile P3v=""ist da, weil .ppmunser Code , um eine gültige Datei zu P3sein, normalerweise mit diesem Fehler beginnt. Wenn wir jedoch Python mitteilen, dass es sich um eine Variablendeklaration handelt, wird er ignoriert.

Als nächstes müssen wir drucken 2011. Aufgrund der .ppmFormatierung von a können wir in dieser Zeile jedoch keine Zahlen einfügen. Um dies zu umgehen, fassen wir alle ASCII-Werte des Strings zusammen "~~~~~~~~~~~~~~~y"und geben das Ergebnis aus. Schließlich verwenden wir die dreifachen Anführungszeichen eines mehrzeiligen Kommentars, damit Python alles andere ignoriert.

Brainflak

Wir haben das Beste zum Schluss aufgehoben.

Brainflak ignoriert, wie andere auch, die meisten Zeichen. Die relevanten Zeichen sind:

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

Der Python-Code (([()]))drückt zweimal -1 auf den Stack, sodass er entfernt werden muss, bevor das Programm mit der Verarbeitung beginnt.

Danach benutzt []Brainbool einen Nilad, der nichts tut und das Programm beginnt.

(((((()()()()){}){}){}){})({({}[<()>()])}{}<[[]]>)schiebt 2016. Der letzte [<><>]ist Überbleibsel von Befunge und Brainfuck, tut aber zum Glück nichts.

Wenn das Programm beendet wird, druckt es den Inhalt des Stapels, das heißt, es wird gedruckt 2016.


Brillant! Ich hatte gehofft, Piet würde irgendwie auftauchen, die Einbettung von Dingen in ein PPM ist brillant. Gut gemacht!
Cincodenada

1
+1 für We saved the best for last. : D
DJMcMayhem

38

5 Jahre

#define q/*-[>+<-----]>--.++++++++..------.[-][
print('2010'if len(bin.__doc__)==86else'2015')
"""*/
main(c){c=-4.5//**/
-4.5;printf("19%d",90-c);}
#define w/*]
*/"""

1989: C89 [1] und 1999: C99

Der einzeilige Kommentar //wurde in C99 hinzugefügt, sodass ein C89-Compiler den Code als lesen würde, c=-4.5 / /*comment*/ -4.5der derselbe ist wie c=-4.5 / -4.5, während ein C99-Compiler als lesen würde c=-4.5 //comment/**/
- 4.5, der derselbe ist wie c=-4.5 - 4.5.
Der Python-Teil ist ein Kommentar im C-Programm.

2010: Python 2.7 und 2015: Python 3.5

Die Dokumente variieren zwischen Python 3 und 2, dieses Programm verwendet die Länge der Dokumente, um die Python-Version zu erkennen.
Der C-Teil befindet sich in einer Zeichenfolge im Python-Programm.

1993 [2] : Brainfuck

Es ignoriert im Grunde alles, was nicht ist .,[]+-<>. Da das C-Programm ein enthält ,, musste ich Brainfuck veranlassen, diesen Teil zu schließen, indem ich das aktuelle Byte auf 0 setzte.


  1. Die C89-Spezifikation wurde 1990 veröffentlicht. Weitere Informationen .
  2. Ich konnte kein offizielles Erscheinungsdatum finden, daher glaube ich Esolangs und Wikipedia .

4
Das ist toll, vor allem die -4.5/-4.5und -4.5-4.5. Das Mischen von zwei Versionen von jeweils zwei Hauptsprachen ist ziemlich beeindruckend, auch ohne BF da
reinzuwerfen

Dies ist kein Codegolf, aber die a=Online-2 ist unnötig
TheInitializer

@TheInitializer ja, ich habe es ohne versucht a=und es gab einen Fehler, also habe ich beschlossen, es zu behalten. Ich weiß nicht, warum es einen Fehler gab, wahrscheinlich einen Tippfehler.
Betseg

@betseg Wenn dieser Code nur in Python ausgeführt wird, sollte er funktionieren.
TheInitializer

17

15 Jahre, JavaScript

Da der Versionszyklus von JavaScript sehr ungewöhnlich und inkonsistent ist, verwende ich die Firefox-Implementierung. Bitte lassen Sie mich wissen, wenn dies nicht erlaubt ist.

Versionen: Phoenix 0.1 , Firebird 0.6 , Firefox 1.0.0 , 1.5.0 , 2.0.0 , 3.0 Beta 1 , 3.0.0 , 3.5.0 , 3.6.0 , 4.0.0 , 10.0.0 , 18.0.0 , 27.0 .0 , 35.0.0 , 44.0.0 (alle unter Windows 7 getestet)

Wichtiger Hinweis: Wenn Sie Firefox 1.0.0 oder eine neuere Version installieren und öffnen, werden möglicherweise alle Ihre gespeicherten Firefox-Daten einschließlich Verlauf und Lesezeichen gelöscht.

Ab 1.0.0 kann immer nur eine Version geöffnet sein. Der Versuch, eine andere Version zu öffnen, führt zu einem neuen Fenster der bereits geöffneten Version.

Anleitung

Code

<script onbeforeunload="123">
// This uses document.write because alert does nothing in Phoenix (Firefox) 0.1.
document.write((function () {
    function assert (code) {
        try {
            eval(code);
            return true;
        } catch (e) {
            return false;
        }
    }

    // Firefox 44 supports octal and binary literals in Number(); Firefox 35 does not.
    if (Number("0o1") === 1)
        return 2016;

    // Firefox 35 supports template strings; Firefox 27 does not.
    if (assert("`abc`"))
        return 2015;

    // Firefox 27 supports argument spreading; Firefox 18 does not.
    if (assert("Math.max(...[1, 2, 3])"))
        return 2014;

    // Firefox 18 supports default arguments; Firefox 10 does not.
    if (assert("function q(a = 1) { }"))
        return 2013;

    // Firefox 10 has basic WeakMap support; Firefox 4 does not.
    if (assert("WeakMap.a"))
        return 2012;

    // Firefox 4 has basic typed array support; Firefox 3.6 does not.
    if (assert("Int8Array.a"))
        return 2011;

    // Firefox 3.6 added the async attribute to script elements.
    if (assert("document.getElementsByTagName('script')[0].async.a"))
        return 2010;

    // Firefox 3.5 added the String.prototype.trim() method.
    if (assert("'abc'.trim()"))
        return 2009;

    // Firefox 3.0 added partial support for object destructuring.
    if (assert("var {c} = {c: 7}"))
        return 2008;

    // Firefox 3.0 beta 1 added the Array.prototype.reduce() and Array.prototype.reduceRight() methods.
    if (assert("[].reduce.a"))
        return 2007;

    // Firefox 2.0 added support for restricted words as properties.
    if (assert("({if:1}).if"))
        return 2006;

    // Firefox 1.5 added the Array.prototype.indexOf() methods, along with a couple other Array methods.
    if (assert("[1].indexOf(1)"))
        return 2005;

    // Practically the only JS difference between v0.6 and v1.0 is the addition of the onbeforeunload event.
    if (assert("document.getElementsByTagName('script')[0].onbeforeunload.a"))
        return 2004;

    // The Object.prototype.eval() method was removed in Firebird 0.6.
    if (!assert("'abc'.eval()"))
        return 2003;

    // We're all the way back to the good old Phoenix 0.1 browser...
    return 2002;
})());
</script>

Sie können ein 16. Jahr hinzufügen, indem Sie BF: <!--<<<<-[>+<-----]>--.++++++++..------.[-][-->vor dem Skript und einen weiteren HTML-Kommentar mit einem ]anschließenden einfügen.
Steven H.

6
@StevenH. Ähm ... wow, ich hätte nie darüber nachgedacht, Esolangs in diese aufzunehmen. Und das ist eine wirklich kluge Art, BF
einzubeziehen

13

6 Sprachen, Turtlèd und Brainfuck , Python 3.5, Python 2.7, > <> , Fission

Turtlèd hat vor diesem Jahr nicht existiert und ist so einfach objektiv, auch wenn die Github-Commits nicht zählen und BF die 1993 veröffentlichten Beweise für die Esolang-Seite hat. Python 3.5 ist 2015, 2.7 ist 2010.> <> hat auch Esolang-Seite mit Angabe von 2009, ebenso wie Fission, 2014

#-[>+<-----]>--.++++++++..------#"2016"/
print(2015 if len(len.__doc__)==42 else 2010)
#;                           oooo"2009"/
#;"4102"L

Ich sollte wahrscheinlich die Seite mit den bf-Konstanten auf esolangs gutschreiben ... ¯ \ _ (ツ) _ / ¯

Wie es funktioniert, Art von:

Turtlèd:

Turtlèd macht eigentlich nichts anderes als die ersten Zeilen:

#-[>+<-----]>--.++++++++..------#"2016"/
  ^sets string variable to this   ^ prints 2016

Ich bin ein Nopp

Brainfuck

Brainfuck ignoriert Zeichen, die nicht in seinen Befehlen enthalten sind

es sieht -[>+<-----]>--.++++++++..------.(der letzte ist aus dem Python-Teil)

Was Brainfuck einfach macht, verwendet Wrapping, um 255 durch 5 zu dividieren, dann 2 vom Ergebnis abziehen, drucken, 8-mal inkrementieren, zweimal drucken, 6-mal dekrementieren, drucken

Python 2 und 3

print(2015 if len(len.__doc__)==42 else 2010)

Die Länge der Dokumente für len variiert zwischen den Versionen, sodass das Jahr für Version 3 ausgegeben wird, wenn es die richtige Länge hat, andernfalls für Version 2.

> <>

# spiegelt den Zeiger nach hinten, so dass er das / auf der anderen Seite dieser Zeile berührt, durch die Lücke zwischen elseund geht 2010und dann erneut spiegelt, um "2009" zu treffen, 9,0,0,2 auf den Stapel zu drücken und dann umgekehrt auszudrucken .

Fission

Fission hat Spawner, so dass wir unten eine Zeile haben können, die es alleine ausführt:

#;"4102"L
        L spawn left moving atom
  "4102"  print this right to left
 ;        halt
# python comment

13

3 Jahre, 3 Sprachen: C, TeX, MIXAL

*main(){puts("1990");}/*\newwrite\O\openout\O=O\write\O{1982}\bye                                                                                                                              
START   ENTA    1997
        CHAR
        STX     6
        OUT     6(19)
        HLT
        END     START   */ 

Benennen Sie die Datei date.mixal.

  1. C (1990) - Kompiliert mit Warnungen und druckt 1990nach stdout.
  2. TeX (1982) - Kompilieren mit tex date.mixal; druckt 1982in die Datei O.tex(ignorieren Sie die DVI-Ausgabe).
  3. MIXAL (1997) - Kompilieren mit GNU Mix Development Kit mixasm date.mixalund Ausführen mit mixvm -r date.mix; druckt 1997auf das Fernschreibgerät (= stdout).

Die Programme TeX und MIXAL befinden sich in einem Kommentar im Programm C; Das MIXAL-Programm folgt, \byesodass TeX es ignoriert. Die C- und TeX-Programme sind ein Kommentar im MIXAL-Programm. Aus irgendeinem Grund gccist bereit zu akzeptieren *main.


Ich hatte MIXAL, +1: D
cat

13

3 Jahre (GolfScript, CJam, MATL), 24 23 Bytes

[A11]Wd%;200 1e2/0 8_+(

Dies gibt aus

  • 2007 in GolfScript.

  • 2015 in CJam (Version 0.6.5).

  • 2016 in MATL (Version 19.2.0).

Erläuterung

Golfscript

Undefinierte Token sind Noops in GolfScript . Die einzigen Teile des Codes, die tatsächlich etwas bewirken, sind:

200      Push 200
           STACK: 200
1        Push 1
            STACK: 200, 1
/        Divide
           STACK: 200
0        Push 0
           STACK: 200, 0
8        Push 8
           STACK: 200, 0, 8
+        Add
           STACK: 200, 8
(        Subtract 1
           STACK: 200, 7
         Implicitly display 200, 7 as "2007"

CJam

[A11]    Push array [10 11]
           STACK: [10 11]
W        Push -1
           STACK: [10 11], -1
d        Convert to double
           STACK: [10 11], -1.0
%        Select elements from array
           STACK: [11 10]
;        Pop
           STACK is empty
200      Push 200
           STACK: 200
1e2      Push 100
           STACK: 100
/        Divide
           STACK: 2
0        Push 0
           STACK: 2, 0 
8_       Push 8 and duplicate
           STACK: 2, 0, 8, 8
+        Add
           STACK: 2, 0, 16
(        Subtract 1
           STACK: 2, 0, 15
         Implicitly display 2, 0, 15 as "2015" 

MATL

Alles von nun %an ist ein Kommentar.

[A11]    Push array [5 11]
           STACK: [5 11]
W        2 raised to that
           STACK: [32 2048]
d        Compute increment
           STACK: 2016
         Implicitly display as "2016"

Korrektur: In CJam, nachdem %Sie [11 10] erhalten haben. Nicht dass das was ausmacht.
Aditsu

@Aditsu Whoops! Danke, bearbeitet
Luis Mendo

12

2 Sprachen, Python 2.7 und Python 3.5

Python 2.7 wurde 2010 veröffentlicht .

Python 3.5 wurde im Jahr 2015 veröffentlicht .

print('2010'if 3/2==1else'2015')

Dies basiert auf PEP 238, bei dem der Operator /in Python 3 von einer Ganzzahldivision in eine Gleitkommadivision geändert wurde.


3
Dies könnte eine unterhaltsame Herausforderung sein, wenn es darum geht, Fehler / Änderungen in den Betreibern zwischen den Versionen zu identifizieren
Meilen

1
@ TuukkaX Es funktioniert für mich in Python 2.7.12 und Python 3.5.1 auf Fedora 24.
Meilen

1
Kannst du nicht '2010'if 3/2>1else'2015'stattdessen tun ?
Qwerp-Derp

15
Oder wir Mathe:print(int(2010+1/2*10))
Jakube

2
print('2015'if 1/2else'2010')ist besser
Cyoce

12

8 Jahre, TI-Basic

Disp 1996           <-- TI-83
Text(-1,1,1,1
ClrHome
Disp 1999           <-- TI-83+ OS 1.03 (initial OS)
sub(1
ClrHome
Disp 2002           <-- TI-83+ OS 1.15
isClockOn
ClrHome
Disp 2004           <-- TI-84+ OS 2.21
invT(e,1
ClrHome
Disp 2005           <-- TI-84+ OS 2.40
CLASSIC
ClrHome
Disp 2009           <-- TI-84+ OS 2.53
BackgroundOn
ClrHome
Disp 2013           <-- TI-84+ Color Silver Edition
Send({1
ClrHome
2015                <-- TI-84+ Color Edition OS 5.1

"Jedes der Programme druckt möglicherweise auf STDERR oder gibt Fehler und Warnungen zur Laufzeit / Kompilierungszeit aus, solange die richtige Ausgabe auf STDOUT oder in einer Datei gedruckt wird." Derzeit ist die einzige fehlerfreie Anzeige das Jahr, daher halten wir uns an diese Regel. Wenn Sie jedoch stattdessen in den Speicher schreiben möchten, ersetzen Sie Disp (date)durch (date)->I.

Verweise:

  1. Veröffentlichungsdaten des Rechners - https://epsstore.ti.com/OA_HTML/csksxvm.jsp?nSetId=74258
  2. Erscheinungsdatum von TI-83 + OS 1.15 - http://wikiti.brandonw.net/index.php?title=83Plus:OS:VersionDifferences#TIOS_1.15
  3. Rechnerkompatibilität - http://tibasicdev.wikidot.com/compatibility
  4. Erscheinungsdatum von TI-84 + CSE - https://www.amazon.com/Texas-Instruments-Silver-Graphing-Calculator/dp/B00AWRQKDC
  5. Erscheinungsdatum von TI-84 + CE - http://www.prnewswire.com/news-releases/texas-instruments-unveils-the-new-ti-84-plus-ce-300026266.html und https: // www. cemetech.net/forum/viewtopic.php?t=8870

9

5 Jahre, Go 1.0, 1.1, 1.4, 1.5, 1.6: 285 257 Bytes

(1.2 wurde im Jahr 2013 wie 1.1, 1.3 im Jahr 2014 wie 1.4 und 1.7 im Jahr 2016 wie 1.6 veröffentlicht.)

Habe das nicht bei jeder Version ausprobiert, da ich nur auf 1.6 zugreifen kann, aber es sollte theoretisch funktionieren! Sprachänderungen hätten wahrscheinlich dazu geführt, dass das Programm nicht kompiliert werden konnte. Daher habe ich mich auf Standard-Bibliotheksänderungen verlassen.

package main
import(."fmt"
."reflect"
."time")
func main(){s:="6"
if _,e:=Parse("2016-Sep-30","2016-Sep-31");e==nil{s="5"}
if Sprint(ValueOf(0))!="0"{s="4"}
if Sprint(&map[int]int{1:1})[0]!='&'{s="3"}
if string(0xd800)==string(0xfffd){s="2"}
Print("201"+s)}

Ungolfed und kommentiert:

package main

import (
    "fmt"
    "reflect"
    "time"
)   package main

import (
    . "fmt"
    . "reflect"
    . "time"
)

func main() {
    s := "6"
    // 1.6: time.Parse rejects invalid days
    if _, e := Parse("2016-Sep-30", "2016-Sep-31"); e == nil {
        s = "5"
    }
    // 1.5: A reflect.Value now prints what it holds, rather than use
    // its String() method
    if Sprint(ValueOf(0)) != "0" {
        s = "4"
    }
    // 1.4: Printing pointers to maps gives the map instead of the address
    if Sprint(&map[int]int{1: 1})[0] != '&' {
        s = "3"
    }
    // 1.1: Unicode surrogate halves are no longer allowed
    if string(0xd800) == string(0xfffd) {
        s = "2"
    }
    Print("201" + s)
}

7

4 Jahre, 99 Bytes / 77 Zeichen

v=1//1;"""
 1991/*"""
for i in[0]:print 2010#🔟😃😇🔟😗➕➕😨
"""
"
>9002nnnn;
"""#*/

Hinweis: Ich bin nicht sicher, ob die Jahre korrekt sind

  • Python 2.7, 2010
  • Javascript, 1991
  • Emotinomicon, 2015
  • ><>2009

Ich habe eine Weile gebraucht, um herauszufinden, wie Python und JS zusammenarbeiten.

Erläuterung

v=1//1;"""Setzt die Variable vauf 1dividiert durch 1in Python und auf 1in Javascript ( //startet einen Kommentar in Javascript) und ;"""startet eine mehrzeilige Zeichenfolge in Python. Das ;kann nicht durch eine neue Zeile ersetzt werden, da sonst Javascript nicht mehr funktioniert.

1991/*"""ist der Rest der mehrzeiligen Zeichenfolge. Der Speicherplatz wird benötigt, damit> <> nicht 1auf den Stapel geschoben wird. Da der Anfang der mehrzeiligen Zeichenfolge Teil eines Kommentars in Javascript war, wird 1991ein mehrzeiliger Kommentar gedruckt und gestartet .

for i in[0]:print 2010#🔟😃😇🔟😗➕➕😨In Python ist dies eine for-Schleife, die die Liste [0]durchläuft und ausgeführt wird print 2010. Der Kommentar ist nur der Emotinomicon-Code (alles, was kein Emoji oder String ist, wird ignoriert). In> <> wird es ( f) 15 zum Stapel verschoben.

Die for-Schleife kann nicht entfernt werden, da die IP von> <> in Spalte 1 sinkt und pkein gültiger Befehl in> <> ist. Sie können es auch nicht durch eine ifAnweisung ersetzen , da dies ider Befehl ist, der Eingaben in> <> entgegenzunehmen.

""" ist der Anfang einer mehrzeiligen Zeichenfolge.

" ist Teil der mehrzeiligen Zeichenfolge, die zum Schließen der Zeichenfolge benötigt wird, die wir in> <> geöffnet haben (das erste Anführungszeichen der vorherigen Zeile hat eine Zeichenfolge in> <> gestartet).

>9002nnnn;in> <>, ändert IP Richtung nach rechts schiebt 9, 0, 0und 2, geben diese als Zahlen und beendet das Programm.

"""#*/Beendet in Python die mehrzeilige Zeichenfolge und startet einen Kommentar. Lässt */den mehrzeiligen Kommentar in Javascript enden.


Bonusversion mit Gol> <>:

5 Sprachen, 4 Jahre, 118 114 Bytes / 96 92 Zeichen

v=1//1;"""
 1991/*"""
for i in[0]:print 2010#🔟😃😇🔟😗➕➕😨
"""
`
"
>9002nnnn;
"
>5102nnnn;
"""#*/
  • Golfish v0.4.2, 2015

Erklärung²

IP beginnt in der oberen linken Ecke und geht nach rechts. Das vbringt es runter.

fdrückt 15.

" Startet die Zeichenfolge.

` wird verwendet, um Zeichen zu entkommen, was bei> <> nicht der Fall ist.

"sollte die Zeichenfolge schließen, aber wir haben verwendet `, damit es nicht.

> Teil der Zeichenfolge.

" beendet die Zeichenfolge.

>5102nnnn;ist der eigentliche Code. >macht die IP rechts geht, 5102schiebt 5, 1, 0und 2, und nnnn;druckt die Zahlen und das Programm endet.


Python-Fehler bei den Unicode-Zeichen ohne den richtigen Header. ( SyntaxError: Non-ASCII character '\xf0' in file test.txt on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details)
Wheat Wizard

@ WheatWizard Speichern Sie die Datei als UTF-8
acrolith

7

7 Jahre, 8 Browser

Nicht genau die Veröffentlichungsdaten der Sprache, da css eigentlich keine Veröffentlichungen hat, sondern Browserversionen (könnte man vielleicht als Compilerversionen denken?)

Bei den folgenden Browsern werden der Name des Browsers, die Version und das Veröffentlichungsdatum sowie nichts anderes gedruckt. In einigen späteren Versionen wird das Gleiche gedruckt (Chrom ist eine Version zu spät in den Screenshots, da es schwierig ist, alte Versionen von Chrome nach Versionsnummer herunterzuladen).

Ich konnte die Versionsnummer, die ich verwendet habe, ausdrucken, aber ich habe es vorgezogen, die erste Version anzuzeigen, in der die verwendete Funktion eingeführt wurde.

  • IE6
  • IE7
  • IE8
  • IE9 (ungetestet, habe keinen IE9 in der Nähe)
  • Firefox 4
  • Firefox 3.6
  • Chrome 18
  • Chrome 21
  • Moderne Browser

FF3.6 FF4 Chrom19 Chromium22 IE8-Macken IE8-IE7-Kompatibilität IE8

index.html

<!DOCTYPE html>
 <html>
  <head>
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <link rel=stylesheet href=style.css>
  </head>
  <body>
    <div class=borderbox>
      <div class="inlineblock">
        &nbsp;IE6-2001
      </div>

      <div class="white">
        <div class="outofbox">
          <a href="#">IE8-2009</a>
        </div>
        <div class="inherit">
          <a href="#">IE7-2006</a>
        </div>
      </div>
    </div>
    <div class="white">
      <header class="filter-quirk filter-blur filter-blur-url">
        IE9
      </header>
    </div>
    <div class="flex white">
      Modern Browsers - 2017
    </div>
    <div class="webkit-flex">
      <div class="">
        Chrome 21-2012
      </div>
    </div>
    <div class="webkit-invert white flexdisable">
      <div class="">
        Chrome 18-2012
      </div>
    </div>

    <svg style="position: absolute; top: -99999px" xmlns="http://www.w3.org/2000/svg">

    </svg>

    <div class="filter">
      <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
        <g
           transform="scale(8)"
           aria-label="FF4"
           id="text8419">
           <rect
              style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.79374999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
              id="rect21965"
              width="17.005648"
              height="3.9855044"
              x="-0.16825682"
              y="-0.025296567" />
          <path
             d="m 1.0052634,1.5511362 v 0.7639843 h 0.4564063 q 0.092604,0 0.092604,0.066146 0,0.069453 -0.092604,0.069453 H 0.69107072 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 h 0.1785938 V 0.72431329 h -0.1785938 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 2.1793519 V 1.0484278 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 0.72431329 H 1.0052634 V 1.4155373 H 1.4848207 V 1.2667091 q 0,-0.089297 0.066146,-0.089297 0.069453,0 0.069453,0.089297 v 0.4332552 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 1.5511362 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8421" />
          <path
             d="m 2.9883464,1.5511362 v 0.7639843 h 0.4564063 q 0.092604,0 0.092604,0.066146 0,0.069453 -0.092604,0.069453 h -0.770599 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 2.8527475 V 0.72431329 H 2.6741537 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 4.1624349 V 1.0484278 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 0.72431329 H 2.9883464 V 1.4155373 H 3.4679037 V 1.2667091 q 0,-0.089297 0.066146,-0.089297 0.069453,0 0.069453,0.089297 v 0.4332552 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 1.5511362 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8423" />
          <path
             d="M 5.6692683,1.8917872 H 4.7729923 V 1.7363445 l 0.754062,-1.28322911 h 0.277813 V 1.7561883 h 0.112448 q 0.0893,0 0.0893,0.069453 0,0.066146 -0.0893,0.066146 h -0.112448 v 0.4233333 h 0.112448 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -0.499402 q -0.0893,0 -0.0893,-0.069453 0,-0.066146 0.0893,-0.066146 h 0.251355 z m 0,-0.1355989 V 0.58871439 h -0.07938 L 4.9019713,1.7561883 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8425" />
          <path
             d="M 8.2881171,1.6077068 H 6.9585859 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 h 1.3295312 q 0.089297,0 0.089297,0.066146 0,0.069453 -0.089297,0.069453 z"
             style="stroke-width:0.79374999"
             id="path8422" />
          <path
             d="m 8.9582054,0.90656104 q 0,-0.14882812 0.1785937,-0.31749999 0.1819011,-0.17197916 0.4365625,-0.17197916 0.2414323,0 0.4233333,0.17197916 0.1852081,0.17197916 0.1852081,0.39687498 0,0.14882817 -0.0893,0.28111977 Q 10.006617,1.3960402 9.7056533,1.67716 L 9.0210439,2.3154672 v 0.00992 H 10.059533 V 2.2063266 q 0,-0.089297 0.06945,-0.089297 0.06614,0 0.06614,0.089297 V 2.460988 H 8.8920596 V 2.2625506 L 9.6725804,1.5283318 q 0.2315104,-0.2282031 0.3009635,-0.3307291 0.07276,-0.102526 0.07276,-0.21497396 0,-0.17197916 -0.1422132,-0.30096353 -0.1422136,-0.12898437 -0.3307292,-0.12898437 -0.1686718,0 -0.3075781,0.0992188 -0.1355989,0.0992188 -0.1752864,0.24804686 -0.019844,0.0661458 -0.069453,0.0661458 -0.023151,0 -0.042995,-0.0165365 -0.019844,-0.0198437 -0.019844,-0.0429948 z"
             style="stroke-width:0.79374999"
             id="path8424" />
          <path
             d="m 12.207981,1.3001287 v 0.3307292 q 0,0.3902604 -0.171979,0.6349999 -0.171979,0.2447396 -0.446484,0.2447396 -0.274506,0 -0.446485,-0.2447396 Q 10.971054,2.0211183 10.971054,1.6308579 V 1.3001287 q 0,-0.39356766 0.171979,-0.63830724 0.171979,-0.24473957 0.446485,-0.24473957 0.274505,0 0.446484,0.24473957 0.171979,0.24473958 0.171979,0.63830724 z M 11.589518,0.55268084 q -0.224896,0 -0.353881,0.22820312 -0.128984,0.22489584 -0.128984,0.53578124 v 0.2943489 q 0,0.3241146 0.132292,0.5457031 0.135599,0.2182813 0.350573,0.2182813 0.224895,0 0.35388,-0.2248959 0.128984,-0.2282031 0.128984,-0.5390885 V 1.3166652 q 0,-0.32411458 -0.135599,-0.54239582 -0.132292,-0.22158854 -0.347265,-0.22158854 z"
             style="stroke-width:0.79374999"
             id="path8426" />
          <path
             d="M 13.642054,0.43692564 V 2.3253891 h 0.459713 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -1.055026 q -0.0926,0 -0.0926,-0.069453 0,-0.066146 0.0926,-0.066146 h 0.459714 V 0.61551938 l -0.373724,0.37372394 q -0.02646,0.0264584 -0.06945,0.0264584 -0.02646,0 -0.0463,-0.0198438 -0.01654,-0.023151 -0.01654,-0.056224 0,-0.0297656 0.03638,-0.0661458 l 0.436562,-0.43656248 z"
             style="stroke-width:0.79374999"
             id="path8428" />
          <path
             d="M 15.625137,0.43692564 V 2.3253891 h 0.459713 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -1.055026 q -0.0926,0 -0.0926,-0.069453 0,-0.066146 0.0926,-0.066146 h 0.459714 V 0.61551938 l -0.373724,0.37372394 q -0.02646,0.0264584 -0.06945,0.0264584 -0.02646,0 -0.0463,-0.0198438 -0.01654,-0.023151 -0.01654,-0.056224 0,-0.0297656 0.03638,-0.0661458 l 0.436563,-0.43656248 z"
             style="stroke-width:0.79374999"
               id="path8430" />
          </g>
      </svg>
    </div>
    <div class="white gradient msfilter" style=color:white>
      FF3.6-2010
    </div>
  </body>
 </html>

style.css

.borderbox {
    height: 40px;
    overflow: hidden;
    padding-bottom: 100px;
}
.outofbox {
    background: blue none repeat scroll 0 0;
    margin-top: 20px;
    opacity: 0;
}
.white {
    color: white;
}
.outofbox a, .inherit a, .inherit a:visited, .outofbox a:visited {
    color: inherit;
}
.inlineblock {
    display: inline;
    width: 100%;
    zoom: 1;
    display: inline-block;
    margin-left: 100px;
    text-align: right;
}
.white header{
  color: black;
}
.absolute{
  position: absolute;
}
.flex{
  display: none;
  display: flex;
}
.flex.white{
  filter: invert(100%)
}
.webkit-flex{
  display: none;
  display: -webkit-flex;
  overflow: hidden;
  flex-flow: column;
  height: 3em;
  justify-content: flex-end;
}
.webkit-flex div{
  margin-bottom: -1.1em;
}
.flexdisable{
  display: -webkit-flex;
  overflow: hidden;
  -webkit-flex-flow: column;
  -webkit-justify-content: flex-end;
  height: 60px;
}
.flexdisable div{
  margin-bottom: -30px;
}
.filter-quirk{
  filter: url(#quirk);
}
.filter-blur{
  filter: blur(100px);
  -webkit-filter: blur(100px);
}
.webkit-blur{
  -webkit-filter: blur(100px);
}
.webkit-invert{
  -webkit-filter: invert(100%);
  filter: none;
}
.filter-url-dark{
  -webkit-filter: url(filter.svg#Invert);
  filter: url(filter.svg#Invert) invert(100%);
}
.filter-blur-url{
  filter: url(filter.svg#blur) url(filter.svg#brightness);
}
.filter{
  filter: invert(100%) brightness(100%);
  -webkit-filter: invert(100%) brightness(100%) blur(100px);
}
.filter svg{
  position: absolute;
}
.filter svg rect{
  filter: invert(100%);
  -webkit-filter: invert(100%);
}
.msfilter{
    /* IE 8 */
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
  /* IE 5-7 */
  filter: alpha(opacity=0);
}
.opacity{

}
.black{
  background: black;
}
.gradient{
  width: 100px;
  background: -moz-linear-gradient( 45deg, #000, #000 );
  font-weight: bold;
}

filter.svg

    <!DOCTYPE html>
 <html>
  <head>
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <link rel=stylesheet href=style.css>
  </head>
  <body>
    <div class=borderbox>
      <div class="inlineblock">
        &nbsp;IE6-2001
      </div>

      <div class="white">
        <div class="outofbox">
          <a href="#">IE8-2009</a>
        </div>
        <div class="inherit">
          <a href="#">IE7-2006</a>
        </div>
      </div>
    </div>
    <div class="white">
      <header class="filter-quirk filter-blur filter-blur-url">
        IE9
      </header>
    </div>
    <div class="flex white">
      Modern Browsers - 2017
    </div>
    <div class="webkit-flex">
      <div class="">
        Chrome 21-2012
      </div>
    </div>
    <div class="webkit-invert white flexdisable">
      <div class="">
        Chrome 18-2012
      </div>
    </div>

    <svg style="position: absolute; top: -99999px" xmlns="http://www.w3.org/2000/svg">

    </svg>

    <div class="filter">
      <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
        <g
           transform="scale(8)"
           aria-label="FF4"
           id="text8419">
           <rect
              style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.79374999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
              id="rect21965"
              width="17.005648"
              height="3.9855044"
              x="-0.16825682"
              y="-0.025296567" />
          <path
             d="m 1.0052634,1.5511362 v 0.7639843 h 0.4564063 q 0.092604,0 0.092604,0.066146 0,0.069453 -0.092604,0.069453 H 0.69107072 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 h 0.1785938 V 0.72431329 h -0.1785938 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 2.1793519 V 1.0484278 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 0.72431329 H 1.0052634 V 1.4155373 H 1.4848207 V 1.2667091 q 0,-0.089297 0.066146,-0.089297 0.069453,0 0.069453,0.089297 v 0.4332552 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 1.5511362 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8421" />
          <path
             d="m 2.9883464,1.5511362 v 0.7639843 h 0.4564063 q 0.092604,0 0.092604,0.066146 0,0.069453 -0.092604,0.069453 h -0.770599 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 2.8527475 V 0.72431329 H 2.6741537 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 4.1624349 V 1.0484278 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 0.72431329 H 2.9883464 V 1.4155373 H 3.4679037 V 1.2667091 q 0,-0.089297 0.066146,-0.089297 0.069453,0 0.069453,0.089297 v 0.4332552 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 1.5511362 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8423" />
          <path
             d="M 5.6692683,1.8917872 H 4.7729923 V 1.7363445 l 0.754062,-1.28322911 h 0.277813 V 1.7561883 h 0.112448 q 0.0893,0 0.0893,0.069453 0,0.066146 -0.0893,0.066146 h -0.112448 v 0.4233333 h 0.112448 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -0.499402 q -0.0893,0 -0.0893,-0.069453 0,-0.066146 0.0893,-0.066146 h 0.251355 z m 0,-0.1355989 V 0.58871439 h -0.07938 L 4.9019713,1.7561883 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8425" />
          <path
             d="M 8.2881171,1.6077068 H 6.9585859 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 h 1.3295312 q 0.089297,0 0.089297,0.066146 0,0.069453 -0.089297,0.069453 z"
             style="stroke-width:0.79374999"
             id="path8422" />
          <path
             d="m 8.9582054,0.90656104 q 0,-0.14882812 0.1785937,-0.31749999 0.1819011,-0.17197916 0.4365625,-0.17197916 0.2414323,0 0.4233333,0.17197916 0.1852081,0.17197916 0.1852081,0.39687498 0,0.14882817 -0.0893,0.28111977 Q 10.006617,1.3960402 9.7056533,1.67716 L 9.0210439,2.3154672 v 0.00992 H 10.059533 V 2.2063266 q 0,-0.089297 0.06945,-0.089297 0.06614,0 0.06614,0.089297 V 2.460988 H 8.8920596 V 2.2625506 L 9.6725804,1.5283318 q 0.2315104,-0.2282031 0.3009635,-0.3307291 0.07276,-0.102526 0.07276,-0.21497396 0,-0.17197916 -0.1422132,-0.30096353 -0.1422136,-0.12898437 -0.3307292,-0.12898437 -0.1686718,0 -0.3075781,0.0992188 -0.1355989,0.0992188 -0.1752864,0.24804686 -0.019844,0.0661458 -0.069453,0.0661458 -0.023151,0 -0.042995,-0.0165365 -0.019844,-0.0198437 -0.019844,-0.0429948 z"
             style="stroke-width:0.79374999"
             id="path8424" />
          <path
             d="m 12.207981,1.3001287 v 0.3307292 q 0,0.3902604 -0.171979,0.6349999 -0.171979,0.2447396 -0.446484,0.2447396 -0.274506,0 -0.446485,-0.2447396 Q 10.971054,2.0211183 10.971054,1.6308579 V 1.3001287 q 0,-0.39356766 0.171979,-0.63830724 0.171979,-0.24473957 0.446485,-0.24473957 0.274505,0 0.446484,0.24473957 0.171979,0.24473958 0.171979,0.63830724 z M 11.589518,0.55268084 q -0.224896,0 -0.353881,0.22820312 -0.128984,0.22489584 -0.128984,0.53578124 v 0.2943489 q 0,0.3241146 0.132292,0.5457031 0.135599,0.2182813 0.350573,0.2182813 0.224895,0 0.35388,-0.2248959 0.128984,-0.2282031 0.128984,-0.5390885 V 1.3166652 q 0,-0.32411458 -0.135599,-0.54239582 -0.132292,-0.22158854 -0.347265,-0.22158854 z"
             style="stroke-width:0.79374999"
             id="path8426" />
          <path
             d="M 13.642054,0.43692564 V 2.3253891 h 0.459713 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -1.055026 q -0.0926,0 -0.0926,-0.069453 0,-0.066146 0.0926,-0.066146 h 0.459714 V 0.61551938 l -0.373724,0.37372394 q -0.02646,0.0264584 -0.06945,0.0264584 -0.02646,0 -0.0463,-0.0198438 -0.01654,-0.023151 -0.01654,-0.056224 0,-0.0297656 0.03638,-0.0661458 l 0.436562,-0.43656248 z"
             style="stroke-width:0.79374999"
             id="path8428" />
          <path
             d="M 15.625137,0.43692564 V 2.3253891 h 0.459713 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -1.055026 q -0.0926,0 -0.0926,-0.069453 0,-0.066146 0.0926,-0.066146 h 0.459714 V 0.61551938 l -0.373724,0.37372394 q -0.02646,0.0264584 -0.06945,0.0264584 -0.02646,0 -0.0463,-0.0198438 -0.01654,-0.023151 -0.01654,-0.056224 0,-0.0297656 0.03638,-0.0661458 l 0.436563,-0.43656248 z"
             style="stroke-width:0.79374999"
               id="path8430" />
          </g>
      </svg>
    </div>
    <div class="white gradient msfilter" style=color:white>
      FF3.6-2010
    </div>
  </body>
 </html>

2
CSS hat tatsächlich Releases. Es gibt 1.0, 2.0, 2.1, 3.0 und 4.0. Die Frage lautete sogar, Wikipedia oder die Website der Sprache als Nachweis des Veröffentlichungsdatums zu verwenden. Erstveröffentlichung: 17. Dezember 1996
mbomb007

Es hat nicht den Sinn, dass es keine Implementierung dieser Ebenen gibt (sie werden nicht einmal Releases genannt, weil sie es nicht sind, Sie sollten den von Ihnen geposteten Link überprüft haben). Und CSS3 und 4 haben nicht einmal ein Veröffentlichungsdatum, da sie direkt erstellt werden und zwischen Entwürfen, Kandidaten und Empfehlungen hin und her wechseln. Außerdem implementiert kein Browser eine bestimmte Stufe 100% und 0% der nächsten Stufe, sodass das beste Datum, das Sie finden können, das Veröffentlichungsdatum des Browsers ist.
Qwazix

Dann entspricht die von Ihnen ausgewählte Sprache nicht den erforderlichen Spezifikationen für diese Herausforderung. Nicht so, wie du es versuchst. Eine Sprache wird durch seine Implementierung definiert, so dass Sie einen Browser wählen haben und bleiben Sie dabei, andere Browser - Versionen , nicht verschiedene Browser. Ich würde das OP trotzdem fragen.
mbomb007

Das OP sagte nicht, dass unterschiedliche Versionen als unterschiedliche Sprachen gelten, sondern nur, dass das Erscheinungsjahr der verwendeten Sprachversion für unterschiedliche Sprachen ausgedruckt werden soll . Die Hälfte der Antworten basierte jedoch auf der Annahme, dass verschiedene Versionen unterschiedlich genug sind, um als Sprachen gezählt zu werden. Wenn Python 2.5.0 und 2.5.1 als unterschiedlich genug angesehen werden, kann ich nicht verstehen, wie IE und Chrome nicht sind.
Qwazix

6

3 Jahre, 89 Bytes

Python 2, JavaScript (ES6) und Perl

eval((["1","print=_=>console.log(1995)"])[+(2/3>0)]);print(eval(("1991",1987)["$$">"0"]))

Der erste evalwird 1auf Python 2 und print=_=>console.log(1995)auf JavaScript und Perl ausgeführt, wobei die Ganzzahlteilungsfunktion von Python 2 verwendet wird. Dadurch wird eine printFunktion in JavaScript erstellt, und Perl kümmert sich nur im Hintergrund um die Syntaxfehler und setzt diese unabhängig davon fort.

Die zweite evalbasiert darauf, dass Perl die Variable $$(aktuelle PID) in den String interpoliert , was beim Vergleich (mit dem >Operator) mit "0"(Python erfordert einen String in diesem Vergleich, während Perl implizit in eine Ganzzahl konvertiert) wahr ist .

Ich hätte in mehr Sprachen schuhhupen können, wollte aber eine Lösung, die keine Kommentare missbraucht und nur in "normalen" Sprachen funktioniert.

Ich habe diese Wikipedia-Seite verwendet , um die zu verwendenden Jahre abzurufen.


2

3 Sprachen, 3 Jahre

Eine Ad-hoc-Antwort zum Spaß.

2002!~+++++++[<+++++++>-]<[.++++++++..------.[-]] 2016 !.
  • Maus-2002 : alles danach~ist ein Kommentar, und der erste Teil, der auch geschrieben werden könnteC0U!!!, wird gedruckt2002.

  • Dieses Pre-Challenge-Commit von Calc : Dies ist ein stapelbasierter Taschenrechner-Interpreter, den ich gerade in C11 für Programming II entworfen habe. Dieser Teil des Programms vor dem ersten Leerzeichen gibt einen Fehler aus (gemäß der Challenge-Spezifikation zulässig) und2016 !.druckt2016.

  • Brainfuck : druckt 1993 wie in anderen Antworten zu sehen. Das letzte Fremdwort .wird von ignoriert beef.

Beachten Sie, dass die Anzeige des aktuellen Stapels < stackdurch Calc mit jeder nicht leeren Eingabezeile Teil der Eingabeaufforderung >und nicht Teil der Ausgabe ist.


Wo finde ich Informationen zu Mouse-2002? Der Github scheint keinerlei Spezifikationen zu haben.
Wheat Wizard

@WheatWizard Die README-Datei des Repository enthält Links zu Dr. Grogonos Original- MUSYS und zu David Simpsons 2002-Neustart , die zusammen ein OK-Bild ergeben.
Katze

2

Microsoft Excel / Google Sheets, 22 Byte

Anonyme Arbeitsblattfunktion, die 1987in Microsoft Excel und 2006in Google Sheets keine Ein- und Ausgaben akzeptiert

=IfError(M(2006),1987)

0

Perl 5 & Perl 6 (2 Jahre)

my $a=2015;my @a=1994;print $a[0],"\n"

Die erste Veröffentlichung von Perl 5 erfolgte 1994

Das erste offizielle Release von Perl 6 war im Jahr 2015

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.