Polyglot l'OEIS (non costante)!


24

Disclaimer: questo è fortemente ispirato a "Polyglot the OEIS!" ma risolve il problema che porta alla chiusura (vedere la sezione di output) ed è stato ripubblicato per non invalidare le risposte.

introduzione

Conosciamo e amiamo tutti l' enciclopedia online delle sequenze di numeri interi ( OEIS ). E se realizzassimo una versione off-line delle sequenze interessanti? Beh, sarebbe un po 'troppo facile, no e come sceglieresti una sequenza con la nostra interfaccia standard !? No. Abbiamo bisogno di una soluzione più semplice per questo. Un poliglotta!

Ingresso

Il tuo input sarà un numero intero non negativo n.

Produzione

Il tuo output sarà

  • La nvoce -th di una sequenza OEIS OR
  • Le prime nvoci di una sequenza OEIS.

Puoi prendere l'indice come 1 o 0 come preferisci.

Per non rendere questa domanda un duplicato delle sequenze di costanti della stampante di numeri interi versatili sono vietate. Ciò dovrebbe anche aumentare il livello di difficoltà degli invii ed evitare soluzioni "noiose";)

Una sequenza non è costante se esistono due membri della sequenza che sono disuguali.

Uhm, allora dov'è la sfida?

Devi poliglottare la funzionalità sopra. Cioè se supporti le lingue A, B e C tutte devono implementare sequenze OEIS diverse. La scelta della sequenza non è limitata, tranne per il fatto che sono necessari diversi per tutte le lingue.

Cioè, se esegui il programma fornito nella lingua A, allora deve essere generata la sequenza X, se esegui il programma fornito nella lingua B, allora viene generata la sequenza Y (con X! = Y) e se esegui il programma fornito nella lingua C, allora deve essere generata la sequenza Z (con X! = Z && Y! = Z).

Chi vince?

Vince la risposta con il maggior numero di coppie sequenza / lingua. Il primo tie-breaker è di dimensioni di codice (in byte) con un valore inferiore migliore. Il secondo pareggio è il tempo di presentazione, che prima è meglio.

Eventuali parole / regole finali?

  • È necessario dichiarare quale lingua genererà quale sequenza.
  • Si applicano le regole I / O standard.
  • Se vengono utilizzate codifiche diverse tra le lingue, entrambi i programmi devono utilizzare la stessa sequenza di byte.
  • Language (Python 2/3) revisioni non contano come lingue diverse. Diverse implementazioni di una lingua (come Browser JS vs Node.js) contano anche come lingue diverse.
  • Si applicano scappatoie standard.

4
Questo post è stato fatto in conformità con questo Meta D&R .
SEJPM,

Lingue diverse possono avere indicizzazioni diverse?
Stephen,

2
@Step: Sì, possono.
SEJPM,

Risposte:


16

3 lingue (1 byte) - Pyth ( A001477 ), Matl ( A000027 ), Braingolf ( A000217 )

Q

Come?

Q fa quanto segue:

  • In MATL, significa + 1, quindi fondamentalmente valuta input + 1.

  • In Pyth, significa input, quindi genera solo input.

  • In Braingolf, è integrato per i numeri triangolari.

Mini-Polyglot

Pyth può essere sostituito da uno dei seguenti linguaggi: GolfScript , Pyke , Brachylog o Brain-Flak .


1
bene hai sicuramente scelto le lingue giuste per questo +1: P
HyperNeutrino

1
@HyperNeutrino Ho appena portato la mia risposta da lì, ma allora ho scelto delle lingue molto buone, quindi sì: P - Grazie!
Mr. Xcoder,

Ricorda, questo è un numero di lingue, non di code-golf: P
Stephen,

@StepHen Penso che 3 sia ragionevole.
Mr. Xcoder,

14

10 lingue, 122 byte

#|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%:+.

Posso sicuramente aggiungere un altro po '. 1 indicizzato se non diversamente specificato.

Tieni presente che potrei non essere aggiornato sui collegamenti TIO quando sono sicuro che le modifiche più recenti non hanno influito sui programmi precedenti: puoi testarle se lo desideri, ma copiando 10+ nuovi collegamenti TIO ogni volta che apporto una modifica diventa stancante dopo un po '. Copierò nuovi ogni 5 aggiornamenti circa.

cQuents v0, A000007

Codice pertinente: #|A=1:0;

#|Acattura l'input ed è lì per i commenti di Python. =1significa che il primo elemento è 1, :0significa che il resto è 0, genera il ntermine dato input n. cQuents v0 ha uno strano bug / funzione che quando viene letto un token inaspettato ma valido, come ;, provoca la fine dell'analisi.

Provalo online!

PingPong, A001478

Codice pertinente: #|A=1:0;~@

Uscite tramite codice di uscita. 0-indicizzati.

#salta il carattere successivo. =non fa nulla qui. 1spinge 1e :stampa 1su STDOUT. 0spinge 0. )non fa nulla. ;spinge input, ~pop e push -n-1. @termina. Il codice di uscita è in cima allo stack.

Provalo online!

axo, A001477

