¡Políglota el OEIS (no constante)!


24

Descargo de responsabilidad: ¡Esto está fuertemente inspirado en "Polyglot the OEIS!" pero soluciona el problema que condujo al cierre (consulte la sección de resultados) y se volvió a publicar para no invalidar las respuestas.

Introducción

Todos conocemos y amamos la enciclopedia en línea de secuencias enteras ( OEIS ). Entonces, ¿qué pasaría si hiciéramos una versión fuera de línea de las secuencias interesantes? Bueno, eso sería demasiado fácil, ¿no es así y cómo seleccionarías una secuencia con nuestra interfaz estándar? No. Necesitamos una solución más fácil para esto. Un políglota!

Entrada

Su entrada será un número entero no negativo n.

Salida

Su salida será

  • La nentrada enésima de una secuencia OEIS O
  • Las primeras nentradas de una secuencia OEIS.

Puede considerar que el índice se basa en 1 o en 0 como lo prefiera.

Para no hacer de esta pregunta un duplicado de La impresora entera versátil secuencias constantes están prohibidas. Esto también debería aumentar el nivel de dificultad de las presentaciones y evitar soluciones "aburridas";)

Una secuencia no es constante si existen dos miembros de secuencia que son desiguales.

Uhm, entonces, ¿dónde está el desafío?

Tienes que poliglotar la funcionalidad anterior. Es decir, si admite los idiomas A, B y C, todos deben implementar diferentes secuencias OEIS. La elección de la secuencia no está limitada, excepto que necesita diferentes para todos los idiomas.

Es decir, si ejecuta el programa proporcionado en el idioma A, se generará la secuencia X, si ejecuta el programa proporcionado en el idioma B, se generará la secuencia Y (con X! = Y) y si ejecuta el programa proporcionado en el lenguaje C, se generará la secuencia Z (con X! = Z && Y! = Z).

¿Quién gana?

La respuesta con más pares de secuencia / idioma gana. El primer desempate es el tamaño del código (en bytes), siendo menor el mejor. El segundo desempate es el tiempo de presentación y antes es mejor.

¿Algunas palabras / reglas finales?

  • Debe declarar qué idioma generará qué secuencia.
  • Se aplican las reglas estándar de E / S.
  • Si se utilizan diferentes codificaciones entre idiomas, ambos programas deben usar la misma secuencia de bytes.
  • Idioma (2/3) Python revisiones no cuentan como diferentes idiomas. Las diferentes implementaciones de un idioma (como Browser JS vs Node.js) también cuentan como idiomas diferentes.
  • Se aplican lagunas estándar.

44
Esta publicación se realizó de acuerdo con este Meta Q&A .
SEJPM

¿Pueden diferentes idiomas tener una indexación diferente?
Stephen

2
@StepHen sí que pueden.
SEJPM

Respuestas:


16

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

Q

¿Cómo?

Q hace lo siguiente:

  • En MATL, significa + 1, por lo que básicamente se evalúa como input + 1.

  • En Pyth, significa entrada, por lo que solo genera la entrada.

  • En Braingolf, es el incorporado para los números triangulares.

Mini-poliglota

Pyth puede ser reemplazado por cualquiera de los siguientes lenguajes: GolfScript , Pyke , Brachylog o Brain-Flak .


1
bueno, ciertamente elegiste los idiomas correctos para este +1: P
HyperNeutrino

1
@HyperNeutrino Acabo de portar mi respuesta desde allí, pero elegí muy buenos idiomas en ese entonces, así que sí: P - ¡Gracias!
Sr. Xcoder

Recuerde, este es el número de idiomas, no el código de golf: P
Stephen

@StepHen Creo que 3 es razonable.
Sr. 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 puedo agregar un montón más. 1 indexado a menos que se especifique lo contrario.

Tenga en cuenta que es posible que no esté actualizado en los enlaces TIO cuando estoy seguro de que los cambios más recientes no afectaron a los programas más antiguos; puede probarlos si lo desea, pero copiando más de 10 enlaces TIO nuevos cada vez que realice un cambio se cansa después de un rato. Copiaré nuevas cada 5 actualizaciones más o menos.

cQuents v0, A000007

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

#|A captura la entrada y está allí para comentarios de Python. =1significa que el primer elemento es 1, :0significa que el resto son 0, emite el ntérmino dado entrada n. cQuents v0 tiene una característica / error extraño que cuando ;se lee un token inesperado pero válido, como , hace que finalice el análisis.

Pruébalo en línea!

PingPong, A001478

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

Salidas a través del código de salida. 0 indexado.

#se salta el siguiente char. =No hace nada aquí. 1empuja 1e :imprime 1en STDOUT. 0empujones 0. )no hace nada. ;empuja la entrada,~ aparece y empuja -n-1.@termina El código de salida es la parte superior de la pila.

Pruébalo en línea!

axo A001477

