আপনার ভাষার সংস্করণ নির্ধারণ করুন


51

আপনার চ্যালেঞ্জটি হ'ল এমন বহুভুজ লিখুন যা আপনার ভাষার বিভিন্ন সংস্করণে কাজ করে। যখন চালানো হয়, এটি সর্বদা ভাষা সংস্করণ আউটপুট করবে।

বিধি

  • আপনার প্রোগ্রামটি আপনার ভাষার কমপক্ষে দুটি সংস্করণে কাজ করা উচিত।
  • আপনার প্রোগ্রামের আউটপুটটি কেবল সংস্করণ নম্বর হওয়া উচিত । কোনও বহিরাগত ডেটা নেই।
  • আপনার প্রোগ্রামটি সংস্করণ নম্বর নির্ধারণ করতে আপনার পছন্দ মতো যে কোনও পদ্ধতি ব্যবহার করতে পারে। তবে আউটপুট অবশ্যই নিয়ম 2 অনুসরণ করবে; তবে আপনি সংস্করণ সংখ্যাটি নির্ধারণ করেন, আউটপুটটি কেবলমাত্র সংখ্যাটি হবে।
  • আপনার প্রোগ্রামটি শুধুমাত্র ভাষার প্রধান সংস্করণ আউটপুট করা প্রয়োজন। উদাহরণস্বরূপ, ফুবার 12.3.456789-বিটাতে, আপনার প্রোগ্রামটি কেবল 12 আউটপুট করা দরকার।
  • যদি আপনার ভাষা সংস্করণ নম্বরটির আগে বা তার পরে শব্দ বা চিহ্ন রাখে, আপনাকে সেগুলি এবং কেবল সংখ্যাটি আউটপুট করার দরকার নেই। উদাহরণস্বরূপ, 89সি 98 এ আপনার প্রোগ্রামটি কেবল মুদ্রণ করা দরকার , এবং সি ++ 0 এক্সে আপনার প্রোগ্রামটি কেবল মুদ্রণ করা দরকার 0
  • আপনি যদি পুরো নাম বা গৌণ সংস্করণ নম্বরগুলি মুদ্রণ করতে পছন্দ করেন, যেমন C99 এর বিপরীতে C89, তবে কেবল এটি নাম মুদ্রণ করতে হবে । C89 build 32বৈধ, যদিও error in C89 build 32: foo barনেই।
  • আপনার প্রোগ্রামটি ভাষা সংস্করণ নির্ধারণ করতে কোনও বিল্টিন, ম্যাক্রো বা কাস্টম সংকলক পতাকা ব্যবহার করতে পারে না।

স্কোরিং

আপনার স্কোরটি কোডের দৈর্ঘ্য হবে এটি যে সংস্করণে কাজ করে তার সংখ্যা দ্বারা বিভক্ত Low সর্বনিম্ন স্কোর জয়, শুভকামনা!


4
ভাষার সংস্করণ নম্বর কী? কে নির্ধারণ করে?
গম উইজার্ড

9
আমি মনে করি সংস্করণের সংখ্যায় বিপরীতমুখী লাইন ভার্সনের সংখ্যার সাথে উত্তরগুলি স্বাগত জানায় না।
ব্যবহারকারী 202729

6
@ ব্যবহারকারী 202729 আমি সম্মত। ভার্সেটাইল ইন্টিজার প্রিন্টার এটি ভালভাবে করেছে - স্কোর ছিল (number of languages)^3 / (byte count)
মেগো

6
কোন ভাষার সংস্করণ কী ? আমরা কি এখানে কোনও ভাষা এর দোভাষী / সংকলক হিসাবে সংজ্ঞায়িত করি না ? আসুন আমরা বলি, গিসিটির একটি সংস্করণ রয়েছে যার একটি বাগ রয়েছে যা নির্দিষ্ট সি ৮৯ কোডের সাথে এটি একটি কার্যকরযোগ্য উত্পাদন করে যা আচরণটি সি ৮৮ স্পেসিফিকেশন লঙ্ঘন করে এবং এটি জিসিসির পরবর্তী সংস্করণে স্থির করা হয়েছিল। কোন জিসিসি সংস্করণ ব্যবহার করছে তা জানাতে যদি আমরা এই বাগ আচরণে কোড বেসের টুকরোটি লিখি তবে কি এটির কোনও বৈধ সমাধান গণনা করা উচিত? এটি সংকলকের বিভিন্ন সংস্করণকে লক্ষ্য করে , তবে ভাষার ভিন্ন সংস্করণ নয় ।
tsh

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

উত্তর:


16

সিরিয়াসলি এবং আসলে , 3 বাইট, স্কোর 1.5

'1u

এটি অনলাইনে চেষ্টা করে দেখুন: আসলে , সিরিয়াসলি

ব্যাখ্যা:

'1u
'1   both versions: push "1"
  u  Actually: increment character to "2"; Seriously: NOP
     (both versions: implicit print)

uএবং Dস্ট্রিংগুলিতে কার্যকারিতা থাকা কেবল আসলে (যা গুরুতরভাবে v2) এ যুক্ত হয়েছিল।


3
প্রকৃতপক্ষে README.md বলছে যে প্রকৃতপক্ষে গুরুতরভাবে আধ্যাত্মিক উত্তরসূরি। আমার কাছে নিছক সংস্করণ পরিবর্তনের মতো শোনাচ্ছে না।
অ্যাডম

7
@ অ্যাডাম আপনি যদি সংগ্রহস্থলের শাখাগুলি লক্ষ্য করেন তবে গুরুতরভাবে v1শাখায় বাস করেন । গুরুতরভাবে অবহেলিত হওয়ার আগে, প্রকৃতপক্ষে v2শাখায় বসবাস করতেন । অতিরিক্তভাবে, রিলিজে গুরুতরভাবে 1.xসংস্করণ নম্বর ব্যবহার করা হয়েছে , যখন প্রকৃতপক্ষে ব্যবহার করা হয় (সেখানে এবং পিপিআই উভয় )। 2.x
মেগো

115

পাইথন 3.0 এবং পাইথন 2, স্কোর 6

(12 বাইট, 2 সংস্করণ)

print(3/2*2)

এটি অনলাইনে চেষ্টা করুন:

পাইথন 3+ ডিফল্টরূপে পাইথন 2 এর বিপরীতে ফ্লোট বিভাগ ব্যবহার করে, যা মেঝে বিভাগ ব্যবহার করে তার উপর নির্ভর করে।


@ মাল্টেসেন Your program should work in at least two versions of your language.এটি কমপক্ষে-দু'টি সংস্করণ 2.7 এবং 3.0 এ কাজ করে। আমি বেছে নিয়েছি to print the full name or minor version numbers
ফায়ার ফ্লেম 241

ওহ আমি দেখছি আমার খারাপ।
মালটিসেন

4
ঈশ্বর! দরিদ্র অজগর ডেভেলপাররা
রেগিস পোর্টালেজ

4
@RegisPortalez from __future__ import division, সমস্যার সমাধান :)
Łukasz Rogalski

62

জাভা, 189 বাইট, 10 সংস্করণ, স্কোর = 18.9

সমর্থিত সংস্করণ: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8এবং9

(পূর্ববর্তী স্কোরগুলির জন্য, ইতিহাসটি দেখুন !)

Object v(){int i=0;try{for(String[]s={"Locale","Map","Timer","Currency","UUID","Deque","Objects","Base64","zip.CRC32C"};;i++)Class.forName("java.util."+s[i]);}finally{return i<9?"1."+i:i;}}

এটি জাভা 8 এ
চালান এটি জাভা 9 বা তারপরে চালান

Ungolfed

Object v(){
  int v=0;
  try {
    for(
      String[] s={
        "Locale",          // 1.1
        "Map",             // 1.2
        "Timer",           // 1.3
        "Currency",        // 1.4
        "UUID",            // 1.5
        "Deque",           // 1.6
        "Objects",         // 1.7
        "Base64",          // 1.8
        "zip.CRC32C"       // 9
      };;v++)
      Class.forName("java.util."+s[v]);
  } finally {
    // Swallowing ClassNotFoundException when the version is not the last one
    // Swallowing ArrayIndexOutOfBoundsException that occurs after reaching the last version.
    return v < 9 ? "1." + v : v; // Return either an int or a String
  }
}

দয়া করে মনে রাখবেন যে কোড অংশটি return v<9?"1."+v:v;(পূর্বে return(v<9?"1.":"")+v;) জাভা 1.0 এবং জাভা 1.3 এর মধ্যে থাকা কোনও সংস্করণের বিপরীতে পরীক্ষা করা দরকার। আসলে আমার এই সিনট্যাক্সটি পরীক্ষা করতে আমার কাছে জাভা 1.3 বা তার আগের কোনও ইনস্টলেশন নেই।

