Wir sehen hier viele Herausforderungen, die nach einer Funktion zum Erstellen einer Sequenz aus dem OEIS verlangen . Während diese Herausforderungen Spaß machen, sehe ich als Programmierer eine Chance für die Automatisierung.
Ihre Herausforderung besteht darin, ein Programm zu erstellen , das den Index einer Sequenz (z. B. A172141 ) und eine Ganzzahl n (z. B. 7) verwendet und den entsprechenden Wert von der entsprechenden Webseite abruft.
I / O
Wie bereits erwähnt, sollte Ihr Programm einen Sequenzindex und einen Wert n als Eingabe und Ausgabe des n-ten Terms in dieser Sequenz verwenden. Sie akzeptieren jeden Index in den B-Dateien der Sequenz . Wenn der Index größer ist als der größte in den B-Dateien aufgeführte Index, können Sie eine Ausnahme auslösen oder eine beliebige Ausgabe erstellen (dies ist nicht in den Testfällen der Fall). Standardmethoden für Ein- und Ausgabe sind zulässig.
Einschränkungen bei der Webnutzung
Sie sollten nicht auf andere Websites als https://oeis.org und http://oeis.org zugreifen . Dazu gehören URL-Kürzungen, Ihre eigene persönliche Website und diese Frage selbst. Wenn Sie auf eine andere Website zugreifen möchten und der Meinung sind, dass dies nicht unfair ist, können Sie einen Kommentar hinterlassen, und ich werde entscheiden.
Wertung
Dies ist eine Code-Golf-Herausforderung, sodass das Programm mit den wenigsten in seinem Quellcode verwendeten Bytes gewinnt. Standardlücken sind nicht zulässig.
Testfälle
Angenommen, Ihr Computer verfügt über eine ordnungsgemäße Internetverbindung und die OEIS-Server sind in Betrieb. Die folgenden Ein- und Ausgänge sollten übereinstimmen.
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
Spitze
- Beim Zugriff auf die B-Dateien
http://oeis.org/b<A-number>.txt
wird auf die richtige B-Datei umgeleitet.
oeis.org/A000796/b000796.txt
eher abfragen sollten alsoeis.org/A000796/list
. Ist der Ehemann das, was Sie mit B-Dateien meinen ? In diesem Fall ist die Angabe des Offsets eher überflüssig.Antworten:
Bash + Coreutils + W3M,
514542 ByteVielen Dank an @EamonOlive für das Golfen mit 3 Bytes!
Beispiellauf
Wie es funktioniert
w3m ist ein textbasierter Webbrowser, der sowohl HTML als auch Nur-Text in lesbarem Format anzeigt. nicht wie Curl folgt es standardmäßig Redirects (dies ist erforderlich, da
oeis.org/bxxxxxx.txt
Redirects tooeis.org/Axxxxxx/bxxxxxx.txt
), erzeugt keine Streuausgabe an STDERR und hat einen Drei-Byte-Namen.Der Befehl
Die gewünschte URL, wobei
${1:1}
das erste Befehlszeilenargument ohne das erste Zeichen ist.Die Ausgabe wird an den Befehl weitergeleitet
das extrahiert die gewünschte Ausgabe.
s/^$2 //p
versucht,^$2
die leere Zeichenfolge (Zeilenanfang, gefolgt vom zweiten Befehlszeilenargument, gefolgt von einem Leerzeichen) zu ersetzen . Wenn die Ersetzung erfolgreich ist, wirdp
das Ergebnis gedruckt. Anschließend wirdd
das Muster unbedingt gelöscht, um zu verhindern, dass sed die gesamte Eingabe druckt.quelle
oeis.org/b${1:1}.txt
anstelle vonoeis.org/$1/b${1:1}.txt
sed -n ...
, aber das wäre noch ein Charakter.-n
können die doppelten Anführungszeichen durch ein Leerzeichen ersetzt werden, bei gleicher Bytezahl.Perl, 59 Bytes
Muss
-M5.010
oder-E
laufen. Zum Beispiel :8 Bytes dank @Dennis Antwort gespart , indem entfernt wurde
http://
, wie er es tat.quelle
CJam, 36 Bytes
Beispiellauf
quelle
Python 2,
125118113 Bytes712 Bytes gespart dank LynnNun, hier ist mein Problem. Es ist wahrscheinlich suboptimal, aber ich denke, ich habe einen ziemlich anständigen Job gemacht. Es erstellt eine anonyme Funktion, die eine Zeichenfolge und eine Ganzzahl als Argumente verwendet und als Ergebnis eine Zeichenfolge zurückgibt oder einen Fehler ausgibt, wenn der Index außerhalb des Bereichs liegt.
Dies kann zu einem 124-Byte-Vollprogramm gemacht werden.
Dies fordert den Benutzer zur Eingabe auf. Fragen Sie zuerst nach dem Index und dann nach der A-Nummer der Sequenz.
quelle
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]
ist noch kürzer!Python 3,
153146135 Bytes7 Bytes dank FryAmTheEggman.
6 Bytes dank Eamon Olive.
5 Bytes dank Rod.
Nenne es so:
Führen Sie das Programm auf einem Computer aus, dessen Standardwert utf-8 ist.
quelle
A%s
zu%s
und dann die erstea[1:]
zua
?PHP 5.6,
9392 BytesDieser ist ziemlich direkt. Ziehen Sie die Seite mit
file()
, erhalten Sie die Linie bei$line - 1
(0-Index), explodieren Sie im Leerzeichen und drucken Sie das zweite Array-Element aus.quelle
Nim ,
123115113 BytesDies ist ein Lambda-Ausdruck; Um es zu verwenden, muss es als Argument an eine Testprozedur übergeben werden. Ein vollständiges Programm, das zum Testen verwendet werden kann, finden Sie hier:
Erwartet die Eingabe als zwei Zeichenfolgen. Anwendungsbeispiel:
Wir verwenden
httpclient
'sgetContent
proc, um die OEIS-B-Datei abzurufen, und verwenden dann einen regulären Ausdruck fürfind
die Zeile mit dem Index.find
gibt ein zurückOption[RegexMatch]
, also verwenden wirget
, um den Wert von der abzurufenOption
.echo
automatisch stringifiziert, so dass wir Stringifizierung weglassen.quelle
Mathematica + OEIS.m , 31
Beispielverwendung:
%[A172141,36]
Mathematica, 85
Beispielverwendung:
%["A002206",-1]
quelle
R,
9489 BytesVerwenden
sprintf
anstelle vonpaste0
Ergebnissen in demselben bytecount:Fünf Bytes gespart dank Plannapus .
quelle
url
, Argumentfile
vonread.table
kann die URL als Zeichenkette sein.Clojure, 103
re-find
Findet einen Vektor der Regex-Gruppen der ersten Matche, wird als Funktion verwendet und1
die Zeichenfolge an der Position abgerufen1
.read-string
wandelt string in int um Ich bin nicht 100% sicher, ob dieser Regex immer die richtige Zeile findet.quelle
R 87 Bytes
Erstellen Sie die URL-Zeichenfolge mit regulären Ausdrücken anstelle von
paste
odersprintf
.quelle
Node.js +
request
, 109 BytesNimmt die Sequenz ID und eine Nummer.
quelle
Julia, 88 Bytes
Golfen mit Hilfe von @Dennis!
Stellen Sie sicher, dass Sie
Requests.jl
vor dem Ausführen installiert haben.quelle
ListSharp , 266 Bytes
Es ist traurig, wenn eine Sprache für das Scrapen im Web so viele Zeilen benötigt, weil das Verschachteln von Anweisungen in ListSharp tabu ist
quelle