Vemos muitos desafios aqui, solicitando uma função para criar uma sequência a partir do OEIS . Embora esses desafios sejam divertidos, como programador, vejo uma oportunidade para automação.
Seu desafio é criar um programa que pegue o índice de uma sequência (por exemplo, A172141 ) e algum número inteiro n (por exemplo, 7) e extraia o valor apropriado da página da web apropriada.
I / O
Como mencionado, seu programa deve usar um índice de sequência e algum valor n como entrada e saída do enésimo termo nessa sequência. Você aceita qualquer índice nos arquivos B da sequência . Se o índice for maior que o maior índice listado nos arquivos B, você poderá lançar uma exceção ou emitir o que quiser (estes não estão nos casos de teste). Métodos padrão de entrada e saída são permitidos.
Restrições ao uso da web
Você não deve acessar sites que não sejam https://oeis.org e http://oeis.org . Isso inclui encurtadores de URL, seu próprio site pessoal e essa pergunta em si. Se você deseja acessar algum outro site e acredita que não é injusto permitir isso, deixe um comentário e eu arbitrarei.
Pontuação
Este é um desafio de código de golfe, para que o programa com o mínimo de bytes usado em seu código-fonte ganhe. As brechas padrão não são permitidas.
Casos de teste
Supondo que sua máquina tenha conexão adequada à Internet e que os servidores OEIS estejam funcionando, as seguintes entradas e saídas devem 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
Gorjeta
- Ao acessar os arquivos B, ele
http://oeis.org/b<A-number>.txt
será redirecionado para o arquivo B apropriado.
oeis.org/A000796/b000796.txt
vez deoeis.org/A000796/list
. É o que você quer dizer com arquivos B ? Nesse caso, mencionar o deslocamento é supérfluo.Respostas:
Bash + coreutils + w3m,
514542 bytesGraças a @EamonOlive por jogar fora 3 bytes!
Exemplo de execução
Como funciona
O w3m é um navegador da Web baseado em texto, que exibe HTML e texto sem formatação em formato legível. Ao contrário do curl , ele segue os redirecionamentos por padrão (isso é obrigatório, pois é
oeis.org/bxxxxxx.txt
redirecionado paraoeis.org/Axxxxxx/bxxxxxx.txt
), não produz saída dispersa para STDERR e tem um nome de três bytes.O comando
o URL desejado, onde
${1:1}
é o primeiro argumento da linha de comandos sem seu primeiro caractere.A saída é canalizada para o comando
que extrai a saída desejada.
s/^$2 //p
tenta substituir^$2
(início da linha, seguido pelo segundo argumento da linha de comandos, seguido por um espaço) pela sequência vazia. Se a substituição for bem sucedida,p
imprime o resultado. Depois,d
exclui incondicionalmente o padrão para impedir que o sed imprima toda a entrada.fonte
oeis.org/b${1:1}.txt
em vez deoeis.org/$1/b${1:1}.txt
sed -n ...
, mas isso seria mais um personagem.-n
, as aspas duplas podem ser substituídas por um espaço de escape, para a mesma contagem de bytes.Perl, 59 bytes
Precisa
-M5.010
ou-E
para correr. Por exemplo :Economizou 8 bytes graças à resposta @Dennis , removendo
http://
, como ele fez.fonte
CJam, 36 bytes
Exemplo de execução
fonte
Python 2,
125118113 bytes712 bytes salvos graças ao LynnBem, aqui está a minha chance no meu próprio problema. É provavelmente subótimo, mas acho que fiz um trabalho bastante decente. Ele cria uma função anônima que pega uma sequência e um número inteiro como argumentos e retorna uma sequência como resultado ou gera um erro se o índice estiver fora do intervalo.
Isso pode ser transformado em um programa completo de 124 bytes.
Isso solicita a entrada do usuário. Primeiro, solicite o índice e depois o número A da sequência.
fonte
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]
é mais curto ainda!Python 3,
153146135 bytes7 bytes graças a FryAmTheEggman.
6 bytes graças a Eamon Olive.
5 bytes graças a Rod.
Chame assim:
Execute em uma máquina em que o padrão é utf-8.
fonte
A%s
para%s
e depois o primeiroa[1:]
paraa
?PHP 5.6,
9392 bytesEste é bem direto. Puxe a página com
file()
, obtenha a linha em$line - 1
(0-index), exploda no espaço e imprima o segundo elemento da matriz a partir dele.fonte
Nim ,
123115113 bytesEsta é uma expressão lambda; Para usá-lo, ele deve ser passado como argumento para um procedimento de teste. Um programa completo que pode ser usado para teste é fornecido aqui:
Espera entrada como duas strings. Exemplo de uso:
Usamos
httpclient
ogetContent
proc para obter o arquivo b do OEIS, depois usamos um regex parafind
a linha com o índice.find
retorna umOption[RegexMatch]
, então usamosget
para recuperar o valor deOption
.echo
automaticamente, por isso deixamos de fora a especificação.fonte
Mathematica + OEIS.m , 31
exemplo de uso:
%[A172141,36]
Mathematica, 85
exemplo de uso:
%["A002206",-1]
fonte
R,
9489 bytesUsando em
sprintf
vez depaste0
resultados no mesmo bytecount:Cinco bytes salvos graças ao plannapus .
fonte
url
, o argumentofile
deread.table
pode ser a URL como uma sequência de caracteres.Clojure, 103
re-find
encontra um vetor dos grupos regex do primeiro matche, é usado como uma função e1
coloca a string na posição1
.read-string
converte string em int. Não tenho 100% de certeza se esse regex sempre encontra a linha correta.fonte
R, 87 bytes
Crie a cadeia de URLs com expressões regulares em vez de
paste
ousprintf
.fonte
Node.js +
request
, 109 bytesLeva o ID da sequência e um número.
fonte
Julia, 88 bytes
Jogou golfe com a ajuda de @Dennis!
Verifique se você
Requests.jl
instalou antes de executar.fonte
ListSharp , 266 bytes
É triste quando uma linguagem criada para a raspagem da Web precisa de tantas linhas porque as instruções de aninhamento no ListSharp são um tabu
fonte