সদৃশ প্রশ্নগুলি সনাক্ত করুন


20

সদৃশ প্রশ্নগুলি সনাক্ত করুন

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

ইনপুট

আপনার প্রোগ্রাম অবশ্যই ইনপুট হিসাবে একটি একক URL গ্রহণ করতে হবে। এটি ধরে নেওয়া যেতে পারে যে এটি কোডগলফ.স্ট্যাকেক্সচেঞ্জ.কম এ একটি প্রশ্ন বাড়ে ।

আউটপুট

অনুরূপ প্রশ্নের জন্য সাইট অনুসন্ধান করুন। আপনি যদি ভাবেন যে ইনপুট প্রশ্নটি একটি বিদ্যমান প্রশ্নের নকল (বা বিপরীতে), অন্য প্রশ্নের ইউআরএল আউটপুট করুন। আপনি একাধিক ইউআরএল আউটপুট করতে পারেন, নতুন লাইন দ্বারা পৃথক। আপনার আউটপুট শেষে আউটপুট end(একটি পৃথক লাইনে)।

স্কোরিং

  • আপনার আউটপুট এমন কোনও প্রশ্ন যদি সত্যই ইনপুট প্রশ্নের সদৃশ হিসাবে চিহ্নিত হয়েছিল (বা বিপরীতে), আপনি 4 পয়েন্ট অর্জন করেন। এটি একটি "সঠিক অনুমান"।
  • প্রতিটি মিথ্যা ধনাত্মক (ওরফে "ভুল অনুমান") এর জন্য, আপনি 2 পয়েন্ট হারাবেন।
  • প্রতিটি প্রশ্নের জন্য যা আসলে একটি সদৃশ ছিল তবে আপনার আউটপুটে উপস্থিত হবে না (ওরফে "অনুপস্থিত অনুমান"), 1 পয়েন্ট হারাবেন।

32 ইনপুট প্রশ্নগুলি হ্যান্ডল করার পরে সর্বোচ্চ স্কোর জেতে। এই 32 টি প্রশ্ন একটি "রাউন্ড"। প্রতিটি রাউন্ডের শুরুতে, স্কোরগুলি 0 এ পুনরায় সেট করা হবে every প্রতি কয়েক দিন পরে একটি রাউন্ড চালানো হবে এবং প্রতিটি রাউন্ডের পরে লিডারবোর্ড আপডেট হবে।

বিধি

  • প্রশ্ন A এবং C উভয় বি এর নকল হিসাবে বন্ধ হয়ে থাকলে, A সি এর সদৃশ হিসাবে গণনা করা হবে এবং বিপরীতে।
  • প্রতিটি রাউন্ডের শুরুতে, ওয়েবসাইটটি কীভাবে পার্স করা যায় তা ব্যতীত আপনার প্রোগ্রামে কোনও প্রশ্ন (যেমন কোনও হার্ডকোডিং নয় ) সম্পর্কিত কোনও তথ্য থাকতে পারে ।
  • তবে আপনি কোনও রাউন্ডের সময় বাইরের ফাইলগুলিতে ডেটা রাখতে পারেন।
  • রাউন্ডের মধ্যে কোনও ডেটা রাখা যাবে না।
  • আপনার আউটপুটে অবশ্যই একটি নতুন নতুন রেখা থাকতে হবে।
  • আপনি অনুসন্ধান ফলাফল এবং URL বিন্যাস , শিরোনাম, ট্যাগ এবং বিন্যাস বিন্যাস ছাড়াই একটি প্রশ্নের পাঠ্য ব্যতীত ওয়েবসাইট থেকে কোনও ডেটা ব্যবহার করতে পারবেন না । উদাহরণস্বরূপ, আপনি নকল প্রশ্নের উপর প্রদর্শিত "ফু, বার ... দ্বারা সদৃশ হিসাবে চিহ্নিত" লেখাটি ব্যবহার করতে পারবেন না।
  • আপনি ডেটা.এসই বা API এর মাধ্যমে সাইট থেকে সরাসরি এই ডেটাটি পুনরুদ্ধার করতে পারেন।
  • প্রতিটি জমা দেওয়ার একটি নাম থাকতে হবে।
  • প্রতিটি জমা দেওয়ার স্পষ্ট সংস্করণ নম্বর থাকতে হবে।
  • যদি কোনও জমা দেওয়ার সময়সীমা পরে আউটপুট না আসে (সিদ্ধান্ত নেওয়ার জন্য; দয়া করে আপনার জমা দিতে কত সময় নেয় তা জানান) এটি নিহত হবে এবং 8 পয়েন্ট হারাবে।

2
1 মিনিট কি সাবজেক্টিভ নয়? নেটওয়ার্ক সংযোগ এবং ক্রলিং বিপুল সংখ্যক ওয়েব অনুরোধের দিকে পরিচালিত করবে। এটি সহজেই সবার জন্য 1 মিনিটেরও বেশি সময় নিতে পারে :)
Optimizer

