সিরিয়াসলি, গল্ফস্ক্রিপ্ট, সিজেম, বা পাইথ?


56

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

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

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

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

সাধারণ

  • সংক্ষিপ্ততম কোড জয়
  • স্ট্যান্ডার্ড লুফোলস, ইত্যাদি
  • কোনও অনলাইন দোভাষী ব্যবহার করবেন না
  • আপনি একটি ফাংশন বা একটি প্রোগ্রাম লিখতে পারেন
  • আপনি নিজের ভাষা সনাক্ত করতে ইওল ব্যবহার করতে পারেন

ইনপুট

  • আপনার ইনপুটটি স্ট্যান্ডার্ড ইনপুট স্ট্রিম বা স্ট্রিং হিসাবে নেওয়া হয়েছে
  • ইনপুটটিতে কেবল ASCII মুদ্রণযোগ্য অক্ষর এবং লাইনফিড রয়েছে
  • ইনপুটটির আকার 256 বাইট পর্যন্ত দীর্ঘ

আউটপুট

  • আউটপুট আউটপুট প্রবাহে মুদ্রিত হয় বা স্ট্রিং / প্রতীকগুলির ক্রম হিসাবে ফিরে আসে
  • যদি ইনপুটটি কোনও সন্দেহ ছাড়াই একটি বৈধ এক্স প্রোগ্রাম, এক্স , এক্স ∈ {সিজেম, পাইথ, গল্ফসক্রিপ্ট প্রিন্ট বা রিটার্ন করুন return

    মন্তব্য : "সন্দেহ ছাড়াই" এর অর্থ এই নয় যে আপনাকে বোবা বিশ্লেষকের সাথে উত্তর দেওয়ার অনুমতি দেওয়া হয়েছে যা ধারাবাহিকভাবে কোনও ভাষা সনাক্ত করতে ব্যর্থ হয়। জন্য Pyth , আমি আশা সরল প্রোগ্রাম চিনে নিতে দিতে (কিন্তু কোন hardcoding)। একই জন্য যায় CJam ( ঠকাই শীট , উদাহরণ ) এবং Golfscript ( উদাহরণ )। পূর্ববর্তী লিঙ্কগুলি প্রতিটি ভাষার নির্দিষ্টকরণগুলিকে নির্দেশ করে। যদি আপনি কোনও অস্পষ্ট / বেয়েসিয়ান পদ্ধতির ব্যবহার করেন তবে "সন্দেহ ছাড়াই" অর্থ উচ্চ স্তরের আত্মবিশ্বাসের সাথে (উদাহরণস্বরূপ আপনি আপনার শ্রেণিবদ্ধকরণের সাথে 99% স্কোর করেছেন)। আসল পরীক্ষা স্যুট জন্য নীচে দেখুন।

  • যদি ইনপুটটি একাধিক ভাষায় বৈধ হয় তবে প্রতিটি সনাক্তিত ভাষা মুদ্রিত / ফিরে আসতে হবে। মুদ্রিত হলে, একাধিক আউটপুট (যেমন স্থান, নিউলাইন, কমা ...) এর মধ্যে অবশ্যই একটি বিভাজক থাকতে হবে।

  • যে ক্রমে ভাষাগুলি চেষ্টা করা হয়েছে তাতে কিছু যায় আসে না
  • আমি কেস (সিজাম, সিজাম, সিজেএএম, স্প্যাম) সম্পর্কে চিন্তা করি না [1]
  • তাহলে উপরে ভাষা কেউই সনাক্ত করা হলে, মুদ্রণ " Probably Perl"Mbomb007 এর এই মন্তব্যে ধন্যবাদ , উপরের ক্ষেত্রে আপনি Seriously4 বাইটের জরিমানা (উভয় স্ট্রিংয়ের মধ্যে পার্থক্য) " " আউটপুটও দিতে পারেন can

[1] কেবল পরিষ্কার করার জন্য, স্প্যামটি অবৈধ

উদাহরণ

  • ইনপুট

    "Crime predicted: --
    Calling: 1--555-
    
    "30*{_5<{iAa*:mr}&}/
    
  • আউটপুট (একাধিক রিটার্ন মানগুলির উদাহরণ)

    ["Golfscript", "Cjam"]
    
  • ইনপুট

    3
    
  • আউটপুট (স্ট্যান্ডার্ড আউটপুট উদাহরণ)

    golfscript
    cjam
    pyth
    
  • ইনপুট

    if {} aazd
    
  • আউটপুট

    Probably Perl
    

শেষ ক্ষেত্রে, ইনপুট প্রোগ্রাম সমস্ত তিনটি অনলাইন দোভাষী দিয়ে একটি ত্রুটি তৈরি করে ।

স্কোরিং, জয়ের মানদণ্ড

সংক্ষিপ্ততম কোড জয়। আপনি যদি "সিরিয়াসলি" আউটপুট দেন তবে 4 বাইট যুক্ত করুন। তারপরে, বোনাস প্রয়োগ করুন।

ব্যর্থ পরীক্ষা

নিম্নলিখিত স্নিপেটগুলি যা উপরের তিনটি ভাষার কোনওরূপে স্বীকৃত হওয়া উচিত নয়

ওয়ান-লাইনার (প্রতি লাইন প্রতি একটি প্রবেশ)
$^X=~/([a-z]+)[^\/]+$/;print$1,$/
<>;map($s-=(-1)**$_/(2*$_-1),1..$_),$s=!print$s,$/for<>
((THIS IS LISP HAIKU) (TRULY THIS IS LISP HAIKU) (THIS IS LISP HAIKU))
(format t"~@(~{~R~^, ~}~).~%~:*~@(~{~:R~^, ~}~)."(loop for i to 99 collect(1+ i)))
print sum(ord(c) for c in 'Happy new year to you!')
Brainfuck
>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++.
-----------------.
++++++++.
+++++.
--------.
+++++++++++++++.
------------------.
++++++++.
পার্ল
@list=( "aaaa", 
        "aaaaaaaa", 
        "aaaaaaaaaaaaaaa", 
        "aaaaaaaaaaaaaaaa", 
        "aaaaaaaaaaaaaaaaaaaaaaa", 
        "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

while (@list) {
    for($i=0;$i<6;$i++){
        print length($list[$i])." ";
    }
    print "\n";
}
মাছ
#ifndef __linux
#include "x.h"
#define X/*\
a=1 set -e
+++++++++++++++++++++_+++++++++++++....Hello World!?:Q:
#endif
    echo "Hello, World!"
    int m(){}

বেসিক পরীক্ষার স্যুট

সেগুলি অবশ্যই পরীক্ষায় উত্তীর্ণ হতে হবে। নীচে প্রতিটি প্রোগ্রামের জন্য এক-লাইনার রয়েছে যেখানে আপনার প্রোগ্রামটি অবশ্যই লেখা হচ্ছে সেই ভাষাটি সনাক্ত করতে হবে (আমি সেগুলির মধ্যে কোনটি বহুভোজী তা পরীক্ষা করে দেখিনি)।

Pyth

*2Q
FNrZTN
FNrZhTN
FNUhTN
VhTN
FNr1hQN
=N5N
K5K
K1FNr1hQ=K*KN
K1FNr1hQ=K*KNK
K1FNr1hQ=K*KN;K
DhZK*3ZRK
L?b*bytb1yQ
A(Z1)VQHA(H+HG

Golfscript

;'2706 410'~{.@\%.}do;
;''6666,-2%{2+.2/@*\/10.3??2*+}*`50<~\;
'Hello, world!'
1 2 [\]

CJam

"Hello, world"
{`"_~"}_~
"`_~"`_~
T1{_2$+}A*]`
{__'`>\'x>26*2-*-}/
Y38#
N/s:X,8-,{X>9<__{'a<},,\4%{'Z>},,*I={4=}{;}?}/

সিলভার বোনাস: বাইট-কাউন্ট * 0.6

পূর্ববর্তী সমস্ত পরীক্ষাগুলি পাশাপাশি নীচের ওয়ান-লাইনারগুলি অবশ্যই পাস করতে হবে। এই সমস্ত স্নিপেটগুলি প্রকৃত কোডগল্ফ উত্তর থেকে নেওয়া হয়েছে।

Pyth

VzJ:zZhZpkJ~Zhy}rJ0-G"aeoui
Vzjdm?@zd}N,dt-lzd\ Uz
jd.iSQs*RtQ,\?":0
rsXOtQmO*-GJ"aeiou"J/Q2*%Q2O"hy"4
VhQIq`N_`NN
s["$$\\varphi=1+"*Q"\cfrac1{1+"\\<\dQ"dots"*Q\}"$$
@c"weak trick fair"d-!JlfhT-M.:us_cG.u+NYtKrH7-52hK.zU52 2>J26

Golfscript

);:|;{0):0;|$:§-1%" - "§" = ""0"4$~§~-+-4>:|n|6174`=!}do"Iterations: "0"."
'-+,/'{)))))}%
4:echo(2+2);
#undef X;A!"$%&'()*+-[,.]/0123456789:<=>?@BCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcghijklmopqrstvwxyz{|}~
{`),32>^.}.~
"126,32>''+".~\-'.~\-"'-
"),@`^^32>#.~".~
...[[]]{{}}&%%++++5i
  *++..0011125::::;;;?bbbbcccc{}