Código relevante: }{\

0 indexado. }lee y empuja un número entero desde STDIN (requiere alguna línea nueva por alguna razón), {imprime la parte superior de la pila y\ finaliza el programa. No estoy seguro de lo que hacen los personajes anteriores, pero nada que importe en este caso.

Pruébalo en línea!

cerebro, A000027

Código relevante: ,[.,]

Programa simple para gatos de esolangs.org. Emite la entrada.

Pruébalo en línea!

> <>, A000030

Código relevante: #...;oi

# espejos y envolturas a la derecha, que lo dirigen a leer io; , lo que genera el primer carácter de la entrada. 0 indexado.

Pruébalo en línea!

Ruby, A023443

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

0 indexado. Imprime la entrada menos 1. 0es veraz en Ruby, pero falsey en Python.

Pruébalo en línea!

Python 3, A000578

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

Arrancado de la publicación original de HyperNeutrino, pero es un políglota bastante conocido. quit()termina el programa

Pruébalo en línea!

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-8es necesario para que funcione el material de carbón. También estafado de la publicación original de HyperNeutrino.quit()termina el programa

Pruébalo en línea!

Carbón, A001489

Código relevante: ⎚I±N»

0 indexado. borra la consola (el carbón imprime ASCII como está) e I±Nimprime el negativo de la entrada.»es un error de análisis y finaliza el programa.

Gracias a ASCII-only por su ayuda en el chat.

Pruébalo en línea!

Cardenal, A020725

Código relevante:

 x
x%:+.

Agrega 1 a la entrada y elimina todos los demás punteros.

Pruébalo en línea!


Parece que el código de salida para PingPong es el ToS, se ajusta a 2 ^ 32 como se esperaría de un entero con signo de 64 bits.
Jonathan Allan

@ JonathanAllan genial, gracias.
Stephen

¿Realmente necesita salir con un error de análisis si el código de carbón ya está al final del programa?
MD XF

@MDXF no, estaba (estoy) planeando agregar más al final
Stephen

10

5 idiomas ( 05AB1E , En realidad , Cjam , jalea , MAT ), 7 bytes

UD>li)+

¡Pruébalo en línea !:

  • 05AB1E : secuencia A000027 (enteros positivos: a ( n ) = n ; basado en 1)
  • En realidad : secuencia A023443 (enteros no negativos que incluyen 1: a ( n ) = n −1; basado en 0)
  • Cjam : secuencia A020725 (enteros positivos excluyendo 1: a ( n ) = n +1; basado en 1)
  • Jelly : secuencia A005843 (números pares no negativos: un ( n ) = 2 * n ; 0-base)
  • MAT : secuencia A000290 (cuadrados: una ( n ) = n 2 ; 1-base). Sale con un error después de producir la salida.

7

3 idiomas: protón, A000583 ; Python 3, A000578 ; Python 2, A000290

Protón , 49 bytes

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

Pruébalo en línea!

Python 3 , 49 bytes

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

Pruébalo en línea!

Python 2 , 49 bytes

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

Pruébalo en línea!

Explicación

Proton no tiene '''...'''cadenas, por lo que se (''',''')convierte en ('' ',' '')algo que de alguna manera no causa problemas Evalúa a '', haciendo (''',''')!=','evaluar a True.

Python tiene estas cadenas, por lo que (''',''')es sólo ','por lo que (''',''')!=','se evalúa como False.

Python 2 usa la división de piso para enteros, por lo que 1/2>0es falso en Python 2 y verdadero en Python 3.


Es posible que pueda agregar algunos langs más si convierte la línea de Python 1//1;print(int(input())**(2+(1/2>0)+((''',''')!=',')));quit()y luego agrega idiomas como JavaScript después
Stephen

@StepHen Claro, eso podría funcionar, gracias. Lo haré una vez que pueda agregar 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

Al usarlo como =delimitador para s///medios, podemos excluir fácilmente el código que no queremos, y al usarlo )como delimitador para q{}medios después printde usar qtodos los demás idiomas, podemos simplemente trabajar en<> directamente, sin preocuparnos.

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

Pruébalo en línea!

Rubí: A001477

En Ruby, en //realidad es /(dividir por) /.../(coincidencia de expresiones regulares), por lo que siempre que la expresión regular se termine y se convierta en un número, podemos dividirla de manera segura. __id__es más corto que .to_s.ord, entonces sólo contienen el resto del código que no queremos en 's, juego qde getsy printcon todos los demás.

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

Pruébalo en línea!

Python 2: A005843

Usando el truco estándar para diferenciar 2 de 3 y adjuntando cosas que no queremos """y comentarios.

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

Pruébalo en línea!

Python 3: A008585

Pruébalo en línea!

JavaScript (navegador ES6): A000027

Bastante sencillo para JS, terminó siendo más fácil no reutilizar lo existente printe ir a SpiderMonkey, pero eso también podría ser posible.

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


3

6 idiomas: cúbicamente 5/6/7/8/9/10, 44 40 32 bytes

Tachado 44 sigue siendo regular 44; (

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

Esto imprime:

Explicación:

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

Pruébalo en línea! (Cúbicamente 6x6x6)

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