ভূমিকা

জাভা সংস্করণটির একটি বিশেষ ইতিহাস রয়েছে। সকল সংস্করণের ঐতিহাসিকভাবে হয়েছে 1.xসহ 1.0। তবে ... জাভা 9 এর পরে এবং JEP223 থেকে , সংস্করণ স্কিমিংটি ব্যবহার 1.xকরা থেকে পরিবর্তিত হয়েছে x। এটি অভ্যন্তরীণ হিসাবে পরিচিত হিসাবে সংস্করণ। সুতরাং আমাদের নীচের সারণী রয়েছে (জাভাদোক এবং উইকিপিডিয়ায় একসাথে রাখুন ):

 java.version | Rel. name | Product name
   property   |           |
--------------+-----------+-----------------
          1.0 | JDK 1.0   | Java 1
          1.1 | JDK 1.1   |
          1.2 | J2SE 1.2  | Java 2
          1.3 | J2SE 1.3  |
          1.4 | J2SE 1.4  |
          1.5 | J2SE 5.0  | Java 5
          1.6 | Java SE 6 | Java 6
          1.7 | Java SE 7 | Java 7
          1.8 | Java SE 8 | Java 8
          9   | Java SE 9 | Java 9

এই চ্যালেঞ্জ এন্ট্রি উপরের সারণীতে সংস্করণ কলামের সাথে মেলে যা সিস্টেম সম্পত্তিতে অন্তর্ভুক্ত "java.version"

ব্যাখ্যা

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

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

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

যাই হোক না কেন, থ্রেডটি tryব্যতিক্রম ছাড়াই -ব্লক ছাড়বে । যে ব্যতিক্রম ধরা হয় না, কিন্তু কেবল করার হোল্ড ধন্যবাদ আরোপ করা finally-block, যেটা ঘুরে ফিরে আসলে একটি মান যা ফিরে অন হোল্ড ব্যতিক্রম অগ্রাহ্য "1."+vযেখানে vপূর্বে ব্যবহৃত সূচি। এটিও ঘটে আমরা এই সূচিটি জাভাটির গৌণ সংস্করণ সংখ্যার সাথে মেলে।

গল্ফের একটি গুরুত্বপূর্ণ অংশটি ছিল java.utilপ্রতিটি সংস্করণের জন্য প্যাকেজটিতে (বা কোনও শিশুদের প্যাকেজ) মধ্যে সংক্ষিপ্ততম নতুন শ্রেণীর নাম খুঁজে পাওয়া । এই ব্যয়টি গণনা করতে আমি ব্যবহৃত টেবিলটি এখানে।

Base cost: `java.util.` (10 chars)

 Version | Class name (cost in chars)     | Reduced name (cost in chars)
---------+--------------------------------+---------------------------
 9       | java.util.zip.CRC32C (20)      | zip.CRC32C (10)
 1.8     | java.util.Base64 (16)          | Base64 (6)
 1.7     | java.util.Objects (17)         | Objects (7)
 1.6     | java.util.Deque (15)           | Deque (5)
 1.5     | java.util.UUID (14)            | UUID (4)
 1.4     | java.util.Currency (18)        | Currency (8)
 1.3     | java.util.Timer (15)           | Timer (5)
 1.2     | java.util.Map (13)             | Map (3)
 1.1     | java.util.Locale (16)          | Locale (6)
 1.0     | <default>                      | <default>
---------+--------------------------------+---------------------------
Subtotal |                      144 chars |                  54 chars
    Base |                                |                  10 chars
   Total |                      144 chars |                  64 chars

ক্রেডিট

  • 30 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ বাঁচিয়েছে (যদিও আমি তার মন্তব্যটি পড়ার আগে এটি করছিলাম, আমি প্রতিশ্রুতি দিয়েছি!)।
  • 26 আরও বাইট সংরক্ষিত নীলকে ধন্যবাদ জানায় (না, আমি এটি করার কথা ভাবছিলাম না)
  • Nevay 12 বাইট ধন্যবাদ এবং সুন্দর আউট-অফ- -box -try-ধরা চিন্তা!
  • নীল আরও 11 টি বাইট এবং দুর্দান্ত পোর্টেবল finallyট্রিক।
  • প্রতিস্থাপন কেভিন Cruijssen 2 আরো বাইট ধন্যবাদ return(i<9?"1.":"")+i;দিয়ে return i<9?"1."+i:i;(এই 1.0 বিরুদ্ধে অথবা সবচেয়ে 1.3 এ যাচাই করা কারণ কোনো সিনট্যাক্স পরিবর্তন 1.4 আগেও ঘটেছে প্রয়োজন)

বিল্টিন সহ

যদি বিল্টিনগুলি অনুমোদিত হয়:

String v(){return System.getProperty("java.version");}

13 সংস্করণে 54 বাইট (1.0 থেকে 12 পর্যন্ত), সুতরাং স্কোরটি হবে 4.1538।


1
@ কেভিন ক্রুইজসেন আমি জাভাদোকটি খুললাম এবং 1 দ্বারা 1 দ্বারা সংক্ষিপ্ত নাম দিয়ে ক্লাস চালিয়েছি। ... তবে এই পৃষ্ঠাটি দ্বারা আমাকে কিছুটা সহায়তা করা হয়েছিল: ডকসস.ওরাকল.com
অলিভিয়ার Gregoire

1
260 বাইট বা আরও 1 টি হতে return"...পারে, সমস্ত সংস্করণে
টিবিএইচ

1
235 বাইট:String v(){return "1."+(e("time.Year")+e("nio.file.Path")+e("io.Console")+e("util.UUID")+e("text.Bidi")+e("util.Timer")+e("sql.Ref")+e("lang.Void"));}int e(String c){try{Class.forName("java."+c);return 1;}catch(Exception e){return 0;}}
নীল

3
216 বাইট:String v(){int i=0;try{for(String[]s={"lang.Void","sql.Ref","util.Timer","net.URI","util.UUID","net.IDN","nio.file.Path","time.Year","lang.Module"};;i++)Class.forName("java."+s[i]);}catch(Exception e){}return"1."+i;}
নেভায়ে

1
ওহ, আমি অ্যারের পুনরাবৃত্তি করা এবং একটি ব্যতিক্রম ধরা সম্পর্কে অবাক হয়েছি, তবে আপনি আরও ভাল করে যেতে পারেন finally{return"1."+i;}
নীল

22

পাইথন , 606 বাইট / 15 সংস্করণ = স্কোর 40.4

-67 বাইট (LOL) NoOneIsHere ধন্যবাদ।

সংস্করণগুলি হ'ল 0.9.1, 2 (.0), 2.2, 2.2.2, 2.5.0, 2,5.1, 3 (.0), 3.1, 3.1.3, 3.2.1, 3.3, 3.4, 3.5 এবং 3.6 ।

try:eval('1&2')
except:print('0.9.1');1/0
if`'\n'`<'\'\\n\'':print(2);1/0
try:from email import _Parser;print(2.2);1/0
except:0
try:eval('"go"in""')
except:print('2.2.2');1/0
try:int('2\x00',10);print(2.5);1/0
except:0
if pow(2,100)<1:print('2.5.1');1/0
if str(round(1,0))>'1':print(3);1/0
if format(complex(-0.0,2.0),'-')<'(-':print(3.1);1/0
if str(1.0/7)<repr(1.0/7):print('3.1.3');1/0
try:eval('u"abc"')
except:print('3.2.1');1/0
try:int(base=10);print(3.3);1/0
except:0
try:import enum
except:print('3.3.3');1/0
try:eval('[*[1]]')
except:print(3.4);1/0
try:eval('f""')
except:print(3.5);1/0
print(3.6)

Sp3000 এর আশ্চর্যজনক উত্তরের সমস্ত ক্রেডিট । ট্রেলিং নিউলাইন প্রয়োজনীয়।

হুঁ, গল্ফ মজা ছিল। এটি কাজ করা উচিত (হ্যাঁ, আমি এই সংস্করণগুলির প্রত্যেকটি ইনস্টল করেছি), তবে আমি সম্ভবত দুর্ঘটনাক্রমে কিছু বিরক্ত হয়েছি। যদি কোনও বাগ খুঁজে পায় তবে দয়া করে আমাকে জানান।



... ওহ, অবাক হওয়ার কিছু নেই। আমি ভাবছিলাম যে কেন Sp3000 প্রতিটি printকলটিতে প্রথম বন্ধনী স্থাপন করেছে ... আমাকে জানানোর জন্য ধন্যবাদ!
সম্পূর্ণরূপে

2
আপনি নির্দিষ্ট ধরণের ত্রুটিগুলি সরিয়ে 68 বাইট সংরক্ষণ করতে পারেন ( exceptএর সাথে সমস্ত প্রতিস্থাপন করুন except:)।
NoOneIsHere

