¿Cuándo se lanzó este lenguaje?


92

Tu desafío es simple. Debe escribir un programa que imprima en STDOUT o en un archivo el año en que se publicó el idioma en que está escrito. Debido a que esta es una tarea tan simple, el giro es que debe escribirse en tantos idiomas diferentes como sea posible.

Su puntaje es el número total de años diferentes que se imprimen correctamente.

Para cada idioma que use, debe

  • Especifique qué versión del idioma está utilizando. (Si hay varias versiones)

  • Especifique en qué año se lanzó por primera vez esa versión y

  • Proporcione un enlace a una página que pruebe la fecha de su versión / idioma.

Cualquiera de estos cuenta como prueba de fecha de lanzamiento, siempre que especifique el número de versión (si corresponde) y una fecha de lanzamiento.

  • Una página de wikipedia.

  • Una página de esolangs .

  • El sitio web oficial del idioma. Una página de Github o cuentas similares, siempre que tenga una fecha de lanzamiento. (La última confirmación no cuenta, a menos que haya un número de versión en algún lugar del código)

Si no hay varias versiones o lanzamientos de un idioma, solo use la fecha de lanzamiento inicial del idioma.

Versiones menores del mismo idioma no cuentan como diferentes idiomas, siempre y cuando ellos vienen de diferentes años y todavía producen la salida correcta. Es posible que no se utilice ningún órdenes internas que le dan la información (incluyendo la fecha de liberación) acerca de la versión actual de la lengua que está utilizando. Por ejemplo, este es un envío de Python no válido:

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

¡Cualquier presentación que imprima correctamente los años más distintivos gana!

Reglas

  • Cada programa debe imprimir el año de idioma y nada más . Se permite una nueva línea final (estilo Windows o estilo * nix).

  • Ningún programa puede tomar ninguna entrada.

  • En caso de empate, gana el código más corto anotado en bytes. Puede usar la codificación que desee para esto, pero todos los programas deben usar la misma codificación.

  • Cualquiera de los programas puede imprimir en STDERR, o lanzar advertencias y errores de tiempo de ejecución / tiempo de compilación siempre que la salida correcta todavía se imprima en STDOUT o en un archivo.

  • Diferentes lenguajes pueden usar diferentes métodos IO, pero la mayoría son programas completos (funciones no permitidas para este desafío) y siguen uno de nuestros métodos IO predeterminados permitidos .

¡Feliz golf poliglotante!


Dado que Pip no tiene una página de Wikipedia o Esolangs, solo tiene un GitHub y no ha tenido "versiones" en el sentido de la palabra GitHub, ¿no es elegible para usar en este desafío? (Tiene un número de versión, que se actualiza en cada confirmación.)
DLosc

1
@dlosc Bueno, no quiero excluir innecesariamente ningún idioma, pero quiero asegurarme de que la "fecha de lanzamiento" permanezca completamente objetiva. ¿Se te ocurren formas mejores de aplicar una fecha de lanzamiento que incluya más idiomas?
DJMcMayhem

44
(inserta casualmente el código de espacios en blanco para imprimir 2003 en básicamente cada envío)
Value Ink

8
"Es posible que no se utilice ningún órdenes internas que le dan información acerca de la actual versión del idioma que está utilizando." Mi énfasis ¿Puedo buscar la fecha de compilación en el archivo del intérprete?
Adám

2
No creo que este sea un duplicado en absoluto. Incluso si es así, este desafío debe aceptarse como el 'original' porque, a diferencia del otro, alienta a los usuarios a salir y aprender sobre lo que están usando.

Respuestas:


160

Una breve historia de los lenguajes de programación 2D: 16 (+2) años

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@

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

¿Mencioné que me gustan los lenguajes de programación 2D?

1993: Befunge

El lenguaje que (supuestamente, vea la última sección) comenzó todo. En Befunge, puede redirigir el flujo de control con <v>^, pero los espejos ahora ubicuos \y /todavía no eran una cosa. El intérprete Befunge utilizado en Anarchy Golf ignora los comandos desconocidos. Podemos usar esto para distinguir a la familia Befunge de la familia> <>. Por lo tanto, el código ejecutado por Befunge es este:

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

El "8991"empuja a los personajes individuales a la pila. ,,,imprime los tres primeros de ellos. Entonces ;se desconoce (que usaremos para distinguirlo de Befunge 98), 5-convierte el 8en un 3e ,imprime eso también antes de @finalizar el programa.

1997: extraño

Escribir esta parte de la solución me llevó probablemente tanto tiempo como escribir todas las demás y unirlas ...

Wierd solo conoce dos símbolos: el espacio y todo lo demás. El puntero de instrucciones intenta seguir el camino formado por los caracteres no espaciales, comenzando en diagonal desde la esquina superior izquierda y siempre tratando de ir lo más recto posible. Las curvas en el camino forman las instrucciones reales (con los grados del giro que determinan qué instrucción ejecutar). Entonces el código visto por Wierd es este:

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

En 1997la parte superior, en realidad no se ejecuta, pero Wierd nos permite leerlo desde el código fuente, que es mucho más corto que intentar construir los códigos de caracteres para los cuatro dígitos en sí (incluso si no lo parece ... .). No tengo ganas de desglosar todo esto, pero puedes ver claramente las cuatro secciones repetidas. Lo que esto hace es que primero almacenamos 1en la pila y luego cada una de esas cuatro secciones incrementa esto 1, y luego las ramas. La rama inferior empuja a otra1, recupera el carácter de origen en estas coordenadas y lo imprime, mientras que la rama superior se redirige a la siguiente sección. Quizás se pregunte por qué los extremos de las rutas son tan innecesariamente largos, pero eso se debe a que cuando Wierd llega al final de una ruta, intenta saltar a una ruta cercana antes de decidir que debería terminar la rama actual. Para evitar esto, necesitamos mover estos extremos lo suficientemente lejos de cualquier otro código.

1998: Befunge 98

