কে বলেছে? ২০১ 2016 সালের রাষ্ট্রপতি নির্বাচন


16

এই চ্যালেঞ্জে আপনার কাজটি হ'ল 300 টিরও কম অক্ষর সহ একটি প্রোগ্রাম লিখতে যা একটি সংক্ষিপ্ত অনুচ্ছেদ বা কোনও প্রার্থী বলেছে এমন কয়েকটি বাক্য এবং আউটপুট কে বলেছে সেগুলি গ্রহণ করে।

ইনপুট : কোনও ফাংশনে প্যারামিটার হিসাবে নেওয়া যেতে পারে, কোনও প্রোগ্রামে ইনপুট ইত্যাদি It এটি একটি সংক্ষিপ্ত অনুচ্ছেদ হবে, সঠিকভাবে বিরামচিহ্ন।

আউটপুট : আপনি যে প্রার্থী মনে করেন এটি। এটি একটি হতে পারে

Ben Carson (1)
Ted Cruz (2)
John Kasich (3)
Marco Rubio (4)
Donald Trump (5)
Hillary Clinton (6)
Bernie Sanders (7)

আমি 1 ম মার্চ পর্যন্ত বাদ পড়েছি এমন লোকদের নাম বাদ দিয়েছি। আপনি নামটি নিজেই আউটপুট করতে পারেন, বা আরও স্বাচ্ছন্দ্যে এই নামটির সাথে মিল রয়েছে।

স্কোরিং: আপনার স্কোরটি সঠিক পরীক্ষার ক্ষেত্রে শতকরা এক ভাগ। সর্বোচ্চ স্কোর জয়। টাইস (বা নিখুঁত স্কোর) কোড গল্ফের মতো কোড দৈর্ঘ্য দ্বারা বিভক্ত হয়।

পরীক্ষার কেসগুলি এ থেকে টানা যায়:

http://www.presidency.ucsb.edu/debates.php

ডেমোক্র্যাট এবং রিপাবলিকান উভয়ই যে বিতর্কটি এ পর্যন্ত ঘটেছে তাতে ক্লিক করুন (1 লা মার্চের আগে)। "অনুচ্ছেদ" 20 টির কম অক্ষরের চেয়ে দীর্ঘ না হলে প্রতিটি অনুচ্ছেদই একটি পরীক্ষার কেস।

এখানে একটি নির্দিষ্ট পৃষ্ঠা থেকে পরীক্ষার কেসগুলি বের করে দেওয়ার কোডটি রয়েছে:

var t = $(".tools").parentNode.querySelectorAll("p");
var categ = {}, cur = 0;
for (var i = 0; i < t.length; ++i) {
  var p = t[i], str = p.innerText;
  if (p.querySelector("b")) {
    cur = p.querySelector("b").innerText.replace(':', '');
    str = str.replace(/^.*?:\s/, '');
  }
  str = str.replace(/\[applause\]/g, '')
  if (str.length < 20) continue;
  if (categ[cur] == null) categ[cur] = [];
  categ[cur].push(str);
}

তারপরে categ.SANDERSসিনেটর স্যান্ডার্স যে সমস্ত অনুচ্ছেদে বলেছেন তার তালিকা পেতে আপনি এটি করতে পারেন ।

উপরের তালিকাভুক্ত প্রার্থীদের দ্বারা বলা না থাকা এমন কোনও কিছুই আপনি বাতিল করতে পারেন (যেমন categ.BUSHবা categ.CHRISTIE)।

সমস্ত পরীক্ষার ক্ষেত্রে ফাইলটি এখানে রয়েছে: https://drive.google.com/file/d/0BxMn8--P71I-bDZBS2VZMDdmQ28/view?usp=sharing

ফাইলটি প্রার্থী দ্বারা সংগঠিত হয়

CANDIDATE CANDIDATE_LAST_NAME
(empty line)
Series of statements. Each paragraph is separated by (NEW PARAGRAPH)-
(empty line)
CANDIDATE NEXT_CANDIDATE_LAST_NAME
(empty line)
etc.

একটি উদাহরণ আংশিক জমা হবে:

if (/ win | wall | great | beautiful/.test(p)) return 5;
if (/ percent | top one | rigged /.test(p)) return 7;
// etc. for all candidates

অথবা

var words = p.split(' ');
// majority of words have less than 5 characters
if (words.length - words.filter(a => a.length < 5).length < 4) evidence[5]++;
// at the end
return /* index with the most evidence */ 