আপনি যদি x=<string inside eval>কেবল কোডটি ম্যানুয়ালি না করে পরিবর্তে করেন তবে এটি কি এখনও কাজ করতে পারে ?
নীল

@ নাওআইনি এখানে আমি প্রথমে ভেবেছিলাম যে আপনি সমস্ত কিছু করতে পারছেন না 1/0তবে আমি বুঝতে পেরেছি। ধন্যবাদ!
সম্পূর্ণমানবিক

21

সি ++ 11/14/17, স্কোর = 147/3 = 49

সি ++ ১১ এবং সি ++ ১৪ / ১ between এর মধ্যে পার্থক্য করতে, এটি সি ++ ১৪ constএর constexprসদস্য ফাংশনের ডিফল্ট নেছের পরিবর্তনটি ব্যবহার করে ( https://stackoverflow.com/questions/23980929/ এ উদাহরণের কৃতিত্ব সহ) সি -14-ইন-সম্ভাব্য-বিরতি-এ-প্রোগ্রাম-লিখিত-ইন-সি-এ কী-পরিবর্তনগুলি-প্রবর্তিত । C ++ 14 এবং C ++ 17 এর মধ্যে পার্থক্য করার জন্য, এটি সি ++ 17 অক্ষম ট্রিগারগুলি ব্যবহার করে।

#include<iostream>
#define c constexpr int v
struct A{c(int){return 0;}c(float)const{return*"??="/10;}};int main(){const A a;std::cout<<11+a.v(0);}

Ungolfed:

struct A {
    constexpr int v(int) { return 0; }
    constexpr int v(float) const {
        // with trigraphs, *"??=" == '#' == 35, v() returns 3
        // without trigraphs, *"??" == '?' == 63, v() returns 6
        return *("??=") / 10;
    }
};

int main() {
    const A a;
    std::cout << 11 + a.v(0);
}

(ডেবিয়ান জিসিসি 7.1.0 ব্যবহার করে পরীক্ষিত -std=c++{11,14,17}))


1
দুর্দান্ত প্রথম উত্তর! নোট করুন যে আপনি উদাহরণস্বরূপ স্টেটমেন্টগুলিতে includeএবং এর <মধ্যে ফাঁকা জায়গা গল্ফ করতে পারেন #include<iostream>
এমডি এক্সএফ

1
হুম ... যদি স্ট্যান্ডার্ড লাইব্রেরি পার্থক্য (যা এই ক্ষেত্রে পরোক্ষভাবে __cplusplusম্যাক্রো ব্যবহার করে ) ব্যবহার করতে নিষেধাজ্ঞার জন্য নিয়মগুলি সংশোধন করা হয়েছিল - তবে C ++ 14 থেকে C ++ 17 পার্থক্য করার জন্য আমি পরিসর-ভিত্তিক পরিবর্তনটি ব্যবহার করার দিকে ঝুঁকছি শব্দার্থবিজ্ঞানের জন্য। হতে পারে নূন্যতম পুনরাবৃত্তকারী / সেন্ডিনেল ক্লাসগুলি তৈরি করুন এর প্রান্তে boost::integer_iteratorযে পাঠানোতে সেন্ডিনেলকে পুনরায় রূপান্তরকারীকে "আশ্চর্য" আচরণ করে।
ড্যানিয়েল শেপলার

4
return 0;অন্তর্নিহিত mainতাই আপনি সেখানে 9 বাইট সংরক্ষণ করতে পারেন। এছাড়াও wc -cআপনার সমাধান অনুসারে 251 নয় 251 বাইট ব্যবহার করা হচ্ছে (আপনার সম্পাদক শেষে একটি নতুন লাইন sertedোকাতে পারে)।
nwp

1
সি ++ ১৪ থেকে সি ++ ১ separate আলাদা করতে ট্রাইগ্রাফের অভাব ব্যবহার করা সম্ভবত সংক্ষিপ্ত
আলু 44

1
এই কাজ করবে? return *=>return*
জাকারিয়া

19

ব্রাউজারে ইকামাস্ক্রিপ্ট 3/5/2015/2016/2017, 59 বাইট / 5 সংস্করণ = 11.8 পয়েন্ট

alert(2017-2*![].map-2010*![].fill-![].includes-!"".padEnd)

নেটস্কেপ 7 রিপোর্ট 3, এবং অপেরা 12 রিপোর্ট 5

গোটো 0 তে 1 বাইট সংরক্ষণ করুন



নেটস্কেপ 7 কেবলমাত্র ইএস 3 সমর্থন করে? বাহ, আমি যা ভাবি তার থেকে এটি পুরানো ...
নীল

1
এটি যেখানে বোধগম্য হয় -!তার পরিবর্তে আপনি কয়েকটি বাইট ব্যবহার করে সংরক্ষণ করতে পারেন +!!(এবং সেই অনুসারে সংখ্যার ধ্রুবকটি পরিবর্তন করুন)।
0

3
কিছু ব্যাখ্যা হতে পারে? :)
ডেরেক 朕 會

@ ডেরেক: ব্যাখ্যার জন্য আমার সমাধানটি (উপরে সংযুক্ত) দেখুন।
শেগি

18

জাভাস্ক্রিপ্ট (ES5 এবং ES6), 14 বাইট / 2 সংস্করণ = 7

alert(5^"0o3")

0oস্টাইল অষ্টাল ধ্রুবকগুলি ES6 এ নতুন; ES5 স্ট্রিং কাস্ট করে NaNযা বিটওয়াইজ এক্সওরটির ফলাফলকে প্রভাবিত করে না।


13

জাভাস্ক্রিপ্ট (ইএস 2, 3 এবং 5 - 8 9), 59/6 = 9.833 75/7 = 10.714

2 সংস্করণ সমাধানের চেয়ে সামান্য উচ্চতর হওয়া সত্ত্বেও আরও সংস্করণ সহ সমাধানটি জমা দিতে পারে।

alert(9-(/./.dotAll!=0)-!"".padEnd-![].includes-![].keys-2*![].map-![].pop)

এটি অনলাইনে চেষ্টা করুন

অ্যারে, রেগএক্সপ এবং স্ট্রিং প্রোটোটাইপগুলিতে বিভিন্ন পদ্ধতির উপস্থিতি যাচাই করে, তাদের উপেক্ষা করে, একটি বুলিয়ান দেয় এবং 9 এর প্রাথমিক মান থেকে বুলিয়ানকে বিয়োগ করে ![].mapযে ES4 পরিত্যাগ করা হয়েছিল তার অ্যাকাউন্টগুলির গুণক ।

  • dotAllসম্পত্তি (এবং সংশ্লিষ্ট sপতাকা) রেগুলার এক্সপ্রেশন জন্য চালু হয় ES2018 (V9)।
  • padEndস্ট্রিং পদ্ধতি চালু হয় ES2017 (V8)।
  • includesএরে পদ্ধতি চালু হয় ES2016 (v7)।
  • keysএরে পদ্ধতি চালু হয় ES2015 (V6)।
  • mapএরে পদ্ধতি চালু হয় ES5.1 (V5)।
  • popএরে পদ্ধতি চালু হয় ES3 (v3 এর)।

ES 7 বা ES 8 একটি বৈধ সংস্করণ নম্বর? সম্ভবত এটি ES 201x বলা উচিত?
tsh

1
@ স্প: হ্যাঁ, তারা এখনও সংস্করণ নম্বর ব্যবহার করে; তারা কেবল বছরের জন্য রিলেস নাম ব্যবহার করে ।
শেগি

9

পিএইচপি 5/7, স্কোর 5.5

<?=7-"0x2";

অনলাইনে 3V4L!

পিএইচপি 5.3.9 / 5.3.11, স্কোর 10

<?='5.3.'.(9-0x0+2);

অনলাইনে 3V4L!

অনলাইন সংস্করণটি লম্বা কারণ স্যান্ডবক্সে পুরানো পিএইচপি সংস্করণে সংক্ষিপ্ত ট্যাগগুলি সক্ষম করা নেই।


9

বেফঞ্জ: 15 11 বাইট / 2 সংস্করণ = 5.5

4 বাইট @ পিটু 1998 দ্বারা শেভ করা হয়েছে

"89",;5-;,@  

অনলাইনে এটি ব্যবহার করে দেখুন :
বেফুঞ্জ 93
বেফঞ্জ 98
সংস্করণগুলিকে আলাদা করতে বেফঞ্জ 98-এক্সক্লুসিভ সেমিকোলন অপারেটর ("পরবর্তী সেমিকোলনে যান") ব্যবহার করে। উভয়ই "9" মুদ্রণ করবে। বেফঞ্জ 93 সেমিকোলনগুলি উপেক্ষা করবে, "8" থেকে 5 টি বিয়োগ করবে (স্ট্যাকের উপরে বামমূল্য), ফলাফল "3" মুদ্রণ করবে এবং সমাপ্ত হবে। অন্যদিকে বেফঞ্জ 98, এড়িয়ে যাবে, "8" মুদ্রণ করবে এবং শেষ হবে।


