Vemos muchos desafíos aquí pidiendo una función para crear una secuencia desde el OEIS . Si bien estos desafíos son divertidos, como programador veo una oportunidad para la automatización.
Su desafío es crear un programa que tome el índice de una secuencia (por ejemplo, A172141 ) y algún número entero n (por ejemplo, 7), y extraiga el valor apropiado de la página web correspondiente.
I / O
Como se mencionó, su programa debe tomar un índice de secuencia y algún valor n como entrada y salida del enésimo término en esa secuencia. Acepta cualquier índice en los archivos B de la secuencia . Si el índice es mayor que el índice más grande listado en los archivos B, puede lanzar una excepción o generar lo que elija (estos no están en los casos de prueba). Se permiten métodos estándar de entrada y salida.
Restricciones en el uso de la web.
No debe acceder a ningún sitio web que no sea https://oeis.org y http://oeis.org . Esto incluye acortadores de URL, su propio sitio web personal y esta pregunta en sí. Si desea acceder a otro sitio web y cree que no es injusto permitirle hacerlo, puede dejar un comentario y arbitraré.
Tanteo
Este es un desafío de código de golf, por lo que gana el programa con la menor cantidad de bytes utilizados en su código fuente. Las lagunas estándar no están permitidas.
Casos de prueba
Suponiendo que su máquina tenga una conexión a Internet adecuada y que los servidores OEIS estén funcionando, las siguientes entradas y salidas deberían corresponder.
A172141, 7 -> 980
A173429, 4 -> 276
A190394, 6 -> 16
A002911, 11 -> 960
A052170, 3 -> 24
A060296, 8 -> 3
A178732, 5 -> 27
A000001, 1 -> 1
A000796, 314 -> 3
A001622, 162 -> 8
A002206, -1 -> 1
Propina
- Al acceder a los archivos B
http://oeis.org/b<A-number>.txtse redirigirá al archivo B adecuado.

oeis.org/A000796/b000796.txtlugar deoeis.org/A000796/list. ¿Es el fomer lo que quieres decir con archivos B ? En ese caso, mencionar el desplazamiento es bastante superfluo.Respuestas:
Bash + coreutils + w3m,
514542 bytes¡Gracias a @EamonOlive por jugar golf en 3 bytes!
Ejecución de ejemplo
Cómo funciona
w3m es un navegador web basado en texto, que muestra tanto HTML como texto sin formato en formato legible. A diferencia de curl , sigue las redirecciones de forma predeterminada (esto es obligatorio, ya que
oeis.org/bxxxxxx.txtredirige aoeis.org/Axxxxxx/bxxxxxx.txt), no produce ninguna salida perdida a STDERR y tiene un nombre de tres bytes.El comando
la URL deseada, donde
${1:1}es el primer argumento de línea de comandos sin su primer carácter.La salida se canaliza al comando
que extrae el resultado deseado.
s/^$2 //pintenta reemplazar^$2(inicio de línea, seguido del segundo argumento de la línea de comandos, seguido de un espacio) con la cadena vacía. Si la sustitución es exitosa,pimprime su resultado. Luego,delimina incondicionalmente el patrón para evitar que sed imprima toda la entrada.fuente
oeis.org/b${1:1}.txtlugar deoeis.org/$1/b${1:1}.txtsed -n ..., pero ese sería un personaje más.-n, las comillas dobles podrían reemplazarse con un espacio escapado, para el mismo recuento de bytes.Perl, 59 bytes
Necesita
-M5.010o-Epara correr. Por ejemplo :Ahorró 8 bytes gracias a la respuesta de @Dennis , al eliminar
http://, como lo hizo.fuente
CJam, 36 bytes
Ejecución de ejemplo
fuente
Python 2,
125118113 bytes712 bytes guardados gracias a LynnBueno, aquí está mi ir a mi propio problema. Es probable que sea subóptimo, pero creo que hice un trabajo bastante decente. Crea una función anónima que toma una cadena y un entero como argumentos y devuelve una cadena como resultado o arroja un error si el índice está fuera de rango.
Esto se puede convertir en un programa completo de 124 bytes.
Esto solicita al usuario la entrada. Primero preguntando por el índice y luego el número A de la secuencia.
fuente
import re,urllib2 as u;lambda x,y:re.search("%d (.*)\n"%y,u.urlopen("http://oeis.org/b%s.txt"%x[1:]).read()).group(1)lambda x,y:re.split("%d (.*)"%y,u.urlopen("http://oeis.org/b%s.txt"%x[1:]).read())[1]aún es más corto!Python 3,
153146135 bytes7 bytes gracias a FryAmTheEggman.
6 bytes gracias a Eamon Olive.
5 bytes gracias a Rod.
Llámalo así:
Ejecutar en una máquina donde el valor predeterminado es utf-8.
fuente
A%sa%sy luego el primeroa[1:]aa?PHP 5.6,
9392 bytesEste es bastante sencillo. Tire de la página con
file(), obtenga la línea en$line - 1(índice 0), explote en el espacio e imprima el segundo elemento de matriz a partir de eso.fuente
Nim ,
123115113 bytesEsta es una expresión lambda; para usarlo, se debe pasar como argumento a un procedimiento de prueba. Aquí se ofrece un programa completo que se puede utilizar para realizar pruebas:
Espera entrada como dos cadenas. Ejemplo de uso:
Utilizamos
httpclient'sgetContentproc para obtener la columna b OEIS, a continuación, utilizar una expresión regular afindla línea con el índice.finddevuelve unOption[RegexMatch], por lo que utilizamosgetpara recuperar el valor deOption.echostringifica automáticamente, por lo que dejamos fuera la stringificación.fuente
Mathematica + OEIS.m , 31
ejemplo de uso:
%[A172141,36]Mathematica, 85
ejemplo de uso:
%["A002206",-1]fuente
R,
9489 bytesUsando en
sprintflugar depaste0resultados en el mismo bytecount:Cinco bytes guardados gracias a plannapus .
fuente
url, el argumentofilederead.tablepuede ser la URL como una cadena de caracteres.Clojure, 103
re-findencuentra un vector de los grupos de expresiones regulares del primer matche, se usa como una función y1coloca la cadena en su posición1.read-stringconvierte cadena a int. No estoy 100% seguro de si esta expresión regular siempre encuentra la fila correcta.fuente
R, 87 bytes
Construya la cadena URL con expresiones regulares en lugar de
pasteosprintf.fuente
Node.js +
request, 109 bytesToma la secuencia ID y un número.
fuente
Julia, 88 bytes
¡Golfé con la ayuda de @Dennis!
Asegúrese de haberlo
Requests.jlinstalado antes de ejecutarlo.fuente
ListSharp , 266 bytes
Es triste cuando un lenguaje creado para el raspado web necesita tantas líneas porque las declaraciones de anidamiento en ListSharp son tabú
fuente