এখানে এমন একটি জায়গা রয়েছে যেখানে আপনি জাভাস্ক্রিপ্ট সমাধানগুলি পরীক্ষা করতে পারবেন: https://jsfiddle.net/prankol57/abfuhxrh/

কোডটি pশ্রেণিবদ্ধ করার জন্য বাক্যটি উপস্থাপন করতে পরামিতি ব্যবহার করে । উদাহরণ কোড যা প্রায় 20% স্কোর করে (অনুমান করা প্রায় 11% পাবে):

if (/ rigged | top | percent | Wall Street /.test(p)) return 'Sanders';
return 'Trump';

ঠিক আমি যা জিজ্ঞাসা করছি: 300 / এরও কম অক্ষরে একটি প্রোগ্রাম / ফাংশন লিখুন যা কোনও প্রার্থী বলেছে যে বাক্যটিকে ইনপুট হিসাবে গ্রহণ করে এবং কোন প্রার্থী বলেছে আউটপুট হিসাবে ফিরে আসে। আপনার স্কোরটি সঠিক পরীক্ষার ক্ষেত্রে শতকরা এক ভাগ you সর্বোচ্চ স্কোর জয়।

হ্যাঁ, আমি জানি যে প্রচুর লাইন রয়েছে [laughter]বা সেগুলির [cheering]মধ্যে। এগুলি সরানো হবে না। সবচেয়ে খারাপভাবে, এগুলি অতিরিক্ত তথ্য যা আপনি উপেক্ষা করতে পারেন; সর্বোপরি, এগুলি আপনি ব্যবহার করতে পারেন এমন অতিরিক্ত তথ্য (উদাহরণস্বরূপ আমি এগুলি তৈরি করেছি, তবে লোকেরা হাসি প্রমাণ হিসাবে মার্কো রুবিও কথা বলছেন)। পরীক্ষার কেসগুলি যেমন পাঠ্য ফাইলে প্রদর্শিত হয় তেমন।


1
আমার একটি পরামর্শ আছে. কীভাবে আপনি এটি কোড-গল্ফ তৈরি করেন তবে আপনাকে সমস্ত উদ্ধৃতিটি ঠিকঠাক পেতে হবে? এছাড়াও, আপনি উদ্ধৃতিগুলি আরও সংক্ষিপ্ত করতে চাইতে পারেন, কারণ হিসাবে এটি সমাধান করা সামান্য হাস্যকর।
সাইয়েস

2
@ কোয়েসের নিখুঁত সংখ্যার বিবেচনা করে কোয়েসের সমস্ত উদ্ধৃতি পাওয়ার বিষয়টি হাস্যকর হবে (আমার মনে হয়)।
soktinpk

1
চতুর চ্যালেঞ্জ ধারণা, যদিও কিছু পরিশোধনের প্রয়োজন হতে পারে। আপনি কিছু প্রতিক্রিয়ার জন্য স্যান্ডবক্সে পোস্টিং বিবেচনা করেছেন?
আশ্বিন গুপ্ত

1
বিজয়ী মানদণ্ড কী? (এবং আপনি কেন ভাবেন যে কেউই নিখুঁত স্কোর পাবে না?)
পিটার টেলর

2
আপনার প্রদত্ত উত্স ডেটাটি একটু অগোছালো (স্বয়ংক্রিয়ভাবে বিশ্লেষণ করা কঠিন), যা আমি মনে করি চ্যালেঞ্জের কিছুটা মনোভাব কেড়ে নিয়েছে। আমি একটি ক্লিন-আপ সংস্করণ তৈরি করেছি যা প্রতি কোনে এক লাইন ব্যবহার করে, একটি ফাঁকা লাইন পরের ক্যান্ডিয়েটের নাম পৃথক করে। বেশিরভাগ ভাষায় পার্স করা এটি অনেক সহজ। আমি এটি এখানে আপলোড করেছি: drive.google.com/file/d/0B3uyVnkMpqbVSnVrZkVwTUhDODg (নিউলাইনগুলি পরিবর্তন করা ছাড়া, আমি ডেটাটি ছোঁয়া ফেলেছি That এতে এর জন্য কোনও এনকোডিং ইস্যুর মতো দেখতে অন্তর্ভুক্ত রয়েছে)
ডেভ

উত্তর:


14

বহুগ্লোট,% 18.6%