4
আমি মনে করি আমরা সরাসরি সেই সংখ্যায় আসতে পারি না, সঠিক প্রান্তিকের সময় নির্ধারণ করতে আপনাকে নিজে একটি উদাহরণ প্রোগ্রাম লিখতে হতে পারে (বা প্রথম উত্তরটি ব্যবহার করতে হবে)।
অপ্টিমাইজার

7
সাইটটি স্ক্র্যাপ করার পরিবর্তে আপনার এপিআইয়ের মাধ্যমে যাওয়া উচিত এবং কোন ক্ষেত্রগুলি ব্যবহার করা যেতে পারে তা নির্দিষ্ট করা উচিত।
গিলস 21'6

5
এই প্রশ্নটি যদি একটি সদৃশ হয়ে থাকে তবে তা মজার হবে .. ওহ
বিড়ম্বনা

3
@ প্রফেসরফিশ আপনি সত্যিই কিছু পরীক্ষার কেস ব্যবহার করতে পারেন, এখানে আপনি যান। এই ডেটা সমস্ত ডেটা.এসই থেকে এসেছে, সুতরাং এটি নির্ভরযোগ্য হওয়া উচিত। আমাকে নির্বোধ দেখায় এবং আমাকে ভুল প্রমাণ করতে নির্দ্বিধায় এই প্রশ্নের কোডগল্ফ.স্ট্যাকেক্সেঞ্জার.কম / কিউ / 37737 এর কোনও সদৃশ নেই। এই প্রশ্নের codegolf.stackexchange.com/q/12348 এই আছে codegolf.stackexchange.com/q/10465 এই প্রশ্নের codegolf.stackexchange.com/q/12498 এই আছে codegolf.stackexchange.com/q/20006 codegolf.stackexchange.com/ q / 242
PenutReaper

উত্তর:


3

পাইথন ঘ

আমি এই এন্ট্রি নাম দিচ্ছি The Differ

কোড:

import urllib.request, gzip, re, json, difflib, sys
API_URL = "https://api.stackexchange.com/"
qurl = input()
qid = int(re.search("\d+",qurl).group(0))
def request(url,wrapper=False,**params):
    params.setdefault("filter","withbody")
    params.setdefault("site","codegolf")
    url = API_URL + url + "?"+"&".join([str(k)+"="+str(v) for k,v in params.items()])
    compressed_response = urllib.request.urlopen(url)
    response = gzip.decompress(compressed_response.read()).decode("utf8")
    response_object = json.loads(response)
    if wrapper:
        return response_object
    else:
        return response_object["items"]
question = request("questions/%s"%qurl)[0]
tags = ";".join(question["tags"])
title = question["title"]
escaped = title.replace(" ","%20")
related = request("similar",title=escaped,pagesize=100)
hasmore = False
length = sys.maxsize
for tag in question["tags"]:
    result = request("search",tagged=tag,
                     wrapper=True,
                     filter="!-*f(6rc.cI8O",
                     pagesize=100)
    if result["total"] < length:
        length = result["total"]
        related.extend(result["items"])
        hasmore = result["has_more"]
        besttag = tag
related.extend(best)
if length < 1500:
    for page in itertools.count(2):
        if not hasmore:
            break
        response = request("search",
                           tagged=besttag,
                           page=page,
                           pagesize=100,
                           filter="!-*f(6rc.cI8O",
                           wrapper=True)
        hasmore = response["has_more"]
        related.extend(result["items"])
matcher = difflib.SequenceMatcher(None, question["body"], None)
titlematcher = difflib.SequenceMatcher(None, question["title"], None)
seen = set()
seen.add(question["question_id"])
for possible in related:
    matcher.set_seq2(possible["body"])
    titlematcher.set_seq2(possible["title"])
    score = matcher.ratio()+titlematcher.ratio()
    qid = possible["question_id"]
    if score > .85 and qid not in seen:
        print(qid)
        seen.add(qid)
print("end")

ফিল্টার "!-*f(6rc.cI8O"অন্তর্ভুক্ত totalবিশ্বব্যাপী মোড়কের বস্তুর উপর পরামিতি এবং bodyপ্রশ্নে প্যারামিটার।

এই এন্ট্রিটি স্বল্প স্বল্প ব্যবহৃত ব্যবহৃত ট্যাগটিতে দুটি এপিআই অনুরোধ প্লাস প্রশ্নে প্রতিটি প্লাস প্লাস করে তোলে। যদি এটি এপি থ্রোটলকে আঘাত করে (এটি এটি পরীক্ষা করে না) তবে এটি একটি বাড়িয়ে তুলবেurllib.error.HTTPError: HTTP Error 400: Bad Request

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