Nous voyons beaucoup de défis ici demandant une fonction pour créer une séquence à partir de l' OEIS . Bien que ces défis soient amusants, en tant que programmeur, je vois une opportunité d'automatisation.
Votre défi consiste à créer un programme qui prend l'index d'une séquence (par exemple A172141 ) et un entier n (par exemple 7), et extrait la valeur appropriée de la page Web appropriée.
E / S
Comme mentionné, votre programme doit prendre un index de séquence et une valeur n en entrée et sortir le nième terme de cette séquence. Vous acceptez n'importe quel index dans les fichiers B de la séquence . Si l'index est supérieur au plus grand index répertorié dans les fichiers B, vous pouvez lever une exception ou afficher ce que vous choisissez (ce ne sont pas dans les cas de test). Les méthodes standard d'entrée et de sortie sont autorisées.
Restrictions sur l'utilisation du Web
Vous ne devez pas accéder à des sites Web autres que https://oeis.org et http://oeis.org . Cela inclut les raccourcisseurs d'URL, votre propre site Web personnel et cette question elle-même. Si vous souhaitez accéder à un autre site Web et que vous pensez qu'il n'est pas injuste de vous autoriser à le faire, vous pouvez laisser un commentaire et j'arbitrerai.
Notation
Il s'agit d'un défi de golf de code, donc le programme avec le moins d'octets utilisés dans son code source gagne. Les failles standard ne sont pas autorisées.
Cas de test
En supposant que votre machine dispose d'une connexion Internet appropriée et que les serveurs OEIS sont en place et exécutent les entrées et sorties suivantes doivent correspondre.
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
Pointe
- Lorsque vous accédez aux fichiers B, vous
http://oeis.org/b<A-number>.txt
serez redirigé vers le fichier B approprié.
oeis.org/A000796/b000796.txt
plutôt queoeis.org/A000796/list
. Est-ce que le fomer ce que vous entendez par fichiers B ? Dans ce cas, mentionner le décalage est plutôt superflu.Réponses:
Bash + coreutils + w3m,
514542 octetsMerci à @EamonOlive d'avoir joué au golf sur 3 octets!
Exemple d'exécution
Comment ça marche
w3m est un navigateur Web basé sur du texte, qui affiche à la fois du HTML et du texte brut dans un format lisible. Contrairement à curl , il suit les redirections par défaut (cela est obligatoire, car il
oeis.org/bxxxxxx.txt
redirige versoeis.org/Axxxxxx/bxxxxxx.txt
), ne produit aucune sortie parasite vers STDERR et a un nom à trois octets.La commande
l'URL souhaitée, où
${1:1}
est le premier argument de ligne de commande sans son premier caractère.La sortie est dirigée vers la commande
qui extrait la sortie souhaitée.
s/^$2 //p
tente de remplacer^$2
(début de ligne, suivi du deuxième argument de ligne de commande, suivi d'un espace) par la chaîne vide. Si la substitution réussit,p
imprime son résultat. Ensuite,d
supprime inconditionnellement le motif pour empêcher sed d'imprimer la totalité de l'entrée.la source
oeis.org/b${1:1}.txt
place deoeis.org/$1/b${1:1}.txt
sed -n ...
, mais ce serait un personnage de plus.-n
, les guillemets doubles pourraient être remplacés par un espace échappé, pour le même nombre d'octets.Perl, 59 octets
Besoin
-M5.010
ou-E
courir. Par exemple :8 octets enregistrés grâce à la réponse de @Dennis , en supprimant
http://
, comme il l'a fait.la source
CJam, 36 octets
Exemple d'exécution
la source
Python 2,
125118113 octets712 octets enregistrés grâce à LynnEh bien, voici mon propre problème. C'est probablement sous-optimal mais je pense que j'ai fait un travail assez décent. Il crée une fonction anonyme qui prend une chaîne et un entier comme arguments et renvoie une chaîne comme résultat ou renvoie une erreur si l'index est hors limites.
Cela peut être transformé en un programme complet de 124 octets.
Cela invite l'utilisateur à entrer. D'abord demander l'index puis le numéro A de la séquence.
la source
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]
est encore plus court!Python 3,
153146135 octets7 octets grâce à FryAmTheEggman.
6 octets grâce à Eamon Olive.
5 octets grâce à Rod.
Appelez ça comme ceci:
Exécutez sur une machine où la valeur par défaut est utf-8.
la source
A%s
à%s
puis le premiera[1:]
àa
?PHP 5.6,
9392 octetsCelui-ci est assez simple. Tirez la page avec
file()
, obtenez la ligne à$line - 1
(0-index), explosez sur l'espace et imprimez le deuxième élément du tableau à partir de cela.la source
Nim ,
123115113 octetsIl s'agit d'une expression lambda; pour l'utiliser, il doit être passé en argument à une procédure de test. Un programme complet qui peut être utilisé pour les tests est donné ici:
Attend l'entrée comme deux chaînes. Exemple d'utilisation:
Nous utilisons
httpclient
de »getContent
la proc pour obtenir le b fichier OEIS, utilisez une expression régulière àfind
la ligne avec l'indice.find
renvoie unOption[RegexMatch]
, nous utilisons doncget
pour récupérer la valeur à partir duOption
.echo
stringifie automatiquement, donc nous laissons de côté la stringification.la source
Mathematica + OEIS.m , 31
exemple d'utilisation:
%[A172141,36]
Mathematica, 85
exemple d'utilisation:
%["A002206",-1]
la source
R,
9489 octetsUtilisation
sprintf
au lieu depaste0
résultats dans le même nombre d'octets:Cinq octets économisés grâce à plannapus .
la source
url
, l'argumentfile
deread.table
peut être l'URL sous forme de chaîne de caractères.Clojure, 103
re-find
trouve un vecteur des groupes d'expressions rationnelles du premier match, il est utilisé comme une fonction et1
obtient la chaîne en position1
.read-string
convertit la chaîne en int. Je ne suis pas sûr à 100% si cette expression régulière trouve toujours la bonne ligne.la source
R, 87 octets
Créez la chaîne d'URL avec des expressions rationnelles au lieu de
paste
ousprintf
.la source
Node.js +
request
, 109 octetsPrend l'ID de séquence et un nombre.
la source
Julia, 88 octets
Golfé avec l'aide de @Dennis!
Assurez-vous que vous avez
Requests.jl
installé avant d'exécuter.la source
ListSharp , 266 octets
C'est triste quand un langage fait pour le web scraping a besoin de tant de lignes car l'imbrication des instructions dans ListSharp est tabou
la source