এটি এতে কাজ করে: সিজাম, পাইথ, টিস্ক্রিপ্ট, জাপট, সিরিয়াসলি, 05 এবি 1 ই, গল্ফস্ক্রিপ্ট, জেলি এবং আরও অনেক কিছু।

6

এটি সমস্ত ইনপুটগুলির জন্য হিলারিকে আউটপুট করে। কারণ হিলারি সবচেয়ে বেশি বলেছেন। যদিও এটি করা সবচেয়ে বুদ্ধিমান উপায় নয়। এটি ¯ \ _ (ツ) _ / works কাজ করে ¯


আমি পছন্দ করি কীভাবে এটি নিম্ন মানের পোস্ট হিসাবে পতাকাঙ্কিত হয়। : পি
ডেনার

1
@ ডেনারএফি সম্ভবত সংক্ষিপ্ত হওয়ার জন্য
ডাউনওয়েট

1
জাভাস্ক্রিপ্ট ব্যবহারের কোনও কারণ? আপনি এটিকে অন্য কোনও ভাষায় এক চরিত্রের কাছে নিয়ে যেতে পারতেন: পি
ভূত_স_ই_কোড

@ঘোস্ট_ইন_এই_ কোড কোড
ডাউনগোট

9

পাইথ, 34.16% (297 বাইট)

FNc"7creta
6enato
3ohio
2donal
7 major 
6o try t
5tot
5se me
7nai
4m pres
2he ob
3 bala
5jeb
6e aff
5mendous 
2mnest
5. we'r
7ave got to
2c ter
4ntur
7 campaign 
2flat
5obo
4is pre
4-here'
2note
2m el
4 issue 
5, very
6o af
1fact o
6en's
5pany
6he republicans
7 -- 
4meon
5bea
4ory o
7"bI}tNrzZhNB

(মনে রাখবেন যে কয়েকটি লাইন স্পেসে শেষ হয়)

আমি ভাবতে পারি এমন সহজ বিকল্পটি দিয়ে চলেছি: নিদর্শনগুলির একটি তালিকা পরীক্ষা করুন এবং আপনি কোনও মিল খুঁজে পাওয়ার সাথে সাথে সংশ্লিষ্ট প্রার্থীকে আউটপুট দেবেন। যদি সমস্ত কিছু ব্যর্থ হয়, তবে বাকিদের থেকে সম্ভাব্য প্রার্থীকে আউটপুট দিন। এর পরে, এটি যতটা সম্ভব 300 বাইটে যতটা ডেটা ক্র্যামিংয়ের বিষয়ে।

FNc"<data>"bI}tNrzZhNB

ভাঙ্গন:

FN                      for N in ...
   "<data>"              the hard-coded data (newline separated)
  c                      split using...
           b             '\n' constant,
            I           if
              tN         tail (all but first char) of current item
             }           is contained within
                rzZ      the input (lowercased),
                        then:
                   hN    print the head (first char) of the current item
                     B   and break out of the loop.

সুতরাং যে তথ্য কোথা থেকে আসে? ওয়েল কাঠামো সহজভাবে:

<candidate_number><phrase>
<candidate_number><phrase>
<etc.>

(ফাইনাল ফল-ব্যাক হিসাবে কাজ করার জন্য কোনও বাক্য ছাড়াই শেষে একটি এন্ট্রি সহ)

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

আমি বেশ কয়েকটি স্কোরিং সিস্টেম চেষ্টা করেছি। শেষ পর্যন্ত আমি এই এক সাথে গিয়েছিলাম:

score = (
    + matching_quote_count_for_most_likely_author * 10
    - matching_quote_count_for_other_authors * 7
    - token_length
)

কেবলমাত্র নতুন আইটেমগুলিতে যা ভুল উত্তরগুলির পরিচয় দেয় না তা অনুমতি দেওয়ার এক কঠোর পদ্ধতির প্রায় 20-25% এ আটকে গেছে বলে মনে হয়, উচ্চতর হওয়ার জন্য প্রচুর নিদর্শনগুলির প্রয়োজন । এই অস্পষ্ট দৃষ্টিভঙ্গি আরও অনেক ভাল করে, এবং এখনও ~ 80% নির্ভুলতায় পৌঁছতে পারে (550 আইটেম সহ)। জমা দেওয়া স্কোরটিতে 38 টি আইটেম রয়েছে যা আমি 300 অক্ষরের সীমাতে সবচেয়ে বেশি ফিট করতে পারি।