"89",;5-;,@11 বাইটের জন্য
পূর্কাকাডারী

@ Pietu1998 চমৎকার! আপনি যদি উত্তর হিসাবে এটি পোস্ট করতে চান, আমি আনন্দের সাথে উপস্থাপন করব :)
করহেল

এগিয়ে যান এবং আপনি চাইলে এটি নিতে, আপনি ;অংশটি বের করে ফেলেছেন।
পূর্কাকুডারী

@ পিটু ১৯৯৮ সম্পাদিত। অনেক ধন্যবাদ!
করহেল

এফওয়াইআই, আমি এটিকে 7 টি বাইটে নামিয়ে নিয়েছি, ভিন্ন পদ্ধতির মাধ্যমে। লিঙ্ক
জেমস হোল্ডারেন্স

7

পাইথ 4/5 - 6 বাইট / 2 সংস্করণ = 3

  5 ;4

পাইথ ৫-এ, লাইনের শুরুতে সমান পরিমাণ স্পেস ইনডেন্টিংয়ের জন্য উপেক্ষা করা হয়, যখন পাইথ ৪-এ এটি কেবল একটি জায়গার মতো কাজ করে এবং প্রিন্টিং প্রিন্টিং প্রতিরোধ করে 5। পাইথ ৪-এ, সেমিকোলনগুলি কেবলমাত্র বিবৃতিগুলি সমাপ্ত করে, যা 4মুদ্রণের অনুমতি দেয় , যখন পাইথ 5-এ, একটি স্থান এবং সেমিকোলন বাকী রেখাকে একটি মন্তব্য করে।


11
কে জানত পাইথের ভার্সন রয়েছে?
এরিক দ্য আউটগলফার

7

পাইথন 3 এবং পাইথন 2.0, 18 বাইট, স্কোর 18/2 = 9

print(3-round(.5))

পাইথন 3 তে ব্যাঙ্কারের রাউন্ডিং, পাইথন 2 তে স্ট্যান্ডার্ড রাউন্ডিং।

অনলাইনে এটি ব্যবহার করে দেখুন - পাইথন 3!

অনলাইনে এটি ব্যবহার করে দেখুন - পাইথন 2!


বাহ আমি সবসময় দেখলাম লোকেরা অজগর 2 এবং 3 কে বিভাগ দ্বারা আলাদা করছে
ফুক্লভ

@ ল্যুভেনফ্যাক ভাল বিভাগটি গল্ফিয়ার, তাই সে কারণেই: পি
স্টিফেন

7

কিউবিকভাবে, 4 বাইট, স্কোর 4 / ∞

B3%0

প্রতিটি সংস্করণে কাজ করে আপনার সিস্টেমে চালানোর জন্য পর্যাপ্ত মেমরি রয়েছে। অ-প্রতিযোগিতামূলক কারণ এটি খোঁড়া। এই মেটা পোস্টে বৈধ ।

মূলত, বি 3 বাম মুখ থেকে এক সারিটি শীর্ষ মুখের দিকে ঘোরায়। F3 F well3 বা B₁3 এর মতো কাজ করবে would কিউবিক্যালি 3x3x3 এর এক সারিটি একটি কিউবলেট দ্বারা তিনটি কিউবলেট হয়, এটি তিনটি 1শীর্ষ মুখের মধ্যে রাখে , এটি একটি মুখের যোগফল 3 দেয়, %0যা শীর্ষ মুখের সমষ্টি, কিউবিকালি 3 এক্স 3 এক্স 3 এর জন্য 3 মুদ্রণ করে।

কিউবিকালি 4x4x4 এ, সারিগুলি 4x1 কিউবিক হয়। 4 টির যোগফলকে শীর্ষের মুখের মধ্যে রাখে, 4 টির যোগফল দেয়।


9
স্কোর 4 / be হওয়া উচিত নয়?
nwp

7

x86 16/32/64-বিট মেশিন কোড: 11 বাইট, স্কোর = 3.66

এই ফাংশনটি AL এ পূর্ণসংখ্যার হিসাবে বর্তমান মোড (ডিফল্ট অপারেন্ড-আকার) প্রদান করে। সি থেকে এটি স্বাক্ষর সহ কল ​​করুনuint8_t modedetect(void);

এনএএসএম মেশিন-কোড + উত্সের তালিকা (এটি 16-বিট মোডে কীভাবে কাজ করে তা দেখায়, যেহেতু BITS 16এনএএসএমকে 16-বিট মোডের জন্য সোর্স মেমোনমিকস একত্র করতে বলে))

 1          machine      global modedetect
 2          code         modedetect:
 3 addr     hex          BITS 16

 5 00000000 B040             mov    al, 64
 6 00000002 B90000           mov    cx, 0       ; 3B in 16-bit.  5B in 32/64, consuming 2 more bytes as the immediate
 7 00000005 FEC1             inc    cl          ; always 2 bytes.  The 2B encoding of inc cx would work, too.
 8                       
 9                           ; want: 16-bit cl=1.   32-bit: cl=0
10 00000007 41               inc    cx       ; 64-bit: REX prefix
11 00000008 D2E8             shr    al, cl   ; 64-bit: shr r8b, cl doesn't affect AL at all.  32-bit cl=1.  16-bit cl=2
12 0000000A C3               ret
# end-of-function address is 0xB, length = 0xB = 11

ন্যায্যতা :

x86 মেশিন কোডটিতে আনুষ্ঠানিকভাবে সংস্করণ নম্বর নেই, তবে আমি মনে করি এটি সর্বাধিক সুবিধাজনক কী (যা কেবল by বাইট নেয়, নীচে দেখুন) বাছাই না করে নির্দিষ্ট সংখ্যাগুলি তৈরি করে প্রশ্নের অভিপ্রায়কে সন্তুষ্ট করে।

মূল x86 সিপিইউ, ইন্টেলের 8086 কেবলমাত্র 16 বিট মেশিন কোডকে সমর্থন করে। 80386 32-বিট মেশিন কোড চালু করেছে (32-বিট সুরক্ষিত মোডে এবং পরে একটি 64-বিট ওএসের অধীনে কমপ্যাট মোডে ব্যবহারযোগ্য)। এএমডি দীর্ঘ-মোডে ব্যবহারযোগ্য 64৪-বিট মেশিন কোড প্রবর্তন করেছে। এগুলি একই অর্থে x86 মেশিন ভাষার সংস্করণ যা পাইথন 2 এবং পাইথন 3 বিভিন্ন ভাষার সংস্করণ। এগুলি বেশিরভাগই সামঞ্জস্যপূর্ণ তবে উদ্দেশ্যমূলক পরিবর্তনের সাথে। আপনি পাইথন 2 এবং পাইথন 3 প্রোগ্রাম চালাতে পারেন ঠিক তেমনভাবে আপনি 64 বা বিট ওএস কার্নেলের আওতায় 32 বা 64-বিট এক্সিকিউটেবলগুলি চালাতে পারেন।

কিভাবে এটা কাজ করে:

