পিপিসিজি হ্যান্ডিক্যাপ সিস্টেম


35

আমরা সব জানি, মেটা হয় সজল সঙ্গে অভিযোগ সম্পর্কে রান কোড-গলফ মধ্যে ভাষায় (হ্যাঁ, প্রতিটি শব্দ একটি পৃথক লিঙ্ক, এবং এই হিমশৈল এর টিপ হতে পারে)।

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


চ্যালেঞ্জ বরং সোজা। ইনপুট হিসাবে , আমরা ভাষার নাম এবং বাইট গণনা আছে । এগুলি আপনি ফাংশন ইনপুট stdinবা আপনার ভাষা ডিফল্ট ইনপুট পদ্ধতি হিসাবে নিতে পারেন ।

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

সর্বাধিক কুরুচিপূর্ণ, হ্যাক করা একসাথে ক্যোয়ারী ( লিঙ্ক - এটি পরিষ্কার করার জন্য নির্দ্বিধায়) ব্যবহার করে, আমি একটি ডেটাसेट তৈরি করতে পরিচালিত করেছি (.xslx, .ods এবং .csv সহ জিপ) যা প্রশ্নের সমস্ত উত্তরগুলির একটি স্ন্যাপশট ধারণ করে । আপনি এই ফাইলটি ব্যবহার করতে পারেন (এবং এটি আপনার প্রোগ্রামে উপলব্ধ হতে অনুমান, যেমন, এটি একই ফোল্ডারে থাকবে) বা অন্য প্রচলিত ফর্ম্যাটে এই ফাইলটি রূপান্তর করুন ( , , ইত্যাদি - কিন্তু এটি শুধুমাত্র মূল ডাটা থাকতে পারে!)। নামটি পছন্দ বাড়ানোর সাথে থাকা উচিত with .xls.mat.savQueryResults.extext


এখন সুনির্দিষ্ট জন্য। প্রতিটি ভাষার জন্য, একটি বয়লারপ্লেট Bএবং ভার্বোসিটি Vপরামিতি রয়েছে। একসাথে, তারা ভাষার একটি রৈখিক মডেল তৈরি করতে ব্যবহার করা যেতে পারে। আসুন nবাইটের আসল সংখ্যা এবং cসংশোধন করা স্কোর হয়ে উঠুন। একটি সাধারণ মডেল ব্যবহার করে n=Vc+Bআমরা সংশোধন করা স্কোরটি পেতে পারি:

    n-B
c = ---
     V

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

ডেটা নীচে হবে। প্রতিটি ডেটা পয়েন্ট হবে বাইট গণনা nএবং প্রশ্নের গড় বাইকোয়ান্ট c। ভোটের জন্য অ্যাকাউন্ট করার জন্য, পয়েন্টগুলি ওজন করা হবে, তাদের ভোটের সংখ্যা এবং এক (0 ভোটের জন্য অ্যাকাউন্টে), সেটিকে কল করুন v। নেতিবাচক ভোট সহ উত্তরগুলি বাতিল করতে হবে। সহজ কথায়, 1 টি ভোট দিয়ে একটি উত্তর 0 টি ভোট দিয়ে দুটি উত্তর হিসাবে সমান হওয়া উচিত।

এই ডেটাটি n=Vc+Bওয়েট লিনিয়ার রিগ্রেশন ব্যবহার করে পূর্বোক্ত মডেলটিতে লাগানো হবে ।


উদাহরণস্বরূপ , প্রদত্ত ভাষার জন্য ডেটা দেওয়া

n1=20, c1=8.2, v1=1
n2=25, c2=10.3, v2=2
n3=15, c3=5.7, v3=5

এখন আমরা প্রাসঙ্গিক ম্যাট্রিক্স এবং ভেক্টর রচনা A, yএবং Wভেক্টর আমাদের পরামিতি সঙ্গে,

  [1 c1]    [n1]    [1 0 0]  x=[B]
A=[1 c2]  y=[n2]  W=[0 2 0],   [V]
  [1 c3]    [n3]    [0 0 5]

