Quando esse idioma foi lançado?


92

Seu desafio é simples. Você precisa escrever um programa que imprima em STDOUT ou em um arquivo no ano em que o idioma em que foi gravado foi lançado. Por ser uma tarefa tão simples, a questão é que ela deve ser escrita no maior número possível de idiomas.

Sua pontuação é o número total de anos diferentes que são impressos corretamente.

Para cada idioma que você usa, você deve

  • Especifique qual versão do idioma você está usando. (Se houver várias versões)

  • Especifique em que ano a versão foi lançada pela primeira vez e

  • Forneça um link para uma página que comprove a data da sua versão / idioma.

Qualquer um deles conta como prova da data de lançamento, desde que especifique o número da versão (se aplicável) e uma data de lançamento.

  • Uma página da Wikipedia.

  • Uma página esolangs .

  • O site oficial do idioma. Uma página do github ou similar conta, desde que tenha uma data de lançamento. (A consolidação mais recente não conta, a menos que haja um número de versão em algum lugar do código)

Se não houver várias versões ou lançamentos de um idioma, basta usar a data de lançamento inicial do idioma.

Versões menores da mesma língua não contam como diferentes idiomas, contanto que eles vêm de diferentes anos e ainda produzir a saída correta. Você não pode usar nenhum built-in que forneça informações (incluindo data de lançamento) sobre a versão atual do idioma que você está usando. Por exemplo, este é um envio de python invá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)
...

Qualquer envio que imprima corretamente os anos mais distintos vence!

Regras

  • Cada programa deve imprimir o ano do idioma e nada mais . Uma nova linha à direita (estilo Windows ou * estilo nix) é permitida.

  • Nenhum programa pode receber qualquer entrada.

  • Em caso de empate, o código mais curto marcado em bytes vence. Você pode usar a codificação que desejar para isso, mas todos os programas devem usar a mesma codificação.

  • Qualquer um dos programas pode imprimir em STDERR ou emitir erros e avisos em tempo de execução / compilação , desde que a saída correta ainda seja impressa em STDOUT ou em um arquivo.

  • Idiomas diferentes podem usar métodos de E / S diferentes, mas todos são programas completos (funções não permitidas para esse desafio) e seguem um dos métodos de E / S padrão permitidos .

Feliz golfe poliglota!


Como o Pip não possui uma página da Wikipedia ou da Esolangs, apenas possui um GitHub e não teve nenhum "release" no sentido GitHub da palavra, é inelegível para uso neste desafio? (Ele tem um número de versão, que é atualizado a cada commit.)
DLosc

1
@ dlosc Bem, não quero excluir desnecessariamente nenhum idioma, mas quero garantir que a "data de lançamento" permaneça completamente objetiva. Você consegue pensar em maneiras melhores de aplicar uma data de lançamento que inclua mais idiomas?
DJMcMayhem

4
(casualmente insere código de espaço em branco para imprimir 2.003 em basicamente todos os apresentação única)
Valor Ink

8
"Você não pode usar nenhum built-in que forneça informações sobre a versão atual do idioma que você está usando." Minha ênfase. Posso procurar a data da compilação no arquivo do intérprete?
Adám 29/09/16

2
Eu não acho que este seja um duplicado. Mesmo que seja, esse desafio deve ser aceito como o 'original', porque, ao contrário do outro, incentiva os usuários a sair e aprender sobre o que estão usando.

Respostas:


159

Uma Breve História das Linguagens de Programação 2D: 16 (+2) anos

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@

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

Eu mencionei que gosto de linguagens de programação 2D?

1993: Befunge

O idioma que (supostamente, consulte a última seção) iniciou tudo. No Befunge, você pode redirecionar o fluxo de controle com <v>^, mas o agora onipresente espelha \e /não era uma coisa ainda. O intérprete Befunge usado no Anarchy Golf ignora comandos desconhecidos. Podemos usar isso para distinguir a família Befunge da família> <>. Portanto, o código executado pelo Befunge é o seguinte:

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

O "8991"empurra os caracteres individuais na pilha. ,,,imprime os três primeiros. Então ;é desconhecido (que usaremos para diferenciá-lo do Befunge 98), 5-transforma o 8em a 3e ,imprime isso também antes de @finalizar o programa.

1997: Wierd

Escrever essa parte da solução provavelmente levou tanto tempo quanto escrever todas as outras e encaixá-las ...

Wierd conhece apenas dois símbolos: espaço e tudo mais. O ponteiro de instruções tenta seguir o caminho formado pelos caracteres não espaciais, começando na diagonal a partir do canto superior esquerdo e sempre tentando seguir o mais reto possível. As dobras no caminho formam as instruções reais (com os graus do turno determinando qual instrução executar). Portanto, o código visto por Wierd é o seguinte:

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

Na 1997parte superior, na verdade, não é executado, mas o Wierd nos permite lê-lo a partir do código fonte, que é muito mais curto do que tentar construir os códigos de caracteres para os quatro dígitos em si (mesmo que não pareça. .). Eu não sinto vontade de quebrar tudo isso, mas você pode ver claramente as quatro seções repetidas. O que isso faz é que primeiro armazenemos 1na pilha e, em seguida, cada uma dessas quatro seções a incrementa 1e depois ramifique. O ramo inferior empurra outro1, recupera o caractere de origem nessas coordenadas e o imprime, enquanto a ramificação superior é redirecionada para a próxima seção. Você pode se perguntar por que os finais dos caminhos são desnecessariamente longos, mas isso ocorre quando o Wierd atinge o final de um caminho e tenta pular para um caminho próximo antes de decidir que deve encerrar a ramificação atual. Para evitar isso, precisamos mover essas extremidades suficientemente longe de qualquer outro código.

1998: Befunge 98

Befunge recebeu uma atualização bastante conhecida em 1998 com uma especificação muito rigorosa que pode ser generalizada para dimensões arbitrárias (e acho que também topologias arbitrárias). É amplamente compatível com o Befunge, o que facilita bastante a poliglota dos dois. Como o Befunge ainda não tinha espelhos, o caminho executado é o mesmo do Befunge 93:

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

