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>.txt
se redirigirá al archivo B adecuado.
oeis.org/A000796/b000796.txt
lugar 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.txt
redirige 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 //p
intenta 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,p
imprime su resultado. Luego,d
elimina incondicionalmente el patrón para evitar que sed imprima toda la entrada.fuente
oeis.org/b${1:1}.txt
lugar deoeis.org/$1/b${1:1}.txt
sed -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.010
o-E
para 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%s
a%s
y 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
'sgetContent
proc para obtener la columna b OEIS, a continuación, utilizar una expresión regular afind
la línea con el índice.find
devuelve unOption[RegexMatch]
, por lo que utilizamosget
para recuperar el valor deOption
.echo
stringifica 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
sprintf
lugar depaste0
resultados en el mismo bytecount:Cinco bytes guardados gracias a plannapus .
fuente
url
, el argumentofile
deread.table
puede ser la URL como una cadena de caracteres.Clojure, 103
re-find
encuentra un vector de los grupos de expresiones regulares del primer matche, se usa como una función y1
coloca la cadena en su posición1
.read-string
convierte 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
paste
osprintf
.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.jl
instalado 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