ভাষা অনুমান করুন


23

ভূমিকা

এই সাইটটি দ্রুত কোড স্নিপেটের একটি বিশাল ডেটাসেট তৈরি করছে, সুতরাং আসুন এটি দিয়ে কিছু করি!

এখানে একটি তথ্য ফাইল । এটিতে এই সাইট থেকে নেওয়া 113 টি ভাষার 9,066 টি অনন্য ভাষা + স্নিপেট জোড়া রয়েছে। ফর্ম্যাটটি ট্যাব-বিচ্ছিন্ন (ভাষা-ট্যাব-স্নিপেট) স্নিপেটের সমস্ত নতুনলাইন সহ <LF>প্রতিস্থাপন করা হয়েছে এবং 4 টি স্পেসের সাথে সমস্ত ট্যাব প্রতিস্থাপন করা হয়েছে। প্রতিটি ভাষার জন্য কমপক্ষে 5 টি স্নিপেট রয়েছে।

[আপডেট: আমি পূর্বে মিস করা কিছু পাইথন এবং রেজিএক্সপ ভার্সনগুলি মার্জ করার জন্য ডেটা ফাইলে সামান্য পরিবর্তন করেছি - উপরের লিঙ্কটি আপডেট করা হয়েছে]

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি কোড স্নিপেট নেয় এবং এতে লেখা ভাষাকে আউটপুট দেয় (বিশদগুলির জন্য নীচে দেখুন)। আপনার উত্সের মোট আকার + আপনার প্রয়োজনীয় কোনও ডেটা অবশ্যই 300 বাইট বা তার চেয়ে কম হওয়া উচিত এবং আপনার প্রোগ্রামের নিজস্ব উত্স কোড দেওয়ার সময় অবশ্যই সঠিক ভাষাটিকে আউটপুট দিতে হবে । সর্বাধিক নির্ভুলতা (উপরের ডেটাসেটের সর্বাধিক সঠিক উত্তর) জয়ী।

