Poliglota o (não constante) OEIS!

24

Isenção de responsabilidade: Isso é fortemente inspirado em "Polyglot the OEIS!" mas corrige o problema que levou ao fechamento (consulte a seção de saída) e foi postado novamente para não invalidar as respostas.

Introdução

Todos conhecemos e amamos a enciclopédia on-line de seqüências inteiras ( OEIS ). E daí se fizéssemos uma versão off-line das sequências interessantes? Bem, isso seria meio fácil demais, não e como você selecionaria uma sequência com nossa interface padrão !? Não. Precisamos de uma solução mais fácil para isso. Um poliglota!

Entrada

Sua entrada será um número inteiro não negativo n.

Saída

Sua saída será

  • A n-ésima entrada de uma sequência OEIS OU
  • As primeiras nentradas de uma sequência OEIS.

Você pode considerar o índice com base em 1 ou em 0, conforme preferir.

Para não fazer desta pergunta uma duplicata de As seqüências constantes versáteis da impressora são proibidas. Isso também deve aumentar o nível de dificuldade dos envios e evitar soluções "chatas";)

Uma sequência não é constante se houver dois membros de sequência desiguais.

Uhm, então, onde está o desafio?

Você precisa poliglota a funcionalidade acima. Ou seja, se você suporta os idiomas A, B e C, todos devem implementar diferentes sequências OEIS. A escolha da sequência não é limitada, exceto que você precisa de diferentes para todos os idiomas.

Ou seja, se você executar o programa fornecido na linguagem A, a sequência X será gerada, se você executar o programa fornecido na linguagem B, a sequência Y será gerada (com X! = Y) e se você executar o programa fornecido na linguagem C, a sequência Z deve ser gerada (com X! = Z && Y! = Z).

Quem ganha?

A resposta com mais pares de sequências / idiomas vence. O primeiro desempatador é do tamanho do código (em bytes), com menor sendo melhor. O segundo desempate é o tempo de finalização, sendo antes melhor.

Algumas palavras / regras finais?

  • Você deve declarar qual idioma gerará qual sequência.
  • Aplicam-se as regras de E / S padrão.
  • Se codificações diferentes forem usadas entre idiomas, os dois programas deverão usar a mesma sequência de bytes.
  • Language (Python 2/3) revisões não contam como línguas diferentes. Diferentes implementações de um idioma (como Browser JS vs Node.js) também contam como idiomas diferentes.
  • Aplicam-se brechas padrão.
SEJPM
fonte
4
Este post foi feito de acordo com este Meta Q&A .
SEJPM 14/08
Idiomas diferentes podem ter indexação diferente?
Stephen
2
@StepHen sim, eles podem.
SEJPM 14/08

Respostas:

16

3 idiomas (1 byte) - Pyth ( A001477 ), MATL ( A000027 ), Braingolf ( A000217 )

Q

Quão?

Q faz o seguinte:

  • No MATL, significa + 1, portanto, basicamente é avaliado como input + 1.

  • No Pyth, significa entrada, portanto, apenas gera a entrada.

  • Em Braingolf, é o built-in para números triangulares.

Mini-poliglota

Pyth pode ser substituído por qualquer um dos seguintes idiomas: GolfScript , Pyke , Brachylog ou Brain-Flak .

Mr. Xcoder
fonte
11
bem você certamente escolheu os idiomas da direita para esta +1: P
HyperNeutrino
11
@HyperNeutrino Acabei de enviar minha resposta de lá, mas eu escolhi idiomas muito bons na época, então sim: P - Obrigado!
Mr. Xcoder
Lembre-se, este é o número de idiomas, não o código-golfe: P
Stephen
@ StapHen Eu acho que 3 é razoável.
Mr. Xcoder
14

10 idiomas, 122 bytes

#|A=1:0;~@}{\,[.,];oi
#coding:utf-8
print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()#⎚I±N»
# x
#x%:+.

Definitivamente, posso adicionar muito mais. Indexado em 1, a menos que especificado de outra forma.

Observe que talvez eu não esteja atualizado nos links TIO quando tiver certeza de que alterações mais recentes não afetaram os programas mais antigos - você pode testá-los, se quiser, mas copiar mais de 10 links TIO novos sempre que fizer uma alteração fica cansativo depois de um tempo. Copio novos a cada 5 atualizações.

cQuents v0, A000007

Código relevante: #|A=1:0;

#|Acaptura a entrada e existe para comentários em Python. =1significa que o primeiro item é 1, :0significa o resto 0, gera o nth termo fornecido n. O cQuents v0 possui um bug / recurso estranho que, quando um token inesperado, mas válido, como ;, é lido, causa o término da análise.

Experimente online!

PingPong, A001478

Código relevante: #|A=1:0;~@

Saídas via código de saída. Indexado a 0.

#pula o próximo caractere. =não faz nada aqui. 1empurra 1e :imprime 1em STDOUT. 0empurra 0. )faz nada. ;empurra a entrada, ~aparece e empurra -n-1. @termina. O código de saída é o topo da pilha.

Experimente online!

axo, A001477