দিয়ে শুরু al=64। এটিকে ডানদিকে 1 (32-বিট মোড) বা 2 (16-বিট মোড) দ্বারা শিফ্ট করুন।

  • 16/32 বনাম -৪-বিট: ১-বাইট inc/ decএনকোডিংগুলি EX৪-বিটে ( http://wiki.osdev.org/X86-64_In تعمیر_Encoding#REX_prefix ) এ REX উপসর্গ । REX.W কিছু নির্দেশাবলী মোটেই প্রভাবিত করে না (উদাহরণস্বরূপ ক jmpবা jcc), তবে এই ক্ষেত্রে 16/32/64 পেতে আমি ecxবরং ইনক বা সিদ্ধান্ত নিতে চাই eax। এটিও সেট করে REX.B, যা গন্তব্য নিবন্ধকে পরিবর্তন করে। তবে ভাগ্যক্রমে আমরা সেই কাজটি করতে পারি তবে জিনিসগুলি সেট আপ করতে 64৪-বিট স্থানান্তর করার দরকার নেই al

    যে নির্দেশাবলী কেবলমাত্র 16-বিট মোডে চলে সেগুলিতে একটি অন্তর্ভুক্ত থাকতে পারে retতবে আমি এটি প্রয়োজনীয় বা সহায়ক খুঁজে পাই নি। (এবং যদি আপনি এটি করতে চান তবে কোনও কোড-খণ্ড হিসাবে ইনলাইন করা অসম্ভব করে দেবে)। এটি jmpফাংশনের মধ্যেও হতে পারে ।

  • 16-বিট বনাম 32/64: নকল 32-বিটের পরিবর্তে 16-বিট হয়। পরিবর্তনগুলি মোড একটি নির্দেশের দৈর্ঘ্য পরিবর্তন করতে পারে, সুতরাং 32/64 বিট মোডগুলি পৃথক নির্দেশ না করে তাত্ক্ষণিকতার অংশ হিসাবে পরবর্তী দুটি বাইটগুলি ডিকোড করে। আমি এখানে 2-বাইট নির্দেশ ব্যবহার করে জিনিসগুলি সহজ রেখেছি, সিঙ্কের বাইরে ডিকোড না পাওয়ার পরিবর্তে 16-বিট মোডটি 32/64 এর চেয়ে আলাদা নির্দেশের সীমানা থেকে ডিকোড হবে।

    সম্পর্কিত: অপারেন্ড-আকারের উপসর্গটি 16-বিট এবং 32/64-বিট মোডের মধ্যে পার্থক্যের মতো, অবিলম্বে দৈর্ঘ্যের পরিবর্তন করে (এটি যদি কোনও সাইন-বিস্তৃত 8-বিট অবিলম্বে হয়)) এটি নির্দেশের দৈর্ঘ্যের ডিকোডিংকে সমান্তরালে করা কঠিন করে তোলে; ইন্টেল সিপিইউতে এলসিপি ডিকোডিং স্টল রয়েছে


সর্বাধিক কলিং কনভেনশন (x86-32 এবং x86-64 সিস্টেম ভি পিএসএবিআই সহ) সংকীর্ণ রিটার্ন মানগুলিকে নিবন্ধকের উচ্চ বিটগুলিতে আবর্জনা রাখতে দেয়। তারা ক্লোবারবারিং সিক্স / ইসিএক্স / আরসিএক্স (এবং R৪-বিটের জন্য আর 8) মঞ্জুরি দেয়। আইডি কে যদি এটি 16-বিট কলিং কনভেনশনে সাধারণ ছিল তবে এটি কোড গল্ফ তাই আমি সবসময় বলতে পারি এটি যেকোনোভাবেই কাস্টম কলিং কনভেনশন।

32-বিট বিচ্ছিন্ন :

08048070 <modedetect>:
 8048070:       b0 40                   mov    al,0x40
 8048072:       b9 00 00 fe c1          mov    ecx,0xc1fe0000   # fe c1 is the inc cl
 8048077:       41                      inc    ecx         # cl=1
 8048078:       d2 e8                   shr    al,cl
 804807a:       c3                      ret    

-৪-বিট বিচ্ছিন্ন ( এটি অনলাইনে চেষ্টা করুন! ):

0000000000400090 <modedetect>:
  400090:       b0 40                   mov    al,0x40
  400092:       b9 00 00 fe c1          mov    ecx,0xc1fe0000
  400097:       41 d2 e8                shr    r8b,cl      # cl=0, and doesn't affect al anyway!
  40009a:       c3                      ret    

সম্পর্কিত: আমার x86-32 / x86-64 বহুগ্লাট মেশিন-কোড প্রশ্নোত্তর এসও তে।

16-বিট এবং 32/64 এর মধ্যে আরেকটি পার্থক্য হ'ল অ্যাড্রেসিং মোডগুলি আলাদাভাবে এনকোড করা হয়। যেমন lea eax, [rax+2]( 8D 40 02) lea ax, [bx+si+0x2]16 বিট মোডে ডিকোড । এই কোড-গলফ জন্য ব্যবহার করতে, বিশেষ করে যেহেতু স্পষ্টত কঠিন e/rbxএবং e/rsiহয় অনেক কলিং নিয়মাবলী কল সংরক্ষিত।

আমি 10-বাইট ব্যবহার করার বিষয়টিও বিবেচনা করেছি mov r64, imm64, এটি REX + mov r32,imm32। তবে যেহেতু আমার কাছে ইতিমধ্যে 11 বাইট সমাধান রয়েছে, তাই এটি সেরা সমান হবে (10 বাইট +1 1 ret)।


32 এবং 64-বিট মোডের জন্য টেস্ট কোড। (আমি আসলে এটি 16-বিট মোডে কার্যকর করি নি, তবে বিচ্ছিন্নতা আপনাকে জানায় কীভাবে এটি ডিকোড হবে I আমার কাছে 16-বিট এমুলেটর সেটআপ নেই))

; CPU p6   ;  YASM directive to make the ALIGN padding tidier
global _start
_start:
    call   modedetect
    movzx  ebx, al
    mov    eax, 1
    int    0x80        ; sys_exit(modedetect());

align 16
modedetect:
BITS 16
    mov    al, 64
    mov    cx, 0       ; 3B in 16-bit.  5B in 32/64, consuming 2 more bytes as the immediate
    inc    cl          ; always 2 bytes.  The 2B encoding of inc cx would work, too.

    ; want: 16-bit cl=1.   32-bit: cl=0
    inc    cx       ; 64-bit: REX prefix
    shr    al, cl   ; 64-bit: shr r8b, cl doesn't affect AL at all.  32-bit cl=1.  16-bit cl=2
    ret

এই লিনাক্স প্রোগ্রামটি প্রস্থান-স্থিতি = সহ প্রস্থান করে modedetect(), তাই এটি চালান ./a.out; echo $?। জমায়েত করুন এবং এটিকে একটি স্ট্যাটিক বাইনারি হিসাবে লিঙ্ক করুন, যেমন

$ asm-link -m32 x86-modedetect-polyglot.asm && ./x86-modedetect-polyglot; echo $?
+ yasm -felf32 -Worphan-labels -gdwarf2 x86-modedetect-polyglot.asm
+ ld -melf_i386 -o x86-modedetect-polyglot x86-modedetect-polyglot.o
32
$ asm-link -m64 x86-modedetect-polyglot.asm && ./x86-modedetect-polyglot; echo $?
+ yasm -felf64 -Worphan-labels -gdwarf2 x86-modedetect-polyglot.asm
+ ld -o x86-modedetect-polyglot x86-modedetect-polyglot.o
64

## maybe test 16-bit with BOCHS somehow if you really want to.

7 বাইট (স্কোর = 2.33) যদি আমি সংস্করণ 1, 2, 3 নম্বর করতে পারি

বিভিন্ন x86 মোডের জন্য কোনও অফিসিয়াল সংস্করণ নম্বর নেই। আমি ঠিক asm উত্তর লিখতে পছন্দ করি। আমি মনে করি যে আমি যদি কেবলমাত্র 1,2,3 বা 0,1,2 মোডগুলিকে কল করি তবে এটি প্রশ্নের অভিপ্রায়টিকে লঙ্ঘন করবে কারণ পয়েন্টটি আপনাকে কোনও অসুবিধাজনক সংখ্যা তৈরি করতে বাধ্য করবে। তবে যদি এটি অনুমোদিত হয়:

 # 16-bit mode:
42                                  detect123:
43 00000020 B80300                      mov ax,3
44 00000023 FEC8                        dec al
45                                  
46 00000025 48                          dec ax
47 00000026 C3                          ret

যা 32-বিট মোডে ডিকোড করে

08048080 <detect123>:
 8048080:       b8 03 00 fe c8          mov    eax,0xc8fe0003
 8048085:       48                      dec    eax
 8048086:       c3                      ret    

এবং 64-বিট হিসাবে

00000000004000a0 <detect123>:
  4000a0:       b8 03 00 fe c8          mov    eax,0xc8fe0003
  4000a5:       48 c3                   rex.W ret 

আমি নিশ্চিত নই যে এই সংখ্যাগুলি বিভিন্ন সংস্করণ হিসাবে গণ্য । তারা কি কেবল ভিন্ন সিস্টেম কনফিগারেশনের সাথে সম্পর্কিত না?।
উরিল

1
@ ইউরিয়েল: সিপিইউ দিয়ে 16-বিট মোডে, 32-বিট মোডে বা 64-বিট মোডে মেশিন কোডের একটি ব্লক চালানো একই পাইথন প্রোগ্রামে python2বনাম python3দোভাষী দৌড়ানোর মেশিন-কোড সমতুল্য । নতুন x86 সিপিইউতে সর্বদা একটি মোড অন্তর্ভুক্ত থাকে যা পুরানো সিপিইউগুলির সাথে সামঞ্জস্যপূর্ণ (এই জাতীয় সংশ্লেষিত হার্ড-টু-ডিকোড মেশিন-কোড ফর্ম্যাটটি ব্যবহারের জন্য এটি তাদের একমাত্র অজুহাত!) তবে 386-এর 32-বিট সুরক্ষিত মোড এবং x86-64 এর দীর্ঘ মোডটি সত্যই x86 মেশিন কোডের নতুন সংস্করণ। লং মোড এমনকি কিছু অপকডগুলি অপসারণ করেছে, এগুলি অবৈধ করে তুলেছে।
পিটার কর্ডেস

