Quand cette langue a-t-elle été publiée?


92

Votre défi est simple. Vous devez écrire un programme qui imprime dans STDOUT ou dans un fichier l'année de publication de la langue dans laquelle il est écrit. Comme il s’agit d’une tâche très simple, le problème est qu’elle doit être écrite dans autant de langues différentes que possible.

Votre score est le nombre total d'années différentes correctement imprimées.

Pour chaque langue que vous utilisez, vous devez

  • Spécifiez la version de la langue que vous utilisez. (S'il y a plusieurs versions)

  • Spécifiez en quelle année cette version a été publiée et

  • Fournissez un lien vers une page prouvant la date de votre version / langue.

Chacune de celles-ci compte comme preuve de date de publication, tant qu'elle spécifie le numéro de version (le cas échéant) et une date de publication.

  • Une page wikipedia.

  • Une page d' esolangs .

  • Le site officiel de la langue. Une page github ou un compte similaire, à condition qu’elle ait une date de publication. (La dernière validation ne compte pas, sauf s'il existe un numéro de version quelque part dans le code)

S'il n'y a pas plusieurs versions ou versions d'une langue, utilisez simplement la date de publication initiale de la langue.

Les versions mineures d'une même langue sont considérées comme des langues différentes, dans la mesure où elles proviennent d'années différentes et produisent toujours la sortie correcte. Vous ne pouvez utiliser aucun élément intégré vous donnant des informations (y compris la date de publication) sur la version actuelle de la langue que vous utilisez. Par exemple, il s'agit d'une soumission python non valide:

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

Quelle que soit la soumission imprimée correctement, les années les plus distinctes gagnent!

Règles

  • Chaque programme doit imprimer l'année linguistique et rien de plus . Un retour à la ligne (style Windows ou style * nix) est autorisé.

  • Aucun programme ne peut prendre aucune entrée.

  • En cas d'égalité, le code le plus court noté en octets l'emporte. Vous pouvez utiliser le codage que vous préférez pour cela, mais tous les programmes doivent utiliser le même codage.

  • N'importe lequel des programmes peut imprimer sur STDERR ou générer des erreurs et des avertissements lors de l' exécution / la compilation, tant que la sortie correcte est toujours imprimée sur STDOUT ou sur un fichier.

  • Différentes langues peuvent utiliser différentes méthodes IO, mais la plupart sont des programmes complets (fonctions non autorisées pour ce défi) et suivent l'une de nos méthodes IO par défaut autorisées .

Joyeux golfeur polyglotter!


Puisque Pip n'a pas de page Wikipedia ou Esolangs, a juste un GitHub, et n'a pas eu de "versions" au sens GitHub du mot, est-il inadmissible pour une utilisation dans ce défi? (Il a un numéro de version, qui est mis à jour à chaque commit.)
DLosc

1
@dlosc Eh bien, je ne veux exclure aucune langue inutilement, mais je veux m'assurer que la "date de sortie" reste parfaitement objective. Pouvez-vous penser à de meilleurs moyens d'appliquer une date de publication incluant plus de langues?
DJMcMayhem

4
(insère occasionnellement du code Whitespace pour imprimer 2003 dans pratiquement chaque soumission)
Value Ink

8
"Vous ne pouvez utiliser aucune commande intégrée qui vous donne des informations sur la version actuelle du langage que vous utilisez." Mon emphase. Puis-je rechercher la date de construction dans le fichier interprète?
Adám

2
Je ne pense pas que celui-ci est un duplicata du tout. Même si c’est le cas, ce défi devrait être accepté comme étant «original» car, contrairement à l’autre, ce défi encourage les utilisateurs à sortir et à apprendre ce qu’ils utilisent.

Réponses:


160

Une brève histoire des langages de programmation 2D: 16 (+2) ans

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@

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

Ai-je mentionné que j'aime les langages de programmation 2D?

1993: Befunge

La langue qui (prétendument, voir la dernière section) a tout déclenché. Dans Befunge, vous pouvez rediriger le flux de contrôle avec <v>^, mais les miroirs maintenant omniprésents \et /n'étaient pas encore une chose. L'interpréteur Befunge utilisé sur Anarchy Golf ignore les commandes inconnues. Nous pouvons utiliser ceci pour distinguer la famille Befunge de la famille> <>. Par conséquent, le code exécuté par Befunge est le suivant:

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

Le "8991"pousse les caractères individuels sur la pile. ,,,imprime les trois premiers d'entre eux. Alors ;est inconnu (que nous utiliserons pour le distinguer de Befunge 98), le 5-transforme 8en 3et ,imprime cela aussi avant la @fin du programme.

1997: Wierd

Écrire cette partie de la solution m'a probablement pris aussi longtemps que d'écrire toutes les autres et de les assembler ...

Wierd ne connaît que deux symboles: l'espace et tout le reste. Le pointeur d'instruction essaie de suivre le chemin formé par les caractères non-espace, en partant en diagonale du coin supérieur gauche et en essayant toujours d'aller aussi droit que possible. Les courbes du chemin forment les instructions réelles (les degrés du tour déterminant l’instruction à exécuter). Donc, le code vu par Wierd est le suivant:

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

La partie 1997supérieure n'est pas réellement exécutée, mais Wierd nous permet de la lire à partir du code source, ce qui est beaucoup plus court que d'essayer de construire les codes de caractères des quatre chiffres eux-mêmes (même si cela ne ressemble pas à ça .. .) Je n'ai pas envie de tout casser, mais vous pouvez voir clairement les quatre sections répétées. Cela signifie que nous stockons d’abord 1sur la pile, puis chacune de ces quatre sections l’incrémente 1, puis des branches. La branche du bas en pousse un autre1, récupère le caractère source à ces coordonnées et l’imprime, alors que la branche du haut est redirigée vers la section suivante. Vous vous demandez peut-être pourquoi les extrémités des chemins sont si longues, mais c'est parce que lorsque Wierd frappe l'extrémité d'un chemin, il tente de sauter sur un chemin voisin avant de décider de mettre fin à la branche actuelle. Pour éviter cela, nous devons déplacer ces extrémités suffisamment loin de tout autre code.

1998: Befunge 98

Befunge a reçu une mise à jour assez connue en 1998 avec une spécification très rigoureuse pouvant être généralisée à des dimensions arbitraires (et je pense aussi à des topologies arbitraires). Cependant, il est largement compatible avec Befunge, ce qui le rend assez facile à polygloter les deux. Ce Befunge n'avait toujours pas de miroir, donc le chemin exécuté est le même que pour Befunge 93:

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

La différence est que Befunge 98 n’ignore pas le ;. Au lieu de cela, il agit un peu comme un commentaire en ce que toutes les commandes jusqu’à la prochaine ;sont ignorées. De cette façon, nous ne décrémente que 8pour 3et imprimer le 1998tel quel.

2001: Un espace ... PingPong

2001 est l’année de Piet, mais je n’avais pas vraiment envie de polygloter un fichier image avec tous les autres programmes. Voici donc un langage 2D moins connu. Il semble avoir beaucoup de fonctionnalités (que nous n'allons pas utiliser). Merci à Sp3000 d’avoir trouvé l’interprète original (seul lien mort sur la version archivée du site officiel).

PingPong est un peu inhabituel dans la mesure où il n’a que des miroirs et pas de <v>^redirecteur. Donc, cela se déplace v19977au début et ensuite frappe le miroir qui l'enveloppe vers le bas. Le code pertinent est alors:

v19977/

...

      /K:0:1:@

...

Le code actuel est assez simple: KPousse 20, les chiffres eux - mêmes pousser, :imprime un entier et se @termine le programme.

2003: SNUSP

C'est la première langue où les choses deviennent un peu plus faciles, car SNUSP prend en charge un point d'entrée explicite. Ce point d'entrée est marqué par $. À en juger par certains articles sur les esolangs, ce langage en a inspiré plusieurs autres, mais malheureusement, en fin de compte, il s’agit d’un dérivé de Brainfuck. Cela dit, je pense que la façon dont la cellule actuelle est fixée à 48 est assez nette (et a été volée dans l'article d'esolangs). Voici la partie pertinente du code:

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

Ce sont 24 +s et les miroirs envoient l'adresse IP à travers chacun exactement deux fois.

2004: Axo

Quelle qu'en soit la raison, cette langue n'ont les redirecteurs mais au lieu de l'habituel qu'il utilise . Par conséquent, cela ne fait que traverser la première ligne. Le code pertinent est:<^>v%

v19977/2{@{{4{\

Pour commencer, nous allons pousser quelques chiffres, effectuer une division. Puis 2{imprime le 2, @efface la pile. {{imprime deux s (implicites) 0s. 4{imprime le 4et \termine le programme.

2005: rail

2005 était un choix difficile. Je n'ai pas trouvé autant de langages 2D que l'année précédente, et ADJUST et Archway sont tous deux situés dans le coin inférieur gauche (ce qui leur aurait facilité l'ajout). J'aime bien le rail et comme il a un point d’entrée explicite, il n’était pas difficile de l’ajouter non plus. Le train cherche une ligne de départ $'main'et commence à se déplacer du sud-est au sud-est $. Cela signifie que le code pertinent est:

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

Les \et ne -sont que des pistes (no-ops). Le [2005]est un littéral de chaîne qui os'imprime avant la #fin du programme.

2006: BestFriends.js

Un brainfuck à deux dimensions. Il existe un autre langage intéressant pour cette année appelé Black, qui commence au niveau des coordonnées (3,3)(basé sur 1) et qui aurait rendu l’utilisation de cela dans un polyglotte intéressante également. Je n'ai cependant pas pu trouver d'interprète. Nous devrons donc travailler avec un autre dérivé de BF à la place ...

La chose intéressante à propos de celui-ci est qu’il ne formate pas la grille en lignes avec sauts de ligne comme la plupart des autres langages 2D. Au lieu de cela |est utilisé comme séparateur de ligne. Comme je ne l’utilisais pas |pour d’autres langues, je pouvais simplement mettre une |dernière ligne, ce qui fait du reste du programme une seule ligne en ce qui concerne BF.js. Le code pertinent est alors le suivant (transformer le |en un saut de ligne réel):

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

BF.js utilise ni <v>^ ni miroirs. Le seul moyen de rediriger le flux de contrôle consiste à faire {}pivoter la direction IP de 90 °. Donc, ces accolades déplacent l'IP à la deuxième ligne. Le reste est une solution simple de Brainfuck (qui ne joue pas particulièrement bien au golf) qui définit une cellule sur 50(code de 2), puis l’imprime 2006en décalant légèrement la valeur. @termine le programme.

2008: BrainSpace 1.0

Pour cette année, je voulais vraiment utiliser DOBELA, qui utilise plusieurs points d’entrée et qui ressemble au lovechild de Fission et Ziim . Malheureusement, je n'ai pas réussi à faire travailler l'interprète. Donc, voici un autre dérivé de BF (le dernier, je le promets).

Contrairement au dernier, celui-ci connaît les deux <v>^ miroirs, le code pertinent est donc:

v
\'\
  8

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

Celui-ci ne possède pas la []boucle habituelle de style BF (au lieu de cela, vous devez former une boucle 2D réelle), alors j'ai simplement décidé de le coder en dur 50car j'avais une tonne de caractères dans une rangée de Wierd de toute façon. Notez que les 'et 8sont ignorés, le *est un trampoline conditionnel que nous pouvons ignorer et le OBrainfuck .. Le Xtermine le programme.

2009: > <>

Probablement le fungeoid le plus populaire (autre que Befunge lui-même) au moins autour de ces parties. > <> a les deux <v>^et les miroirs mais aussi les chaînes de caractères, donc le code exécuté est le suivant:

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

Le littéral chaîne sert principalement à ignorer le \code que nous avons utilisé pour BrainSpace 1.0, mais pendant que nous y sommes, nous pourrions aussi bien insérer les deux premiers caractères. ooles imprime. Ensuite, 100appuie sur trois chiffres, @déplace le haut vers le bas et nimprime le 0dessous. Nous faisons à nouveau la même chose avec 590laquelle imprime le 9. Si vous vous demandez pourquoi je n'imprime pas uniquement 2009tel quel , attendez 2015. ;met fin au programme.

2010: cardinal

Celui-ci était simple, car il a un point d'entrée explicite à %. Cependant, celui-ci crée 4 adresses IP dans toutes les directions (d'où le nom de la langue, je suppose), et nous devons nous débarrasser de 3 d'entre elles. Voici le code pertinent:

 x
x%"2010"x
 x

Ben ouais. (Dans Cardinal, le mode chaîne imprime directement au lieu de placer les caractères sur une pile.)

2011: RunR

Une autre langue avec un point d’entrée explicite (par David Catt qui a créé quelques autres très beaux esolangs), cette fois sur S. Cela rend le code pertinent cette partie:

S1^2^2^6^8MAOUOAOOF

RunR est un peu intéressant car la plupart des opérations fonctionnent avec une sorte de registre et les valeurs doivent être déplacées explicitement vers la pile pour les opérations binaires. Les chiffres définissent les valeurs du registre et ^poussent le registre actuel vers la pile. Ensuite, la Mmultiplication (valeur du registre fois extraite de la pile), la Usoustraction, l' Aaddition, la Osortie. Ftermine le programme.

2012: Ropy

Comme Wierd, Ropy essaie de suivre des sections de caractères autres que des espaces, mais ici, les courbes ne déterminent pas les commandes. En fait, il s'avère que Ropy ressemble plus à mon propre labyrinthe en ce que la direction choisie dépend du haut de la pile. Cependant, nous n'avons pas vraiment besoin de nous inquiéter à ce sujet ici, car Ropy se déplace tout au long de la première ligne:

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

Il y a beaucoup de choses que nous pouvons ignorer jusqu'à la >. Tout ce que nous avons besoin de savoir, c'est que le sommet de la pile sera à ce moment 4-là et il y en aura un en 2dessous.

>duplique le 4, /est la division en le transformant en un 1. Puis on pousse 02. &&&joint les quatre premiers numéros de la pile dans l’ordre inverse 2012. #le sort. ????efface simplement la pile car sinon, le haut de la pile est également généré.

Un point intéressant est que le second 7en a 19977été ajouté à cause de Ropy. La /division dans Ropy fait top / second(contrairement à l'ordre habituel dans de nombreux langages basés sur des piles), où 7 / 9donnerait 0. Si nous avions un zéro au sommet de la pile, Ropy ferait quelques trucs déchaînés avec sa direction de déplacement. Nous devons donc pousser l’autre 7pour que le haut de la pile reste positif et que Ropy continue de se déplacer vers l’est.

2014: fission

Avec ses points d'entrée explicites, celui-ci est facile. RDLUcréer des atomes (pointeurs d'instructions) dans la direction correspondante, le bit pertinent est donc le suivant:

R"2014";

Notez qu'il y a aussi un Ucode source dans le code source, mais que cet atome finit par atteindre l'un des éléments *de Wierd, ce qui termine le programme (et cet atome prend beaucoup plus de temps que les Rbesoins d'impression 2014).

2015: Gol> <>

Le dérivé plus puissant> <> de Sp3000. Il est largement compatible avec> <>, donc le code exécuté est toujours:

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

Cependant, le sens de rotation de a @été changé, ce qui est l'astuce habituelle pour distinguer> <> et Gol> <> dans les polyglottes, donc celle-ci s'imprime 15au lieu de 09. D'où l'étrangeté dans la seconde moitié du programme.

2016: CSL

CSL est très intéressant car les commandes ne sont pas exécutées immédiatement. Au lieu de cela, chaque commande est poussée sur une pile de commandes eet Epeut être utilisée pour exécuter des commandes à partir de celle-ci. Le code correspondant devient:

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

Ainsi, il Eexécute la totalité de la pile de commandes, ce qui signifie que les éléments précédents sont exécutés à l'envers. Il suffit de regarder *:

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

Les 1s se poussent sur la pile de données. +et -sont décrémentés / incrémentés. Paffiche le haut de la pile. Ensuite, *tente de multiplier les deux premières valeurs de la pile. Cependant, la pile est vide, le programme est donc terminé.


Nous arrivons maintenant aux langues qui ont été publiées après la publication de ce défi. Je ne les compte donc pas vraiment pour la partition, surtout que je les ai moi-même créées (pas avec ce défi en tête cependant). Cependant, ils ont une nouvelle sémantique de mouvement de propriété intellectuelle, ce qui facilite leur intégration dans le polyglotte tout en ajoutant quelque chose d'intéressant à cette vitrine des langages 2D.

2017: Alice

Alice a été conçue pour être un fungeoid riche en fonctionnalités. Une différence intéressante par rapport à la majorité des autres langages 2D (mais pas à tous) est que l’IP peut se déplacer orthogonalement ou diagonalement. Le passage de l'un à l'autre modifie également la sémantique de presque toutes les commandes du langage. De plus, Alice prend en charge à la fois les <^>vindicateurs de direction et les \/miroirs traditionnels , mais les miroirs ont un comportement très unique dans Alice (ce qui permet de diriger facilement l'adresse IP d'Alice vers une partie du code inutilisée jusqu'à présent).

Alors que la plupart des langues traitent \et /qu’il s’agissait de miroirs à un angle de 45 ° et que l’IP est un rayon lumineux qui rebondit dessus, Alice les traite comme ayant un angle de 67,5 ° (qui est plus proche de l’angle des glyphes de barre oblique réels). , et l’IP se déplace également dans le miroir (d’où le nom de la langue). En raison de cet angle, les miroirs basculent entre les mouvements dans des directions orthogonales ou diagonales. De plus, en mode ordinal (c’est-à-dire pendant que l’IP se déplace le long de diagonales), la grille ne s’enroule pas et l’IP rebondit plutôt sur les bords (alors qu’en mode Cardinal, elle s’enroule).

Dans l’ensemble, le code exécuté par Alice est le suivant:

v19
\ \

...

  >      "7102"4&o@

...

L’IP commence dans le coin en haut à gauche, comme d’habitude, et le vrenvoie au sud. Maintenant, la \propriété intellectuelle se déplace vers le nord-ouest, où elle rebondit immédiatement sur le bord gauche de la grille (et se déplace vers le nord-est). 1peut être ignoré, l’IP rebondit sur le bord supérieur pour se déplacer ensuite vers le sud-est. Nous avons frappé un autre \qui reflète le nord IP. 9peut également être ignoré, puis l'adresse IP est renvoyée au bas de la grille. Après quelques lignes, nous le redirigeons vers l'est avec plus >de commodité. "7102"Pousse ensuite les points de code du 2017, 4&oimprime ces quatre caractères et @termine le programme.

2018: Wumpus

Wumpus est le premier langage 2D sur une grille triangulaire, ce qui rend le déplacement dans le code très différent (et nous permet à nouveau d’atteindre facilement une partie inutilisée du code). Ainsi, au lieu de considérer chaque caractère de la grille comme un petit carré, pensez plutôt à alterner des triangles ascendants et descendants. Le coin supérieur gauche est toujours un triangle ascendant.

Wumpus n'a pas de direction <^>v, mais il a des miroirs \/. Cependant, en raison de la grille triangulaire, ceux-ci fonctionnent différemment de la plupart des autres langues. L’IP rebondit comme un rayon lumineux (comme d’habitude), mais vous devriez penser qu’ils ont un angle de 60 °. Ainsi, une IP se déplaçant vers l’est finira par se déplacer le long de l’axe nord-ouest de la grille.

Autre différence par rapport à la plupart des autres langues, les bords de la grille ne sont pas enveloppés, mais la propriété intellectuelle rebondit sur les bords (comme si ces cellules contenaient les miroirs appropriés). Un autre détail amusant est que les diagonales à travers la grille triangulaire ressemblent en fait à des escaliers dans le code source.

Dans cet esprit, le code exécuté par Wumpus est le suivant (où j'ai remplacé des espaces par .souci de clarté:

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

Ce ne v19977sont que des cochonneries que nous pouvons ignorer. /envoie l'IP au nord-ouest, où il se déplace à nouveau 977(de la droite) en rebondissant sur le bord supérieur. Ensuite, l’IP se déplace vers le sud-ouest à travers le 2089et un tas d’espaces, avant d’atteindre le bord gauche pour être à nouveau reflété vers l’est. *est également indésirable. Enfin, #2018appuie 2018, Oimprime et @termine le programme.


Années manquantes

Enfin, quelques notes sur des années que je n'ai pas couvertes.

Alors que je cherchais des langages 2D pour trouver, au fil des années, des langages appropriés qui pourraient être utilisés dans un polyglotte, j'ai découvert que contrairement à la croyance populaire, Befunge n'était pas le premier langage 2D. Ce titre semble appartenir à Biota, qui a déjà été créé en 1991. Malheureusement, la langue n’a aucun résultat, je n’ai donc pas pu l’utiliser pour ce défi.

Autant que je sache, aucun langage 2D n'a été créé en 1992 et 1995. Cela laisse quelques années que je n'ai pas couvertes:

  • 1994: Orthagonal est créé indépendamment de Befunge. Les langues sont sémantiquement assez similaires en réalité, mais Orthagonal ne présente pas le code source en 2D. Au lieu de cela, chaque ligne est un (x, y, instruction)tuple. J'ai même obtenu les spécifications de langue et l'interprète original du créateur Jeff Epler, mais au final, le fait que la syntaxe ne soit pas 2D rendait le langage inapproprié pour ce polyglotte.
  • 1996: Orthogonal , un successeur d'Orthagonal (créé par quelqu'un d'autre) est créé, mais aux fins de cette polyglotte, il souffre des mêmes problèmes qu'Orthagonal.
  • 1999: Le seul langage que j'ai pu trouver était l'automate cellulaire REDGREEN de Chris Pressey . Malheureusement, contrairement à son prédécesseur RUBE, il ne semble pas avoir de sémantique d’E / S.
  • 2000: Il existe un autre automate cellulaire appelé noit o'main worb de Chris Pressey, mais il ne possède pas non plus d'E / S. Il y a aussi Numberix que je n'ai pas essayé de lancer et je ne sais pas s'il ignorerait les caractères non hexadécimaux dans le code source.
  • 2002: Clunk sans I / O et ZT dont les spécifications linguistiques me terrifient.
  • 2007: J'ai trouvé trois langues ici. Zetaplex est basé sur des images (donc pas assez ) et RubE On Conveyor Belts semble nécessiter un en-tête avec un format plutôt strict qui aurait gâché la première ligne du programme. Il y a aussi Cellbrain by Quintopia, mais cela semble également nécessiter un en-tête spécifique.
  • 2013: Encore une fois, j'ai trouvé trois langues. La pêche pourrait être possible avec une bonne quantité de restructuration, mais il faudrait que le programme commence par un quai valide. Quipu , de mémoire, est beaucoup trop strict sur sa syntaxe pour permettre beaucoup de polyglot. Et Swordfish est un autre membre de la> <> famille, mais malheureusement, je n’ai pas pu trouver d’interprète. Sinon, celui-ci serait probablement assez facile à ajouter.

Si vous êtes intéressé, voici la liste complète des langues 2D implémentées, triées par année dans la mesure où je les ai trouvées (au moment où cette réponse a été publiée). S'il en manque, merci de me le faire savoir par chat , je serais très intéressé par une liste complète.


8
Sensationnel. C'est vraiment impressionnant
DJMcMayhem

@MartinEnder Avez-vous envisagé de mettre votre liste de langages de programmation 2D par année sur Esolang même?
doppelgreener

@ Doppelgreener Je ne suis pas tout à fait sûr de savoir comment cela irait là. Il s'agit essentiellement de l'intersection de la catégorie 2D et des différentes catégories d'années.
Martin Ender

Je vais corriger la ligne d'en-tête RubE On Conveyor Belts, si vous avez une machine à remonter le temps que je peux emprunter pour m'apprendre à lire, à l'âge de 13 ans, un fichier sans connaître la taille du fichier à l'avance. (C'est la seule raison pour laquelle il y avait une ligne d'en-tête; IMO, vous pouvez vous sentir libre de ne pas compter l'en-tête de taille dans le programme, bien que ce soit à proprement parler)
user253751 Le

1
@cairdcoinheringaahing Voilà. Et Wumpus pour 2018, pendant que j'y étais.
Martin Ender

117

15 ans, Python

Versions: 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 et 3.6.0a4 . Les versions non liées peuvent être trouvées sur la page de téléchargement .

La date de sortie de 0.9.1 peut être trouvée ici . Malheureusement, j'ai dû passer de nombreuses années en raison de l'absence d'anciennes versions et de problèmes de compilation sur mon ordinateur. Les années représentées sont 1991, 2000-2002 et 2006-2016.

Testé sur Arch Linux, en utilisant les versions gzippées.

# 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)

19
... Sensationnel. Je suis toujours étonné de constater à quel point certaines personnes connaissent leur langue. C'est comme regarder dans le temps ...
wizzwizz4

Est-ce que python 0 prend en charge try / except ??
OldBunny2800

8
@ OldBunny2800 Étonnamment, oui, c'est ce qui se passe
Sp3000

54

Court et doux; les trois APL ( K , J201 , Dyalog 7.1 ) sur 8 octets

1993+1^2

1993 plus ...

K: le premier 1 entier {0} sauf {2}, c'est-à-dire {0}; 1993 - Essayez-le en ligne!

J: 1 2 = 1; 1994 - Essayez-le en ligne!

APL: LCM (1,2) = 2; 1995 - Essayez-le en ligne!


Très agréable! Pensez-vous pouvoir combiner davantage de langues Iverson?
miles

@miles Get est difficile avec K, et APL2 / APLX / APL * PLUS sont trop similaires.
Adám

@miles Connaissez-vous une version J de 2000? Si c'est le cas, nous pouvons faire 2e3+?1avec Dyalog 9.0.1.
Adám

Une autre perspective intéressante X^Yconcerne certains nombres X et Y, tout comme le ^pouvoir en J, mais le LCM en APL.
Adám

2
J'ai trouvé une page de fonctionnalités sur les versions avec leurs dates jusqu'à 2000, jsoftware.com/release/status.htm
miles

46

10 ans, 12 langues, 2430 octets

Cette réponse est une collaboration entre moi-même et l'utilisateur 1000000000 .

Une brève liste de langues:

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 

Voici le 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
#   """

Afin d’intégrer cela dans une réponse, je vais renoncer à l’intégralité des liens TIO et simplement poster un lien vers un interprète valide dans lequel le code peut être saisi par l’utilisateur. Voici un lien Pastebin à cet effet.

Piet

Le format de fichier PPM , un des formats d'image que l'interpréteur Piet que nous avons utilisé peut lire, a une version ASCII en texte brut. En utilisant cela, nous avons pu intégrer le code d’autres langues en tant que courrier indésirable dans le fichier image lu par Piet et Braincopter.

L'image ressemble à ceci:

Image brute

Toute l'image n'est pas importante pour Piet. Voici une version avec une ligne soulignant le chemin que Piet suit à travers le code:

Chemin de piet

Malgré des méthodes quelque peu compliquées pour créer le programme, le programme lui-même est assez simple. En haut de l'image, il se place 1 10 10 10 2dans la pile. le long du côté il se multiplie trois fois et ajoute une fois. Dans le coin inférieur, il affiche le résultat (2001), puis s’arrête.

Braincopter

Braincopter est l'autre langage visuel. Il s’appuie également sur le même ppmfichier image à exécuter. En raison de restrictions très strictes dans npiet, notre code Braincopter ne peut utiliser qu'un sous-ensemble des opérations Braincopter d'origine. Nous sommes limités à utiliser des couleurs qui sont des opérations valides dans Piet. Cela supprime l' -opérateur de Braincopter.

Voici le chemin tracé par le code Braincopter:

Chemin de Braincopter

Le programme Braincopter est un peu étrange à cause du manque d’ -opérateur. Les murs de cyan et de cyan foncé servent à rediriger le pointeur, mais à part cela, il est identique au brainfuck suivant:

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

Cette imprime 2005.

Paintfuck

Paintfuck est le troisième langage de programmation visuel de notre liste. Cependant, au lieu de prendre une image et de générer du texte, Paintfuck prend du texte et génère une image.

Étant donné que Paintfuck ignore les caractères non pertinents comme non-ops, la majeure partie du code est sans importance. La section pertinente du code est la suivante:

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

Même s’ils ne sont pas interdits, wle code s à la fin du code ne fait rien. Ils sont là pour la partie herbe de la solution. n, e, sEt wsont utilisés pour se déplacer autour de l'image et *est utilisée pour tracer un point à un certain endroit. Le programme génère:

Sortie Paintfuck

Une version plus grande:

Painfuck, mais c'est plus gros

Brainfuck

Comme Paintfuck, Brainfuck ignore la plupart des personnages. Encore une fois voici les plus importants:

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

La plupart de ces éléments ne sont pas non plus pertinents par les circonstances et il s’agit simplement de caractères dont une autre langue aurait besoin. La version la plus fine de ce code est:

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

Cette jolie imprime simplement 1993.

Brainbool

Brainbool est très similaire à Brainfuck dans la sélection de ses personnages. La grande différence qui permet -de lier les deux est l'absence de Brainbool. Les personnages importants pour Brainbool sont:

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

Les sorties de Brainbool et de brainfuck s'excluent mutuellement. Brainbool cache sa sortie dans le deuxième ensemble de []. Brainfuck se rencontre +++---avant d'atteindre la [valeur zéro et la fait sauter la sortie, alors que Brainbool ne voit que la +++mettre à 1 et la fait passer à travers la boucle. De même, Brainbool est mis à zéro à la 4ème boucle, ce qui le fait sauter alors que Brainfuck entre dans la boucle avec une valeur de 49.

Puisque Brainbool n’a pas de sortie décimale, il édite l’année 2010 en binaire:

11111011010

Fission

La seule partie du code importante pour la fission est la suivante:

R"2014";

La Rconvocation dans un atome se déplaçant à droite, les "2014"empreintes 2014et l' ;arrêt de l'exécution.

Befunge

Befunge ne passe que par les caractères suivants:

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

Il P3est nécessaire de créer une image .ppm valide pour le pied et de placer cumulativement un 3 dans la pile. le vest placé pour rediriger le pointeur vers le bas. Il passe ensuite à travers le 7au 17servant à indiquer la largeur de l'image de .ppm. Le >redirige le pointeur vers la droite. 7*multiplie le haut de la pile par 7 en laissant 49 (valeur ASCII de 1) au sommet de la pile. ::duplique le haut de la pile deux fois. Le 1est sorti par ,. 8 +ajoute 8 en haut incrémentant en ASCII 9. :,,sorties 9deux fois. 2 +incrémente l'ASCII 1en ASCII 3et ,imprime. Enfin se @termine le programme.

Dans l'ensemble, il imprime 1993.

Espace blanc

Comme son nom l'indique, les espaces blancs n'utilisent que les espaces blancs dans leurs programmes. Voici ce que voit l'interprète Whitespace:

[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][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]

La plupart de ce que fait ce code est sans importance pour l'exécution du programme (toutes les lignes ne contenant que des espaces poussent simplement zéro dans la pile). La partie importante:

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

La première ligne pousse 2003 dans la pile. Après cela [Tab][LF][Space][Tab]affiche le haut de la pile (2003) sous forme de nombre. Enfin, les trois derniers sauts de ligne mettent fin à l'exécution du programme.

Herbe

L' herbe ignore tout caractère jusqu'à ce que le premier wdans le fichier et après que tous les caractères qui ne sont pas w, Wou v. L'interprète Grass lit:

wWWWwWWWWwv
wWWwWWWwv
wWWWwWWWWWwWWWWWWwwwWWWWWWWwWWWWWWwwwWWWWWWWWWWwWWWWWWWWWWwv
wWWWwWWWWwv
wWWwWWWwv
wWWwWWWwv
wWWwWWWwv
wWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwv

La première ligne définit une fonction qui ajoute deux à ce qui est passé. La deuxième ligne définit une fonction qui ajoute quatre à tout ce qui est passé. La troisième définit une fonction qui imprime deux plus l'argument, l'imprime deux fois, puis enfin sept et l'argument (Grass imprime des caractères en fonction de la valeur ASCII). Les quatrième, cinquième et sixième lignes définissent des fonctions qui ajoutent huit, ajoutent 16, ajoutent 32 et ajoutent 64 à leur argument, respectivement. La dernière ligne définit la fonction principale qui prend le caractère w(le seul numéro prédéfini dans Grass, valeur ASCII 119) et lui ajoute 185 en utilisant les fonctions add définies dans le programme ainsi que la fonction add one intégrée. Grass enveloppe les nombres à 256 et le résultat est donc 48 (correspondant au caractère0). La fonction passe ensuite ceci à la fonction de la troisième ligne qui affiche 2007.

Étoilé

Starry ignore tout sauf l'espace, +, *, ., ,, `et '. Ainsi, l'interprète étoilé ne voit que:

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

Cependant, l'étiquette et les instructions de saut sont utilisées pour ignorer des sections du code qui pourraient causer des problèmes si elles sont exécutées. Le code est donc comme suit:

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

Ce code en envoie deux à la pile, la duplique deux fois, puis apparaît et en affiche une sous forme de nombre. Puis appuie sur zéro, le duplique et imprime les deux zéros sous forme de nombres. Ensuite, un des deux sauts et saute, puis pousse sept à la pile et apparaît et imprime est un nombre. Enfin, les deux derniers de la pile sont affichés et sautent à la fin du programme.

Python 2.7.2

Le code Python suit le format:

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

...se situe pour tous les autres déchets.

La première ligne P3v=""existe, car pour que le .ppmfichier soit valide , notre code doit commencer par P3ceci sera normalement une erreur, mais si nous disons à python qu’il s’agit d’une déclaration de variable, il l’ignorera.

Ensuite, nous devons imprimer 2011. Cependant, en raison de la manière dont a .ppmest formaté, nous ne pouvons inclure aucun nombre dans cette ligne. Afin de contourner ce problème, nous résumons toutes les valeurs ASCII de la chaîne "~~~~~~~~~~~~~~~y"et imprimons le résultat. Enfin, nous utilisons les triples guillemets d'un commentaire multiligne pour que python ignore tout le reste.

Brainflak

Nous avons gardé le meilleur pour la fin.

Brainflak, comme d’autres, ignore la plupart des personnages. Les caractères pertinents sont:

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

Le code python,, (([()]))envoie deux fois -1 à la pile; il doit donc être supprimé avant que le programme ne commence son traitement.

Après cela, Brainbool utilise un []nilad qui ne fait rien et le programme commence.

(((((()()()()){}){}){}){})({({}[<()>()])}{}<[[]]>)pousse 2016. Le dernier [<><>]est des restes de Befunge et Brainfuck mais heureusement ne fait rien.

Lorsque le programme se termine, il imprime le contenu de la pile, c’est-à-dire qu’il imprime 2016.


Brillant! J'avais espéré que Piet ferait une apparition, intégrer des choses dans un PPM est génial. Bien joué!
Cincodenada

1
+1 pour We saved the best for last. : D
DJMcMayhem

38

5 années

#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] et 1999: C99

Le commentaire sur une seule ligne a //été ajouté dans C99, de sorte qu'un compilateur C89 lirait ce code comme c=-4.5 / /*comment*/ -4.5étant identique à c=-4.5 / -4.5, alors qu'un compilateur C99 se lirait comme c=-4.5 //comment/**/
- 4.5étant identique à c=-4.5 - 4.5.
La partie Python est un commentaire dans le programme C.

2010: Python 2.7 et 2015: Python 3.5

La documentation varie entre Python 3 et 2, ce programme utilise la longueur de la documentation pour détecter la version Python.
La partie C est dans une chaîne du programme Python.

1993 [2] : Brainfuck

Il ignore fondamentalement tout ce qui ne l'est pas .,[]+-<>. Étant donné que le programme C contient un ,élément, j'ai dû demander à Brainfuck de supprimer cette partie en définissant l'octet actuel sur 0.


  1. La spécification C89 a été publiée en 1990. Plus d'infos .
  2. Je ne pouvais pas trouver une date de sortie officielle, alors je vais croire Esolangs et Wikipedia .

4
C'est génial, surtout le -4.5/-4.5et -4.5-4.5. Écraser deux versions de chacune des deux langues principales est assez impressionnant, même sans y
insérer

Ce n'est pas codegolf, mais la a=ligne 2 n'est pas nécessaire
TheInitializer

@TheInitializer ouais, j'ai essayé sans a=et ça a donné une erreur, alors j'ai décidé de le garder. Je ne sais pas pourquoi cela a donné une erreur, probablement une faute de frappe.
mardi

@betseg si ce code n'est exécuté qu'en Python, cela devrait fonctionner.
TheInitializer

17

15 ans, JavaScript

Comme le cycle de publication de JavaScript est très inhabituel et incohérent, je vais utiliser la mise en oeuvre de Firefox. S'il vous plaît laissez-moi savoir si cela n'est pas autorisé.

Versions: 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 (tous testés sous Windows 7)

Remarque importante: l' installation et l'ouverture de Firefox 1.0.0 ou de toute version ultérieure peuvent effacer toutes vos données Firefox enregistrées , y compris l'historique et les signets.

De plus, à partir de la version 1.0.0, vous ne pouvez ouvrir qu'une seule version à la fois. essayer d'ouvrir une autre version entraîne une nouvelle fenêtre de la version déjà ouverte.

Instructions

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>

Vous pouvez ajouter une 16e année en incluant BF: <!--<<<<-[>+<-----]>--.++++++++..------.[-][-->avant le script et un autre commentaire HTML contenant juste un ]après.
Steven H.

6
@StevenH. Euh ... wow, je n'ai même jamais pensé à inclure des esolangs dans tout ça. Et c'est une façon très intelligente d'inclure BF :-) Mais je ne suis pas sûr de vouloir vraiment ...
ETHproductions

13

6 langues, Turtlèd et brainfuck , Python 3.5, Python 2.7, > <> , Fission

Turtlèd n’existait pas avant cette année, et si facilement objectif, même si le github s’engage ne compte pas, et BF a les preuves de la page esolang, publiées en 1993. Python 3.5 est 2015, 2.7 est 2010.> <> a aussi la page esolang , indiquant 2009, de même que Fission, 2014

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

Je devrais probablement donner crédit à la page des constantes bf sur les esolangs ... ¯ \ _ (ツ) _ / ¯

Comment ça marche, genre de:

Tourteau:

Turtlèd ne fait vraiment rien pour les lignes autres que les premières:

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

/ est un nop

Brainfuck

Brainfuck ignore les caractères qui ne figurent pas dans ses commandes

il voit -[>+<-----]>--.++++++++..------.(le dernier. est extrait de la partie python)

qui fait juste des trucs Brainfuck, il utilise l’emballage pour diviser 255 par 5, puis soustrait 2 du résultat, imprime, incrémente 8 fois, imprime deux fois, diminue 6 fois, imprime

Python 2 et 3

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

La longueur de la documentation pour len varie d'une version à l'autre. Ainsi, l'année indiquée pour la version 3 est la longueur correcte, sinon pour la version 2.

> <>

# reflète le pointeur en arrière, donc il frappe le / de l’autre côté de cette ligne, passe à travers l’espace entre elseet 2010, puis réfléchit à nouveau en tapant "2009", en poussant 9,0,0,2 sur la pile, puis en inversant .

Fission

La fission a des géniteurs, on peut donc avoir une ligne au bas qu'elle exécute seule:

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

13

3 ans, 3 langues: 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   */ 

Nommez le fichier date.mixal.

  1. C (1990) - Compile avec avertissements et impressions 1990vers stdout.
  2. TeX (1982) - Compiler avec tex date.mixal; imprime 1982dans le fichier O.tex(ignore la sortie DVI).
  3. MIXAL (1997) - Compiler avec le kit de développement GNU Mix mixasm date.mixalet exécuter avec mixvm -r date.mix; imprime 1997sur le périphérique télétype (= stdout).

Les programmes TeX et MIXAL sont dans un commentaire dans le programme C; le programme MIXAL vient après, \byedonc TeX l’ignore. Les programmes C et TeX sont un commentaire dans le programme MIXAL. Pour une raison quelconque gccest prêt à accepter *main.


J'avais oublié MIXAL, +1: D
cat

13

3 ans (GolfScript, CJam, MATL), 24 23 octets

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

Cette sortie

  • 2007 dans GolfScript.

  • 2015 dans CJam (version 0.6.5).

  • 2016 dans MATL (version 19.2.0).

Explication

Golfscript

Les jetons non définis sont des noops dans GolfScript . Les seules parties du code qui font réellement quelque chose sont:

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

Tout ce qui %suit est un commentaire.

[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"

Correction: dans CJam après avoir %obtenu [11 10]. Pas que ça compte.
Aditsu

@aditsu Whoops! Merci, édité
Luis Mendo

12

2 langues, Python 2.7 et Python 3.5

Python 2.7 est sorti en 2010 .

Python 3.5 est sorti en 2015 .

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

Cela repose sur PEP 238, dans lequel l’opérateur /est passé de la division entière en Python 2 à la division à virgule flottante en Python 3.


3
Cela pourrait être un défi amusant si cela implique d'identifier les bugs / changements d'opérateurs entre les versions
miles

1
@TuukkaX Cela fonctionne pour moi à la fois en Python 2.7.12 et Python 3.5.1 sur Fedora 24.
miles

1
Tu ne peux pas faire à la '2010'if 3/2>1else'2015'place?
Qwerp-Derp

15
Ou nous maths:print(int(2010+1/2*10))
Jakube

2
print('2015'if 1/2else'2010')est mieux
Cyoce

12

8 ans, 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

"N'importe lequel des programmes peut imprimer sur STDERR ou générer des erreurs et des avertissements lors de l'exécution / la compilation, tant que la sortie correcte est toujours imprimée sur STDOUT ou sur un fichier." Actuellement, le seul affichage sans erreur est l'année, nous respectons donc cette règle. Toutefois, si vous souhaitez écrire dans la mémoire, remplacez Disp (date)par (date)->I.

Références:

  1. Dates de sortie de la calculatrice - https://epsstore.ti.com/OA_HTML/csksxvm.jsp?nSetId=74258
  2. Date de sortie de TI-83 + OS 1.15 - http://wikiti.brandonw.net/index.php?title=83Plus:OS:VersionDifferences#TIOS_1.15
  3. Compatibilité calculatrice - http://tibasicdev.wikidot.com/compatibility
  4. Date de sortie de la TI-84 + CSE - https://www.amazon.com/Texas-Instruments-Silver-Graphing-Calculator/dp/B00AWRQKDC
  5. Date de sortie de la TI-84 + CE - http://www.prnewswire.com/news-releases/texas-instruments-unveils-the-new-ti-84-plus-ce-300026266.html et https: // www. cemetech.net/forum/viewtopic.php?t=8870

9

5 ans, allez 1.0, 1.1, 1.4, 1.5, 1.6: 285 257 octets

(1.2 est sorti en 2013 comme 1.1, 1.3 en 2014 comme 1.4 et 1.7 en 2016 comme 1.6.)

Je n'ai pas testé cela sur toutes les versions car je ne peux accéder qu'à la version 1.6, mais cela devrait fonctionner en théorie! Les changements de langue auraient probablement empêché le programme de compiler. Je me suis donc appuyé sur les modifications standard de la bibliothèque.

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 et commenté:

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 ans, 99 octets / 77 caractères

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

Note: Je ne sais pas si les années sont correctes

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

Il m'a fallu un certain temps pour comprendre comment faire en sorte que Python et JS fonctionnent ensemble.

Explication

v=1//1;"""définit la variable và 1diviser par 1en Python et 1en Javascript ( //commence un commentaire en Javascript) et ;"""démarre une chaîne multiligne en Python. Le ;ne peut pas être remplacé par une nouvelle ligne car cela empêcherait Javascript de fonctionner.

1991/*"""est le reste de la chaîne multiligne. L'espace est nécessaire pour que> <> ne pousse pas 1dans la pile. Comme le début de la chaîne multiligne faisait partie d'un commentaire en Javascript, il imprime 1991et commence un commentaire multiligne.

for i in[0]:print 2010#🔟😃😇🔟😗➕➕😨en Python, est une boucle for qui itère la liste [0]et s'exécute print 2010. Le commentaire est juste le code Emotinomicon (il ignore tout ce qui n'est pas un emoji ou une chaîne). Dans> <>, il ( f) pousse 15 vers la pile.

La boucle for ne peut pas être supprimée car l'adresse IP de> <> est en train de descendre dans la colonne 1 et pn'est pas une commande valide dans> <>. Vous ne pouvez pas non plus la remplacer par une ifinstruction, car ic’est la commande à prendre en entrée dans> <>.

""" est le début d'une chaîne multiligne.

" fait partie de la chaîne multiligne, nécessaire pour fermer la chaîne dans laquelle nous avons ouvert> <> (le premier guillemet de la ligne précédente a commencé une chaîne dans> <>).

>9002nnnn;dans> <>, change de direction IP à droite, pousse 9, 0, 0et 2, la sortie de ces chiffres et se termine comme le programme.

"""#*/en Python, termine la chaîne multiligne et commence un commentaire. En Javascript, */met fin au commentaire multiligne.


Version bonus avec Gol> <>:

5 langues, 4 ans, 118 114 octets / 96 92 caractères

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

Explication²

IP commence dans le coin supérieur gauche et va à droite. Le vfait descendre.

fpousse 15.

" commence la chaîne.

` est utilisé pour échapper des caractères, quelque chose que> <> n'a pas.

"devrait fermer la chaîne, mais nous avons utilisé `, donc ce ne sera pas.

> partie de la chaîne.

" termine la chaîne.

>5102nnnn;est le code actuel. >rend la propriété intellectuelle aller à droite, 5102pousse 5, 1, 0et 2, et nnnn;imprime les numéros et se termine le programme.


Erreurs Python sur les caractères Unicode sans l'en-tête approprié. ( 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 Enregistrez le fichier au format UTF-8
acrolith

7

7 ans, 8 navigateurs

Pas exactement les dates de publication de la langue car css n’a pas réellement de version, mais les versions de navigateur (pourraient être considérées comme des versions de compilateur?)

Pour les navigateurs suivants, cela affiche le nom du navigateur, la version et la date de publication, et rien d’autre. Il imprime la même chose pour quelques versions ultérieures (vous verrez que le chrome est une version tardive dans les captures d'écran car il est difficile de télécharger les anciennes versions de chrome par numéro de version).

Je pouvais imprimer le numéro de version que j'ai utilisé mais j'ai préféré montrer la première version où la fonctionnalité utilisée est introduite.

  • IE6
  • IE7
  • IE8
  • IE9 (non testé, ne dispose pas d'un IE9)
  • Firefox 4
  • Firefox 3.6
  • Chrome 18
  • Chrome 21
  • Navigateurs modernes

FF3.6 FF4 Chrome19 Chrome22 IE8-quirks Compatibilité IE8-IE7 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 a effectivement des versions. Il existe 1.0, 2.0, 2.1, 3.0 et 4.0. La question disait même d’utiliser Wikipedia ou le site de la langue comme preuve de la date de sortie. Vous auriez donc dû vérifier. Date de première publication: le 17 décembre 1996
mbomb007 le

Cela ne veut pas dire qu’il n’ya aucune implémentation de l’un de ces niveaux (ils ne sont même pas appelés des versions, parce qu’ils ne le sont pas, vous auriez dû vérifier le lien que vous avez posté). Et les CSS3 et 4 n’ont même pas de date de publication car ils sont créés à la volée, et alternent entre projets, candidats et recommandations. En outre, aucun navigateur n'implémente un niveau spécifique de 100% et 0% du niveau suivant. La meilleure date que vous puissiez trouver est la date de publication du navigateur.
Qwazix

Ensuite, la langue que vous avez sélectionnée ne répond pas aux spécifications requises pour ce défi. Pas comme vous essayez de le faire. Une langue est définie par son implémentation, vous devez donc choisir un navigateur et vous y tenir, en utilisant différentes versions de navigateur , pas différents navigateurs. Je demanderais quand même à l'OP, cependant.
mbomb007

Le PO n'a pas indiqué que les différentes versions étaient considérées comme différentes langues, mais simplement d'imprimer l'année de publication de la version utilisée, pour différentes langues . Cependant, environ la moitié des réponses reposaient sur l’hypothèse que les différentes versions étaient suffisamment différentes pour être considérées comme des langues. Si python 2.5.0 et 2.5.1 sont considérés comme suffisamment différents, je ne peux pas comprendre comment IE et Chrome ne le sont pas.
Qwazix

6

3 ans, 89 octets

Python 2, JavaScript (ES6) et Perl

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

La première evalfonctionnera 1sous Python 2, print=_=>console.log(1995)JavaScript et Perl, à l'aide de la fonction de division entière de Python 2. Cela crée une printfonction en JavaScript et Perl ne se préoccupe que des erreurs de syntaxe et continue malgré tout.

La seconde evalrepose sur l’interpolation par Perl de la variable $$(PID actuel) dans la chaîne, ce qui sera vrai lorsqu’elle sera comparée (à l’aide de l’ >opérateur) contre "0"(Python exige une chaîne dans cette comparaison, alors que Perl convertit implicitement en entier).

J'aurais pu utiliser plusieurs langues, mais je voulais une solution qui n'abuserait pas des commentaires et ne fonctionnerait que dans des langues «normales».

J'ai utilisé cette page Wikipedia pour récupérer les années à utiliser.


2

3 langues, 3 ans

Une réponse ad hoc pour le plaisir.

2002!~+++++++[<+++++++>-]<[.++++++++..------.[-]] 2016 !.
  • Mouse-2002 : tout ce qui suit~est un commentaire et la première partie, qui pourrait également être écriteC0U!!!, est imprimée2002.

  • Ce commit pré-challenge de Calc : qui est un interpréteur de calcul basé sur une pile que je viens de concevoir en C11 pour Programming II, la partie du programme avant le premier espace imprime une erreur (autorisée dans les spécifications du challenge) et2016 !.imprime2016.

  • Brainfuck : affiche 1993 comme on le voit dans d'autres réponses. Le dernier étranger .est ignoré par beef.

Notez que l'affichage de la pile actuelle < stackpar Calc avec chaque ligne d'entrée non vide fait partie de l'invite >et ne fait pas partie de la sortie.


Où puis-je me renseigner sur Mouse-2002? Le github ne semble avoir aucune sorte de spécifications.
Wheat Wizard

@WheatWizard Le fichier README du référentiel contient des liens vers le MUSYS d'origine du Dr. Grogono et vers le redémarrage de David Simpson en 2002 , qui ensemble donnent une image satisfaisante .
chat

2

Microsoft Excel / Google Sheets, 22 octets

Fonction de feuille de travail anonyme qui n'utilise ni entrée ni sortie 1987dans Microsoft Excel et 2006Google Sheets

=IfError(M(2006),1987)

0

Perl 5 et Perl 6 (2 ans)

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

La première version de Perl 5 était en 1994

La première version officielle de Perl 6 était en 2015

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.