Codice pertinente: }{\

0-indicizzati. }legge e invia un numero intero da STDIN (per qualche motivo richiede una nuova riga finale), {stampa la parte superiore dello stack e \termina il programma. Non sono sicuro di cosa facciano i personaggi precedenti, ma nulla di importante in questo caso.

Provalo online!

brainfuck, A000027

Codice pertinente: ,[.,]

Semplice programma per gatti da esolangs.org. Emette l'ingresso.

Provalo online!

> <>, A000030

Codice pertinente: #...;oi

#specchia e si avvolge a destra, che lo indirizza alla lettura io;, che genera il primo carattere dell'input. 0-indicizzati.

Provalo online!

Rubino, A023443

Codice pertinente: print (0 and gets.to_i-1...)

0-indicizzati. Stampa l'ingresso meno 1. 0è vero in Ruby, ma falso in Python.

Provalo online!

Python 3, A000578

Codice pertinente: print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()

Strappato dal post originale di HyperNeutrino, ma è un poliglotta abbastanza noto. quit()termina il programma.

Provalo online!

Python 2, A000290

Codice pertinente:

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

#coding:utf-8è necessario per far funzionare il carbone. Strappato anche dal post originale di HyperNeutrino. quit()termina il programma.

Provalo online!

Carbone di legna, A001489

Codice pertinente: ⎚I±N»

0-indicizzati. cancella la console (Charcoal stampa ASCII così com'è) e I±Nstampa il negativo dell'input. »è un errore di analisi e termina il programma.

Grazie solo a ASCII per l'aiuto nella chat.

Provalo online!

Cardinale, A020725

Codice pertinente:

 x
x%:+.

Aggiunge 1 all'input e schiaccia tutti gli altri puntatori.

Provalo online!


Sembra che il codice di uscita per PingPong sia ToS, si avvolge a 2 ^ 32 come ci si aspetterebbe da un intero con segno a 64 bit.
Jonathan Allan,

@JonathanAllan, grazie.
Stephen,

Hai davvero bisogno di uscire con un errore di analisi se il codice carbone è già alla fine del programma?
MD XF,

@MDXF no, avevo (sto) pensando di aggiungere altro alla fine
Stephen,

10

5 lingue ( 05AB1E , attualmente , CJam , Jelly , MATL ), 7 byte

UD>li)+

Provalo online !:

  • 05AB1E : sequenza A000027 (numeri interi positivi: a ( n ) = n ; basato su 1)
  • In realtà : sequenza A023443 (numeri interi non negativi di cui 1: a ( n ) = n −1; basato su 0)
  • Cjam : sequenza A020725 (numeri interi positivi escluso 1: a ( n ) = n +1; basato su 1)
  • Gelatina : sequenza A005843 (numeri pari non negativi: a ( n ) = 2 * n ; basato su 0)
  • MATL : sequenza A000290 (quadrati: a ( n ) = n 2 ; basato su 1). Esce con un errore dopo aver prodotto l'output.

7

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

Proton , 49 byte

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

Provalo online!

Python 3 , 49 byte

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

Provalo online!

Python 2 , 49 byte

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

Provalo online!

Spiegazione

Proton non ha '''...'''stringhe, quindi (''',''')diventa ('' ',' ''), che in qualche modo non causa problemi. Valuta '', facendo (''',''')!=','valutare True.

Python ha queste stringhe, quindi (''',''')è solo ','così (''',''')!=','restituisce False.

Python 2 usa la divisione dei piani per gli interi, quindi 1/2>0è falso in Python 2 e vero in Python 3.


Potresti essere in grado di aggiungere altri lang se trasformi la linea Python in 1//1;print(int(input())**(2+(1/2>0)+((''',''')!=',')));quit()e poi aggiungi lingue come JavaScript in seguito
Stephen

@StepHen Certo, potrebbe funzionare, grazie. Lo farò una volta che avrò l'aggiunta di JavaScript: P
HyperNeutrino,

6

5 lingue, 107 byte

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

Perl: A000035

Usando =come delimitatore per i s///mezzi possiamo escludere facilmente il codice che non vogliamo, e usando )come delimitatore per i q{}mezzi dopo aver printing qin tutte le altre lingue, possiamo semplicemente lavorare <>direttamente, senza preoccuparci.

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

Provalo online!

Rubino: A001477

In Ruby, //è in realtà /(divide per) /.../(regex match), quindi finché il regex è terminato e convertito in un numero, possiamo dividerlo in modo sicuro. __id__è più breve di .to_s.ord, quindi contiamo solo il resto del codice che non vogliamo in 's, impostato qsu getse printcon tutti gli altri.

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

Provalo online!

Python 2: A005843

Usando il trucco standard per differenziare 2 da 3 e racchiudendo cose che non vogliamo """e commenti.

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

Provalo online!

Python 3: A008585

Provalo online!

JavaScript (browser ES6): A000027

Abbastanza semplice per JS, è stato più facile non riutilizzare l'esistente printe scegliere SpiderMonkey, ma potrebbe anche essere possibile.

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


3

6 lingue: cubicamente 5/6/7/8/9/10, 44 40 32 byte

Cancellato 44 è ancora regolare 44; (

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

Questo stampa:

Spiegazione:

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

Provalo online! (Cubicamente 6x6x6)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.