Befunge recibió una actualización bastante conocida en 1998 con una especificación muy rigurosa que puede generalizarse a dimensiones arbitrarias (y creo que también a topologías arbitrarias). Sin embargo, es en gran medida compatible con versiones anteriores de Befunge, lo que hace que sea bastante fácil poliglotar los dos. Este Befunge todavía no tenía ningún espejo, por lo que el camino ejecutado es el mismo que para Befunge 93:

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

La diferencia es que Befunge 98 no ignora el ;. En cambio, actúa un poco como un comentario en el sentido de que todos los comandos hasta el siguiente ;se ignoran. De esta manera, nosotros no disminuye de que 8a 3e imprimir el 1998tal cual.

2001: Un Od del espacio ... PingPong

2001 es el año de Piet, pero realmente no tenía ganas de poliglotar un archivo de imagen con todos los demás programas, así que aquí hay un lenguaje 2D menos conocido. Parece que tiene muchas características (que no vamos a usar). Gracias a Sp3000 por encontrar el intérprete original (que es el único enlace muerto en la versión archivada del sitio web oficial).

PingPong es un poco inusual, ya que tiene sólo espejos y no hay <v>^redirectores. Entonces, esto se mueve a través del v19977inicio y luego golpea el espejo que lo envuelve al fondo. El código relevante es entonces:

v19977/

...

      /K:0:1:@

...

El código real es bastante simple: Kempuja 20, los dígitos se empujan, :imprime un número entero y @finaliza el programa.

2003: SNUSP

Este es el primer idioma donde las cosas se ponen un poco más fáciles, porque SNUSP admite un punto de entrada explícito. Ese punto de entrada está marcado por $. A juzgar por algunos artículos sobre esolangs, este lenguaje ha inspirado a muchos otros, pero desafortunadamente, al final del día, es solo un derivado de Brainfuck. Dicho esto, creo que la forma en que esto establece la celda actual a 48 es bastante clara (y fue robada del artículo de esolangs). Aquí está la parte relevante del código:

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

Son 24 +sy los espejos envían la IP a través de cada uno exactamente dos veces.

2004: Axo

Por alguna razón, este lenguaje hace que los <^>redirectores pero en lugar de la habitual vque utiliza %. Por lo tanto, esto solo se mueve a través de la primera línea. El código relevante es:

