দুটি উইকিপিডিয়া নিবন্ধের মধ্যে একটি রুট সন্ধান করুন


25

ভূমিকা

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

এটি খেলতে সত্যিই সহজ: কেউ লক্ষ্য হিসাবে কিছু উইকিপিডিয়া নিবন্ধ চয়ন করেন। এই উদাহরণের জন্য কোড গল্ফ ধরে নেওয়া যাক । তারপরে সমস্ত খেলোয়াড়কে একটি এলোমেলো নিবন্ধ থেকে শুরু করতে হবে ( সাইডবারে র্যান্ডম আর্টিকেল টিপে বা এই ইউআরএল গিয়ে) এবং আপনি বর্তমানে নিবন্ধটির লিঙ্কযুক্ত নিবন্ধগুলি ব্যবহার করে যত তাড়াতাড়ি সম্ভব "লক্ষ্য" পেতে হবে । বিধিগুলির মধ্যে রয়েছে:

  • অনুসন্ধান ফাংশন অনুমোদিত নয় (স্পষ্টতই)
  • আপনি কেবল নিবন্ধের মূল পাঠ্যের লিঙ্কগুলিতে ক্লিক করতে পারেন (বিশেষত সমস্ত লেখা ভিতরে রয়েছে <div id="bodyContent">)
  • যদি আপনার এলোমেলো পৃষ্ঠা বা অন্য কোনও পৃষ্ঠার মুখোমুখি হয় তবে কোনও বৈধ লিঙ্ক (মৃত লিঙ্ক, লুপস, ইত্যাদি) বা কোনও লিঙ্ক নেই তবে আপনি আবার রোল করতে পারেন।

চ্যালেঞ্জ

আপনি এখানে এসেছেন: দুর্ভাগ্যক্রমে আমি এই খেলায় বেশ খারাপ, তবে আমি একটি নোংরা প্রতারকও। সুতরাং আমি চাই আপনি আমার জন্য এই বোট প্রয়োগ করুন। আমিও একজন প্রোগ্রামার, তাই স্বাভাবিকভাবেই আমার হার্ড ডিস্কে কোড, লাইব্রেরি এবং এর মতো স্টাফ পূর্ণ রয়েছে এবং আমার কাছে কেবল কয়েকটা বাইটের স্মৃতি নেই। সুতরাং এই চ্যালেঞ্জটি হ'ল কোড গল্ফ, কমপক্ষে বাইটস সহ জবাব ।

বাস্তবায়নের বিশদ:

  • অবশ্যই আপনাকে কোনও বুদ্ধিমান বট প্রয়োগ করতে হবে না যা বিষয়গুলির মধ্যে সংযোগগুলি জানে এবং স্বয়ংক্রিয়ভাবে অনুকূল রুট সনাক্ত করে। এই চ্যালেঞ্জের উদ্দেশ্যে ব্রুট জোর করা যথেষ্ট পরিমাণে বেশি
  • আসল খেলায় সময় গণনা করা হয়। আপনার প্রোগ্রামটি নিবন্ধটি সন্ধানের জন্য 1 ঘন্টার বেশি সময় নেওয়া উচিত নয় (এটি এলোমেলো অনুসন্ধানকারীদের মতো লফোলগুলি এড়ানোর জন্য যা "অবশেষে" লক্ষ্যটি আবিষ্কার করবে)
  • যদি লক্ষ্যের কোনও পথ না পাওয়া যায় (যেমন মৃত লিঙ্ক বা একটি লুপ) আপনি নীচের তালিকা থেকে কী করতে হবে তা চয়ন করতে পারেন:
    • প্রস্থান (স্কোর একই থাকে)
    • অন্য এলোমেলো নিবন্ধ পান এবং আবার চেষ্টা করুন এবং লুপগুলিতে কিছুই করবেন না (স্কোর - = 10)
    • একটি মৃত লিঙ্ক বা একটি লুপে অন্য এলোমেলো নিবন্ধ পান (স্বয়ংক্রিয়ভাবে লুপগুলি সনাক্ত করুন) (স্কোর - = 50)
    • ("স্কোর" দ্বারা আমি এখানে আপনার বাইট গণনা বোঝাচ্ছি)
  • আপনি যদি রাস্তাটি "ট্রেস" করেন তবে আরও 20 টি বোনাস বাইট বিয়োগ করা হবে, যাতে আপনি প্রতিটি ব্যক্তিগত পৃষ্ঠাতে শিরোনাম মুদ্রণ করেন।
  • স্ট্যান্ডার্ড নেটওয়ার্ক লাইব্রেরিগুলি ব্যবহার করা যেতে পারে ("আমি নিজের নেটওয়ার্ক লাইব্রেরি তৈরি করেছি যা উইকিপিডিয়া নিবন্ধগুলি ক্রল করে" এর মতো লফোলগুলি এড়ানোর জন্য)
    • আপনার প্রোগ্রামটি কেবল নেটওয়ার্ক-সম্পর্কিত হওয়া উচিত তা হ'ল একটি উইকিপিডিয়া পৃষ্ঠা ডাউনলোড করার জন্য একটি HTTP অনুরোধ প্রেরণ
  • যদি আপনার প্রোগ্রাম পৃষ্ঠাটি সন্ধান করে তবে এটি প্রস্থান করা উচিত, তবে এটি কোনওভাবেই সিগন্যাল করুন যে এটি শেষ হয়েছে ("চ" অক্ষর বা পৃষ্ঠার শিরোনাম প্রিন্ট করা যথেষ্ট)
  • স্ট্যান্ডার্ড লুফোলগুলি এড়ানো উচিত