34% ফলাফল আসলে একটি পরীক্ষা সি ++ প্রোগ্রাম থেকে আসে যা একই পদক্ষেপগুলি সম্পাদন করে। এটি মিলবে, তবে এটি পরীক্ষা করার জন্য পাইথ পরীক্ষার জোতা পাইনি।

এটি প্রথমবারের মতো আমি পাইথ ব্যবহার করেছি, তাই আমি কল্পনা করি যে আরও কিছু বাইট স্কোয়েজ করা যেতে পারে, কিছুটা আরও ডেটা দেওয়ার অনুমতি দেয়।


4
এছাড়াও আমি এখন জানি যে স্যান্ডার্স সেক্রেটারি ক্লিনটনের কথা বলতে পছন্দ করেন, ক্লিনটনের সিনেটর স্যান্ডার্সের প্রতি আবেশ ছিল, ক্যাসিচ ওহিয়োকে পছন্দ করে, ক্রুজ সবসময় ডোনাল্ড ট্রাম্পের কথা উল্লেখ করে চলেছে, রুবিও সেঞ্চুরিতে আচ্ছন্ন, কারসনের এই সমস্ত বিষয় "সত্য [গুলি" রয়েছে, এবং ট্রাম্প পুরোপুরি "সম্পূর্ণ" বলতে পছন্দ করেন saying এটি রাজনীতি-বিঙ্গো জেনারেটরের শুরুর মতো অনুভব করে। কিছু ইউকে ব্যক্তিত্বের জন্য আমাকে এটি চেষ্টা করতে হবে…
ডেভ

আমি মনে করি আপনি স্ট্রিংটি প্যাক করে এখানে কিছু বাইট সংরক্ষণ করতে পারেন ."
লিটোসিয়াসট

8

জাভাস্ক্রিপ্ট, 32.87%

299 চরিত্র:

function Q(a,b){return p.toLowerCase().split(' ').join('').includes(a)<<b}z=Q('ink',0)+Q('int',1)+Q('ona',2)+Q('rica',3)+Q('twe',4)+Q("we'",5)+Q('youkn',6);return '55472726464727446676664676767676563641233643334456364233336141745116222136477126111113361611262316263122216111673336225611363276'[z]*1

কৌশল:

আমি একটি ব্রাশ ফোর্স অনুসন্ধান করেছি যার কোন শব্দ বিভাগকে "হ্যাশ" এ অন্তর্ভুক্ত করা উচিত। তারপরে স্ট্রিং লুকআপটি সেই হ্যাশটির সাথে এমনভাবে ঘটে যা সেই হ্যাশটির জন্য সবচেয়ে সম্ভাব্য প্রার্থীকে বেছে নেয়।

কোড নিজেই:

// The Q function checks if a string is present.
// Then left-shifts the true/false result up to e.g. 64,32,16,8,4,2,1
// This way we can combine results into any number 0 to 127.
function Q(a,b){return p.toLowerCase().split(' ').join('').includes(a)<<b}

// Now we check for key string occurrences:
z=Q('ink',0)+Q('int',1)+Q('ona',2)+Q('rica',3)+Q('twe',4)+Q("we'",5)+Q('youkn',6)

// Finally, use this as an index into the lookup string. (Multiply by 1 to convert char to int.)
return '55472726464727446676664676767676563641233643334456364233336141745116222136477126111113361611262316263122216111673336225611363276'[z]*1

এটি আমার প্রথম কোড গল্ফ জমা, সুতরাং পরামর্শগুলি স্বাগত :)


5

গণিত, 23.7775%