A diferença é que o Befunge 98 não ignora o ;. Em vez disso, age como um comentário, em que todos os comandos até o próximo ;são ignorados. Desta forma, nós não diminuir que 8a 3e imprimir o 1998como é.

2001: Um Espaço Od ... PingPong

2001 é o ano de Piet, mas eu realmente não estava com vontade de poliglotar um arquivo de imagem com todos os outros programas, então aqui está uma linguagem 2D menos conhecida. Parece ter muitos recursos (que não vamos usar). Agradecemos ao Sp3000 por encontrar o intérprete original (que é o único link morto na versão arquivada do site oficial).

O PingPong é um tanto incomum, pois possui apenas espelhos e nenhum <v>^redirecionador. Então isso se move através do v19977início e depois atinge o espelho que o envolve até o fundo. O código relevante é então:

v19977/

...

      /K:0:1:@

...

O código atual é bastante simples: Kpressiona 20, os dígitos se pressionam, :imprimem um número inteiro e @finalizam o programa.

2003: SNUSP

Este é o primeiro idioma em que as coisas ficam um pouco mais fáceis, porque o SNUSP suporta um ponto de entrada explícito. Esse ponto de entrada é marcado por $. A julgar por alguns artigos sobre esolangs, essa linguagem inspirou vários outros, mas, infelizmente, no final do dia, é apenas um derivado do Brainfuck. Dito isto, acho que a maneira como isso define a célula atual para 48 é bastante clara (e foi roubada do artigo da esolangs). Aqui está a parte relevante do código:

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

São 24 +segundos e os espelhos enviam o IP através de cada um exatamente duas vezes.

2004: Axo

Por alguma razão, essa linguagem não têm os <^>redirecionadores mas em vez dos habituais vele usa %. Portanto, isso apenas se move pela primeira linha. O código relevante é:

v19977/2{@{{4{\

Nós pressionamos alguns dígitos para começar, realizamos uma divisão. Em seguida, 2{imprime o 2, @limpa a pilha. {{imprime dois (implícitos) 0s. 4{imprime 4e \finaliza o programa.

2005: Rail

2005 foi uma escolha difícil. Em nenhum outro ano eu encontrei tantas linguagens 2D, e há ADJUST e Archway, as quais começam no canto inferior esquerdo (o que as tornaria adições fáceis). Mas eu gosto do Rail e, como ele tem um ponto de entrada explícito, também não foi difícil de adicionar. O Rail procura um início de linha $'main'e começa a se mover a sudeste a partir do $. Isso significa que o código relevante é:

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

As \e -são apenas faixas (no-ops). O [2005]é uma string literal que é oimpressa antes de #finalizar o programa.

2006: BestFriends.js

Um Brainfuck bidimensional. Há outra linguagem interessante para este ano chamada Black, que começa na coordenada (3,3)(com base em 1) que também tornaria interessante o uso em poliglotas. Não consegui encontrar um intérprete. Então, teremos que trabalhar com outro derivado de BF ...

O interessante sobre este é que ele não formata a grade em linhas com feeds de linha como a maioria das outras linguagens 2D. Em vez disso, |é usado como o separador de linhas. Como não usei |em nenhum outro idioma, eu poderia simplesmente colocar um |na última linha, o que torna o resto do programa uma única linha no que diz respeito ao BF.js. O código relevante é este (transformando |em um avanço de linha real):

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

O BF.js não usa <v>^nem espelhos. As únicas maneiras de redirecionar o fluxo de controle são com as {}quais gire a direção do IP em 90 °. Portanto, esses aparelhos movem o IP para a segunda linha. O restante é uma solução simples da Brainfuck (não particularmente bem treinada) que define uma célula para 50(código do ponto 2) e depois imprime 2006deslocando o valor um pouco. @finaliza o programa.

2008: BrainSpace 1.0

Para este ano, eu realmente queria usar o DOBELA, que usa vários pontos de entrada e se parece com o lovechild de Fission e Ziim . Infelizmente, não consegui fazer o intérprete funcionar. Então, aqui está outro derivado de BF (o último, prometo).

Ao contrário do último, este conhece os dois <v>^ e os espelhos, portanto, o código relevante é:

v
\'\
  8

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

Este não possui o []loop de estilo BF usual (em vez disso, você precisaria formar um loop 2D real), então eu decidi codificar o código uma 50vez que eu tinha uma tonelada de caracteres seguidos do Wierd de qualquer maneira. Observe que o 'e 8são ignorados, o *é um trampolim condicional que podemos ignorar e o do OBrainfuck .. O Xfinaliza o programa.

2009: > <>

Provavelmente o Fungeoid mais popular (além do próprio Befunge) pelo menos nessas partes. > <> possui dois <v>^e espelhos, mas também literais de string, portanto, o código executado é este:

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

A string literal serve principalmente para pular a \que usamos para o BrainSpace 1.0, mas enquanto estamos nisso, é melhor empurrar os dois primeiros caracteres. ooos imprime. Em seguida, 100pressiona três dígitos, @empurra o de cima para baixo e nimprime o de 0baixo. Fazemos a mesma coisa novamente com a 590qual imprime o arquivo 9. Se você está se perguntando por que não estou imprimindo 2009como está, aguarde 2015. ;finaliza o programa.

2010: Cardeal

Este foi simples, porque tem um ponto de entrada explícito em %. No entanto, este cria 4 IPs em todas as direções (daí o nome do idioma, suponho), e precisamos nos livrar de 3 deles. Aqui está o código relevante:

 x
x%"2010"x
 x

Bem, sim. (No Cardinal, o modo de seqüência de caracteres é impresso diretamente em vez de colocar os caracteres em uma pilha.)

2011: RunR

Outro idioma com um ponto de entrada explícito (de David Catt, que criou alguns outros esolangs muito legais), desta vez em S. Isso torna o código relevante nesta parte:

S1^2^2^6^8MAOUOAOOF

RunR é um pouco interessante porque a maioria das operações funciona com uma espécie de registro e os valores precisam ser movidos para a pilha explicitamente para operações binárias. Os dígitos definem os valores do registro para si mesmos e ^empurram o registro atual para a pilha. Então Mé a multiplicação (o valor dos tempos de registro saltou da pilha), Ué a subtração, a Aadição e a Osaída. Ffinaliza o programa.

2012: Ropy

Como o Wierd, o Ropy tenta seguir seções de caracteres não espaciais, mas aqui as dobras não determinam os comandos. De fato, acontece que o Ropy é mais parecido com o meu próprio labirinto , pois a direção escolhida depende do topo da pilha. No entanto, não precisamos nos preocupar com isso aqui, porque o Ropy apenas se move na primeira linha:

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

Há muitas coisas que podemos ignorar até o >. Tudo o que precisamos saber é que o topo da pilha será nesse ponto a 4e haverá 2abaixo.

>duplica a 4, /é a divisão transformando-o em um 1. Então nós empurramos 02. &&&une os quatro primeiros números da pilha na ordem inversa, dando 2012. #gera isso. ????apenas limpa a pilha porque, caso contrário, a parte superior da pilha também é impressa.

Um ponto de interesse é que o segundo 7em 19977foi adicionado por causa da viscosa. A /divisão no Ropy sim top / second(oposta à ordem usual em muitos idiomas baseados em pilha), onde 7 / 9daria 0. Se tivéssemos um zero no topo da pilha, o Ropy faria algumas coisas selvagens com sua direção de movimento, então precisamos pressionar o outro 7para garantir que o topo da pilha permaneça positivo e o Ropy continue se movendo para o leste.

2014: Fissão

Com seus pontos de entrada explícitos, este é fácil. RDLUcrie átomos (ponteiros de instrução) na direção correspondente; portanto, o bit relevante é exatamente isso:

R"2014";

Observe que também existe um Uno código fonte, mas esse átomo acaba atingindo um dos *do Wierd, que finaliza o programa (e esse átomo leva muito mais tempo do que o Rnecessário para imprimir 2014).

2015: Gol> <>

O derivado> <> mais poderoso do Sp3000. É amplamente compatível com> <>, portanto o código executado ainda é:

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

No entanto, a direção de rotação de @foi alterada, que é o truque padrão para distinguir> <> e Gol> <> em poliglotas, portanto, este é impresso em 15vez de 09. Daí a estranheza na segunda metade do programa.

2016: CSL

O CSL é bastante interessante, pois os comandos não são executados imediatamente. Em vez disso, cada comando é enviado para uma pilha de comandos ee Epode ser usado para executar comandos a partir dele. O código relevante se torna:

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

Portanto, ele Eexecuta toda a pilha de comandos, o que significa que as coisas à sua frente são executadas ao contrário. Precisamos apenas olhar para *:

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

Eles 1se empurram para a pilha de dados. +e -são decremento / incremento. Pimprime a parte superior da pilha. Em seguida, *tenta multiplicar os dois principais valores da pilha. No entanto, a pilha está vazia, então isso encerra o programa.


Neste ponto, chegamos aos idiomas que foram lançados após o lançamento deste desafio, então não os estou contando para a pontuação, especialmente desde que eu os criei (mas não com esse desafio em mente). No entanto, eles têm algumas novas semânticas de movimento de IP, o que facilitou sua inserção no poliglota, além de adicionar algo interessante a essa vitrine de linguagens 2D.

2017: Alice

Alice foi projetada para ser uma Fungeoid rica em recursos. Uma diferença interessante para a maioria das (mas não todas) outras linguagens 2D é que o IP pode se mover ortogonalmente ou diagonalmente. Alternar entre eles também altera a semântica de quase todos os comandos no idioma. Além disso, Alice suporta os <^>vsetters de direção e \/espelhos tradicionais , mas os espelhos têm um comportamento muito único em Alice (o que facilita levar o IP da Alice a uma parte do código não utilizada até o momento).

Enquanto a maioria dos idiomas trata \e /como se fossem espelhos em um ângulo de 45 °, e o IP como um raio de luz refletido nele, Alice os trata como tendo um ângulo de 67,5 ° (que é mais próximo do ângulo dos glifos de barra reais) , e o IP também se move através do espelho (daí o nome do idioma). Devido a esse ângulo, os espelhos alternam entre os movimentos nas direções ortogonais ou diagonais. Além disso, enquanto no modo Ordinal (ou seja, enquanto o IP se move ao longo das diagonais), a grade não quebra e, em vez disso, o IP ricocheteia nas bordas (enquanto no modo Cardinal ele quebra).

Em suma, o código executado por Alice é o seguinte:

v19
\ \

...

  >      "7102"4&o@

...

O IP começa no canto superior esquerdo, como de costume, venvia para o sul. Agora \, o IP reflete o deslocamento para o noroeste, onde imediatamente salta da borda esquerda da grade (e se move para o nordeste). 1pode ser ignorado, o IP ricocheteia na borda superior para avançar para o sudeste. Batemos em outro \que reflete o norte da PI. 9também pode ser ignorado e, em seguida, o IP passa para a parte inferior da grade. Depois de algumas linhas, o redirecionamos para o leste >por conveniência. Em seguida, "7102"pressiona os pontos de código do 2017, 4&oimprime esses quatro caracteres e @finaliza o programa.

2018: Wumpus

O Wumpus é a primeira linguagem 2D em uma grade triangular, que torna o movimento pelo código bastante diferente (e novamente nos permite alcançar facilmente uma parte não utilizada do código). Portanto, em vez de pensar em cada caractere da grade como um pequeno quadrado, pense neles como triângulos alternados para cima e para baixo. O canto superior esquerdo é sempre um triângulo para cima.

O Wumpus não tem setters de direção <^>v, mas tem espelhos \/. No entanto, devido à grade triangular, eles funcionam de maneira diferente da maioria dos outros idiomas. O IP é refletido neles como um raio de luz (como de costume), mas você deve pensar neles como tendo um ângulo de 60 °. Portanto, um IP que se move para leste acaba se movendo ao longo do eixo noroeste da grade.

Como outra diferença para a maioria dos outros idiomas, as bordas da grade não são quebradas, mas o IP ricocheteia nas bordas (como se essas células de borda contivessem os espelhos apropriados). Outro pequeno detalhe divertido é que as diagonais na grade triangular realmente parecem escadas no código fonte.

Com isso em mente, o código executado pelo Wumpus é o seguinte (onde eu substituí os espaços .por uma questão de clareza:

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

O v19977são apenas lixo que podemos ignorar. /envia o IP para noroeste, onde ele se move pela 977(da direita) novamente enquanto salta pela borda superior. Em seguida, o IP se move para sudoeste através dos 2089vários espaços, antes de atingir a borda esquerda para refletir novamente no leste. *também é lixo. Finalmente , #2018empurra 2018, Oimprime e @finaliza o programa.


Anos desaparecidos

Finalmente, algumas notas sobre anos que não cobri.

Ao pesquisar linguagens 2D para encontrar linguagens adequadas ao longo dos anos que poderiam ser usadas em uma poliglota, descobri que, ao contrário da crença popular, o Befunge não era a primeira linguagem 2D. Esse título parece pertencer à Biota, que já foi criada em 1991. Infelizmente, o idioma não tem saída, então não pude usá-lo para esse desafio.

Até onde eu sei, nenhuma linguagem 2D foi criada em 1992 e 1995. Isso deixa alguns anos que eu não cobri:

  • 1994: Orthagonal foi criado, independentemente da Befunge. As linguagens são semanticamente bastante semelhantes, na verdade, mas Orthagonal não apresenta o código fonte em 2D. Em vez disso, cada linha é uma (x, y, instruction)tupla. Até obtive a especificação da linguagem e o intérprete original do criador Jeff Epler, mas, no final, o fato de a sintaxe não ser 2D tornou a linguagem inadequada para esse poliglota.
  • 1996: Orthogonal , um sucessor de Orthagonal (criado por outra pessoa) foi criado, mas, para os propósitos deste poliglota, sofre os mesmos problemas que Orthagonal.
  • 1999: A única linguagem que pude encontrar foi o autômato celular de Chris Pressey, REDGREEN . Infelizmente, ao contrário de seu antecessor RUBE, ele não parece ter nenhuma semântica de E / S.
  • 2000: Há outro autômato celular do Chris Pressey chamado noit o 'mnain worb, mas ele também não possui E / S. Há também o Numberix que eu não tentei executar e não tenho certeza se ele ignoraria caracteres não-hexadecimais no código-fonte.
  • 2002: Existe o Clunk sem E / S e ZT cuja especificação de linguagem me aterroriza.
  • 2007: Encontrei três idiomas aqui. O Zetaplex é baseado em imagem (não é o caso) e o RubE On Conveyor Belts parece exigir um cabeçalho com um formato bastante estrito, o que prejudicaria a primeira linha do programa. Há também o Cellbrain da Quintopia, mas também parece exigir um cabeçalho específico.
  • 2013: Mais uma vez, encontrei três idiomas. A pesca pode ser possível com uma boa quantidade de reestruturação, mas exigiria que o programa iniciasse com uma doca válida. Quipu , da memória, é muito rígido quanto à sua sintaxe para permitir muita poliglota. E Swordfish é outro membro da família> <>, mas infelizmente não consegui encontrar um intérprete. Caso contrário, este provavelmente seria bastante fácil de adicionar.

Se alguém estiver interessado, aqui está a lista completa das linguagens 2D implementadas, ordenadas por anos , tanto quanto pude encontrá-las (no momento em que essa resposta foi publicada). Se houver alguma falta nessa lista, entre em contato no chat, pois eu estaria realmente interessado em uma lista completa.


8
Uau. Isso é realmente impressionante
DJMcMayhem

@MartinEnder Você já pensou em colocar sua lista de linguagens de programação 2D por ano na própria Esolang?
Doppelgreener 02/10

@doppelgreener Não tenho muita certeza de como isso se encaixaria lá. É essencialmente apenas a interseção da categoria 2D com as várias categorias de ano.
Martin Ender

Vou consertar a linha de cabeçalho RubE On Conveyor Belts, se você tiver uma máquina do tempo, posso pedir emprestado para me ensinar aos 13 anos como ler um arquivo sem saber o tamanho antecipadamente. (Essa é a única razão pela qual não havia uma linha de cabeçalho; IMO você pode se sentir livre para não contar o cabeçalho de tamanho, como parte do programa, embora estritamente falando é)
immibis

1
@cairdcoinheringaahing Lá vai você. E Wumpus para 2018, enquanto eu estava nisso.
Martin Ender

117

15 anos, Python

Versões: 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 e 3.6.0a4 . Versões não vinculadas podem ser encontradas na página de downloads .

A data de lançamento da 0.9.1 pode ser encontrada aqui . Infelizmente, tive que pular muitos anos devido à falta de versões antigas e problemas de compilação no meu computador. Os anos representados são 1991, 2000-2002 e 2006-2016.

Testado no Arch Linux, usando as versões compactadas com gzip.

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

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

import sys

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

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

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

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

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

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

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

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

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

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

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

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

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

print(2016)

18
... Uau. Ainda me surpreende o quão bem algumas pessoas conhecem seus idiomas. É como olhar para trás no tempo ...
wizzwizz4

O python 0 suporta try / except ??
OldBunny2800

8
@ OldBunny2800 Surpreendentemente, sim
Sp3000

54

Curto e grosso; os três APLs ( K , J201 , Dyalog 7.1 ) em 8 bytes

1993+1^2

1993 mais ...

K: o primeiro 1 inteiro {0}, exceto {2}, ou seja, {0}; 1993 - Experimente online!

J: 1 2 = 1; 1994 - Experimente online!

APL: LCM (1,2) = 2; 1995 - Experimente online!


Muito agradável! Acha que você poderia combinar mais idiomas da Iverson?
milhas

@miles Get é duro com K, e APL2 / APLX / APL * PLUS são muito semelhantes.
Adám 29/09/16

@miles Você conhece uma versão J de 2000? 2e3+?1Nesse caso, podemos fazer com o Dyalog 9.0.1.
Adám 29/09/16

Outra perspectiva interessante é X^Ypara alguns números X e Y, assim como a ^potência em J, mas a LCM na APL.
Adám 29/09/16

2
Encontrei uma página de recursos sobre lançamentos com datas até 2000, jsoftware.com/release/status.htm
miles

46

10 anos, 12 idiomas, 2430 bytes

Esta resposta é uma colaboração entre mim e o usuário 1000000000 .

Uma 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 

Aqui está o 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 encaixar isso dentro de uma resposta, vou renunciar a links TIO inteiros e, em vez disso, colocarei um link em um intérprete válido, onde o código pode ser inserido pelo usuário. Aqui está um link Pastebin para esse fim.

Piet

O formato de arquivo PPM , um dos formatos de imagem que o interpretador Piet que usamos pode ler, possui uma versão ASCII em texto sem formatação. Com isso, conseguimos incorporar o código de outros idiomas como lixo no arquivo de imagem lido por Piet e Braincopter.

A imagem fica assim:

Imagem não processada

Nem toda a imagem é importante para Piet. Aqui está uma versão com uma linha destacando o caminho que Piet segue através do código:

Caminho de Piet

Apesar dos métodos um tanto complicados para criar o programa, o próprio programa é bastante simples. Ao longo da parte superior da imagem, ele empurra 1 10 10 10 2para a pilha; ao lado, multiplica-se três vezes e adiciona uma vez. No canto inferior, ele produz o resultado (2001) e depois pára.

Braincopter

Braincopter é a outra linguagem visual. Ele também conta com o mesmo ppmarquivo de imagem para executar. Devido a restrições muito severas no npiet, nosso código Braincopter pode usar apenas um subconjunto das operações originais do Braincopter. Estamos restritos a usar cores que são operações válidas em Piet. Isso remove o -operador do Braincopter.

Aqui está o caminho traçado pelo código Braincopter:

Caminho de Braincopter

O programa Braincopter é um pouco estranho por causa da falta de um -operador. As paredes de ciano e ciano escuro servem para redirecionar o ponteiro, mas, além disso, é idêntico ao seguinte golpe cerebral:

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

Isso imprime 2005.

Paintfuck

O Paintfuck é a terceira linguagem de programação visual da nossa lista, porém, em vez de capturar uma imagem e produzir texto, o Paintfuck recebe texto e gera uma imagem.

Como o Paintfuck ignora caracteres irrelevantes como não-ops, a maior parte do código não é importante. A seção relevante do código é:

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

Embora não sejam opcionais, os ws no final do código não fazem nada. Eles estão lá para a parte da grama da solução. n, e, s, E wsão usados para mover a imagem e *é utilizado para representar graficamente um ponto em determinado local. O programa produz:

Saída do Paintfuck

Uma versão maior:

Saída Painfuck, mas é maior

Brainfuck

Como o Paintfuck, Brainfuck ignora a maioria dos personagens. Mais uma vez, aqui estão os importantes:

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

A maior parte disso é irrelevante pelas circunstâncias e, por acaso, são personagens que alguma outra língua precisava. A versão mais fina deste código é:

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

Isso simplesmente imprime 1993.

Brainbool

Brainbool é muito parecido com Brainfuck em sua seleção de personagens. A grande diferença que permite que os dois se entrelaçam é a falta de um -no Brainbool. Os personagens importantes do Brainbool são:

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

Os resultados do Brainbool e do brainfuck são mutuamente exclusivos. Brainbool esconde sua saída no segundo conjunto de []. O Brainfuck encontra +++---antes de atingir a [configuração em zero e fazer com que ela ignore a saída, enquanto o Brainbool vê apenas a +++configuração em 1 fazendo com que ela passe pelo loop. Da mesma forma, o Brainbool é definido como zero no 4º loop, fazendo com que ele pule enquanto Brainfuck entra no loop com um valor de 49.

Como o Brainbool não possui saída decimal, ele gera o 2010 em binário:

11111011010

Fissão

A única parte do código que é importante para a fissão é:

R"2014";

A Rconvocação em um átomo se movendo para a direita, as "2014"impressões 2014e a ;execução de interrupções.

Befunge

O Befunge passa apenas pelos seguintes caracteres:

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

O P3são necessários para fazer uma imagem .ppm válido para Piet, e cumulativamente empurrar a 3 para a pilha. o vé colocado para redirecionar o ponteiro para baixo. Em seguida, ele passa pelo 7in no 17usado para indicar a largura da imagem .ppm. O >redireciona o ponteiro para a direita. 7*multiplica a parte superior da pilha por 7, deixando 49 (valor ASCII de 1) na parte superior da pilha. ::duplica o topo da pilha duas vezes. O 1é produzido por ,. 8 +adiciona 8 ao incremento superior ao ASCII 9. :,,produz 9duas vezes. 2 +incrementa o ASCII 1para um ASCII 3e ,imprime. Finalmente @termina o programa.

Ao todo, ele imprime 1993.

Espaço em branco

Espaço em branco, como o nome pode sugerir, usa apenas espaço em branco em seus programas. Isto é o que o intérprete de espaço em branco vê:

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

A maior parte do que esse código faz é irrelevante para a execução do programa (todas as linhas contendo apenas espaços simplesmente pressionam zero para a pilha). A parte importante:

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

A primeira linha empurra 2003 para a pilha. Depois disso, [Tab][LF][Space][Tab]imprime o topo da pilha (2003) como um número. Finalmente, os três últimos feeds de linha encerram a execução do programa.

Relva

Grama ignora todos os caracteres até o primeiro wno arquivo e depois que todos os caracteres que não são w, Wou v. O intérprete Grass lê:

wWWWwWWWWwv
wWWwWWWwv
wWWWwWWWWWwWWWWWWwwwWWWWWWWwWWWWWWwwwWWWWWWWWWWwWWWWWWWWWWwv
wWWWwWWWWwv
wWWwWWWwv
wWWwWWWwv
wWWwWWWwv
wWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwv

A primeira linha define uma função que adiciona duas ao que quer que seja passada. A segunda linha define uma função que adiciona quatro ao que quer que seja passado. O terceiro define uma função que imprime dois mais o argumento, o imprime duas vezes e, finalmente, imprime sete mais o argumento (Grass imprime caracteres com base no valor ASCII). A quarta, quinta e sexta linhas definem funções que adicionam oito, adicionam 16, adicionam 32 e 64 ao argumento, respectivamente. A linha final define a função principal que pega o caractere w(o único número predefinido em Grass, valor ASCII 119) e adiciona 185 a ela usando as funções de adição definidas no programa, bem como a função de adição incorporada. Grass envolve números em 256 e, portanto, o resultado é 48 (correspondente ao caractere0) A função passa isso para a função da terceira linha que imprime 2007.

Estrelado

Starry ignora tudo, exceto para o espaço, +, *, ., ,, `, e '. Assim, o intérprete estrelado vê apenas:

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

No entanto, as instruções label e jump são usadas para ignorar seções do código que podem causar problemas se executadas, portanto o código é efetivamente este:

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

Esse código envia dois para a pilha, duplica-o duas vezes e, em seguida, aparece e imprime um deles como um número. Em seguida, empurra zero, duplica e imprime os dois zeros como números. Em seguida, ele mostra um dos dois e salta e, em seguida, empurra sete para a pilha e aparece e imprime como um número. Finalmente, ele coloca os dois últimos na pilha e pula para o final do programa.

Python 2.7.2

O código Python segue o formato:

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

onde ...representa todo o outro lixo.

A primeira linha P3v=""existe porque, para ser um .ppmarquivo válido, nosso código deve começar com P3esse erro normalmente, mas se dissermos ao python que é uma declaração de variável, ele o ignorará.

Em seguida, temos que imprimir 2011. No entanto, devido à maneira como a .ppmé formatado, não podemos incluir nenhum número nessa linha. Para contornar isso, somamos todos os valores ASCII da string "~~~~~~~~~~~~~~~y"e imprimimos o resultado. Finalmente, usamos as aspas triplas de um comentário multilinha para que o python ignore todo o resto.

Brainflak

Guardamos o melhor para o final.

Brainflak, como outros, ignora a maioria dos personagens. Os caracteres relevantes são:

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

O código python (([()])), empurra -1 para a pilha duas vezes, portanto, ele precisa ser removido antes do início do processamento do programa.

Depois disso, o Brainbool usa uma []nilad que não faz nada e o programa começa.

(((((()()()()){}){}){}){})({({}[<()>()])}{}<[[]]>)empurra 2016. O último [<><>]são os restos de Befunge e Brainfuck, mas felizmente não faz nada.

Quando o programa termina, imprime o conteúdo da pilha, ou seja, imprime 2016.


Brilhante! Eu esperava que Piet aparecesse de alguma forma, incorporar coisas em um PPM é brilhante. Bem feito!
Cincodenada 4/16

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

38

5 anos

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

O comentário de linha única //foi adicionado no C99, para que um compilador C89 lesse esse código como c=-4.5 / /*comment*/ -4.5, que é o mesmo que c=-4.5 / -4.5, enquanto um compilador C99 iria ler como c=-4.5 //comment/**/
- 4.5, que é o mesmo que c=-4.5 - 4.5.
A parte Python é um comentário no programa C.

2010: Python 2.7 e 2015: Python 3.5

Os documentos variam entre Python 3 e 2, este programa usa o comprimento dos documentos para detectar a versão do Python.
A parte C está em uma sequência no programa Python.

1993 [2] : Brainfuck

Basicamente, ignora tudo o que não é .,[]+-<>. Como o programa C possui um ,, eu tive que fazer o Brainfuck descartar essa parte, definindo o byte atual como 0.


  1. A especificação C89 foi lançada em 1990. Mais informações .
  2. Não consegui encontrar uma data de lançamento oficial, então acreditarei em Esolangs e na Wikipedia .

4
Isso é ótimo, especialmente o -4.5/-4.5e -4.5-4.5. Esmagou duas versões cada uma das duas línguas principais é bastante impressionante, mesmo sem jogar BF lá :-)
ETHproductions

Isto não é codegolf, mas o a=na linha 2 é desnecessário
TheInitializer

@ TheInitializer sim, eu tentei sem a=e deu um erro, então eu decidi mantê-lo. Não sei por que deu um erro, provavelmente um erro de digitação.
betseg 20/10/16

@betseg se esse código estiver sendo executado apenas em Python, ele deve funcionar.
TheInitializer

17

15 anos, JavaScript

Como o ciclo de lançamento do JavaScript é muito incomum e inconsistente, vou usar a implementação do Firefox. Informe-me se isso não for permitido.

Versões: 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 testados no Windows 7)

Nota importante: instalar e abrir o Firefox 1.0.0 ou qualquer versão posterior pode apagar todos os seus dados salvos do Firefox , incluindo histórico e favoritos.

Além disso, a partir da 1.0.0, você pode ter apenas uma versão aberta por vez; tentar abrir outra versão resulta em uma nova janela da versão já aberta.

Instruções

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>

Você pode adicionar um 16º ano incluindo BF: <!--<<<<-[>+<-----]>--.++++++++..------.[-][-->antes do script e outro comentário HTML contendo apenas um ]depois.
Steven H.

6
@StevenH. Uau, eu nunca pensei em incluir esolangs nisso. E isso é uma maneira muito inteligente para incluir BF :-) Mas eu não tenho certeza se realmente quer ...
ETHproductions

13

6 idiomas, Turtlèd e brainfuck , Python 3.5, Python 2.7, > <> , Fissão

O Turtlèd não existia antes deste ano e é tão objetivo, mesmo que o commit do github não conte, e o BF possui a evidência da página esolang, lançada em 1993. Python 3.5 é 2015, 2.7 é 2010.> <> também tem a página esolang , indicando 2009, assim como a Fissão, 2014

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

Provavelmente eu deveria dar crédito à página de constantes bf em esolangs ... ¯ \ _ (ツ) _ / ¯

Como funciona, tipo de:

Turtlèd:

Turtlèd não faz nada para outras linhas além da primeira:

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

/ é um nop

Brainfuck

Brainfuck ignora caracteres que não estão em seus comandos

-[>+<-----]>--.++++++++..------.(o último. é da parte python)

que apenas faz o material Brainfuck, ele usa quebra automática para dividir 255 por 5 e depois subtrai 2 do resultado, imprime, incrementa 8 vezes, imprime duas vezes, diminui 6 vezes, imprime

Python 2 e 3

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

o comprimento dos documentos para len varia entre as versões; portanto, imprime o ano para a versão 3, se for o tamanho certo, caso contrário, para a versão 2.

> <>

# reflete o ponteiro para trás, então ele atinge o / do outro lado da linha, passa pelo espaço entre elsee 2010, em seguida, reflete novamente para pressionar "2009", pressionando 9,0,0,2 na pilha e imprimindo o verso .

Fissão

A fissão tem criadores, para que possamos ter uma linha na parte inferior que executa sozinha:

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

13

3 anos, 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   */ 

Nomeie o arquivo date.mixal.

  1. C (1990) - Compila com avisos e impressões 1990para stdout.
  2. TeX (1982) - Compilar com tex date.mixal; imprime 1982no arquivo O.tex(ignore a saída DVI).
  3. MIXAL (1997) - Compile usando o GNU Mix Development Kit mixasm date.mixale execute com mixvm -r date.mix; imprime 1997no dispositivo de teletipo (= stdout).

Os programas TeX e MIXAL estão em um comentário no programa C; o programa MIXAL vem depois \byee o TeX o ignora. Os programas C e TeX são um comentário no programa MIXAL. Por algum motivo, gccestá disposto a aceitar *main.


Eu tinha esquecido o MIXAL, +1: D
cat

13

3 anos (GolfScript, CJam, MATL), 24 23 bytes

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

Isso gera

  • 2007 no GolfScript.

  • 2015 no CJam (versão 0.6.5).

  • 2016 no MATL (versão 19.2.0).

Explicação

Golfscript

Tokens indefinidos são noops no GolfScript . As únicas partes do código que realmente fazem algo são:

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

Tudo a partir %de agora é um comentário.

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

Correção: no CJam depois de %obter [11 10]. Não que isso importe.
aditsu

@aditsu Whoops! Obrigado, editado
Luis Mendo

12

2 idiomas, Python 2.7 e Python 3.5

Python 2.7 foi lançado em 2010 .

Python 3.5 foi lançado em 2015 .

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

Isso depende do PEP 238, em que o operador /foi alterado de divisão inteira no Python 2 para divisão de ponto flutuante no Python 3.


3
Este poderia ser um desafio divertido se envolver a identificação de bugs / alterações nos operadores entre as versões
milhas

1
@TuukkaX Funciona para mim tanto no Python 2.7.12 quanto no Python 3.5.1 no Fedora 24.
miles

1
Você não pode fazer '2010'if 3/2>1else'2015'?
Qwerp-Derp 29/09/16

15
Ou us math:print(int(2010+1/2*10))
Jakube 29/09

2
print('2015'if 1/2else'2010')é melhor
Cyoce 30/09/16

12

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

"Qualquer um dos programas pode imprimir em STDERR ou emitir erros e avisos em tempo de execução / compilação, desde que a saída correta ainda seja impressa em STDOUT ou em um arquivo." Atualmente, a única exibição sem erro é o ano, por isso estamos cumprindo esta regra. No entanto, se você deseja gravar na memória, substitua Disp (date)por (date)->I.

Referências:

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

9

5 anos, Go 1.0, 1.1, 1.4, 1.5, 1.6: 285 257 bytes

(1.2 foi lançado em 2013 como 1.1, 1.3 em 2014 como 1.4 e 1.7 em 2016 como 1.6.)

Não testei isso em todas as versões, porque eu posso acessar apenas 1.6, mas deve funcionar em teoria! As alterações de idioma provavelmente teriam feito com que o programa não fosse compilado, por isso, confiei nas alterações padrão da 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 e comentou:

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 anos, 99 bytes / 77 caracteres

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

Nota: Não tenho certeza se os anos estão corretos

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

Demorei um pouco para descobrir como fazer o Python e o JS trabalharem juntos.

Explicação

v=1//1;"""define a variável vcomo 1dividida em 1em Python e 1em Javascript ( //inicia um comentário em Javascript) e ;"""inicia uma sequência de múltiplas linhas no Python. Não ;pode ser substituído por uma nova linha porque isso faria o Javascript parar de funcionar.

1991/*"""é o restante da cadeia de linhas múltiplas. O espaço é necessário para que> <> não seja empurrado 1para a pilha. Como o início da cadeia de linhas múltiplas fazia parte de um comentário em Javascript, ele imprime 1991e inicia um comentário de várias linhas.

for i in[0]:print 2010#🔟😃😇🔟😗➕➕😨em Python, é um loop for que itera a lista [0]e é executado print 2010. O comentário é apenas o código Emotinomicon (ele ignora tudo o que não é um emoji ou uma string). Em> <>, ele ( f) empurra 15 para a pilha.

O loop for não pode ser removido porque o IP de> <> está caindo na coluna 1 e pnão é um comando válido em> <>. Você também não pode substituí-lo por uma ifinstrução, porque ié o comando para receber entradas em> <>.

""" é o início de uma sequência multilinha.

" faz parte da sequência multilinha, necessária para fechar a sequência que abrimos em> <> (a primeira aspas da linha anterior iniciou uma sequência em> <>).

>9002nnnn;em> <>, muda de direção IP para a direita, empurra 9, 0, 0e 2, saída-los como números e termina o programa.

"""#*/em Python, termina a cadeia de linhas múltiplas e inicia um comentário. Em Javascript, */termina o comentário com várias linhas.


Versão bônus com Gol> <>:

5 idiomas, 4 anos, 118 114 bytes / 96 92 caracteres

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

Explicação²

O IP começa no canto superior esquerdo, indo para a direita. O vfaz cair.

fempurra 15.

" inicia string.

` é usado para escapar de caracteres, algo que> <> não possui.

"deve fechar a string, mas usamos `, por isso não.

> parte da string.

" termina a string.

>5102nnnn;é o código real. >faz com que o IP vai para a direita, 5102empurra 5, 1, 0e 2, e nnnn;imprime os números e termina o programa.


Erros de Python nos caracteres unicode sem o cabeçalho adequado. ( 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)
Assistente de trigo 1/1

@WheatWizard Salve o arquivo como UTF-8
acrolith 01/10/16

7

7 anos, 8 navegadores

Não é exatamente a data de lançamento do idioma, porque o css não possui lançamentos, mas as versões do navegador (talvez possam ser consideradas versões do compilador?)

Para os seguintes navegadores, imprime o nome do navegador, versão e data de lançamento e nada mais. Ele imprime o mesmo para algumas versões posteriores (você verá que o cromo é uma versão tardia nas capturas de tela porque é difícil fazer o download de versões antigas do chrome pelo número da versão)

Eu poderia imprimir o número da versão que usei, mas preferi mostrar a primeira versão em que o recurso usado é introduzido.

  • IE6
  • IE7
  • IE8
  • IE9 (não testado, não possui um IE9 por perto)
  • Firefox 4
  • Firefox 3.6
  • Chrome 18
  • Chrome 21
  • Navegadores modernos

FF3.6 FF4 Chromium19 Cromo22 IE8-peculiaridades IE8-IE7compatibilidade 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 realmente tem lançamentos. Existem 1.0, 2.0, 2.1, 3.0 e 4.0. A pergunta chegou a usar a Wikipedia ou o site do idioma como prova da data de lançamento, então você deve ter verificado. Data de lançamento inicial: 17 de dezembro de 1996
mbomb007 30/01

Não é no sentido de que não há implementação de nenhum desses níveis (eles nem são chamados de releases, porque não são, você deveria ter verificado o link que publicou). E CSS3 e 4 nem sequer têm uma data de lançamento porque estão sendo criados on-the-fly, e vão e voltam entre rascunhos, candidatos e recomendações. Além disso, nenhum navegador implementa um nível específico 100% e 0% do próximo nível, portanto, a melhor data que você pode criar é a data de lançamento do navegador.
Qwazix

O idioma que você selecionou não atende às especificações necessárias para esse desafio. Não da maneira que você está tentando fazer. Uma linguagem é definida por sua implementação; portanto, você precisa escolher um navegador e segui-lo, usando versões diferentes e não diferentes. Eu ainda perguntaria ao OP, no entanto.
mbomb007

O OP não disse que versões diferentes contam como idiomas diferentes, apenas disseram para imprimir o ano de lançamento da versão em idioma usada, para idiomas diferentes . No entanto, metade das respostas foram baseadas no pressuposto de que versões diferentes são diferentes o suficiente para serem contadas como idiomas. Se python 2.5.0 e 2.5.1 são considerados diferentes o suficiente, não consigo entender como o IE e o Chrome não são.
Qwazix

6

3 anos, 89 bytes

Python 2, JavaScript (ES6) e Perl

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

O primeiro evalserá executado 1no Python 2 e print=_=>console.log(1995)no JavaScript e Perl usando o recurso de divisão inteira do Python 2. Isso cria uma printfunção no JavaScript e o Perl se preocupa silenciosamente com os erros de sintaxe e continua independentemente.

O segundo evaldepende do Perl interpolar a variável $$(PID atual) na string, o que será verdadeiro quando comparado (usando o >operador) contra "0"(o Python exige uma string nessa comparação, enquanto o Perl implicitamente converte em número inteiro).

Eu poderia ter me enganado em mais idiomas, mas queria ter uma solução que não abusasse dos comentários e só funcionasse em idiomas 'regulares'.

Eu usei esta página da Wikipedia para recuperar os anos de uso.


2

3 idiomas, 3 anos

Uma resposta ad-hoc por diversão.

2002!~+++++++[<+++++++>-]<[.++++++++..------.[-]] 2016 !.
  • Mouse-2002 : tudo o que se~segue é um comentário, e a primeira parte, que também pode ser escritaC0U!!!, é impressa2002.

  • esse commit de pré-desafio do Calc : que é um intérprete de calculadora baseado em pilha que acabei de projetar no C11 para a Programação II, a parte do programa antes do primeiro espaço imprime um erro (permitido sob a especificação do desafio) e2016 !.imprime2016.

  • Brainfuck : imprime 1993 como visto em outras respostas. O estranho final .é ignorado por beef.

Observe que a exibição do Calc da pilha atual < stackcom todas as linhas de entrada não vazias faz parte do prompt >, não parte da saída.


Onde posso descobrir sobre o Mouse-2002? O github não parece ter nenhum tipo de especificação.
Assistente de Trigo

@WheatWizard O README do repositório contém links para o MUSYS original do Dr. Grogono e para a reinicialização de David Simpson em 2002 , que juntos pintam uma imagem correta .
gato

2

Planilhas do Microsoft Excel / Google, 22 bytes

Função de planilha anônima que não recebe entradas e saídas 1987no Microsoft Excel e 2006no Planilhas Google

=IfError(M(2006),1987)

0

Perl 5 e Perl 6 (2 anos)

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

O primeiro lançamento do Perl 5 foi em 1994

O primeiro lançamento oficial do Perl 6 foi em 2015

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.