আমরা ম্যাট্রিক্স সমীকরণ ( 'ট্রান্সপোজকে বোঝাতে) সমাধান করি

A'WAx=A'Wy

জন্য x(এবং পরিণামে, আমরা আমাদের পেতে Bএবং Vপ্যারামিটার)।


আপনার নিজস্ব ভাষার নাম এবং বাইটকাউন্ট দেওয়ার পরে আপনার স্কোরটি আপনার প্রোগ্রামের আউটপুট হবে। হ্যাঁ, এবারও জাভা এবং সি ++ ব্যবহারকারীরা জিততে পারবেন!

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

শুভ কোডিং!


3
এস / পাইথ ডকুমেন্টেশন সন্ধান করুন / জেলি ডকুমেন্টেশনের বিদ্যমান দুটি টুকরো সাবধানতার সাথে অধ্যয়ন করুন
লিটারোসিয়াস্ট

আপনার জিজ্ঞাসা পার্ল 5 এবং পার্ল 6 এর মধ্যে পার্থক্য বলে মনে হচ্ছে না যা হাসেল থেকে সি ++ পার্থক্য না করার অনুরূপ।
ব্র্যাড গিলবার্ট বিবিগিল

@ ব্র্যাডগিলবার্ট বিগিলস আমি জানি - এটি পুরোপুরি উদ্দীপনা নিয়ে কাজ করে, বেশিরভাগ ক্ষেত্রে লোকেরা বিন্যাসে পাগল হওয়ার কারণে। এটির উন্নতি করতে নির্দ্বিধায় মনে হয় তবে এখনই এটি সংস্করণ সংখ্যার অভাব এবং ভাষার ভাষাগুলির মধ্যে একটি বাণিজ্য C++ <s>6 bytes</s>। তদ্ব্যতীত, আমি আজকের আগে আর কোনও টি-এসকিউএল করিনি এবং আমি ইতিমধ্যে নিজেকে নিয়ে মুগ্ধ হয়েছি যে আমি বাইটকাউন্টটি বের করতে সক্ষম হয়েছি।
সানচাইসেস

আমরা কি আউটলিয়ারগুলি, যেমন কেবল একটি প্রবেশিকা (সাধারণত ভুল ভাষার নাম) বা যে 10,000 টি বাইট রয়েছে সেগুলি যে কোনও ভাষা সরাতে পারি?
রবার্ট ফ্রেজার

পছন্দ করেছেন আমি ডেটা ফাইল ঠিক করব, সম্পাদনা দেখুন।
সানাইচাইজস

উত্তর:


21

গণিত, 244.719 (245 বাইট)

f[l_,n_]:=x/.Solve[d=Rest@Import@"QueryResults.csv";LinearModelFit[#.#2/Tr@#&@@{#~Max~-1&/@#4+1,#3}&@@Thread@#&/@{#,#~Cases~{_,l,__}}&/@d~GroupBy~Last/@#[[;;,1,5]],x,x,Weights->Tr/@#[[;;,;;,4]]]&[d~Cases~{_,l,_,v_/;v>=0,_}~GatherBy~Last]@x==n,x]

পরীক্ষা ক্ষেত্রে

f["mathematica", n]   (* { .820033 (n + 53.4263) } *)
f["mathematica", 245] (* { 244.719 } *)

অন্যান্য ভাষার কি হবে?

f["c++", n]           (* { .821181 (n - 79.5437) } *)
f["java", n]          (* { .717579 (n - 56.0858) } *)
f["cjam", n]          (* { 2.21357 (n + 2.73772) } *)
f["pyth", n]          (* { 4.52194 (n - 8.82806) } *)

বিকল্প মডেল :log(c)=log((n-B)/V)

কোড গল্ফের একটি উল্লেখযোগ্য বৈশিষ্ট্য (এবং সম্ভবত অন্যান্য কোডিং সমস্যা) হ'ল প্রোগ্রামগুলির দৈর্ঘ্যের বন্টন তাত্পর্যপূর্ণ বিতরণ হিসাবে থাকে (অভিন্ন বিতরণের বিপরীতে)। অত: পর মডেল log(n)=log(Vc+B)অনেক বেশি বড় সঙ্গে বিন্দুর মধ্যে প্রভাব সামঞ্জস্য বজায় রাখা হয় cএবং ছোট c

আমরা নীচের গ্রাফগুলিতে দেখতে পাচ্ছি, পয়েন্টগুলির বন্টন লোগারিডমিক স্কেলে ফিট করার জন্য উপযুক্ত।


নতুন মডেল ফলাফল

Language       V       B

Python       1.365   -19.4    
Javascript   1.002     1.6
Ruby         0.724     1.7
Perl         1.177   -32.7
C            1.105     1.5
Haskell      1.454   -24.5
Mathematica  1.319   -39.7
PHP          1.799   -62.0
Java         1.642     4.4
C#           1.407     4.5

CJam         0.608   -12.5
Pyth         0.519   -11.4
Golfscript   0.766   -18.0
J            0.863   -21.4
APL          0.744   -17.7
K            0.933   -23.3
Retina       1.322   -37.9
MATL         0.762   -13.3
Jelly        0.965   -23.8

আমরা দুটি ব্যতিক্রমী ভাষা পেয়েছি - রুবি উইথ V=0.724এবং রেটিনা উইথV=1.322 , এবং একটি জনপ্রিয় গল্ফিং ভাষা হওয়ার মাপদণ্ড - একটি বড় নেতিবাচক বয়লারপ্লেট রয়েছে।


@ সানচিইজস এতদূর ভাল, আপনি সেমিকোলনগুলিকে ডিলিমিটার হিসাবে ব্যবহার করেন না csv
এনজিপিপোরগান

এটি আপনার জন্য মাইক্রোসফ্ট এক্সেল। স্পষ্টতই CSV হিসাবে সংরক্ষণ করা এটির পক্ষে খুব কঠিন।
সান্চাইজস

সুতরাং দৃশ্যত সিজেমের একটি নেতিবাচক বয়লারপ্লেট দৈর্ঘ্য রয়েছে। মজাদার.
পূর্কাকুডারী

@ Pietu1998 লিনিয়ার মডেলটি এতটা সঠিক নয়, আমি মনে করি।
এনজিপিপোরগান

@ পিটু ১৯৯৮ পুরোপুরি আশ্চর্যজনক নয়, যেহেতু গল্ফিংয়ের ভাষাগুলি সাধারণত অন্তর্নিহিত ইনপুট নেয় এবং এতে অন্তর্নিহিত আউটপুট ফিরে আসতে পারে। মনে রাখবেন যে "বয়লারপ্লেট দৈর্ঘ্য" গড় বোলারকে সংজ্ঞায়িত করা হয়, আদর্শ বয়লারপ্লেটলেস ভাষা আর্ট নয়। আমি এই ফলাফলগুলিতে ঝলক দেওয়ার সময় এই সাধারণ মডেলটি কতটা ভাল করে দেখায় তা দেখে আমি ইতিবাচকভাবে আশ্চর্য হয়েছি।
সান্চাইজস

3

পাইথন 3, 765.19 (765) বাইট

সম্ভবত এখানে গল্ফ করার জন্য কিছু জায়গা। ম্যাট্রিক্স স্টাফের জন্য অলস প্রয়োজন। স্টিডিন থেকে পড়া, নীচে ফর্ম্যাট করা: [ল্যাং] [বাইটস / এন]। আপনি যখন q পাঠাবেন তখন থামেন।

import numpy as n,csv
L={};Q={};X={};D=n.dot;f=open('QueryResults.csv',encoding="utf8");R=csv.reader(f);f.readline();Z=list.append;M=n.matrix
for r in R:
 if r[1] not in L:L[r[1]]=[]
 if r[4] not in Q:Q[r[4]]=[]
 Z(L[r[1]],r);Z(Q[r[4]],r)
for l in L:
 b=[];a=[];v=[];t=[]
 for r in L[l]:
  if int(r[3])>-1:
   Z(b,int(r[2]));o=[]
   for q in Q[r[4]]:Z(o,int(q[2]))
   Z(a,sum(o)/len(o));Z(v,int(r[3])+1)
 for k in a:Z(t,[1,k])
 if len(t)<1:continue
 A=M(t);T=A.transpose();W=n.diag(v);y=M(b).reshape((len(b),1));e=D(D(T,W),A)
 if n.linalg.det(e)==0:continue
 i=n.linalg.inv(e);X[l]=D(i,D(D(T,W),y))
p=input()
while(p!="q"):
 S=p.split()
 if S[1]=='n':print("(n-("+str(X[S[0]].item(0))+"))/"+str(X[S[0]].item(1)))
 else:print(str((int(S[1])-X[S[0]].item(0))/X[S[0]].item(1)))
 p=input()

ফলাফল

আমি হয়ত কিছু সময় ভুল কিছু করেছি; আমি গাণিতিকের উত্তরের চেয়ে আলাদা ফলাফল পেয়েছি:

python3 808 -> 765.19
python3 n   -> (n-(32.41))/1.01

c++ n        -> (n-(71.86))/1.17
cjam n       -> (n-(-14.09))/0.51
java n       -> (n-(18.08))/1.64
pyth n       -> (n-(1.42))/0.28
jelly n      -> (n-(-4.88))/0.34
golfscript n -> (n-(-0.31))/0.44
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.