(l=ToLowerCase@#;Ordering[-StringCount[l,#]&/@{"fact","donald"|"obama","done"|"ohio","issue"|"united"|"why"|"world","great"|"many","senator","american"|"believe"|"campaign"|"secretary"|"street"|"wall"},1])[[1]]&

এটি প্রতিটি পরীক্ষার্থীর কাছে অনন্য সাধারণ কীওয়ার্ডগুলির উপস্থিতি গণনা করে এবং সর্বোচ্চ স্কোর সহ প্রার্থীর সংখ্যাকে আউটপুট করে।

মূলত, আমি সমস্ত প্রার্থীর সাধারণ শব্দ খুঁজে পেয়েছি

t = Import["~/Documents/candidate quotes.txt"];
ts = DeleteCases[StringSplit[t, "\n\n"], ""];
tss = Split[ts, StringLength[#2] > 20 &][[{3, 4, 5, 6, 7, 1, 2}]];
names = StringSplit[#][[2]] & /@ tss[[All, 1]];
quotes = StringSplit[#, "(NEXT PARAGRAPH)"] & /@ StringJoin /@ tss[[All, 2 ;;]];
(* remove the 100 commonest english words *)
wd = WikipediaData["Most common words in English", "ArticleWikicode"];
Flatten[StringSplit[StringCases[wd, 
  Shortest["{| class=\"wikitable\"" ~~ w__ ~~ "}"] -> w], "\n"]];
common100 = 
Alternatives @@ ToLowerCase@DeleteDuplicates@Flatten[StringSplit /@ 
     StringCases[#, 
      "|| " ~~ ("[[" | "") ~~ w : ((WordCharacter | " ") ..) -> 
       w] & /@ %];
commonest = 
  Commonest[
Flatten[StringSplit[
    StringDelete[ToLowerCase[#], 
     PunctuationCharacter | (WordBoundary ~~ (common100) ~~ 
        WordBoundary)]] & /@ #], 20] & /@ quotes;

এবং প্রতিটি প্রার্থীর জন্য স্বতন্ত্র যে সাধারণ কীওয়ার্ডগুলি বেছে নিয়েছিলেন।

keywords = 
 Alternatives @@@ 
  Table[Complement[commonest[[n]], 
    Union[Flatten[Delete[commonest, n]]]], {n, Length[names]}];

কিছু কীওয়ার্ড ম্যানুয়ালি মুছে ফেলার পরে, এটি চূড়ান্ত সারণী:

Carson    fact
Cruz      donald|obama
Kasich    done|ohio
Rubio     issue|united|why|world
Trump     great|many
Clinton   senator
Sanders   american|believe|campaign|secretary|street|wall

এই কীওয়ার্ডগুলির সাথে ফাংশনের মোট দৈর্ঘ্য 211 টি অক্ষর। আমি সমস্ত উদ্ধৃতিতে ফাংশনটি পরীক্ষা করেছি:

pairs = Flatten[MapThread[Table[q -> #1, {q, #2}] &, {names, quotes}]];
test[q_ -> n_] := Boole[n === names[[p@q]]] (* here p is my function that outputs the predicted candidate's number *)
Total[ParallelMap[test, pairs]]/Length[pairs] // N

যা 23.7775% এর যথার্থতা দেয়।


3

পাইথন, 25.677868%

ইচ্ছামত চারটি ভিন্ন চরিত্র বেছে নিয়েছে যা প্রার্থীদের সনাক্ত করতে ব্যবহৃত হবে। প্রতিটি প্রার্থীকে একটি পার্বত্য চূড়ান্ত অনুসন্ধানের উপর ভিত্তি করে চরিত্র অনুযায়ী স্কোর ফ্যাক্টর দেওয়া হয় যা আমি কয়েক মিনিটের জন্য 25.68% এ শেষ করে দৌড়েছিলাম।

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

w=dict(zip("hr?.",((.847,.491,.821,.54,.744,.765,.234),(.494,.777,.202,.587,.7,.852,.484),(.915,.187,.161,.559,.748,.244,.43),(.11,.013,.628,.974,1.037,.484,.302))))
def f(t,r=(0,0,0,0,0,0,0)):
 s=r
 for c in t:s=map(lambda a,b:a+b,s,w.get(c,r))
 return s.index(max(s))+1

1

জাভাস্ক্রিপ্ট, টিবিডি

a=[...p].reduce((a,b)=>(a<<5)-a+b.charCodeAt(0)|0,0)%1000,alert(a>0?0:1000,a<79?1:a<226?2:a<333?3:a<497?4:a<697?5:a<849?6:7)

প্রতিটি স্ট্রিংকে হ্যাশ কোডে রূপান্তর করে, তারপরে স্পিকার নির্ধারণের জন্য সম্ভাব্য পদ্ধতিগুলি ব্যবহার করে। ভাল লাগবে যদি কোনও ভাল সেটআপ পাওয়া কেউ আমার জন্য এটি পরীক্ষা করতে পারে।


আমি প্রায় 16.1% গণনা করি তবে এটি কী করে তা আমি সত্যিই নিশ্চিত নই। A + = a? 0: 1000 কী করে? (আমাকে সতর্কতাটি একটি রিটার্নের সাথে প্রতিস্থাপন করতে হবে যাতে আমি ঠিক কী করব তা নিশ্চিত ছিল না)
soktinpk

@soktinpk দুঃখিত, a+=অবশ্যই একটি টাইপ ছিল।
LegionMammal978
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.