อัตโนมัติ OEIS


26

เรามาดูกันเป็นจำนวนมากของความท้าทายที่นี่ขอฟังก์ชั่นเพื่อสร้างลำดับจากที่OEIS แม้ว่าความท้าทายเหล่านี้จะสนุก แต่ในฐานะโปรแกรมเมอร์ฉันเห็นโอกาสสำหรับระบบอัตโนมัติ

ความท้าทายของคุณคือการสร้างโปรแกรมที่ใช้ดัชนีของลำดับ (เช่นA172141 ) และจำนวนเต็ม n (เช่น 7) และดึงค่าที่เหมาะสมจากหน้าเว็บที่เหมาะสม

I / O

ดังที่กล่าวไว้โปรแกรมของคุณควรใช้ดัชนีลำดับและค่าบางค่าเป็นอินพุตและเอาต์พุตคำที่ n ในลำดับนั้น คุณยอมรับดัชนีใด ๆ ในลำดับของB-ไฟล์ หากดัชนีมากกว่าดัชนีที่ใหญ่ที่สุดที่ระบุไว้ในไฟล์ B คุณอาจส่งข้อยกเว้นหรือส่งออกสิ่งที่คุณเลือก (สิ่งเหล่านี้ไม่ได้อยู่ในกรณีทดสอบ) อนุญาตวิธีการอินพุตและเอาต์พุตมาตรฐาน

ข้อ จำกัด ในการใช้งานเว็บ

คุณไม่ควรเข้าถึงเว็บไซต์ใด ๆ นอกเหนือจากhttps://oeis.orgและhttp://oeis.org ซึ่งรวมถึงตัวย่อ URL เว็บไซต์ส่วนตัวของคุณและคำถามนี้เอง หากคุณต้องการเข้าถึงเว็บไซต์อื่นและคุณเชื่อว่ามันไม่ยุติธรรมที่จะอนุญาตให้คุณทำเช่นนั้นคุณสามารถแสดงความคิดเห็นและฉันจะตัดสิน

เกณฑ์การให้คะแนน

นี่เป็นความท้าทายของโปรแกรมกอล์ฟดังนั้นโปรแกรมที่มีจำนวนไบต์น้อยที่สุดที่ใช้ในซอร์สโค้ดจะเป็นผู้ชนะ ช่องโหว่มาตรฐานไม่ได้รับอนุญาต

กรณีทดสอบ

สมมติว่าเครื่องของคุณมีการเชื่อมต่ออินเทอร์เน็ตที่เหมาะสมและเซิร์ฟเวอร์ OEIS ทำงานและใช้งานอินพุตและเอาต์พุตต่อไปนี้ควรสอดคล้องกัน

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

ปลาย

  • เมื่อเข้าถึงไฟล์ B- http://oeis.org/b<A-number>.txtจะเปลี่ยนเส้นทางไปยังไฟล์ B ที่เหมาะสม

1
ยังไม่ชัดเจนสำหรับฉันว่าดัชนีใดที่เราต้องสนับสนุน สุดท้ายทั้งสองกรณีทดสอบคำแนะนำว่าเราควรจะสอบถามเช่นมากกว่าoeis.org/A000796/b000796.txt oeis.org/A000796/listเมอร์คือสิ่งที่คุณหมายถึงโดยB-files ? ในกรณีดังกล่าวการกล่าวถึงออฟเซ็ตนั้นค่อนข้างไม่จำเป็น
Dennis

@Dennis ขออภัยฉันคิดว่าเป็นผลมาจากการแก้ไขหลายครั้งเมื่อเวลาผ่านไป ฉันจะแก้ไขเพื่อความกระจ่างแจ้ง
Wheat Wizard

ฉันคิดว่าสิ่งนี้น่าจะใช้เวลาใน sandbox มากกว่านี้เพราะฉันแน่ใจว่าไม่ใช่ความตั้งใจของคุณที่ไม่สนับสนุนลำดับที่ไม่มีไฟล์ B
Peter Taylor