"This program wasn't written in "o"GolfScript"", it was built for ""CJam"oo"!"

CJam

"Q"c("ASSW"1$("aRD"(((T1
%\@_@){;_0}*__*)\15
"This program wasn't written in "o"GolfScript"", it was built for ""CJam"oo"!"
"P2"1e3K51_,1>K*$K*~]N*
li__,\mf:i2m1+:*/fb:+
ri:B__(^2/):G/,{_BBG/@-(#G@*G(B2/*+*}/]:+
{1$+S@]_1=4+1$`,-S*"2$~"}21D2$~
[S'-26*N]:Z[S'|:PS24*PN]:RR'(PS5*qi:XD=X0<-X2%2*+:Y[" ^ "_" > ""(O)"" - "__]=S8*Y[" ^ ""   "" < ""(O)"" - "__]=S5*P')NRRXD=[SPS7*'oA*S7*PN]:QR?Y[[SPS5*'oSC*'oS5*PN]:T_R[SPS7*'oS8*'oS7*PN]RRR]=QY2=TR?RRZ
li4H#+2bW%32<2b
q~:R100:H*\d:T/i){R-H*HT-/m]}6*_H)<*
"JamesBdo,"YZ+/)BA*c+Y*Y%:BS@SB)))[JW:Z____)ci+*]U*

সোনার বোনাস: পূর্ববর্তী স্কোর * 0.8

Pyth

তুলনা করা
jdm@cd)._-FQcj"
is
equal greater less
to than
"Qb
তুষারে গঠিত মানবমুর্তি
M@GCHgc"  ___

  ___
   _"bhzgc" (_*_)
 _===_
 .....
  /_\\"bhzs[g"  \ "@z4\(g"-.oO"@z2g" ,._"@z1g"-.oO"@z3\)g"  / "@z5)s[g" < /"@z4\(gc"   
 : 
] [
> <"b@z6\)g" > \\"@z5)++" ("gc"   
 : 
\" \"
___"bez\)

CJam

বৃহৎ
rri:Hri:Vri:Q[q~]3/_Qa3*a+_|$W%:Pf{\a#}:AH/:B0ff*
P,,[AHAW%HBz:+_W%V\V]2/
ff{~@@f=/::|1#}0Ua4*t:R;
P0f<
V{H{BI=J=_2$=
0R{"I>! I+V<J>! J+H<"4/+4/z{~~}%:&1$*\)}%);2$-|t
}fJ}fI
[P,{_La#\1$0t1$f-}*;;]
{:TR=2/~\~V\-,>\f{\_3$=@~H\-,>{Tt}/t}~}/
:~Pf=:~
~]S*N
তুষারে গঠিত মানবমুর্তি
q:Q;SS"
 _===_,___
 ....., _
  /_\,___
 (_*_)"',/0{Q=~(=}:G~N" \ "4G'(".oO-"_2G",._ "1G@3G')" / "5GN"< / "4G'(" : ] [> <   "3/6G')"> \ "5GNS'(" : \" \"___   "3/7G')

Golfscript

Lorem Ipsum
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras imperdiet est ut sem commodo scelerisque. Sed ut ultricies enim. Nam eget lectus suscipit, gravida turpis a, volutpat tellus. Cras efficitur luctus neque, at semper massa condimentum at posuere.
ডিজিটাল ঘড়ি
:*{32' _':$@'14'{?~!=}:&~32}%n*{:x' |':|\'1237'&$x'017'&|x'56'&}%n*{:x|\'134579'&$x'147'&|x'2'&}%
শুভ জন্মদিন
4,{"Happy Birthday "["To You""Dear GolfScript"]@2==n}%
ফারি ক্রম
~:c[,{){.}c(*}%.c/zip{+}*]zip{~{.@\%.}do;1=},{~<},{~\10c?*\/}${'/'*}%', '*'F'c`+' = {0/1, '+\', 1/1}'

54
শিরোনাম থেকে, আমি আশা করছিলাম যে এটিতে "সিরিয়াসলি" নামে একটি নতুন গুপ্ত ভাষা অন্তর্ভুক্ত রয়েছে।
mbomb007

17
@ এমবিম্ব০০7 সিরিয়াসলি: গল্ফস্ক্রিপ্টে পাইথ হিসাবে ব্যাখ্যা করা উত্সের ফলাফলের ফলে চলে এমন একটি ভাষা সিজ্যাম স্ট্যাকের উপরে নতুন লাইনের দ্বারা পৃথক হওয়া মানগুলিকে ঠেলে দেয় এবং অবশেষে সেখান থেকে স্ট্টোআউটকে আউটপুট দেয়। পার্ল হিসাবে
দু'বার

3
@ mbomb007 আমি আপনার হতাশা অনুভব করছি। আমি আপনার নিজের প্রশ্ন জিজ্ঞাসা করতে পারেন? "এত দিন আগে, নিম্নলিখিত প্রশ্নটি জিজ্ঞাসা করা হয়েছিল ..."
coredump

31
এবং এটি, আমার বন্ধুরা, এজন্য শেবাংগুলি আবিষ্কার করা হয়েছিল।
প্রিমো

6
আমি দোভাষীদের মাধ্যমে প্রোগ্রামগুলি চালানোর আমার সহজ সমাধানের পরিবর্তে, সোনার বোনাসের জন্য উপযুক্ত এবং প্রথম প্যাটার্ন ম্যাচিংয়ের ভিত্তিতে ইনপুটগুলিকে বৈধতা দেয় এমন প্রথম দ্রবণের জন্য আমি 150 টি রেপ বন্টি দেব।
মেগো

উত্তর:


2

রুবি, (135 + 4) * 0.6 * 0.8 = 66.72

এটি উইন্ডোতে চলে এবং আমি ইউনিক্সে চালিয়ে এটি সংক্ষিপ্ত করতে খুব ক্লান্ত।

(a=[%w(javaw -jar cjam),%w(python pyth),%w(rubyw golfscript)].map{|c|c[-1]if system(*c,?f,'> NUL','2>','NUL')}-[nil])==[]?'Seriously':a

আমি এই জিনিসগুলি করেছি তবে আমি নিশ্চিত নই যে তাদের অনুমতি দেওয়া হয়েছে কিনা:

  • পুনঃনামকরণ cjam-[version].jarকরা cjam, pyth.pyথেকে pyth, golfscript.rbথেকে golfscript
  • fইনপুট পাওয়ার পরিবর্তে ফাইল থেকে পড়ুন । ( IO.write(?f,gets);এটি ঠিক করার জন্য শুরুতে যুক্ত করুন এবং নতুন দৈর্ঘ্য (153 + 4) * 0.6 * 0.8 = 75.36)

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

39

পাইথন 2, 332 * 0.6 * 0.8 = 159.36

import os
from subprocess import*
from tempfile import*
f,n,a=NamedTemporaryFile(delete=0),open(os.devnull,'w'),''
f.write(os.read(0,256))
f.close()
for l in["CJam","java","-jar","cjam.jar"],["Pyth","./pyth.py"],["Golfscript","./golfscript.rb"]:a+=(l[0]+' ')*(call(args=l[1:]+[f.name],stdout=n,stderr=n)>0)
print a or'Probably Perl'

আমি যতদূর সচেতন, এটি নিয়মের মধ্যে রয়েছে। Pyth, CJam এবং Golfscript দোভাষী (প্রয়োজন pyth.py, cjam.jarএবং golfscript.rbবর্তমান ডিরেক্টরির মধ্যে), এবং পাইথন 3, জাভা, রুবি ইনস্টল করা নেই। সাধারণ পরীক্ষা: প্রোগ্রামটি চালানোর চেষ্টা করুন। যদি এটির সাথে ফিরে আসে তবে 0আমরা ভাল। যদি তা না হয় তবে এটি অবৈধ। $TMPপ্রোগ্রাম রাখার জন্য একটি নামী অস্থায়ী ফাইল (যেমন একটি ফাইল তৈরি করা হয়েছে ) তৈরি করা হয়, যেহেতু সিজেমের স্ক্রিপ্ট বিকল্প নেই। delete=Falseপতাকা যখন এটি বন্ধ করা হয় মুছে ফেলা হচ্ছে (অপারেটিং সিস্টেম আমাদের জন্য এটি যত্ন নিতে হবে) থেকে ফাইল প্রতিরোধ করা প্রয়োজন। ফাইলটি পড়ার চেষ্টা করার আগে ফাইলটি বন্ধ করতে হবে (যদিও ম্যানুয়ালি ফাইলটি ফ্লাশ করাও কাজ করা উচিত তবে এটি সহজ)। stdoutএবং stderrপুনঃনির্দেশিত হয়/dev/null আউটপুট / ত্রুটিগুলি দমন করতে (মনে রাখবেন যে এটি কেবল * NIX সিস্টেমে কাজ করে)।

অতিরিক্ত মজা: আমরা কী পাই তা দেখার জন্য প্রদত্ত কোডটি সমস্ত 4 টি ভাষায় চালানোর চেষ্টা করুন:

import sys
from subprocess import*
from tempfile import*
c=["Cjam","java","-jar","cjam.jar"]
p=["Pyth","./pyth.py"]
g=["Golfscript","./golfscript.rb"]
e=["Perl","perl"]
f=NamedTemporaryFile(delete=False)
s=sys.stdin.read()
f.write(s)
f.close()
n=open('/dev/null','w+')
a=''
for l in [c,p,g,e]:
    try:
        print '%s: %s'%(l[0],check_output(args=l[1:]+[f.name],stderr=n))
    except:
        continue
n.close()

11
+1 সুন্দর উত্তর। এবং এটির জন্য কেবল 6 জন দোভাষীর প্রয়োজন, ভাল সম্পন্ন ;-)
coredump

1
বাশ, পাইথন 2, পাইথন 3, রুবি, জাভা, সিজেম, পাইথ, গল্ফসক্রিপ্ট - আমার গণনা 8
মেগো

2
সেটা ঠিক. এবং সঠিক ইনপুট ফাইলের সাহায্যে এটি আপনার হোম ডিরেক্টরিটি মুছতে পারে। যাইহোক, এটি একটি বৈধ পন্থা, আমার আপত্তি নেই।
coredump

আসুন আমরা আশা করি আপনি অন্তহীন লুপগুলি সহ, বা শূন্যহীন ফিরে আসার কোনও প্রোগ্রাম পাবেন না।
পাওলো ইবারম্যান

@ ম্যাগো যদি কোনও কারণে নিজেই কোনও প্রোগ্রাম ব্যর্থ হয় (যেমন কোনও ফাইল খোলার সময় নেই যা বিদ্যমান নেই - বা যখন এটি যুক্তিগুলির প্রত্যাশা করে, যা সম্ভবত আমি উত্পাদনশীলভাবে ব্যবহৃত প্রোগ্রামগুলির জন্য প্রায়শই ঘটতে পারে সন্দেহ করি) তবে এটি একটি শূন্য-মান ফিরে আসবে সেই দশক পুরানো মান অনুসারে এর অর্থ এই নয় যে এটি সেই ভাষার অন্তর্গত নয়। (যদিও এটি পরীক্ষার কোনও ক্ষেত্রেই আসলে সেই ধরণের নয়)) অন্য একটি মামলা catহয়ত কোনও প্রোগ্রামের মতো ইনপুটটির জন্য অপেক্ষা করছে ... সম্ভবত আপনার অন্তত ইনপুটটিতে / দেব / নাল পুনর্নির্দেশ করার চেষ্টা করা উচিত?
পাওলো ইবারম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.