বিধি

  • আপনার উত্স কোড, সংস্থানসমূহ এবং কোনও প্রয়োজনীয় সংকলন / রানটাইম পতাকাগুলির মোট আকার 300 বাইটের বেশি হবে না।
  • আপনার উত্তর উপরের ডেটাসেটের বিরুদ্ধে পরীক্ষা করা হবে; এটিকে ইনপুট হিসাবে একটি "স্নিপেট" মান দেওয়া হবে এবং এর আউটপুটটি ডেটাসেট অনুসারে "সঠিক" আউটপুটটির সাথে তুলনা করা হবে। এটি ডেটাসেটের সমস্ত এন্ট্রিগুলির জন্য পুনরাবৃত্তি হবে এবং সঠিক উত্তরের চূড়ান্ত সংখ্যাটি আপনার স্কোর।
  • আপনি ইনপুট এনকোডিং চয়ন করতে পারেন - আমি ইউটিএফ -8 ধরে নেব, সুতরাং আপনার যদি অন্য কোনও এনকোডিংয়ের প্রয়োজন হয় তবে আপনার উত্তরে এটি উল্লেখ করুন।
  • <LF>নতুন লাইনের জন্য আপনাকে প্রতিস্থাপনটি ব্যবহার করার দরকার নেই ; যদি আপনার এন্ট্রিটি আক্ষরিক নিউলাইনগুলি (চারিদিক 10) হিসাবে নতুন লাইনগুলি পাওয়ার প্রত্যাশা করে, তবে আপনার উত্তরে এটি নির্দিষ্ট করুন।
  • আপনার এন্ট্রিটি অবশ্যই মনে করবে যে ভাষাটি ইনপুট স্নিপেটটি লিখিত আছে বলে মনে করে lots আপনার উত্তরের ম্যাপিংগুলি কেবল নোট করুন।
  • প্রতিটি ভাষার জন্য আপনার কেবল 1 আউটপুট ম্যাপিং থাকতে পারে (যেমন 3 এর অর্থ "জাভা" হয় তবে আপনার 4 টি অর্থ "জাভা "ও থাকতে পারে না)।
  • যখন তার নিজস্ব উত্স কোড দেওয়া হয়, আপনার প্রোগ্রামকে অবশ্যই সঠিক উত্তর তৈরি করতে হবে (এতে লেখা ভাষায় অবশ্যই আউটপুট আনতে হবে)।
  • আপনাকে ডেটাসেটে সমস্ত ভাষা সমর্থন করার দরকার নেই, এবং আপনি চাইলে অতিরিক্ত ভাষাও সমর্থন করতে পারেন (যেমন আপনার ডাটাবেসের কোনও একটি ভাষাতে প্রবেশ নেই)।
  • আপনার প্রোগ্রামটি অবশ্যই ডিটারমিনিস্টিক (দু'বার একই ইনপুট সরবরাহ করতে হবে একই আউটপুট উত্পাদন করতে হবে)।

টাই-ব্রেকিং

  • একটি প্রবেশিকা জেতা না হওয়া পর্যন্ত ডেটাসেট হ্রাস করে টাইগুলি সিদ্ধান্ত নেওয়া হবে। সর্বাধিক জনপ্রিয় ভাষার জন্য সমস্ত স্নিপেট সরিয়ে ডেটাসেট হ্রাস করা হবে (অর্থাত বিরল ভাষার যথার্থতার সাথে বন্ধনগুলি ভেঙে দেওয়া হয়েছে)। উদাহরণস্বরূপ, যদি এ এবং বি পূর্ণ ডেটাসেটে 70% স্কোর করে তবে সমস্ত পাইথনের স্নিপেটগুলি সরানো হবে। যদি A এবং B উভয়ই এখন 60% স্কোর করে তবে সিজেম সরানো হবে। যদি এখন স্কোর হয় 50% তবে বি স্কোর 55%, বি বিজয়ী।
  • যদি 100% নির্ভুলতা অর্জন করা হয় তবে একই ভাষার জন্য আরও নমুনা সম্বলিত সেকেন্ড (ব্লাইন্ড) ডেটাসেট ব্যবহার করে সম্পর্কগুলি স্থির করা হবে।

উদাহরণ 1

পাইথন লিপি:

print("python")

এই লিপিটি সফলভাবে "অজগর" উত্পাদন করে যখন তার নিজস্ব উত্স কোড দেওয়া হয়, সুতরাং এটি বৈধ। ডেটাসেটে এটি স্কোর করে 1008/9066 = 11.1%

উদাহরণ 2

জাভাস্ক্রিপ্ট ফাংশন:

function f(s){return /function/.test(s)?1:2}

ম্যাপিংগুলি 1 → জাভাস্ক্রিপ্ট, 2 → পাইথন সহ আবার এটি সফলভাবে তার নিজস্ব উত্সের জন্য 1 ("জাভাস্ক্রিপ্ট") উত্পাদন করে এবং ডেটাসেটে এটি স্কোর করে 1092/9066 = 12.0%


কোথা থেকে তথ্য এসেছে?

আমি এই সাইটে [কোড-গল্ফ] চ্যালেঞ্জগুলি থেকে নমুনাগুলি টানতে একটি SEDE কোয়েরি তৈরি করেছি । ফলাফলের 10,000 টি উত্তর থেকে আমি প্রত্যেকের কোড এবং ভাষার নাম সন্ধানের জন্য হ্যাক-একসাথে পাইথন স্ক্রিপ্ট ব্যবহার করেছি, তারপরে 5 টিরও কম উদাহরণ দিয়ে কোনও ভাষা ফিল্টার করেছি। ডেটা 100% পরিষ্কার নয় (আমি জানি এটির কিছু নন-কোড স্নিপেট রয়েছে এটি) তবে যথেষ্ট ভাল হওয়া উচিত।


বছরের প্রথম থেকেই এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত: কে বলেছে? ২০১ 2016 সালের রাষ্ট্রপতি নির্বাচন

আংশিকভাবে কী ভাষা সম্পর্কিত?


3
300 বাইটে করা অবিশ্বাস্যরকম চ্যালেঞ্জ হিসাবে মনে হচ্ছে। সম্ভবত আরও বাইট বরাদ্দ?
রোহান ঝুনঝুনওয়ালা

1
@ রোহানঝুনঝুনওয়ালা হ্যাঁ আমি ভাবলাম এটি বেশ চ্যালেঞ্জ হবে! যদিও আমি কেউ 100% নির্ভুলতা পাব আশা করি না; চ্যালেঞ্জটি যতটা সম্ভব উচ্চতর হওয়া। "কে বলেছে?" আমি যে চ্যালেঞ্জের সাথে লিঙ্ক করেছি, আমরা সকলেই ~ 30% নির্ভুলতা অর্জন করেছি। আমি বাইট সীমাটি সেট করার চেষ্টা করেছি যাতে এখানে 50-70% সম্ভব হয়। আশা করি আমি ব্যালেন্স ঠিক পেয়েছি। অবশ্যই যদি আপনি একটি দুর্দান্ত সমাধান খুঁজে পান যা আরও বাইট ব্যবহার করে তবে পোস্ট করুন! এটি কেবল প্রতিযোগিতামূলক হবে না (আপনি এটি একটি প্রতিযোগী সংস্করণের জন্য এটি কেটে ফেলতে পারেন)।
ডেভ

আপনি কি ডেটাসেট থেকে বহুগ্লটগুলি সরিয়েছেন, বা সেগুলি কি কেবল "গোটচস" হবে?
জিওবিটস

9
গল্ফ্ল্যাংগুলিতে পার্থক্য করা এত কঠিন হবে ...
বুসুক্সুয়ান

2
আকর্ষণীয় তথ্য: 20 টি সর্বাধিক ব্যবহৃত (কমপক্ষে আপনার ডেটাসেটে) ভাষাগুলি আপনার ডেটাসেটের 81%, এবং 10 টি সর্বাধিক ব্যবহৃত 10 টিতে 61% থাকে। এমনকি জাভাস্ক্রিপ্ট, পাইথ, সিজেম এবং পাইথনের মধ্যে পার্থক্য সনাক্ত করাও প্রায় 35% পেতে যথেষ্ট।
helloworld922

উত্তর:


17

সি, 297 বাইট, 43.194351% মিলছে (ভি 2)

এটি প্রথম নন-গল্ফ চ্যালেঞ্জ আমি প্রতিযোগিতায় নিয়ে এসেছি Sur অবাক করার মতো বিষয় হচ্ছে, গল্ফিংয়ের ভাষাগুলি পৃথক করে দেওয়া সহজ easy

কোডটি ইউটিএফ -8 স্ট্রিং হিসাবে ইনপুট প্রয়োজন, সরবরাহিত ডেটাসেটের সংস্করণ 2 এর ভিত্তিতে ফলাফল। এই কোডটি <LF>সত্যিকারের নতুন লাইনের সাথে প্রতিস্থাপনের প্রয়োজন হবে না।

#define S(x)!!strstr(p,#x)
f(char*p){return S(#d)?:S(voi)?0:S(mai)|S(utc)?:S(mbd)|S(impor)|S(input)|S(def)|S(rang)?2:S(log)|S(fun)|S(=>)|S(lert)?3:S(<?)?4:S(echo)|S(sed)?5:S(+++)?6:S(<-)?7:S($_)|S(say)?8:S(\342)|S(\303)?9:S(->)|S(map)?10:S(@#)|S(]])|S([#)?11:S(V)|S(Q)?12:S(Z)|S(Y)?13:S(.)?14:15;}

ম্যাপিং টেবিল:

 0. java
 1. c
 2. python
 3. javascript
 4. php
 5. bash
 6. brainf*
 7. haskell
 8. perl
 9. apl
10. ruby
11. wolfram
12. pyth
13. matl
14. golfscript
15. cjam

শতাংশটি আমার হিট / মোট গণনার উপর ভিত্তি করে: 3916 হিট / 9066 মোট।


একটি দুর্দান্ত শুরু; সেটা দ্রুত ছিল! "আমার পরীক্ষার কোড এবং পাঠ্য সম্পাদক কোনও কারণে 9065 এর পরিবর্তে 9068 এন্ট্রি দেখুন" - আপনি কি শিরোনাম এবং ফাঁকা লাইনটি এড়িয়ে গেছেন? এটি 2 অতিরিক্ত লাইন জন্য অ্যাকাউন্ট হবে।
ডেভ

দুঃখিত; এটি নিয়ম # 7 পাস করছে না (নিজের উত্স কোডের জন্য সঠিক উত্তর দিতে হবে): এখনই এটি 0 বলে যা পাইথন (আমি অনুমান করছি যে চেকগুলি ঠিক করার জন্য পুনরায় অর্ডার দেওয়া খুব বেশি কাজ হবে না)
ডেভ

আপনি define S(x)যেখানেই থাকুন তার পরে স্থান এবং 1 টি হারাতে পারেন ?1
ফেয়ারসাম

ধন্যবাদ! আমি ?1কৌতুক সম্পর্কে জানতাম না , এবং অন্যটির কথা ভুলে গিয়েছিলাম। ;-)
owacoder

বাহ এই নিঃশব্দে উন্নতি হয়েছে! সর্বশেষত 43.19% :) যাচাই করা হয়েছে
ডেভ

2

পাইথন 3, 271 278 বাইট, 25.049636% মিলছে (ভি 2, যাচাই করা হয়নি)

def f(c):
 try:compile(c,'','exec');return 5
 except:
  for j in range(9):
   if any(l in c for l in [['echo'],['require'],['Main','string'],['document','alert','var ','function'],['String'],['def ','lambda','print '],['main','int','char'],['+++','<<<'],[]][j]):break
 return j

মানচিত্র:

0 = bash
1 = ruby
2 = c#
3 = javascript
4 = java
5 = python
6 = c
7 = brainf*
8 = cjam

আরও ভাল গল্ফড (সম্ভবত এখনও দুর্দান্ত নয়), অবশেষে 25% বাধা ভেঙেছে! ইনপুটগুলি <LF>নতুন লাইনের ( \n) দ্বারা প্রতিস্থাপিত হয়েছে


আমি execচেষ্টা পছন্দ। যাইহোক, আপনাকে <LF>ইনপুটটির সাথে প্রাক-প্রতিস্থাপনের জন্য জিজ্ঞাসা করার অনুমতি দেওয়া হয়েছে \n, যাতে আপনি আরও কিছু সূক্ষ্ম-সুরকরণ যুক্ত করতে সেখানে কয়েকটি বাইট সংরক্ষণ করতে পারেন।
ডেভ

অবশেষে এটি যাচাই করার জন্য প্রায় পেয়েছি। আমি কেবল কোনও কারণে 2103 (23.19%) দেখি - কোনও ধারণা কেন পার্থক্য?
ডেভ

হুম ... আমি নিশ্চিত নই সম্ভবত আপনি কীভাবে ইনপুট দিচ্ছেন তার সাথে এটি করতে হবে? আমি decode('utf-8')আমার ফাংশনটি দেওয়ার আগে কাঁচা ইনপুট বাইট অ্যারেটিকে স্থানীয় পাইথন 3 ইউনিকোড (utf-16?) স্ট্রিংয়ে রূপান্তর করতে ব্যবহার করি।
helloworld922

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