1
@PeterTaylor ตาม OeisWiki "หากไม่มีการอัพโหลดไฟล์ b- สำหรับลำดับเฉพาะเซิร์ฟเวอร์จะสร้างไฟล์ b-บรรจุคำที่แสดงเพื่อความสะดวกด้วยเครื่องมืออัตโนมัติ" ดังนั้นควรมีไฟล์ B สำหรับทุกลำดับ แม้ว่าคุณจะถูกต้องเกี่ยวกับการย้ายความท้าทายนี้ก่อนเวลาอันควรจากกล่องทราย
ข้าวสาลีตัวช่วยสร้าง

1
วันนี้ฉันเรียนรู้บางสิ่งที่มีประโยชน์
Peter Taylor

คำตอบ:


11

Bash + coreutils + w3m, 51 45 42 ไบต์

w3m oeis.org/b${1:1}.txt|sed "s/^$2 //p;d"

ขอบคุณ @EamonOlive สำหรับการเล่นกอล์ฟ 3 ไบท์!

ตัวอย่างการวิ่ง

$ bash oeis.sh A172141 7
980

มันทำงานอย่างไร

w3mเป็นเว็บเบราว์เซอร์ที่ใช้ข้อความซึ่งแสดงทั้ง HTML และข้อความธรรมดาในรูปแบบที่อ่านได้ แตกต่าง curlมันตามมาเปลี่ยนเส้นทางตามค่าเริ่มต้น (นี้จำเป็นต้องใช้ตั้งแต่oeis.org/bxxxxxx.txtเปลี่ยนเส้นทางไปoeis.org/Axxxxxx/bxxxxxx.txt) ไม่ได้ผลิตเอาท์พุทหลงทางใด ๆ ไปยัง STDERR และมีชื่อสามไบต์

คำสั่ง

w3m oeis.org/b${1:1}.txt

URL ที่ต้องการซึ่ง${1:1}เป็นอาร์กิวเมนต์บรรทัดคำสั่งแรกที่ไม่มีอักขระตัวแรก

เอาต์พุตถูกไพพ์ไปยังคำสั่ง

sed "s/^$2 //p;d"

ซึ่งแยกเอาท์พุทที่ต้องการ s/^$2 //pพยายามแทนที่^$2 (เริ่มต้นบรรทัดตามด้วยอาร์กิวเมนต์บรรทัดรับคำสั่งที่สองตามด้วยช่องว่าง) ด้วยสตริงว่าง หากการเปลี่ยนตัวทำได้สำเร็จให้pพิมพ์ผลลัพธ์ หลังจากนั้นdไม่มีเงื่อนไขลบรูปแบบเพื่อป้องกันไม่ให้sedจากการพิมพ์การป้อนข้อมูลทั้งหมด


คุณสามารถบันทึกได้สองสามไบต์โดยใช้oeis.org/b${1:1}.txtแทนoeis.org/$1/b${1:1}.txt
Wheat Wizard

ปกติแล้วฉันจะใช้sed -n ...แต่นั่นจะเป็นตัวละครอีกตัว
Vatine

1
@Vatine ด้วย-nเครื่องหมายอัญประกาศคู่สามารถถูกแทนที่ด้วยช่องว่างที่ Escape สำหรับจำนวนไบต์เดียวกัน
เดนนิส

3

Perl, 59 ไบต์

($_,$v)=@ARGV;/./;say`curl oeis.org/$_/b$'.txt`=~/$v (.*)/m

ความต้องการ-M5.010หรือ-Eในการทำงาน ตัวอย่างเช่น

$ cat oeis.pl
($_,$v)=@ARGV;/./;say`curl oeis.org/$_/b$'.txt`=~/$v (.*)/m
$ perl -M5.010 oeis.pl A178932 5 2>&-
27

บันทึกแล้ว 8 ไบต์ด้วยคำตอบ @Dennisโดยลบออกhttp://เหมือนที่เขาทำ



2

Python 2, 125 118 113 ไบต์

7 12 ไบต์บันทึกขอบคุณที่ลินน์

import re,urllib2 as u;lambda x,y:re.findall("(?<=%d ).*"%y,u.urlopen("http://oeis.org/b%s.txt"%x[1:]).read())[0]