5

ব্র্যাচিয়েলগ / ব্র্যাচ্য্ল্যাগ ভি 1 , 5/2 = 2.5

2,1hw

এটি অনলাইন চেষ্টা করুন! (Brachylog)

এটি অনলাইন চেষ্টা করুন! (ব্র্যাচল্যাগ ভি 1)

ব্র্যাচল্যাগের ব্যাখ্যা:

?2,1hw.
?2      Unify ? (input) with 2 (no input so it succeeds)
  ,1    Append 1 (21)
    h   First element/head (2)
     w. Write to STDOUT and unify with output (not displayed)

ব্র্যাচল্যাগ ভি 1 এর ব্যাখ্যা:

?2,1hw.
?2      Unify ? (input) with 2 (no input so it succeeds)
  ,     Break implicit unification/logical AND
   1h   Take first element/head of 1 (1)
     w. Write to STDOUT and unify with output (not displayed)

গ্রেট! সাইডেনোট হিসাবে, 2,1ব্র্যাচল্যাগ ভি 2-তে তালিকাটি তৈরি করে না [2,1]( 2;1বরং), তবে সংখ্যাটি 21(যা আপনি নিজের উত্তরটির উদ্দেশ্যটি বদলেছেন না )।
আগস্টকে মারাত্মক রূপ দিন

@ ফ্যাটালাইজ ওহ ধন্যবাদ জেলির সাথে আমি বিভ্রান্ত হয়ে পড়েছি ...
এরিক দ্য আউটগল্ফার

@ ফ্যাটালাইজ বিটিডাব্লু ব্র্যাচল্যাগ 2;1ভি 1 তে ;লজিক্যাল বা সেখানে বোঝায় না।
এরিক দ্য আউটগল্ফার

5

সি 89 / সি 99, 25 বাইট, 2 সংস্করণ, স্কোর = 12.5

#include <stdio.h>

int main() {
    int v = 11 //**/ 11
            + 88;
    printf("C%d\n", v);
    return 0;
}

// স্টাইল মন্তব্যগুলি C89 তে স্বীকৃত নয়।

গল্ফ সংস্করণ:

v(){return 20//**/2
+79;}

এটি অনলাইনে ব্যবহার করে দেখুন: C89 , C99


প্রতিস্থাপন int v()সঙ্গে main(), এটা খাটো এবং আসলে একটি সম্পূর্ণ প্রোগ্রাম হিসাবে কম্পাইল হবে!
Andrea

ধন্যবাদ আন্ড্রেয়া আফাইক, এটি ফাংশন বা পুরো প্রোগ্রাম পোস্ট করার অনুমতি দেয়।
nwellnhof

আপনি ঠিক বলেছেন।
Andrea

5

পার্ল 5 এবং পার্ল 6, 23 বাইট 19 বাইট, স্কোর 9.5

print 6-grep '.',''

পার্ল 5 grepফার্স্ট ওপকে সর্বদা রিজেক্স হিসাবে ধরা হয়, পার্ল 6-তে নয়।


স্কোরটি 19/2 = 9.5
ড্যানিয়েল

5

বাশ, সমস্ত 4 সংস্করণ, 72 71 32 বাইট ⇒ স্কোর = 8

