OEIS को स्वचालित करें


26

ओईआईएस से एक सीक्वेंस बनाने के लिए हम कई चुनौतियों को देखते हैं । जबकि ये चुनौतियाँ मज़ेदार हैं, एक प्रोग्रामर के रूप में मुझे स्वचालन के लिए एक अवसर दिखाई देता है।

आपकी चुनौती एक ऐसा कार्यक्रम बनाना है जो अनुक्रम के अनुक्रम (जैसे A172141 ) और कुछ पूर्णांक n (जैसे 7) को लेता है , और उपयुक्त वेबपेज से उचित मान खींचता है।

आई / ओ

जैसा कि उल्लेख किया गया है, आपके कार्यक्रम को अनुक्रम सूचकांक और इनपुट के रूप में कुछ मूल्य n और उस क्रम में nth शब्द का उत्पादन करना चाहिए। आप अनुक्रम बी-फ़ाइलों में किसी भी सूचकांक को स्वीकार करते हैं । यदि सूचकांक बी-फाइलों में सूचीबद्ध सबसे बड़े सूचकांक से अधिक है, तो आप जो कुछ भी चुनते हैं उसे अपवाद या आउटपुट फेंक सकते हैं (ये परीक्षण मामलों में नहीं हैं)। इनपुट और आउटपुट के मानक तरीकों की अनुमति है।

वेब उपयोग पर प्रतिबंध

आपको https://oeis.org और http://oeis.org के अलावा किसी भी वेबसाइट का उपयोग नहीं करना चाहिए । इसमें url shorteners, आपकी स्वयं की निजी वेबसाइट और यह प्रश्न स्वयं शामिल हैं। यदि आप किसी अन्य वेबसाइट का उपयोग करना चाहते हैं और आप मानते हैं कि आपको ऐसा करने की अनुमति देना अनुचित नहीं है, तो आप एक टिप्पणी छोड़ सकते हैं और मैं मध्यस्थता करूंगा।

स्कोरिंग

यह एक कोड गोल्फ चुनौती है, इसलिए इसके स्रोत कोड जीत में कम से कम बाइट्स के साथ कार्यक्रम। मानक खामियों को अस्वीकार कर दिया जाता है।

परीक्षण के मामलों

यह मानते हुए कि आपकी मशीन में उचित इंटरनेट कनेक्शन है और 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

टिप

  • बी-फाइलों तक पहुँचने पर http://oeis.org/b<A-number>.txtउचित बी-फाइल पर रीडायरेक्ट होगा।

1
यह मेरे लिए स्पष्ट नहीं है कि हमें किन सूचकांकों का समर्थन करना है। पिछले दो परीक्षण मामले संकेत देते हैं कि हमें इसके oeis.org/A000796/b000796.txtबजाय क्वेरी करनी चाहिए, जैसे oeis.org/A000796/list। क्या बी-फाइल से आपके लिए क्या मतलब है ? उस मामले में, ऑफसेट का उल्लेख करना बल्कि अतिश्योक्तिपूर्ण है।
डेनिस

@ डेनिस क्षमा करें मुझे लगता है कि समय के साथ कई संपादन का परिणाम था। मैं स्पष्टता के लिए संपादन करूंगा,
गेहूं जादूगर

मुझे लगता है कि यह सैंडबॉक्स में अधिक समय बिताना चाहिए था, क्योंकि मुझे यकीन है कि यह आपका इरादा नहीं था कि बी-फाइल के बिना दृश्यों को असमर्थित किया जाए।
पीटर टेलर

1
@PeterTaylor OeisWiki के अनुसार "यदि कोई बी-फ़ाइल किसी विशेष अनुक्रम के लिए अपलोड नहीं की गई है, तो सर्वर एक बी-फाइल उत्पन्न करता है जिसमें स्वचालित उपकरण के साथ सुविधा के लिए बिल्कुल प्रदर्शित शब्द होते हैं।" इसलिए हर अनुक्रम के लिए एक बी-फ़ाइल होनी चाहिए। हालाँकि आप समय-समय पर सैंडबॉक्स से इस चुनौती को आगे बढ़ाने के बारे में सही हो सकते हैं।
गेहूं जादूगर

1
खैर, मैंने आज कुछ उपयोगी सीखा है।
पीटर टेलर

जवाबों:


11

बैश + कोरुटिल्स + डब्ल्यू 3 एम, 51 45 42 बाइट्स

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

3 बाइट बंद करने के लिए @EamonOlive को धन्यवाद!

उदाहरण चलाते हैं

$ bash oeis.sh A172141 7
980

यह काम किस प्रकार करता है

w3m एक पाठ-आधारित वेब ब्राउज़र है, जो पठनीय प्रारूप में HTML और सादा पाठ दोनों को प्रदर्शित करता है। कर्ल के विपरीत, यह डिफ़ॉल्ट रूप सेoeis.org/bxxxxxx.txtरीडायरेक्टoeis.org/Axxxxxx/bxxxxxx.txtकरताहै (यह आवश्यक है, क्योंकिरीडायरेक्ट केबादसे), एसटीडीआरआर को कोई आवारा आउटपुट नहीं देता है, और इसका तीन-बाइट नाम है।