মজা গল্ফিং আছে!

(এটি এখানে আমার প্রথম প্রশ্ন, সুতরাং দয়া করে তাদের শোষণের আগে মন্তব্যগুলিতে সুস্পষ্ট ফাঁকগুলি এবং সতর্কতাগুলি উল্লেখ করুন - ধন্যবাদ: ডি)


1
একটি চ্যালেঞ্জের জন্য যথেষ্ট আকর্ষণীয়, তবে আমার কাছে অনুরোধের সাথে কোনও সাইট বন্যার পর্যাপ্ত কারণ নেই।
মানটওয়ার্ক

2
@ মানাটওয়ার্ক আমি মোটামুটি নির্দিষ্টভাবে উইকিপিডিয়ায় "আক্রমণ" পরিচালনা করতে পর্যাপ্ত ব্যান্ডউইথ রাখি
ক্রিস্টোফ বহমওয়ালদার

1
ঠিক একটি লুফোল নয় তবে আমি লোকদের অভিযোগ জানাব যে এটি কেবল একটি গ্রাফ অনুসন্ধানের প্রশ্ন যা অনেকগুলি নতুন ধারণা টেবিলে নিয়ে আসে না। আমি তবে এটির সূক্ষ্ম মনে করি, এই সাইটের আরও প্রশ্নের প্রয়োজন। (যদিও আপনি অবশ্যই এই "খেলা" আবিষ্কার করেন নি: পি।)
ক্যালভিনের


1
এটি প্রতিটি বোটের সাথে 50 রানের মধ্যে গড়ে হপগুলির সংখ্যা নিয়ে একটি কোথ চ্যালেঞ্জ হিসাবে ভাল হতে পারে। আরও বুদ্ধিমান বট তৈরির জন্য আরও উত্সাহ দেবে।
rdans

উত্তর:


12

পাইথন 373 -> 303

এটি উইকিপিডিয়া গন্তব্যটি input()(ব্যবহারকারী ইনপুট) থেকে পড়ে এবং এর ফর্ম্যাটে থাকা উচিত /wiki/dest। সুতরাং, মত /wiki/Code_golfবা কিছু /wiki/United_Stateshttp://enwp.orgবাইটগুলি সংরক্ষণের জন্য এটি ইনডেন্টগুলির জন্য এবং উইকিপিডিয়াটির সম্পূর্ণ URL এর পরিবর্তে একটি স্থান ব্যবহার করে ।

  • -50 কারণ এটি কোনও ভাঙা ইউআরএল খুঁজে পেলে এটি একটি নতুন এলোমেলো URL পেয়ে যায়।
  • -20 কারণ এটি পরিদর্শন করা প্রতিটি ইউআরএলটির শিরোনাম মুদ্রণ করে (শিরোনাম -> ইউআরএল পরিবর্তন করতে পারে, তবে শিরোনাম ক্লিনার এবং আসলে আমার উত্সকে আরও বড় করে তোলে)।

এটি প্রতি একবার এবং কিছুক্ষণ স্তব্ধ হয়ে যায় এবং আমি কেন তা বুঝতে পারি না। সম্ভবত উইকিপিডিয়া হার সীমাবদ্ধতার কারণে?

আমি বোস্টন রেড সোক্স উইকিপিডিয়া পৃষ্ঠাটি 9 মিনিট 20 সেকেন্ডে এবং মার্কিন যুক্তরাষ্ট্রের পৃষ্ঠাটি 10 ​​সেকেন্ডের নীচে পেয়েছি , সুতরাং কোড গল্ফটি খুঁজে পেতে খুব বেশি সময় নেওয়া উচিত নয় ...

from mechanize import*;from lxml.html import*;from random import*;a=Browser();a.set_handle_robots(0);i='http://enwp.org/Special:Random';t=input();d={};k=a.open
def f(o):
 if o!=i:d[o]=o
 if o in d:f(i)
 try:v=fromstring(k(o).read()).xpath('//div[@id="content"]//a/@href')
 except:f(i)
 print a.title()
 if t in v:k(t);print 'f';exit()
 else:f(choice(v)) if v else f(i)
f(i)

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

এটি যদিও লুপগুলি সনাক্ত করে? যদি তা না হয় তবে এটি 50 এর পরিবর্তে 10 বোনাস পয়েন্ট
ক্রিস্টোফ বাহ্মওয়ালদার

@HackerCow হাঁ এটা ছাড়া দুবার একই URL ঠিকানায় ভিজিট করা হবে না /wiki/Special:RandomURL। ফলস্বরূপ, অনেকগুলি url দেখার পরে এটি আপনার সম্পূর্ণ র‍্যাম খেয়ে ফেলবে।
এরিক লেগারগ্রেন

আমি শুধু এই বলবো: from ... import*
ɐɔıʇǝɥʇuʎs

1
ডাউনলোড হ্যাঁ আমি. মূলত আমি ব্যবহার করছিলেন import mechanize as mএবং বরাদ্দ m.Browser()করা aযাতে যখন আমি ফোন a.open()আমি প্রভাব কলিং আছি mechanize.Browser().open()এখন আমি শুধু সব আমদানি করছি mechanizeএবং এড়িয়ে যেতে পেতে ... as mঅংশ।
এরিক লেগারগ্রেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.