s=$'\ua\xa\n';expr 5 - ${#s} / 2

কোডের এই অংশটি $'...'বাশের প্রতিটি সংস্করণে স্ট্রিংয়ের বিভিন্ন ব্যাখ্যা ব্যবহার করে ।
প্রধান সংস্করণ নম্বর আউটপুট দেয় - এবং এটিই।

ডক এখানে পাওয়া যায় ।

Ungolfed:

s=$'\ua\xa\n';
expr 5 - ${#s} / 2
# Bash v4 sees three linefeeds => length of 3 => 5 - 3 / 2 = 4
# Bash v3 sees the literal '\ua' + two linefeeds: 5 chars in length
#    => 5 - 5 / 2 = 3
# Bash v2 sees '\ua\xa' + linefeed, 7 chars: 5 - 7 / 2 = 2
# Bash v1 does not even interpret $'..' strings, and sees literally '$\ua\xa\n' of length 9 => 5 - 9 / 2 = 1

এই উত্তরটি অর্ধেক অনুমান; আমি এটি কেবলমাত্র 4 এবং 3 ব্যাশে পরীক্ষা করেছি, তবে এটি অন্যান্য সংস্করণগুলিতেও কাজ করা উচিত।

যদি তা করে / না করে তবে আমাকে জানান, আমি অন্যান্য সংস্করণগুলি উপলব্ধ হওয়ার সাথে সাথেই চেষ্টা করব।

জেনস -1 চর ধন্যবাদ।
-২০ বাইট ডিজিটাল ট্রমা (পুরো exprধারণা) এর জন্য ধন্যবাদ !


শেল ব্যাকরণের ;;জন্য শেষ বিকল্পের প্রয়োজন হয় না । ;একটি বাইট শেভ করতে ব্যবহার করুন ।
জেনস

1
আমি শুধু ব্যাশ-2.05a (Cygwin জন্য এইমাত্র কম্পাইল) এই চেষ্টা করেছি, এবং এটা ভুল রিপোর্ট "3", না "2" :(
জেসন Musgrove

1
ব্যাখ্যা- $'\xNবৈশিষ্ট্যটি 2.01.1 এ যুক্ত করা হয়েছে বলে মনে হচ্ছে ... আমাকে আমার উত্তর আপডেট করতে হবে। এটিতে কাজ করা
joH1

আমি কি আপনাকে এটি চেষ্টা করতে বলতে পারি? s="$'\ua\xa\n'";case ${#s} in 3)echo 4;;5)echo 3;;7)echo 2;;9)echo 1;esac
joH1

1
আপনি এটির মতো কিছুতে গল্ফ করতে সক্ষম হতে পারেন s=$'\ua\xa\n';expr 5 - ${#s} / 2। এটি v3 এবং v4 এ কাজ করে। এই মুহূর্তে চেষ্টা করার জন্য আমার কাছে পুরানো সংস্করণগুলি কাজ করার দরকার নেই।
ডিজিটাল ট্রমা

4

আর, সংস্করণ 2 এবং 3, স্কোর: 10.5 পয়েন্ট

cat(exists("cite")+2)

এই কমান্ডটি 2আর ২.৪.০ এবং এক্স xx.১.০ এর জন্য 3ফাংশনটি citeআর সংস্করণ .0.০.০ এ যুক্ত হয়েছিল। অতএব, কমান্ড exists("cite")আয় FALSEআর 2.xx এবং TRUEআর 3.xx জন্য

আর, সমস্ত সংস্করণ (1, 2 এবং 3), স্কোর: 12⅓ পয়েন্ট

e=exists;cat(e("cite")+e("eapply")+1)

ফাংশনটি eapplyআর ২.০.০ এ প্রবর্তিত হয়েছিল।


R.version$major। 15 টি অক্ষর। আমি যখন থেকে এটি উপস্থিত থেকে না।
রুই ব্যারাদাস

@ রুইবারাদাস আমাকে ওপিটির উদ্ধৃতি দিতে দিন: " আপনার প্রোগ্রামটি ভাষা সংস্করণ নির্ধারণ করতে কোনও বিল্টিন, ম্যাক্রো বা কাস্টম সংকলক পতাকা ব্যবহার করতে পারে না " "
সোভেন হোহেনস্টেইন

ঠিক আছে, দুঃখিত, আমি সেই অংশটি মিস করেছি। আমি মন্তব্য মুছে ফেলা উচিত?
রুই ব্যারাদাস

@ রুইবারাদাস কোন সমস্যা নেই। আপনার মন্তব্য মুছতে হবে না।
সোভেন হোহেনস্টেইন

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

4

পাইথন , 196 বাইট / 16 সংস্করণ = স্কোর 12.25

সংস্করণগুলি 1.5, 1.6, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, এবং 3.6
দুর্ভাগ্যক্রমে আমাকে 2.7 ছেড়ে যেতে হয়েছিল কারণ সেখানে কোনও মডিউল নেই in এটি (যতদূর আমি বলতে পারি) এটি ২.6-এ নয় তবে 3.0 এ রয়েছে in

i=15
try:
 for m in'os.atexit.os.os.os.warnings.cgitb.heapq.collections._ast.abc.queue.os.os.os.importlib.argparse.lzma.asyncio.zipapp.secrets.'.split('.'):__import__(m);i=i+1
except:print(i/10.)

পাইথনের বিভিন্ন সংস্করণে প্রচলিত মডিউলগুলির একটি গুচ্ছটি আমরা লুপ করি এবং প্রথম ত্রুটিতে আমরা সংস্করণটি ছেড়ে দিয়ে ফিরে আসি। বড় সংস্করণগুলির মধ্যে ফাঁকগুলি বারবার আমদানি করে পূরণ করা হয় os। অজগর 1.5 এর পরীক্ষা string.split1.6 পর্যন্ত উপস্থিত না থাকার উপর নির্ভর করে ।

একটি লুপে নতুন ক্লাস / মডিউল পরীক্ষা করার ধারণার জন্য অলিভিয়ার গ্রাগোয়ারের উত্তরের কৃতিত্ব ।

আমি এখন অবশেষে পাইথনের সমস্ত প্রাসঙ্গিক সংস্করণে পরীক্ষা করেছি ... যার সংকলনের জন্য 1.5 উত্স কোডটি সম্পাদনা করা দরকার ...


4

উইন্ডোজ ব্যাচ ফাইল , 35 বাইট / 2 সংস্করণ = স্কোর 17.5

@if /i Z==z @echo NT&exit
@echo DOS

DOSএমএস-ডস (দুহ) এবং NTউইন্ডোজ এনটি -তে প্রিন্ট করুন । (duh)

এখন, কিছু ব্যাখ্যা জন্য।

উইন্ডোজ এমএস-ডস বার থেকে ব্যাচ স্ক্রিপ্টিং ছিল এবং তারপর থেকে এটি খুব বেশি পরিবর্তন হয়নি। যাইহোক, যখন উইন্ডোজ এনটি বরাবর এসেছেন, মাইক্রোসফট ব্যাচ স্ক্রিপ্ট জন্য ডিফল্ট ইন্টারপ্রেটার, থেকে পরিবর্তিত COMMAND.COMকরা cmd.exe(বর্তমানে এছাড়াও এক্সটেনশন অনুমতি .cmdমূল বিকল্প হিসেবে .bat)।

এর সাথে, তারা কয়েকটি পরিবর্তনও বাস্তবায়িত করেছিল , যেমন /iশর্তসাপেক্ষে স্ট্রিং কেস উপেক্ষা করার জন্য পতাকা। অর্থাৎ যখন Z==zমিথ্যা, /i Z==zসত্য।

আমরা ব্যবহার করি যে ডসের ক্ষেত্রে সংবেদনশীলতা নেই এবং Zছোট হাতের সাথে বড় হাতের তুলনা করা z/iপতাকা ব্যবহার করে , আমরা Z==zডস-এর উপর একটি (মিথ্যা) শর্তযুক্ত এবং z==zএনটি-তে (সত্য) শেষ করব with

এখন, আমি বুঝতে পারি যে চ্যালেঞ্জটি উল্লেখ করে যে কোনও সংস্করণ নম্বর মুদ্রিত করা উচিত। তবে যতদূর আমি জানি, ব্যাচের স্ক্রিপ্টিংয়ের জন্য কোনও 'সংস্করণ নম্বর' নেই, সুতরাং এটি আমার কাছে সবচেয়ে কাছের।


উইন্ডোজ 10, ডসবক্স এবং ভিডোসে পরীক্ষিত:

উইন্ডোজ 10:

উইন্ডোজ 10

( cmd /kউইন্ডো বন্ধ হয়ে যাওয়ার জন্য চালাও exit)

DOSBox:

DOSBox

vDos:

vDos


উইন্ডোজ উইন্ডোজের 7চেয়ে কম হয় NT
ব্যবহারকারী 202729

2
@ user202729 আমি মনে করি, তবে আবার, 7আসলেই কোনও ভাষা সংস্করণ নয়, ৩.১ থেকে সমস্ত উইন্ডোজে এটি একই রকম। সুতরাং আমি 7কখনই এটি হওয়া উচিত বলে মনে করি না এটা খুব ন্যায়সঙ্গত বলে মনে করি না3.1
ম্যাথিউস অ্যাভেলার

3

ওল্ফ্রাম ভাষা / গণিত 10/11, 37 বাইট / 2 সংস্করণ = 18.5

(Length@DateRange[{1},{1}][[1]]+27)/337 বাইটে বিবেচনা করুন এবং 2 সংস্করণ সহ কাজ করুন , আমাকে 18.5 এর স্কোর দেয়।

In[1]:= $Version

Out[1]= "10.4.1 for Microsoft Windows (64-bit) (April 11, 2016)"

In[2]:= (Length@DateRange[{1}, {1}][[1]] + 27)/3

Out[2]= 10

এবং

In[1]:= $Version

Out[1]= "11.1.1 for Microsoft Windows (64-bit) (April 18, 2017)"

In[2]:= (Length@DateRange[{1}, {1}][[1]] + 27)/3

Out[2]= 11

আমি নিশ্চিত যে আরও কার্যকর উপায় আছে তবে ডেটরেঞ্জ আউটপুটটির মধ্যে তফাতটি আমাকে সম্প্রতি বাটে চাপিয়েছে, তাই আমি এটি ব্যবহার শুরু করেছিলাম।

ফলোআপ হিসাবে, কেউ সম্ভবত গণিতের সংস্করণ 1- Length@DateRange[{1}, {1}][[1]]to 18 এ মূল্যায়নের সুবিধা নিতে পারে , তবে আমার তা অন্তর্ভুক্ত করার জন্য সময় ছিল না।


2
মোটামুটি নিশ্চিত যে আপনার উত্তরটি প্রম্পটের প্রয়োজনীয়তাগুলি পূরণ করে না, যথা আপনার ব্যবহারের কারণে শেষ নিয়ম $Version:Your program may not use a builtin, macro, or custom compiler flags to determine the language version.
Amndeep7

7
আমি কেবল $Versionএটি প্রদর্শনের জন্য ব্যবহার করছি যে এটি সঠিক সংস্করণে সঠিক ফলাফলটি প্রকাশ করে, $Versionআমার উত্তরের অংশ নয় ...
ব্যবহারকারী 6014

সমস্ত ভাল বন্ধু - জিনিসটি হ'ল আপনি এর মতো কিছু ব্যবহার $VersionNumberকরছেন তবে পরিবর্তে আপনি এটি কল করছেন $Version। আমার মনে হ'ল, আপনার প্রোগ্রামের মাংস Length@DateRangeস্টাফ রয়েছে, এটি তখন $Versionআপনার সম্পূর্ণ প্রক্রিয়া সম্পর্কিত তথ্য সরবরাহ না করে কাজ করবে না যার ফলে বিধি লঙ্ঘন হয়।
আমনদীপ 7

4
@ আমনদীপ The জমাটি হ'ল প্রথম অনুচ্ছেদে te 37 বাইট কোডটি অন্তর্ভুক্ত। কোড ব্লকগুলি কেবলমাত্র আউটপুট প্রদর্শন।
পূর্কাকুডারী

3
ব্যাখ্যা: বিভিন্ন সংস্করণে সময়ের বিভিন্ন বিন্যাস ব্যবহার করা। এটি আরও {1} Tr[1^#&@@%~DateRange~%]/3+9(31 বাইট), বা এমনকি 7+Length@Now(12 বাইট) আরও গল্ফ করা যেতে পারে
ব্যবহারকারী 202729

3

রুবি 1.x এবং 2.x, 20 বাইট, 10 স্কোর

p [].to_h&&2rescue 1

রুবি 2 to_hArrayক্লাসে চালু হওয়া পদ্ধতির উপর ভিত্তি করে ।


ভাল উত্তর। আমার কাছে পরীক্ষার জন্য কোনও 1.x সুবিধাজনক নেই তবে p [].to_h&&2rescue 1এটি খানিকটা খাটো।
manatwork

@ মান্যাটওয়ার্ক গ্রেট, 3 বাইট সংরক্ষণ করে এবং একটি কবজির মতো কাজ করে
ফিলিপ ফ্র্যাঙ্ক

3

এরলং, 180 বাইট, 11 সংস্করণ, স্কোর 16.36

20-length([A||A<-[schedulers,c_compiler_used,cpu_topology,snifs,dynamic_trace,port_count,nif_version,end_time,max_heap_size,atom_count],{'EXIT',_}<-[catch erlang:system_info(A)]]).

ইন্ডেন্টেশন এবং লাইন ব্রেক সহ:

20-length([A||A<-
                  [schedulers,
                   c_compiler_used,
                   cpu_topology,
                   snifs,
                   dynamic_trace,
                   port_count,
                   nif_version,
                   end_time,
                   max_heap_size,
                   atom_count],
              {'EXIT',_}<-[catch erlang:system_info(A)]]).

10 সাল থেকে প্রতিটি বড় সংস্করণের একটি ছোট রিলিজের জন্য পরীক্ষিত:

  • R10B -9
  • R11B -5
  • R12B -5
  • R13B04
  • R14B04
  • R15B03
  • R16B03
  • 17.5.6.2
  • 18.2.1
  • 19.2
  • 20.0

ধারণাটি হ'ল প্রতিটি বড় রিলিজ ফাংশনটির জন্য কমপক্ষে একটি নতুন অনুমোদনযোগ্য যুক্তি যুক্ত করেছে erlang:system_info, সুতরাং আসুন তালিকার মধ্যে থাকাগুলি চেষ্টা করুন, তাদের মধ্যে কতটি ব্যর্থ হয়েছে তা গণনা করুন এবং 20 এর ব্যর্থতার সংখ্যাটি বিয়োগ করুন, এটি বর্তমান সংস্করণ।


3

জুলিয়া 0.4, 0.5, 46 বাইট, স্কোর 22

f(::ASCIIString)=.4
f(::String)=.5
f()=f("")

জুলিয়া বিভিন্ন সংস্করণে কংক্রিট এবং বিমূর্ত স্ট্রিংয়ের ধরণের নাম পরিবর্তন করেছে।

এই কোডটি বিশেষত সুবিধা গ্রহণ করে:

জুলিয়া 0.4 :

  • কংক্রিট হয় ASCIIString,
  • বিমূর্তটি আনুষ্ঠানিকভাবে AbstractString,
  • বিমূর্তিটি তার সাথে উপন্যাসের অবমূল্যায়ন করেছে String
  • কংক্রিটটি বিমূর্তের চেয়ে সুনির্দিষ্টভাবে সুনির্দিষ্ট হয় তাই এটি প্রেরণে জয়ী হয়

জুলিয়া ০.০ :

  • কংক্রিট সরকারীভাবে হয় String,
  • কংক্রিটের সাথে উপন্যাসের অবচয় রয়েছে ASCIIString,
  • বিমূর্তিটি হ'ল AbstractString(যদিও এটি এখানে কোনও ব্যাপার নয়)
  • কংক্রিট স্ট্রিং ধরণের জন্য দুটি পদ্ধতি সংজ্ঞায়িত করা হয়েছে, কারণ পরবর্তীটি প্রাক্তনটিকে ওভার-লিখিত করে।

বিভিন্ন নীতি উপর ভিত্তি করে আমার আরও কার্যকর আরও সমাধান দেখুন


3

জাপট (1 এবং 2), 8 6/2 = 4 3

'1r\S2

পরীক্ষা ভি 1  |   পরীক্ষা v2


ব্যাখ্যা

ভি 2 এর আগে, জাপ্ট একটি কাস্টমাইজড রেজেক্সেক্স সিনট্যাক্স ব্যবহার করেছিল, তাই আমরা এর সুবিধা নিতে পারি।

'1

স্ট্রিং হিসাবে 1 নম্বর।

 r  2

rনীচে প্রতিস্থাপন ( ) 2

\S

জাপট 2 এটিকে রেজিএক্স হিসাবে দেখায় /\S/gযা এর সাথে মেলে 1। জাপট 1 \পালানোর চরিত্রটিকে উপেক্ষা করে এবং কেবল এটি দেখতে পায় Sযা কোনও স্থানের অক্ষরের জন্য জাপট ধ্রুবক এবং সম্ভবত এটির সাথে মেলে না 1


3

বেফুঞ্জ, স্কোর = 3.5

7 বাইট, 2 সংস্করণ

"]"'b.@

বেফুঞ্জ -99 এ
এটি অনলাইন ব্যবহার করে দেখুন বেফুঞ্জ -98 এ অনলাইনে চেষ্টা করুন

"]"উভয় সংস্করণে একটি স্ট্রিং আক্ষরিক, [স্ট্যাকের উপরে 93 (এএসসিআইআই মান ) চাপছে। 'bবেফঞ্জ -৮৮ এ একটি চরিত্রের আক্ষরিক, যা 98 টি ধাক্কা দেয় (এর ASCII মান b) তবে সেগুলি বেফুঞ্জ -৩৩ এ অবৈধ নির্দেশনা, তাই এগুলি কেবল উপেক্ষা করা হয়। আমরা এভাবে বেফুঞ্জ -৩৩ এ স্ট্যাকের শীর্ষে এবং বেফুঞ্জ -৮৮ তে 98 দিয়ে শেষ করি। .@স্ট্যাকের শীর্ষে মানটি লিখে দেয় এবং তারপরে প্রস্থান করে।


]".@.b'বা ]g.@.b'এছাড়াও কাজ
মাইল্ডলি মিল্কিওয়েস্ট

3

রুবি 1.x (<1.9) এবং 2.x, 10 8 বাইট, স্কোর = 4

$><<?2%7

এটি চেষ্টা করুন:

এটি ?xরুবি 1.x এবং 2.x এর মধ্যে বিভিন্ন আচরণের শোষণ করে কাজ করে। রুবি ১.x এ, ?A(উদাহরণস্বরূপ) ফিরিয়ে দেয় 65(চরিত্রের ASCII মান A), তবে রুবি ২.০ এ এটি এক-চরিত্রের স্ট্রিং প্রদান করে "A"

উপরের কোডটি এর সমতুল্য:

val = ?2
$> << val % 7

রুবি 1.x (<1.9) সালে মান valহয় 50(চরিত্র এর ASCII মান 2), একটি Fixnum। Fixnum#%মডুলো অপারেটর, তাই 50 % 7ফিরে আসে 1

রুবি ২.x valএ স্ট্রিংটি রয়েছে "2"String#%এর একটি ইনফিক্স সংস্করণ sprintf, সুতরাং এটির "2" % 7সমান sprintf("2", 7), যেখানে "2"বিন্যাসের স্ট্রিং। যেহেতু বিন্যাস স্ট্রিংয়ে কোনও বিন্যাসের অনুক্রম (উদাহরণস্বরূপ %d) নেই, পরবর্তী যুক্তিগুলি বাতিল করা হয় এবং "2"ফিরে আসে is

পরিশেষে, এর $>জন্য একটি উপনাম $stdout, সুতরাং $> << ...ফলাফলটি মুদ্রণ করে।


1
ওহ, সুন্দর! ?A==66?1:2আপনার উত্তরটি আসার আগে আমি এমন কিছু করার চেষ্টা করছিলাম
পিক্কোলো

3

পাইথন 2 এবং পাইথন 3 , 36 34 বাইট, স্কোর 18 17

print(str(hash(float('-inf')))[1])

ইন পাইথন 2 , নেতিবাচক ইনফিনিটির হ্যাশ -271828 কিন্তু এ পাইথন 3 এটা -314159 আছে। সম্পাদনা করুন: সংরক্ষণ করা 2 বাইট, স্কোর 1 পয়েন্ট, @ আরবোর ধন্যবাদ


স্কুইটস এটি ইচ্ছাকৃত ই বনাম পাই জিনিস?
জো কিং

@ জোকিং হ্যাঁ; স্পষ্টতই যখন hashভাসমান-পয়েন্ট অসম্পূর্ণতাগুলির সাথে কাজ করার জন্য প্রথম স্থির করা হয়েছিল তখন প্রাসঙ্গিক বিকাশকারী পাই * 1e5 এবং ই * -1e5 হ্যাশ মান হিসাবে ব্যবহার করেছিলেন। পাইথন 3 এর এক পর্যায়ে নেতিবাচক অনন্তের জন্য মানটি অনন্তের জন্য হ্যাশ মানের অবহেলা হিসাবে পরিবর্তিত হয়।
নীল

2

পাইথন 3 , পাইথন 2 , স্কোর 17.5

(35 বাইট, 2 সংস্করণ)

try:exec("print 2")
except:print(3)

পাইথন 2 , 35 বাইট

এটি অনলাইন চেষ্টা করুন!

পাইথন 3 , 35 বাইট

এটি অনলাইন চেষ্টা করুন!

ETH প্রডাকশনগুলির জন্য 5 বাইট সংরক্ষণ করা

একটি ভাল কোড গল্ফ উত্তর না, কিন্তু একটি ব্যাপক পরিবর্তন!


হুম, আপনি কি প্রতিটি বিবৃতি আগের লাইনে রাখতে পারবেন? অর্থtry:exec("print 2")\nexcept:print(3)
ইটিএইচ প্রোডাকশনগুলি 16:57

@ ইথ প্রডাকশন ধন্যবাদ! আমি জয়ের আশা করিনি, এভাবে আমি কিছুটা বিক্ষিপ্ত হয়ে পড়েছিলাম। আমি প্রধানত উপর ফোকাস করতে চেয়েছিলেন পাইথন 2 এবং 3. মধ্যে ব্যাপক পরিবর্তন
jferard
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.