Código relevante: }{\

Indexado a 0. }lê e envia um número inteiro de STDIN (requer nova linha à direita por algum motivo), {imprime no topo da pilha e \termina o programa. Não sei o que os personagens anteriores fazem, mas nada que importa nesse caso.

Experimente online!

brainfuck, A000027

Código relevante: ,[.,]

Programa simples para gatos da esolangs.org. Emite a entrada.

Experimente online!

> <>, A000030

Código relevante: #...;oi

#espelha e envolve à direita, que o direciona a ler io;, que gera o primeiro caractere da entrada. Indexado a 0.

Experimente online!

Ruby, A023443

Código relevante: print (0 and gets.to_i-1...)

Indexado a 0. Imprime a entrada menos 1. 0é verdade em Ruby, mas falsey em Python.

Experimente online!

Python 3, A000578

Código relevante: print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()

Arrancado do post original do HyperNeutrino, mas é um poliglota bem conhecido. quit()finaliza o programa.

Experimente online!

Python 2, A000290

Código relevante:

#coding:utf-8
print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()

#coding:utf-8é necessário para o material de carvão funcionar. Também roubado da postagem original do HyperNeutrino. quit()finaliza o programa.

Experimente online!

Carvão, A001489

Código relevante: ⎚I±N»

Indexado a 0. limpa o console (Charcoal imprime ASCII como está) e I±Nimprime o negativo da entrada. »é um erro de análise e finaliza o programa.

Agradecemos a ASCII-only pela ajuda no chat.

Experimente online!

Cardinal, A020725

Código relevante:

 x
x%:+.

Adiciona 1 à entrada e esmaga todos os outros ponteiros.

Experimente online!

Stephen
fonte
Parece que o código de saída do PingPong é o ToS, que é de 2 ^ 32, como seria esperado de um número inteiro assinado de 64 bits.
Jonathan Allan
@JonathanAllan legal, obrigado.
Stephen
Você realmente precisa sair com um erro de análise se o código de carvão já estiver no final do programa?
MD XF
@MDXF não, eu estava (am) o planejamento para adicionar mais no final
Stephen
10

5 idiomas ( 05AB1E , atualmente , CJam , Jelly , MATL ), 7 bytes

UD>li)+

Experimente online !:

  • 05AB1E : sequência A000027 (números inteiros positivos: a ( n ) = n ; com base em 1)
  • Na verdade : sequência A023443 (números inteiros não negativos, incluindo 1: a ( n ) = n -1; com base em 0)
  • Cjam : sequência A020725 (números inteiros positivos excluindo 1: a ( n ) = n +1; com base em 1)
  • Jelly : sequência A005843 (não-negativos mesmo números: um ( n ) = 2 * n ; 0-base)
  • MATL : sequência A000290 (quadrados: a ( n ) = n 2 ; com base em 1). Sai com um erro após produzir a saída.
Luis Mendo
fonte
7

3 idiomas: Proton, A000583 ; Python 3, A000578 ; Python 2, A000290

Próton , 49 bytes

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Experimente online!

Python 3 , 49 bytes

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Experimente online!

Python 2 , 49 bytes

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Experimente online!

Explicação

O próton não tem '''...'''cordas, então (''',''')se torna ('' ',' ''), o que de alguma forma não causa problemas. Avalia para '', fazendo (''',''')!=','para avaliar True.

Python tem essas cadeias, por isso (''',''')é apenas ','assim (''',''')!=','avaliada como False.

O Python 2 usa a divisão do piso para números inteiros, portanto, 1/2>0é falso no Python 2 e verdadeiro no Python 3.

HyperNeutrino
fonte
Você pode ser capaz de adicionar mais alguns langs se você ligar a linha de Python em 1//1;print(int(input())**(2+(1/2>0)+((''',''')!=',')));quit()e em seguida, adicione linguagens como JavaScript depois
Stephen
@StepHen Claro, isso pode funcionar, obrigado. Eu vou fazer isso quando eu chegar em torno de adicionar JavaScript: P
HyperNeutrino
6

5 idiomas, 107 bytes

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/.__id__;'
alert(+prompt()+1);`"""#=;#';q=gets
print(q)#)|<>%2)#`

Perl: A000035

Usando =como delimitador para s///meios, podemos excluir facilmente o código que não queremos, e usando )como delimitador para q{}meios após a printinserção qem todos os outros idiomas, podemos trabalhar <>diretamente, sem se preocupar.

s/1...q/i...#/;
print(<>%2)

Experimente online!

Rubi: A001477

No Ruby, //é na verdade /(dividir por) /.../(correspondência de expressão regular), desde que a expressão regular seja terminada e convertida em um número, podemos dividi-la com segurança. __id__é menor que .to_s.ord, então, apenas contém o restante do código que não queremos em 's, definido qcomo getse printcom todos os outros.

s=1/2;1//2..."/.__id__;'...';q=gets
print(q)

Experimente online!

Python 2: A005843

Usando o truque padrão para diferenciar 2 de 3 e anexando itens que não queremos """e comentamos.

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/...`"""
print(q)

Experimente online!

Python 3: A008585

Experimente online!

JavaScript (navegador ES6): A000027

Bem simples para JS, acabou sendo mais fácil não reutilizar o existente printe usar o SpiderMonkey, mas isso também pode ser possível.

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/.__id__;'
alert(+prompt()+1);`"""#=;#';q=gets
print(q)#)|<>%2)#`

Dom Hastings
fonte
3

6 idiomas: Cubicamente 5/6/7/8/9/10, 44 40 32 bytes

O riscado 44 ainda é regular 44;

DDR'DDR$:_0?{R'DDRDDB'%0}!{+00%}

Isso imprime:

Explicação:

DDR'DDR$:_0?{R'DDRDDB'%0}!{+00%}
DDR'DDR                            get top face sum to 2 (all versions)
       $:                          read input and set notepad to it
         _0                        set notepad to input modulo 2
           ?{...........}          if truthy
             R'DDRDD                reset cube
                    B'              set top face to Cubically version number
                      %0            print top face
                         !{....}   if falsy
                           +00      add 2 to notepad twice
                              %     print

Experimente online! (Cubicamente 6x6x6)

MD XF
fonte