เอาล่ะฉันไปที่ปัญหาของฉันเอง มีโอกาสน้อยมาก แต่ฉันคิดว่าฉันทำงานได้ดีทีเดียว มันสร้างฟังก์ชั่นที่ไม่ระบุชื่อที่ใช้สตริงและจำนวนเต็มเป็นข้อโต้แย้งและส่งกลับสตริงเป็นผลลัพธ์หรือส่งข้อผิดพลาดหากดัชนีอยู่นอกช่วง

ซึ่งสามารถทำเป็นโปรแกรมขนาด 124 ไบต์ได้

import re,urllib2 as u;print re.findall("(?<=%d ).*"%input(),u.urlopen("http://oeis.org/b%s.txt"%raw_input()[1:]).read())[0]

สิ่งนี้จะแจ้งให้ผู้ใช้ป้อนข้อมูล ก่อนอื่นขอดัชนีจากนั้น A-number ของลำดับ


ประหยัดเล็กน้อย: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]ยังสั้นกว่า!
ลินน์

2

Python 3, 153 146 135 ไบต์

7 ไบต์ขอบคุณ FryAmTheEggman

6 ไบต์ขอบคุณ Eamon Olive

5 ไบต์ขอบคุณ Rod

from urllib.request import*
def f(a,n):
 for l in urlopen("http://oeis.org/b%s.txt"%a[1:]):
  p,q=l.split()
  if n==p.decode():return q

เรียกว่าเป็นแบบนี้:

print(f("A000796","314"))

รันบนเครื่องที่ค่าดีฟอลต์คือ utf-8


1
ในความคิดของฉันต้องการสตริงสำหรับอาร์กิวเมนต์หนึ่งตัวและอาร์เรย์ไบต์สำหรับอีกอาร์กิวเมนต์หนึ่งนั้นอ่อนกว่ารูปแบบอินพุตและคุณควรเพิ่มไบต์ที่จำเป็นในการเข้ารหัสเป็นไบต์ด้วยตัวคุณเอง ไม่มีอะไรเกี่ยวกับความท้าทายนี้ทำให้สมเหตุสมผลที่จะต้องใช้ไบต์ดิบเป็นอินพุท
orlp

คุณไม่สามารถเปลี่ยนA%sไป%sแล้วครั้งแรกที่a[1:]ไปa?
ลินน์

@orlp เอาล่ะเสร็จแล้ว
Leun Nun

@ ลินน์ใช่เพราะเห็นได้ชัดว่าฉันโง่
Leun Nun

1
@FryAmTheEggman ใช่และไม่ใช่ ค่าเริ่มต้นคือสถานที่ของสภาพแวดล้อม
เดนนิส

2

PHP 5.6, 93 92 ไบต์

function f($i,$l){echo explode(' ',file('http://oeis.org/b'.substr($i,1).'.txt')[--$l])[1];}

อันนี้ค่อนข้างตรงไปตรงมา ดึงหน้าด้วยfile()รับบรรทัดที่$line - 1(ดัชนี 0) ระเบิดบนพื้นที่และพิมพ์องค์ประกอบอาร์เรย์ที่สองจากนั้น


2

นิมิต , 123 115 113 ไบต์

import httpclient,nre,future
(a,n)=>get getContent("http://oeis.org/b"&a[1..^0]&".txt").find re "(?<="&n&r" )\d+"

นี่คือการแสดงออกแลมบ์ดา; ในการใช้มันจะต้องถูกส่งผ่านเป็นข้อโต้แย้งไปยังขั้นตอนการทดสอบ มีโปรแกรมที่สมบูรณ์ที่สามารถใช้สำหรับการทดสอบได้ที่นี่:

import httpclient,nre,future
proc test(x: (string, string) -> RegexMatch) = echo x("A172141", "7") # Your input here
test((a,n)=>get getContent("http://oeis.org/b"&a[1..^0]&".txt").find re "(?<="&n&r" )\d+")

ต้องการอินพุตเป็นสองสตริง ตัวอย่างการใช้งาน:

$ nim c oeis.nim
$ ./oeis
980

เราใช้httpclient's getContentproc ที่จะได้รับ OEIS ขไฟล์แล้วใช้ regex ให้findสอดคล้องกับดัชนี findส่งกลับOption[RegexMatch]เพื่อให้เราใช้เพื่อดึงค่าจากที่get ทำให้เป็นสตริงโดยอัตโนมัติดังนั้นเราจึงปล่อยให้การทำให้เป็นสตริงออกมาOptionecho


