OEIS স্বয়ংক্রিয় করুন


26

আমরা এখানে প্রচুর চ্যালেঞ্জ দেখতে পাই যাতে ওইআইএসের অনুক্রম তৈরি করার জন্য একটি ফাংশন চেয়েছি । এই চ্যালেঞ্জগুলি মজাদার হলেও একজন প্রোগ্রামার হিসাবে আমি অটোমেশনের জন্য একটি সুযোগ দেখি।

আপনার চ্যালেঞ্জটি এমন একটি প্রোগ্রাম তৈরি করা যা একটি সিক্যুয়েন্স (যেমন A172141 ) এবং কিছু সংখ্যক এন (উদাঃ 7) এর সূচি গ্রহণ করে এবং উপযুক্ত ওয়েবপৃষ্ঠা থেকে উপযুক্ত মানটি টান।

ইনপুট / আউটপুট

উল্লিখিত হিসাবে, আপনার প্রোগ্রামটি একটি ক্রম সূচক এবং কিছু মান এন ইনপুট হিসাবে নেওয়া উচিত এবং সেই অনুক্রমের নবম পদটি আউটপুট করে। আপনি সিকোয়েন্সের বি ফাইলগুলিতে যে কোনও সূচক গ্রহণ করেন । বি-ফাইলগুলিতে তালিকাভুক্ত বৃহত্তম সূচকের চেয়ে সূচক যদি বৃহত্তর হয় তবে আপনি যা পছন্দ করেন তার ব্যতিক্রম বা আউটপুট ফেলে দিতে পারেন (এগুলি পরীক্ষার ক্ষেত্রে নয়)। ইনপুট এবং আউটপুট মানক পদ্ধতি অনুমোদিত

ওয়েব ব্যবহারে বিধিনিষেধ

আপনার https://oeis.org এবং http://oeis.org ছাড়া অন্য কোনও ওয়েবসাইট অ্যাক্সেস করা উচিত নয় । এর মধ্যে রয়েছে ইউআরএল শর্টনারস, আপনার নিজস্ব ব্যক্তিগত ওয়েবসাইট এবং এই প্রশ্নটি। আপনি যদি অন্য কোনও ওয়েবসাইট অ্যাক্সেস করতে চান এবং আপনি বিশ্বাস করেন যে আপনাকে এটি করার অনুমতি দেওয়া অনুচিত নয়, আপনি কোনও মন্তব্য করতে পারেন এবং আমি সালিশ করব।

স্কোরিং

এটি একটি কোড গল্ফ চ্যালেঞ্জ তাই প্রোগ্রামটি এর উত্স কোডটিতে ব্যবহৃত সর্বনিম্ন বাইট সহ ins স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

পরীক্ষার মামলা

ধরে নিই যে আপনার মেশিনে যথাযথ ইন্টারনেট সংযোগ রয়েছে এবং ওইআইএস সার্ভারগুলি চালু রয়েছে এবং নিম্নলিখিত ইনপুটগুলি এবং আউটপুটগুলির সাথে সামঞ্জস্য করা উচিত।

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বি-ফাইল বলতে কী বোঝা যাচ্ছে ? সেক্ষেত্রে অফসেটের উল্লেখ করা বরং অতিরিক্ত অতিরিক্ত।
ডেনিস

@ ডেনিস দুঃখিত, আমি মনে করি এটি সময়ের সাথে সাথে একাধিক সম্পাদনার ফলাফল ছিল। আমি স্বচ্ছতার জন্য সম্পাদনা করব,
গম উইজার্ড

আমি মনে করি এটি স্যান্ডবক্সে আরও বেশি সময় ব্যয় করা উচিত ছিল, কারণ আমি নিশ্চিত যে বি-ফাইল ছাড়াই সিক্যুয়েন্সগুলি অসমর্থিত হওয়া আপনার উদ্দেশ্য নয় was
পিটার টেলর

1
ওয়েস উইকির অনুসারে @ পিটারটেলর "যদি কোনও নির্দিষ্ট অনুক্রমের জন্য কোনও বি-ফাইল আপলোড না করা হয়, তবে স্বয়ংক্রিয় সরঞ্জামগুলির সুবিধার্থে সার্ভারটি একটি বি-ফাইল উত্পন্ন করে যা শর্তাবলীতে প্রদর্শিত হবে displayed" সুতরাং প্রতিটি অনুক্রমের জন্য একটি বি ফাইল থাকা উচিত। যদিও আপনি অকাল সময়ের আগে স্যান্ডবক্স থেকে এই চ্যালেঞ্জটি সরিয়ে দেওয়ার বিষয়ে সঠিক হতে পারেন।
গম উইজার্ড

1
ঠিক আছে, আমি আজ দরকারী কিছু শিখেছি।
পিটার টেলর

উত্তর:


11

বাশ + কোর্টিলস + ডাব্লু 3 এম, 51 45 42 বাইট

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

3 বাইট বন্ধ গল্ফ করার জন্য @ ইমনঅলাইভকে ধন্যবাদ!

উদাহরণ রান

$ bash oeis.sh A172141 7
980

কিভাবে এটা কাজ করে

ডাব্লু 3 এম একটি পাঠ্য-ভিত্তিক ওয়েব ব্রাউজার, যা পাঠযোগ্য বিন্যাসে এইচটিএমএল এবং সরল পাঠ্য প্রদর্শন করে text কার্লের বিপরীতে, এটি ডিফল্ট অনুসারে পুনঃনির্দেশগুলি অনুসরণ করে (এটি আবশ্যক, যেহেতু এতেoeis.org/bxxxxxx.txtপুনঃনির্দেশ করা হয়oeis.org/Axxxxxx/bxxxxxx.txt), এসটিডিআরআর-তে কোনও বিপথগামী আউটপুট উত্পাদন করে না এবং এর একটি তিন-বাইট নাম রয়েছে।

আদেশ

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

কাঙ্ক্ষিত ইউআরএল, যেখানে ${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
গম উইজার্ড

হেই, আমি সাধারণত ব্যবহার করতাম sed -n ..., তবে এটি আরও একটি চরিত্র হবে।
ভ্যাটাইন

1
@ ভ্যাটাইন উইথ -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 বাইট ধন্যবাদ সেভ করেছেন, সরিয়ে দিয়ে http://


2

সিজেম, 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]

এটি ব্যবহারকারীকে ইনপুটটির জন্য অনুরোধ করে। প্রথমে সূচকের জন্য জিজ্ঞাসা করুন এবং তারপরে ক্রমের এ-সংখ্যাটি।


কিছু ক্ষুদ্র সঞ্চয়: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 বাইট ধন্যবাদ।

ইমন অলিভকে 6 বাইট ধন্যবাদ

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
@ ফ্রাইআম দ্য এজম্যান হ্যাঁ এবং না। ডিফল্ট হ'ল পরিবেশের লোকেল।
ডেনিস

2

পিএইচপি 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এর getContentproc OEIS বি-ফাইল পেতে, তারপর করার জন্য একটি Regex ব্যবহার findসূচকের সাথে লাইন। findএকটি প্রদান করে Option[RegexMatch], তাই আমরা এর getথেকে মানটি পুনরুদ্ধার করতে ব্যবহার করি Optionechoস্বয়ংক্রিয়ভাবে স্ট্রিংফাইজ হয়, তাই আমরা স্ট্রিংফিকেশনটি ছেড়ে যাই।


2

গণিত + ওইআইএস.এম , ৩১

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

পাঁচটি বাইট প্ল্যানাপাসকে ধন্যবাদ রক্ষা করেছে


খুব খারাপ আপনি নিখরচায় লাইব্রেরি (স্ট্রিংগার) করতে পারবেন এবং -২ বাইট str এর জন্য str_sub ব্যবহার করতে পারেন
আলেকজআর

@ অ্যালেক্সআর আমি ভাবি না যে আমি বিনামূল্যে কোনও পাঠাগার আমদানি করতে পারি ;-)
pajonk

ওফস, আমার মন্তব্যে একটি টাইপ ছিল - খুব খারাপ আপনি পারবেন না । গল্ফিংয়ের জন্য এটি কেবল প্রথম চিন্তা ছিল, কারণ স্ট্রিংর আমার সমস্ত প্রকল্পের .R প্রোফাইলে লোড হওয়া আমার ডিফল্ট প্যাকেজগুলির মধ্যে একটি।
অ্যালেক্সআর

1
আপনি ব্যবহার করতে প্রয়োজন হবে না url, যুক্তি fileএর read.tableএকটি অক্ষর স্ট্রিং হিসেবে URL হওয়া পারবেন না।
প্ল্যানাপাস

@ প্ল্যানাপাস সত্যিই ঠিক আছে। ধন্যবাদ!
পাজোনক

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স্ট্রিংকে ইনটে রূপান্তর করে। আমি যদি এই রেজেক্স সর্বদা সঠিক সারিটি খুঁজে পাই তবে আমি 100% নিশ্চিত নই।


1

আর, 87 বাইট

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

ইউআরএল স্ট্রিংটি রেগেক্সেসের পরিবর্তে pasteবা এর সাথে তৈরি করুন sprintf


0

নোড.জেএস + 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]

এটি দুঃখজনক যখন ওয়েব স্ক্র্যাপিংয়ের জন্য তৈরি কোনও ভাষার জন্য অনেকগুলি লাইন প্রয়োজন কারণ তালিকাগুলিতে নেস্টিং বিবৃতি নিষিদ্ধ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.