v19977/2{@{{4{\

Empujamos unos pocos dígitos para empezar, realizamos una división. Luego 2{imprime 2, @borra la pila. {{imprime dos (implícitos) 0s. 4{imprime 4y \finaliza el programa.

2005: ferrocarril

2005 fue una elección difícil. En ningún otro año encontré tantos idiomas 2D, y hay ADJUST y Archway, los cuales comienzan en la esquina inferior izquierda (lo que los habría hecho adiciones fáciles). Sin embargo, me gusta Rail y, dado que tiene un punto de entrada explícito, tampoco fue difícil de agregar. Rail busca una línea que comience $'main'y comienza a moverse hacia el sudeste desde $. Eso significa que el código relevante es:

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

Los \y -son solo pistas (sin operaciones). El [2005]es un literal de cadena que oimprime antes de #terminar el programa.

2006: BestFriends.js

Un Brainfuck bidimensional. Hay otro lenguaje interesante para este año llamado Black, que comienza en la coordenada (3,3)(basada en 1), lo que también habría hecho interesante el uso de esto en un políglota. Sin embargo, no pude encontrar un intérprete. Entonces tendremos que trabajar con otro derivado de BF en su lugar ...

Lo interesante de este es que no formatea la cuadrícula en líneas con saltos de línea como la mayoría de los otros lenguajes 2D. En |su lugar, se utiliza como separador de línea. Como no utilicé |ningún otro idioma, podría simplemente poner un |en la última línea, lo que hace que el resto del programa sea una sola línea en lo que respecta a BF.js. El código relevante es entonces esto (convirtiéndolo |en un salto de línea real):

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

BF.js no utiliza <v>^ni espejos. La única forma de redirigir el flujo de control es con la {}que gira la dirección IP en 90 °. Entonces esas llaves mueven la IP a la segunda línea. El resto es una solución simple de Brainfuck (no particularmente bien desarrollada) que establece una celda en 50(punto de código 2) y luego imprime 2006cambiando el valor un poco. @termina el programa

2008: BrainSpace 1.0

Para este año realmente quería usar DOBELA, que usa múltiples puntos de entrada y se parece a la hija amorosa de Fission y Ziim . Desafortunadamente, no he podido hacer que el intérprete trabaje. Así que aquí hay otro derivado de BF (el último, lo prometo).

A diferencia del último, este conoce ambos <v>^ y refleja, por lo que el código relevante es:

v
\'\
  8

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

Este no tiene el []bucle de estilo BF habitual (en cambio, tendría que formar un bucle 2D real), por lo que decidí codificarlo 50ya que de todos modos tenía una tonelada de caracteres seguidos de Wierd. Tenga en cuenta que el 'y 8se ignoran, el *es un trampolín condicional que podemos ignorar y el Oes Brainfuck .. El Xtermina el programa.

2009: > <>

Probablemente el Fungeoid más popular (que no sea Befunge) al menos alrededor de estas partes. > <> tiene ambos <v>^y espejos, pero también literales de cadena, por lo que el código ejecutado es este:

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

El literal de cadena sirve principalmente para omitir el \que usamos para BrainSpace 1.0, pero mientras lo hacemos, también podríamos empujar los primeros dos caracteres. oolos imprime Luego 100empuja tres dígitos, @empuja el de arriba hacia abajo e nimprime el de 0abajo. Hacemos lo mismo de nuevo con lo 590que imprime el 9. Si se pregunta por qué no solo imprimo 2009como está, espere a 2015. ;finaliza el programa.

2010: cardenal

Este era simple, porque tiene un punto de entrada explícito en %. Sin embargo, este crea 4 IP en todas las direcciones (de ahí el nombre del idioma, supongo), y necesitamos deshacernos de 3 de ellos. Aquí está el código relevante:

 x
x%"2010"x
 x

Bueno sí. (En Cardinal, el modo de cadena se imprime directamente en lugar de empujar a los personajes a una pila).

2011: RunR

Otro idioma con un punto de entrada explícito (por David Catt, quien ha creado algunos otros esolangs muy agradables), esta vez en S. Esto hace que el código relevante sea esta parte:

S1^2^2^6^8MAOUOAOOF

RunR es un poco interesante porque la mayoría de las operaciones funcionan con una especie de registro y los valores deben moverse a la pila explícitamente para las operaciones binarias. Los dígitos establecen los valores del registro en sí mismos y ^empujan el registro actual a la pila. Entonces Mes la multiplicación (el valor del registro se multiplica por la pila), Ues la resta, Aes la suma, Ose emite. Ftermina el programa

2012: Ropy

Al igual que Wierd, Ropy intenta seguir secciones de caracteres no espaciales, pero aquí las curvas no determinan los comandos. De hecho, resulta que Ropy es más similar a mi propio Laberinto en que la dirección elegida depende de la parte superior de la pila. Sin embargo, realmente no tenemos que preocuparnos por eso aquí, porque Ropy simplemente se mueve a lo largo de la primera línea:

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

Hay muchas cosas que podemos ignorar hasta el >. Todo lo que necesitamos saber es que la parte superior de la pila será en ese punto a 4y estará 2debajo.

>duplica el 4, /es la división convirtiéndola en una 1. Entonces empujamos 02. &&&une los cuatro primeros números de la pila en orden inverso, dando 2012. #lo emite. ????simplemente borra la pila porque, de lo contrario, la parte superior de la pila también se emite.

Un punto de interés es que la segunda 7en 19977Fue añadida a causa de viscosa. La /división en Ropy sí top / second(opuesta al orden habitual en muchos lenguajes basados ​​en pila), donde 7 / 9daría 0. Si tuviéramos un cero en la parte superior de la pila, Ropy haría algunas cosas salvajes con su dirección de movimiento, por lo que debemos presionar al otro 7para asegurarnos de que la parte superior de la pila siga siendo positiva y Ropy siga avanzando hacia el este.

2014: fisión

Con sus puntos de entrada explícitos, este es fácil. RDLUcrea átomos (punteros de instrucción) en la dirección correspondiente, por lo que el bit relevante es solo esto:

R"2014";

Tenga en cuenta que también hay un Ucódigo fuente en el código fuente, pero ese átomo finalmente llega a uno de *Wierd, lo que termina el programa (y este átomo tarda mucho más de lo Rnecesario para imprimir 2014).

2015: Gol> <>

La derivada> <> más potente de Sp3000. En gran medida es compatible con versiones anteriores>>, por lo que el código ejecutado sigue siendo:

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

Sin embargo, @se cambió la dirección de rotación de , que es el truco estándar para distinguir> <> y Gol> <> en políglotas, por lo que este se imprime en 15lugar de 09. De ahí la rareza en la segunda mitad del programa.

2016: CSL

CSL es bastante interesante porque los comandos no se ejecutan de inmediato. En cambio, cada comando se inserta en una pila de comandos ey Ese puede usar para ejecutar comandos desde él. El código relevante se convierte en:

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

Entonces, Eejecuta toda la pila de comandos, lo que significa que las cosas en frente se ejecutan a la inversa. Solo necesitamos mirar hacia arriba a *:

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

Los 1s se empujan a la pila de datos. +y -son decremento / incremento. Pimprime la parte superior de la pila. Luego *trata de multiplicar los dos valores superiores de la pila. Sin embargo, la pila está vacía, por lo que esto finaliza el programa.


En este punto, llegamos a los idiomas que se lanzaron después de que se publicó este desafío, por lo que realmente no los estoy contando para el puntaje, especialmente desde que los creé yo mismo (no teniendo en cuenta este desafío). Sin embargo, tienen algunas semánticas de movimiento IP novedosas, lo que facilitó su adaptación al políglota al tiempo que agrega algo interesante a esta muestra de lenguajes 2D.

2017: Alice

Alice fue diseñada para ser una Fungeoid rica en funciones. Una diferencia interesante para la mayoría de (pero no para todos) otros lenguajes 2D es que la IP puede moverse de forma ortogonal o diagonal. Cambiar entre estos también cambia la semántica de casi todos los comandos en el idioma. Además, Alice admite tanto los establecedores de <^>vdirección como los \/espejos tradicionales , pero los espejos tienen un comportamiento muy único en Alice (lo que facilita llevar la IP de Alice a una parte del código hasta ahora no utilizada).

Mientras que la mayoría de los lenguajes tratan \y son /como espejos en un ángulo de 45 °, y la IP como un rayo de luz que rebota en ella, Alice los trata como si tuvieran un ángulo de 67.5 ° (que está más cerca del ángulo de los glifos de barra) , y la IP también se mueve a través del espejo (de ahí el nombre del idioma). Debido a este ángulo, los espejos cambian de movimiento a lo largo de direcciones ortogonales o diagonales. Además, mientras está en modo Ordinal (es decir, mientras la IP se mueve a lo largo de las diagonales), la cuadrícula no se ajusta y, en cambio, la IP rebota en los bordes (mientras que en el modo Cardinal sí se ajusta).

Con todo, el código ejecutado por Alice es el siguiente:

v19
\ \

...

  >      "7102"4&o@

...

La IP comienza en la esquina superior izquierda como de costumbre, lo venvía al sur. Ahora \refleja la IP para moverse hacia el noroeste, donde inmediatamente rebota en el borde izquierdo de la cuadrícula (y se mueve hacia el noreste en su lugar). 1puede ignorarse, la IP rebota en el borde superior para moverse al sureste a continuación. Llegamos a otro \que refleja la IP del norte. 9también se puede ignorar y luego la IP se ajusta al final de la cuadrícula. Después de un par de líneas, lo redirigimos al este >para mayor comodidad. Luego "7102"empuja los puntos de código del 2017, 4&oimprime esos cuatro caracteres y @finaliza el programa.

2018: Wumpus

Wumpus es el primer lenguaje 2D en una cuadrícula triangular, lo que hace que el movimiento a través del código sea bastante diferente (y nuevamente nos permite llegar fácilmente a una parte no utilizada del código). Entonces, en lugar de pensar en cada personaje de la cuadrícula como un pequeño cuadrado, debes pensar en ellos como triángulos alternos hacia arriba y hacia abajo. La esquina superior izquierda siempre es un triángulo ascendente.

Wumpus no tiene orientadores como <^>v, pero tiene espejos \/. Sin embargo, debido a la cuadrícula triangular, estos funcionan de manera diferente a la mayoría de los otros idiomas. La IP rebota en ellos como un rayo de luz (como de costumbre), pero debe pensar que tienen un ángulo de 60 °. Entonces, una IP que se mueve hacia el este terminará moviéndose a lo largo del eje noroeste de la cuadrícula.

Como otra diferencia con la mayoría de los otros idiomas, los bordes de la cuadrícula no se ajustan, sino que la IP rebota en los bordes (como si esas celdas de borde contuvieran los espejos apropiados). Otro pequeño detalle divertido es que las diagonales a través de la cuadrícula triangular en realidad parecen escaleras en el código fuente.

Con eso en mente, el código ejecutado por Wumpus es el siguiente (donde he reemplazado espacios .por claridad:

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

El v19977son sólo basura que podemos ignorar. /envía la IP al noroeste, donde se mueve a través de 977(desde la derecha) nuevamente mientras rebota desde el borde superior. Luego, la IP se mueve hacia el suroeste a través de 2089y un montón de espacios, antes de que golpee el borde izquierdo para reflejarse nuevamente hacia el este. *También es basura. Luego, finalmente #2018empuja 2018, Oimprime y @finaliza el programa.


Años faltantes

Finalmente, algunas notas sobre años que no he cubierto.

Mientras investigaba idiomas 2D para encontrar los adecuados a lo largo de los años que podrían usarse en un políglota, descubrí que, contrariamente a la creencia popular, Befunge no fue el primer lenguaje 2D. Ese título parece estar en manos de Biota, que ya se creó en 1991. Desafortunadamente, el lenguaje no tiene ningún resultado, por lo que no pude usarlo para este desafío.

Por lo que puedo decir, no se crearon lenguajes 2D en 1992 y 1995. Eso deja unos años que no he cubierto:

  • 1994: se creó Orthagonal , independientemente de Befunge. Los idiomas son semánticamente bastante similares en realidad, pero Orthagonal en realidad no presenta el código fuente en 2D. En cambio, cada línea es una (x, y, instruction)tupla. Incluso obtuve la especificación del lenguaje y el intérprete original del creador Jeff Epler, pero al final, el hecho de que la sintaxis no sea 2D hizo que el lenguaje no fuera adecuado para este políglota.
  • 1996: Se creó Orthogonal , un sucesor de Orthagonal (creado por otra persona), pero a los efectos de este políglota sufre los mismos problemas que Orthagonal.
  • 1999: El único lenguaje que pude encontrar fue el autómata celular REDGREEN de Chris Pressey . Desafortunadamente, a diferencia de su predecesor RUBE, no parece tener ninguna semántica de E / S.
  • 2000: hay otro autómata celular de Chris Pressey llamado noit o 'mnain worb pero tampoco tiene E / S. También hay Numberix que no he intentado ejecutar y no estoy seguro de si ignoraría los caracteres no hexadecimales en el código fuente.
  • 2002: Hay Clunk sin E / S y ZT cuya especificación de lenguaje me aterroriza.
  • 2007: encontré tres idiomas aquí. Zetaplex está basado en imágenes (por lo que no) y RubE On Conveyor Belts parece requerir un encabezado con un formato bastante estricto que habría estropeado la primera línea del programa. También hay Cellbrain de Quintopia, pero también parece requerir un encabezado específico.
  • 2013: De nuevo, encontré tres idiomas. La pesca podría ser posible con una buena cantidad de reestructuración, pero requeriría que el programa comience con un muelle válido. Quipu , de memoria, es demasiado estricto sobre su sintaxis para permitir mucha poliglotación. Y Swordfish es otro miembro de la familia> <>, pero desafortunadamente no he podido encontrar un intérprete. De lo contrario, este probablemente sería bastante fácil de agregar.

Si alguien está interesado, aquí está la lista completa de lenguajes 2D implementados ordenados por años hasta donde pude encontrarlos (en el momento en que se publicó esta respuesta). Si falta alguno en esta lista, avíseme en el chat, ya que realmente estaría interesado en una lista completa.


8
Guau. Eso es realmente impresionante
DJMcMayhem

@MartinEnder ¿Ha considerado poner su lista de lenguajes de programación 2D por año en el propio Esolang?
doppelgreener

@doppelgreener No estoy completamente seguro de cómo encajaría allí. Esencialmente es solo la intersección de la categoría 2D con las diferentes categorías de año.
Martin Ender

Arreglaré la línea de encabezado de RubE On Conveyor Belts, si tienes una máquina del tiempo que me prestas para enseñarme a un niño de 13 años a leer un archivo sin saber el tamaño de antemano. (Esa es la única razón por la que hubo una línea de encabezado; en mi opinión, puede sentirse libre de no contar el tamaño del encabezado como parte del programa, aunque estrictamente hablando lo es)
user253751

1
@cairdcoinheringaahing Ahí tienes. Y Wumpus para 2018, mientras estaba en eso.
Martin Ender

117

15 años, Python

Versiones: 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 y 3.6.0a4 . Las versiones no vinculadas se pueden encontrar en la página de descargas .

La fecha de lanzamiento de 0.9.1 se puede encontrar aquí . Desafortunadamente, tuve que omitir muchos años debido a la falta de versiones antiguas y problemas de compilación en mi computadora. Los años representados son 1991, 2000-2002 y 2006-2016.

Probado en Arch Linux, utilizando las versiones comprimidas.

# 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
... Guau. Todavía me sorprende lo bien que algunas personas conocen sus idiomas. Es como mirar a través del tiempo ...
wizzwizz4

¿Python 0 admite probar / excepto?
OldBunny2800

8
@ OldBunny2800 Sorprendentemente, sí lo hace
Sp3000

54

Corto y dulce; los tres APL ( K , J201 , Dyalog 7.1 ) en 8 bytes

1993+1^2

1993 más ...

K: el primer entero 1 {0} excepto {2}, es decir, {0}; 1993 - ¡ Pruébalo en línea!

J: 1 2 = 1; 1994 - ¡ Pruébalo en línea!

APL: LCM (1,2) = 2; 1995 - ¡ Pruébalo en línea!


¡Muy agradable! ¿Crees que podrías combinar más idiomas de Iverson?
millas

@miles se vuelve duro con K, y APL2 / APLX / APL * PLUS son demasiado similares.
Adám

@miles ¿Conoces una versión J del 2000? Si es así, podemos hacerlo 2e3+?1con Dyalog 9.0.1.
Adám

Otra buena perspectiva es X^Ypara algunos números X e Y, como lo ^es la potencia en J, pero LCM en APL.
Adám

2
He encontrado una página de características sobre lanzamientos con sus fechas hasta 2000, jsoftware.com/release/status.htm
millas del

46

10 años, 12 idiomas, 2430 bytes

Esta respuesta es una colaboración entre mí y el usuario 1000000000 .

Una breve lista de idiomas:

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 

Aquí está el código:

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

Para encajar esto dentro de una respuesta, renunciaré a enlaces TIO completos y preferiré simplemente publicar un enlace a un intérprete válido donde el usuario pueda ingresar el código. Aquí hay un enlace de Pastebin para ese propósito.

Piet

El formato de archivo PPM , uno de los formatos de imagen que el intérprete de Piet que utilizamos puede leer, tiene una versión ASCII de texto sin formato. Con esto pudimos incrustar el código de otros idiomas como basura en el archivo de imagen leído por Piet y Braincopter.

La imagen se ve así:

Imagen en bruto

No toda la imagen es importante para Piet. Aquí hay una versión con una línea que resalta la ruta que Piet sigue a través del código:

Camino de Piet

A pesar de los métodos algo complicados para crear el programa, el programa en sí es bastante simple. A lo largo de la parte superior de la imagen, empuja 1 10 10 10 2a la pila; a lo largo del costado se multiplica tres veces y suma una vez. En la esquina inferior muestra el resultado (2001) y luego se detiene.

Braincopter

Braincopter es el otro lenguaje visual. También se basa en el mismo ppmarchivo de imagen para ejecutarse. Debido a restricciones muy severas en npiet, nuestro código de Braincopter solo puede usar un subconjunto de las operaciones originales de Braincopter. Estamos restringidos a usar colores que sean operaciones válidas en Piet. Esto elimina al -operador de Braincopter.

Aquí está el camino trazado por el código Braincopter:

Camino Braincopter

El programa Braincopter es un poco extraño debido a la falta de un -operador. Las paredes de cian y cian oscuro sirven para redirigir el puntero, pero aparte de eso, es idéntico al siguiente brainfuck:

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

Esto imprime 2005.

Paintfuck

Paintfuck es el tercer lenguaje de programación visual en nuestra lista, sin embargo, en lugar de tomar una imagen y generar texto, Paintfuck toma texto y genera una imagen.

Dado que Paintfuck ignora los caracteres irrelevantes como no operacionales, la mayor parte del código no es importante. La sección relevante del código es:

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

Si bien no son no-ops, los ws al final del código no hacen nada. Están allí para la porción de hierba de la solución. n, e, s, Y wse utilizan para mover alrededor de la imagen y *se utiliza para trazar un punto en cierto lugar. El programa genera:

Salida de paintfuck

Una versión más grande:

Salida de Painfuck, pero es más grande

Brainfuck

Al igual que Paintfuck, Brainfuck ignora a la mayoría de los personajes. Una vez más, aquí están los importantes:

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

La mayor parte de esto es aún más irrelevante por las circunstancias y simplemente son caracteres que algún otro idioma necesitaba. La versión más delgada de este código es:

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

Esto bonito simplemente imprime 1993.

Brainbool

Brainbool es muy similar a Brainfuck en su selección de personajes. La gran diferencia que permite que los dos se entrelacen es la falta de un -Brainbool. Los personajes importantes para Brainbool son:

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

Las salidas de Brainbool y brainfuck son mutuamente excluyentes. Brainbool oculta su salida en el segundo conjunto de []. Brainfuck se encuentra +++---antes de que llegue [a cero y hace que omita la salida, mientras que Brainbool solo ve +++que se establece en 1 y hace que pase por el bucle. Del mismo modo, Brainbool se establece en cero en el cuarto bucle, lo que hace que salte mientras Brainfuck ingresa al bucle con un valor de 49.

Como Brainbool no tiene salida decimal, genera el 2010 en binario:

11111011010

Fisión

La única parte del código que es importante para la fisión es:

R"2014";

La Rconvocatoria en un átomo que se mueve hacia la derecha, las "2014"impresiones 2014y la ;ejecución se detiene.

Befunge

Befunge solo pasa por los siguientes personajes:

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

El P3son necesarios para hacer una imagen de .ppm válida para Piet, y la acumulada empujar un 3 a la pila. el vse coloca para redirigir el puntero hacia abajo. Luego pasa a través 7de la 17utilizada para indicar el ancho de la imagen .ppm. El >redirecciona el puntero a la derecha. 7*multiplica la parte superior de la pila por 7 dejando 49 (valor ASCII de 1) en la parte superior de la pila. ::duplica la parte superior de la pila dos veces. El 1es emitido por ,. 8 +agrega 8 al incremento superior a ASCII 9. :,,salidas 9dos veces. 2 +incrementa el ASCII 1a un ASCII 3e ,imprime. Finalmente @termina el programa.

En general, se imprime 1993.

Espacio en blanco

Los espacios en blanco, como su nombre lo sugiere, solo usan espacios en blanco en sus programas. Esto es lo que ve el intérprete de espacios en blanco:

[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][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 mayor parte de lo que hace este código es intrascendente para la ejecución del programa (todas las líneas que contienen solo espacios simplemente empujan cero a la pila). La parte importante:

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

La primera línea empuja 2003 a la pila. Después de eso [Tab][LF][Space][Tab]imprime la parte superior de la pila (2003) como un número. Finalmente, los últimos tres avances de línea finalizan la ejecución del programa.

Hierba

Hierba ignora todos los caracteres hasta la primera wen el archivo y después de que todos los caracteres que no son w, Wo v. El intérprete de Grass dice:

wWWWwWWWWwv
wWWwWWWwv
wWWWwWWWWWwWWWWWWwwwWWWWWWWwWWWWWWwwwWWWWWWWWWWwWWWWWWWWWWwv
wWWWwWWWWwv
wWWwWWWwv
wWWwWWWwv
wWWwWWWwv
wWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwv

La primera línea define una función que agrega dos a lo que se pasa. La segunda línea define una función que agrega cuatro a lo que se pasa. El tercero define una función que imprime dos más el argumento, imprime el argumento dos veces, luego finalmente imprime siete más el argumento (Grass imprime caracteres basados ​​en el valor ASCII). Las líneas cuarta, quinta y sexta definen funciones que suman ocho, agregan 16, agregan 32 y agregan 64 a sus argumentos, respectivamente. La línea final define la función principal que toma el carácter w(el único número predefinido en Grass, valor ASCII 119) y le agrega 185 usando las funciones de agregar definidas en el programa, así como la función incorporada de agregar una. Grass envuelve los números en 256 y el resultado es 48 (correspondiente al carácter0) La función luego pasa esto a la función de la tercera línea que imprime 2007.

Estrellado

Estrellada ignora todo excepto por el espacio, +, *, ., ,, `, y '. Así, el intérprete estrellado solo ve:

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

Sin embargo, la etiqueta y las instrucciones de salto se utilizan para omitir secciones del código que podrían causar problemas si se ejecutan, por lo que el código es efectivamente esto:

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

Este código empuja dos a la pila, lo duplica dos veces y luego aparece e imprime uno de ellos como un número. Luego presiona cero, lo duplica e imprime ambos ceros como números. A continuación, aparece uno de los dos y saltos y luego empuja siete a la pila y aparece e imprime como un número. Finalmente, muestra los dos últimos en la pila y salta al final del programa.

Python 2.7.2

El código de Python sigue el formato:

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

donde se ...encuentra el resto de la basura.

La primera línea, P3v=""está allí porque para ser un .ppmarchivo válido , nuestro código debe comenzar con P3esto normalmente producirá un error, pero si le decimos a Python que es una declaración variable, lo ignorará.

A continuación tenemos que imprimir 2011. Sin embargo, debido a la forma en que .ppmestá formateado, no podemos incluir ningún número en esta línea. Para evitar esto, resumimos todos los valores ASCII de la cadena "~~~~~~~~~~~~~~~y"e imprimimos el resultado. Finalmente, usamos las comillas triples de un comentario de varias líneas para que Python ignore todo lo demás.

Brainflak

Guardamos lo mejor para el final.

Brainflak, como otros, ignora la mayoría de los personajes. Los personajes relevantes son:

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

El código de Python (([()])), empuja -1 a la pila dos veces, por lo que debe eliminarse antes de que el programa comience a procesarse.

Después de eso, Brainbool usa un []nilad que no hace nada y comienza el programa.

(((((()()()()){}){}){}){})({({}[<()>()])}{}<[[]]>)empuja 2016. El último [<><>]es restos de Befunge y Brainfuck pero afortunadamente no hace nada.

Cuando el programa termina, imprime el contenido de la pila, es decir, imprime 2016.


¡Brillante! Esperaba que Piet apareciera de alguna manera, incrustar cosas en un PPM es brillante. ¡Bien hecho!
cincodenada

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

38

5 años

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

El comentario de una sola línea //se agregó en C99, por lo que un compilador C89 leería ese código como c=-4.5 / /*comment*/ -4.5, que es el mismo que c=-4.5 / -4.5, mientras que un compilador C99 leería como c=-4.5 //comment/**/
- 4.5, que es lo mismo que c=-4.5 - 4.5.
La parte de Python es un comentario en el programa C.

2010: Python 2.7 y 2015: Python 3.5

Los documentos varían entre Python 3 y 2, este programa usa la longitud de los documentos para detectar la versión de Python.
La parte C está en una cadena en el programa Python.

1993 [2] : Brainfuck

Básicamente ignora todo lo que no lo es .,[]+-<>. Como el programa C tiene una función ,, tuve que hacer Brainfuck para descartar esa parte estableciendo el byte actual a 0.


  1. La especificación C89 se lanzó en 1990. Más información .
  2. No pude encontrar una fecha de lanzamiento oficial, así que creeré en Esolangs y Wikipedia .

44
Esto es genial, especialmente el -4.5/-4.5y -4.5-4.5. Mezclar dos versiones de cada uno de los dos idiomas principales es bastante impresionante, incluso sin
incluir

Esto no es codegolf, pero el a=en línea 2 es innecesario
TheInitializer

@TheInitializer sí, lo intenté sin a=y me dio un error, así que decidí mantenerlo. Sin embargo, no sé por qué dio un error, probablemente un error tipográfico.
betseg

@betseg si ese código solo se ejecuta en Python, debería funcionar.
TheInitializer

17

15 años, JavaScript

Dado que el ciclo de lanzamiento de JavaScript es muy inusual e inconsistente, voy a usar la implementación de Firefox. Avísame si esto no está permitido.

Versiones: 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 (todos probados en Windows 7)

Nota importante: Instalar y abrir Firefox 1.0.0 o cualquier versión posterior puede borrar todos los datos guardados de Firefox , incluidos el historial y los marcadores.

Además, a partir de 1.0.0, solo puede tener una versión abierta a la vez; intentar abrir otra versión da como resultado una nueva ventana de la versión ya abierta.

Instrucciones

Código

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

Puede agregar un año 16 incluyendo BF: <!--<<<<-[>+<-----]>--.++++++++..------.[-][-->antes del script y otro comentario HTML que contenga solo un ]después.
Steven H.

66
@StevenH. Um ... wow, nunca pensé en incluir esolangs en esto. Y esa es una forma realmente inteligente de incluir BF :-) Pero no estoy seguro de que realmente quiera ...
ETHproductions

13

6 idiomas, Turtlèd y brainfuck , Python 3.5, Python 2.7, > <> , Fisión

Turtlèd no ha existido antes de este año, y es tan fácilmente objetivo, incluso si las confirmaciones de github no cuentan, y BF tiene la evidencia de la página esolang, lanzada en 1993. Python 3.5 es 2015, 2.7 es 2010.> <> también tiene esa página , indicando 2009, al igual que Fission, 2014

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

Probablemente debería dar crédito a la página de constantes bf en esolangs ... ¯ \ _ (ツ) _ / ¯

Cómo funciona, tipo de:

Turtlèd:

Turtlèd realmente no hace nada por líneas que no sean las primeras:

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

/ es un nop

Brainfuck

Brainfuck ignora los caracteres que no están en sus comandos

ve -[>+<-----]>--.++++++++..------.(el último. es de la parte de python)

que solo hace cosas de Brainfuck, usa envoltura para dividir 255 por 5, luego resta 2 del resultado, imprime, incrementa 8 veces, imprime dos veces, disminuye 6 veces, imprime

Python 2 y 3

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

la longitud de los documentos para len varía entre las versiones, por lo que imprime el año para la versión 3 si es la longitud correcta, de lo contrario para la versión 2.

> <>

# refleja el puntero hacia atrás, por lo que golpea el / al otro lado de esa línea, pasa a través del espacio entre ellos elsey 2010luego vuelve a reflejar para presionar "2009", empujando 9,0,0,2 en la pila, luego imprime al revés .

Fisión

La fisión tiene reproductores, por lo que podemos tener una línea en la parte inferior que se ejecuta sola:

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

13

3 años, 3 idiomas: 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   */ 

Nombra el archivo date.mixal.

  1. C (1990) - Compila con advertencias e impresiones 1990a stdout.
  2. TeX (1982) - Compilar con tex date.mixal; imprime 1982en el archivo O.tex(ignore la salida DVI).
  3. MIXAL (1997) - Compile usando GNU Mix Development Kit mixasm date.mixaly ejecútelo con mixvm -r date.mix; imprime 1997en el dispositivo de teletipo (= stdout).

Los programas TeX y MIXAL están en un comentario en el programa C; el programa MIXAL viene después, \byepor lo que TeX lo ignora. Los programas C y TeX son un comentario en el programa MIXAL. Por alguna razón gccestá dispuesto a aceptar *main.


Me había olvidado de MIXAL, +1: D
cat

13

3 años (GolfScript, CJam, MATL), 24 23 bytes

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

Esto salidas

  • 2007 en GolfScript.

  • 2015 en CJam (versión 0.6.5).

  • 2016 en MATL (versión 19.2.0).

Explicación

Golfscript

Los tokens no definidos son noops en GolfScript . Las únicas partes del código que realmente hacen algo son:

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

Todo en %adelante es un comentario.

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

Corrección: en CJam después de %obtener [11 10]. No es que importe.
aditsu

@aditsu ¡Vaya! Gracias, editado
Luis Mendo

12

2 idiomas, Python 2.7 y Python 3.5

Python 2.7 fue lanzado en 2010 .

Python 3.5 fue lanzado en 2015 .

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

Esto se basa en PEP 238 donde el operador /cambió de división entera en Python 2 a división de punto flotante en Python 3.


3
Esto podría ser un desafío divertido si implica identificar errores / cambios en los operadores entre versiones
millas

1
@TuukkaX Me funciona tanto en Python 2.7.12 como en Python 3.5.1 en Fedora 24.
millas

1
¿No puedes hacer en su '2010'if 3/2>1else'2015'lugar?
Qwerp-Derp

15
O matemática estadounidense:print(int(2010+1/2*10))
Jakube

2
print('2015'if 1/2else'2010')es mejor
Cyoce

12

8 años, 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

"Cualquiera de los programas puede imprimir en STDERR, o lanzar advertencias y errores de tiempo de ejecución / tiempo de compilación siempre que la salida correcta todavía se imprima en STDOUT o en un archivo". Actualmente, la única visualización sin errores es el año, por lo que estamos cumpliendo con esta regla. Sin embargo, si desea escribir en la memoria, reemplácelo Disp (date)con (date)->I.

Referencias

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

9

5 años, vaya 1.0, 1.1, 1.4, 1.5, 1.6: 285 257 bytes

(1.2 se lanzó en 2013 como 1.1, 1.3 en 2014 como 1.4 y 1.7 en 2016 como 1.6).

No he probado esto en todas las versiones porque solo puedo acceder a 1.6, ¡pero debería funcionar en teoría! Los cambios de idioma probablemente habrían causado que el programa no se compilara, así que confié en los cambios estándar de la biblioteca.

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 y comentó:

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 años, 99 bytes / 77 caracteres

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

Nota: no estoy seguro si los años son correctos

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

Me tomó un tiempo descubrir cómo hacer que Python y JS trabajen juntos.

Explicación

v=1//1;"""conjuntos de variables va 1dividido por 1en Python, y 1en Javascript ( //se inicia un comentario en Javascript), y ;"""se inicia una cadena de varias líneas en Python. No ;se puede reemplazar con una nueva línea porque eso haría que Javascript dejara de funcionar.

1991/*"""es el resto de la cadena multilínea. El espacio es necesario para que> <> no empuje 1a la pila. Dado que el inicio de la cadena multilínea era parte de un comentario en Javascript, imprime 1991e inicia un comentario multilínea.

for i in[0]:print 2010#🔟😃😇🔟😗➕➕😨en Python, es un bucle for que itera la lista [0]y se ejecuta print 2010. El comentario es solo el código de Emotinomicon (ignora todo lo que no es un emoji o una cadena). En> <>, se fempuja ( ) 15 a la pila.

El bucle for no se puede eliminar porque la IP de> <> está bajando en la columna 1 y pno es un comando válido en> <>. Tampoco puede reemplazarlo por una ifdeclaración, porque ies el comando para tomar entrada en> <>.

""" es el comienzo de una cadena multilínea.

" es parte de la cadena multilínea, necesaria para cerrar la cadena que abrimos en> <> (la primera comilla de la línea anterior inició una cadena en> <>).

>9002nnnn;en> <>, cambia de dirección IP a la derecha, empuja 9, 0, 0y 2, la salida de éstos como números y termina el programa.

"""#*/en Python, finaliza la cadena multilínea e inicia un comentario. En Javascript, */finaliza el comentario multilínea.


Versión de bonificación con Gol> <>:

5 idiomas, 4 años, 118114 bytes / 96 92 caracteres

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

Explicación²

IP comienza en la esquina superior izquierda, hacia la derecha. El vhace que baje.

fempuja 15.

" comienza la cadena.

` se usa para escapar de caracteres, algo que> <> no tiene.

"debería cerrar la cadena, pero la usamos `, por lo que no lo hará.

> parte de la cuerda.

" termina la cuerda

>5102nnnn;Es el código real. >IP hace que el ir a la derecha, 5102empuja 5, 1, 0y 2, y nnnn;imprime los números y termina el programa.


Errores de Python en los caracteres unicode sin el encabezado adecuado. ( 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 Guarde el archivo como UTF-8
acrolith el

7

7 años, 8 navegadores

No son exactamente las fechas de lanzamiento del lenguaje porque css en realidad no tiene lanzamientos, sino versiones de navegador (¿podría pensarse como versiones de compilador tal vez?)

Para los siguientes navegadores, esto imprime el nombre del navegador, la versión y la fecha de lanzamiento y nada más. Imprime lo mismo para algunas versiones posteriores, (verá que el cromo es una versión tardía en las capturas de pantalla porque es difícil descargar versiones antiguas de Chrome por número de versión)

Podría imprimir el número de versión que utilicé pero preferí mostrar la primera versión donde se introduce la función utilizada.

  • IE6
  • IE7
  • IE8
  • IE9 (no probado, no tengo un IE9 alrededor)
  • Firefox 4
  • Firefox 3.6
  • Cromo 18
  • Chrome 21
  • Navegadores modernos

FF3.6 FF4 Cromo19 Cromo22 IE8-peculiaridades Compatibilidad con 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 en realidad tiene lanzamientos. Hay 1.0, 2.0, 2.1, 3.0 y 4.0. La pregunta incluso decía que usaba Wikipedia o el sitio del idioma como prueba de la fecha de lanzamiento, por lo que debería haberlo verificado. Fecha de lanzamiento inicial: 17 de diciembre de 1996
mbomb007

No lo hace con el sentido de que no hay implementación de ninguno de esos niveles (ni siquiera se llaman lanzamientos, porque no lo son, deberías haber verificado el enlace que publicaste). Y CSS3 y 4 ni siquiera tienen una fecha de lanzamiento porque se están creando sobre la marcha, y van y vienen entre borradores, candidatos y recomendaciones. Además, ningún navegador implementa un nivel específico del 100% y 0% del siguiente nivel, por lo que la mejor fecha que puede encontrar es la fecha de lanzamiento del navegador.
qwazix

Entonces, el idioma que seleccionó no cumple con las especificaciones requeridas para este desafío. No en la forma en que intentas hacerlo. Su implementación define un idioma, por lo que debe elegir un navegador y seguir con él, utilizando diferentes versiones del navegador , no navegadores diferentes. Sin embargo, todavía le preguntaría a la OP.
mbomb007

El OP no dijo que las diferentes versiones cuentan como idiomas diferentes, solo dijeron que imprimieran el año de lanzamiento de la versión de idioma utilizada, para diferentes idiomas . Sin embargo, ~ la mitad de las respuestas se basaron en el supuesto de que las diferentes versiones son lo suficientemente diferentes como para ser contadas como idiomas. Si python 2.5.0 y 2.5.1 se consideran lo suficientemente diferentes, no puedo entender cómo IE y Chrome no lo son.
qwazix

6

3 años, 89 bytes

Python 2, JavaScript (ES6) y Perl

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

El primero evalse ejecutará 1en Python 2 y print=_=>console.log(1995)en JavaScript y Perl usando la función de división de enteros de Python 2. Esto crea una printfunción en JavaScript y Perl solo se preocupa silenciosamente por los errores de sintaxis y continúa independientemente.

El segundo se evalbasa en que Perl interpola la variable $$(PID actual) en la cadena, lo cual será cierto cuando se compara (usando el >operador) con "0"(Python requiere una cadena en esa comparación, mientras que Perl se convierte implícitamente en entero).

Podría haber tenido cuernos de zapatos en más idiomas, pero quería tener una solución que no abusara de los comentarios y que solo funcionara en idiomas 'regulares'.

Usé esta página de Wikipedia para recuperar los años para usar.


2

3 idiomas, 3 años

Una respuesta ad-hoc para divertirse.

2002!~+++++++[<+++++++>-]<[.++++++++..------.[-]] 2016 !.
  • Mouse-2002 : todo lo que~sigue es un comentario, y la primera parte, que también podría escribirseC0U!!!, imprime2002.

  • esta confirmación previa al desafío de Calc : que es un intérprete de calculadora basado en pila que acabo de diseñar en C11 para la Programación II, la parte del programa antes del primer espacio imprime un error (permitido bajo la especificación de desafío) e2016 !.imprime2016.

  • Brainfuck : imprime 1993 como se ve en otras respuestas. El extraño final .es ignorado por beef.

Tenga en cuenta que la visualización de Calc de la pila actual < stackcon cada línea de entrada no vacía es parte de la solicitud >, no parte de la salida.


¿Dónde puedo encontrar información sobre Mouse-2002? El github no parece tener ningún tipo de especificaciones.
Wheat Wizard

@WheatWizard El archivo README del repositorio contiene enlaces al MUSYS original del Dr. Grogono y al reinicio de 2002 de David Simpson , que juntos pintan una imagen correcta .
gato

2

Hojas de cálculo de Microsoft Excel / Google, 22 bytes

Función de hoja de trabajo anónima que no toma entradas y salidas 1987en Microsoft Excel y 2006en Hojas de cálculo de Google

=IfError(M(2006),1987)

0

Perl 5 y Perl 6 (2 años)

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

El primer lanzamiento de Perl 5 fue en 1994

El primer lanzamiento oficial de Perl 6 fue en 2015

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.