2

Mathematica + OEIS.m , 31

(OEISFunction@ToString@#;#@#2)&

ตัวอย่างการใช้งาน: %[A172141,36]


Mathematica, 85

#2/.Rule@@@Import["http://oeis.org/b"<>#~StringDrop~1<>".txt","Data"]~DeleteCases~{}&

ตัวอย่างการใช้งาน: %["A002206",-1]


2

R, 94 89 ไบต์

t=read.table(paste0("http://oeis.org/b",substring(scan(,""),2),".txt"));t[t$V1==scan(),2]

ใช้sprintfแทนpaste0ผลลัพธ์ในจำนวนเดียวกัน:

t=read.table(sprintf("http://oeis.org/b%s.txt",substring(scan(,""),2)));t[t$V1==scan(),2]

ห้าไบต์บันทึกขอบคุณที่plannapus


น่าเสียดายที่คุณสามารถไลบรารี่ (stringr) ได้ฟรีและใช้ str_sub สำหรับ -2 ไบต์ ^^
AlexR

@AlexR ฉันไม่คิดว่าฉันสามารถนำเข้าห้องสมุดฟรี ;-)
pajonk

อ๊ะการพิมพ์ผิดในความคิดเห็นของฉัน - เกินไปไม่ดีคุณจะไม่สามารถ มันเป็นความคิดแรกสำหรับการเล่นกอล์ฟเนื่องจาก stringr เป็นหนึ่งในแพ็คเกจเริ่มต้นของฉันที่โหลดใน. โปรไฟล์ของโครงการทั้งหมดของฉัน
AlexR

1
คุณไม่จำเป็นต้องใช้urlอาร์กิวเมนต์fileของread.tableสามารถเป็น URL ที่เป็นตัวอักษร
plannapus

@plannapus แน่นอนว่าถูกต้อง ขอบคุณ!
pajonk

1

Clojure, 103

#(read-string((re-find(re-pattern(str %2" (\\d+)"))(slurp(str"http://oeis.org/b"(subs % 1)".txt")))1)))

re-findพบเวกเตอร์ของกลุ่ม regex matche แรกของมันจะถูกใช้เป็นฟังก์ชั่นและได้รับสตริงที่ตำแหน่ง1 แปลงสตริงเป็น int ฉันไม่แน่ใจ 100% ถ้า regex นี้พบแถวที่ถูกต้องเสมอ1read-string


1

R, 87 ไบต์

f=function(A,n)(R<-read.table(gsub("A(\\d+)","http://oeis.org/b\\1.txt",A)))[R$V1==n,2]

สร้างสตริง URL ที่มี regexes แทนหรือpastesprintf


0

Node.js + request, 109 ไบต์

x=>n=>require('request')(`http://oeis.org/b${x.slice(1)}.txt`,(a,b)=>console.log(b.body.match(n+` (.+)`)[1]))

รับ ID ลำดับและตัวเลข


0

Julia, 88 ไบต์

x\y=match(Regex("$y (.*)"),readall(Requests.get("http://oeis.org/b$(x[2:end]).txt")))[1]

เล่นกอล์ฟด้วยความช่วยเหลือจาก @Dennis!

ตรวจสอบให้แน่ใจว่าคุณได้Requests.jlติดตั้งก่อนใช้งาน


0

ListSharp , 266 ไบต์

STRG a=READ[<here>+"\\a.txt"]
ROWS x=ROWSPLIT a BY [","]
STRG a=GETRANGE x[0] FROM [2] TO [a LENGTH]
NUMB y=<c#int.Parse(x[1])c#>
STRG a=DOWNLOAD["http://oeis.org/b"+a+".txt"]
ROWS x=ROWSPLIT a BY [<newline>]
STRG a=GETLINE x [y]
ROWS x=ROWSPLIT a BY [" "]
SHOW=x[1]

มันน่าเศร้าเมื่อภาษาที่ใช้สร้างเว็บขูดต้องมีหลายบรรทัดเพราะข้อความสั่งการซ้อนใน ListSharp นั้นเป็นข้อห้าม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.