आदेश

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

वांछित URL, जहां ${1:1}पहला कमांड-लाइन तर्क है , जिसमें पहला चरित्र नहीं है।

आउटपुट को कमांड में पाइप किया जाता है

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

जो वांछित आउटपुट निकालता है। खाली स्ट्रिंग के साथ लाइन की शुरुआत (दूसरी कमांड-लाइन तर्क, उसके बाद एक स्थान) द्वारा s/^$2 //pप्रतिस्थापित करने का प्रयास ^$2 । यदि प्रतिस्थापन सफल होता है, तो pइसके परिणाम को प्रिंट करता है। बाद में, dबिना शर्त पूरे इनपुट को प्रिंट करने से सेड को रोकने के लिए पैटर्न को हटा देता है ।


आप oeis.org/b${1:1}.txtइसके बजाय कुछ बाइट्स बचा सकते हैंoeis.org/$1/b${1:1}.txt
व्हीट विजार्ड

हे, मैं आम तौर पर इस्तेमाल किया होगा sed -n ..., लेकिन यह एक और चरित्र होगा।
वातीन

1
@Vatine के साथ -n, दोहरे उद्धरणों को एक ही बाइट काउंट के लिए, बची हुई जगह से बदला जा सकता है।
डेनिस

3

पर्ल, 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

CJam, 36 बाइट्स

"oeis.org/b"r1>+".txt"+gN%Sf%z~\ra#=

उदाहरण चलाते हैं

$ cjam oeis.cjam <<< 'A172141 7'
980

2

पायथन 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- संख्या के लिए पूछ रहा है।


कुछ छोटे बचाता है: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

पायथन 3, 153 146 135 बाइट्स

7 बाइट्स FryAmTheEggman के लिए धन्यवाद।

6 बाइट्स Eamon Olive को धन्यवाद।

रॉड के लिए 5 बाइट्स धन्यवाद।

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 ठीक है, किया।
लीक नून

@ लियन हां, क्योंकि जाहिर है मैं बेवकूफ हूं।
लीक नून

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-index) पर लाइन प्राप्त करें , अंतरिक्ष में विस्फोट करें और उस से दूसरे सरणी तत्व का प्रिंट आउट लें।


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के getContentproc OEIS बी फ़ाइल प्राप्त करने के लिए है, तो करने के लिए एक regex का उपयोग findसूचकांक के साथ लाइन। findएक रिटर्न देता है Option[RegexMatch], इसलिए हम getमूल्य से मूल्य प्राप्त करने के लिए उपयोग करते हैं Optionechoस्वचालित रूप से स्ट्रिंग करता है, इसलिए हम स्ट्रिंग को छोड़ देते हैं।


2

गणितज्ञ + OEIS.m , 31

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

उदाहरण का उपयोग: %[A172141,36]


गणितज्ञ, 85५

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

उदाहरण का उपयोग: %["A002206",-1]


2

आर, 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]

पांच बाइट्स ने प्लेनैपस के लिए धन्यवाद बचाया ।


बहुत बुरा आप कर सकते हैं के लिए के लिए -2 नि: शुल्क और उपयोग str_sub पुस्तकालय (stringr) बाइट्स ^^
AlexR

@ एलेक्स मुझे नहीं लगता कि मैं मुफ्त के लिए एक पुस्तकालय का आयात कर सकता हूं ;-)
पज़ोंक

उफ़, मेरी टिप्पणी में एक टाइपो था - बहुत बुरा आप नहीं कर सकते । यह सिर्फ गोल्फ के लिए पहली बार सोचा गया था, क्योंकि स्ट्रिंग मेरे डिफ़ॉल्ट पैकेजों में से एक है जो मेरे सभी प्रोजेक्टों के .Rprofile में लोड है।
एलेक्सर

1
आप उपयोग करने की आवश्यकता नहीं है url, तर्क fileका read.tableएक चरित्र स्ट्रिंग के रूप में URL हो सकता है।
प्लेनैपस

@plannapus वास्तव में, यह सही है। धन्यवाद!
पजाकोंक

1

क्लोजर, 103

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

re-findपहले मैट के रेगेक्स समूहों का एक वेक्टर पाता है, यह एक फ़ंक्शन के रूप में उपयोग किया जाता है और 1स्थिति में स्ट्रिंग प्राप्त करता है 1read-stringस्ट्रिंग को इंट में कनवर्ट करता है। मुझे यकीन नहीं है कि अगर यह रेगेक्स हमेशा सही पंक्ति पाता है।


1

आर, 87 बाइट्स

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

pasteया के बजाय regexes के साथ URL स्ट्रिंग बनाएँ sprintf


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]))

अनुक्रम आईडी और एक नंबर लेता है।


0

जूलिया, 88 बाइट्स

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

@ डेनिस की कुछ मदद से गोल्फ!

सुनिश्चित करें कि आपने Requests.jlचलने से पहले स्थापित किया है।


0

लिस्टशेयर , 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]

इसका दुख तब होता है जब वेब स्क्रैपिंग के लिए बनाई गई भाषा को कई लाइनों की आवश्यकता होती है क्योंकि लिस्टशेयर में नेस्टिंग स्टेटमेंट वर्जित है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.