गंभीरता से, GolfScript, CJam, या Pyth?


56

कुछ समय पहले, निम्नलिखित प्रश्न पूछा गया था: गोल्फस्क्रिप्ट, सीजाम, या पायथ? केवल शीर्षक के आधार पर, मैंने सोचा कि यह एक बहुत अच्छी चुनौती होगी, लेकिन दुर्भाग्य से, यह एक सवाल है जो युक्तियों के लिए पूछ रहा है। यहाँ चुनौती है जिसे मैं पढ़ना चाहता था:

किसने कहा कि रियलिटी में गोल्फ भाषाओं का उपयोग नहीं किया गया था? जैसा कि हर कोई जानता है, कोड की प्रति पंक्ति बग का अनुपात प्रोग्रामिंग भाषा का स्वतंत्र रूप से उपयोग किया जा रहा है, इसलिए उन भाषाओं के साथ डिबगिंग और रखरखाव लागत को कम करने का एक स्पष्ट अवसर है। आपकी कंपनी ने आखिरकार प्रकाश को देखा और अपने उत्पादों को विकसित करने के लिए गोल्फस्क्रिप्ट, सीजाम और पायथ का उपयोग करने का निर्णय लिया।

दुर्भाग्य से, कुछ महीनों के बाद, आपकी हार्ड ड्राइव कोड के स्निपेट्स के साथ बंद हो जाती है और आपको यह भी नहीं पता होता है कि कौन सी भाषाएं लिखी जाती हैं (आप पर्ल के उपयोग के अपने कुछ प्रोग्रामर पर भी संदेह करते हैं)।

आपको यह जानने के लिए एक टूल लिखना होगा कि सीजाम, गोल्फस्क्रिप्ट या पायथ में से कौन सी भाषा वह प्रोग्राम है जिसमें लिखा गया है। स्थिति गंभीर है, आप अपनी इच्छित किसी भी भाषा का उपयोग कर सकते हैं, लेकिन कृपया इसे छोटा रखें (डेटा संग्रहण महंगा है: हम जितना अधिक बाइट्स का उपयोग करते हैं, उतना ही अधिक खर्च होता है)।

सामान्य

  • सबसे छोटा कोड जीत
  • मानक खामियां, आदि।
  • एक ऑनलाइन दुभाषिया का उपयोग न करें
  • आप एक फ़ंक्शन या प्रोग्राम लिख सकते हैं
  • आप अपनी खुद की भाषा का पता लगाने के लिए eval का उपयोग कर सकते हैं

इनपुट

  • आपका इनपुट मानक इनपुट स्ट्रीम या स्ट्रिंग के रूप में लिया गया है
  • इनपुट में केवल ASCII प्रिंट करने योग्य अक्षर और लाइनफीड शामिल हैं
  • इनपुट का आकार 256 बाइट तक लंबा है

उत्पादन

  • आउटपुट को आउटपुट स्ट्रीम पर प्रिंट किया जाता है या स्ट्रिंग्स / प्रतीकों के अनुक्रम के रूप में लौटाया जाता है
  • यदि इनपुट बिना किसी शक के वैध एक्स प्रोग्राम है, तो X , X J {CJam, Pyth, Golfscript} को प्रिंट या रिटर्न करें

    टिप्पणी : "बिना किसी संदेह के" का मतलब यह नहीं है कि आपको एक गूंगा विश्लेषक के साथ जवाब देने की अनुमति है जो लगातार किसी भी भाषा का पता लगाने में विफल रहता है। के लिए Pyth , मैं उम्मीद सरल कार्यक्रम मान्यता प्राप्त होना (लेकिन कोई hardcoding)। वही सीजेएम ( चीट शीट , उदाहरण ) और गोल्फस्क्रिप्ट ( उदाहरण ) के लिए जाता है। पिछले लिंक प्रत्येक भाषा के विनिर्देशों की ओर इशारा करते हैं। यदि आप एक फजी / बायेसियन दृष्टिकोण का उपयोग करते हैं, तो "एक शक के बिना" का मतलब उच्च स्तर के आत्मविश्वास के साथ होता है (उदाहरण के लिए, आप अपने वर्गीकरण के साथ 99% स्कोर करते हैं)। वास्तविक परीक्षण सूट के लिए नीचे देखें।

  • यदि इनपुट कई भाषाओं में मान्य है, तो प्रत्येक पता की गई भाषा को मुद्रित / वापस किया जाना चाहिए। जब मुद्रित किया जाता है, तो कई आउटपुट (जैसे स्थान, न्यूलाइन, अल्पविराम ...) के बीच एक विभाजक होना चाहिए।

  • जिस क्रम में भाषाओं को आज़माया जाता है वह मायने नहीं रखता
  • मैं मामले की परवाह नहीं करता (CJam, cjam, CJAM, SPAM) [1]
  • यदि उपरोक्त भाषा में से किसी का भी पता नहीं चला है, तो " Probably Perl" प्रिंट करें । Mbomb007 की इस टिप्पणी के लिए धन्यवाद , उपरोक्त मामले में आप Seriously4 बाइट्स (दोनों तारों के बीच का अंतर) के दंड के लिए " " आउटपुट भी कर सकते हैं ।

[१] बस स्पष्ट होने के लिए, स्पैम अमान्य है

उदाहरण

  • इनपुट

    "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(){}

बेसिक टेस्ट सूट

वे परीक्षण हैं जो पास होने चाहिए । Belows प्रत्येक भाषा के लिए एक-लाइनर हैं जहां आपके प्रोग्राम को उस भाषा का पता लगाना चाहिए जो उसमें लिखी जा रही है (मैंने यह नहीं जांचा कि उनमें से कौन-सी पॉलीग्लॉट हैं)।

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 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
@ mbomb007 गंभीरता से: एक भाषा जो गोल्फ के रूप में पाइथ में व्याख्या किए गए स्रोत के परिणाम को चलाती है, फिर एक सीजेएम स्टैक पर नईलाइन से अलग किए गए मानों को धक्का देती है और अंत में वहां से STDOUT को आउटपुट करती है। दो बार perl के रूप में उपयोग करने के लिए आसान: ^)
FryAmTheEggman

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) की आवश्यकता है, और Python 3, Java और Ruby स्थापित हैं। सरल परीक्षण: कार्यक्रम चलाने का प्रयास करें। यदि यह साथ लौटता है 0, तो हम अच्छे हैं। यदि नहीं, तो यह अमान्य है। $TMPCJam में स्क्रिप्ट विकल्प नहीं होने के कारण प्रोग्राम को होल्ड करने के लिए एक नामांकित अस्थायी फ़ाइल (उदाहरण के लिए बनाई गई फ़ाइल ) बनाई जाती है। 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, रूबी, जावा, CJam, Pyth, Golfscript - मैं 8. गिनती
Mego

2
ये सही है। और सही इनपुट फ़ाइल के साथ, यह आपके होम डायरेक्टरी को भी मिटा सकता है। वैसे भी, यह एक मान्य दृष्टिकोण है, मुझे कोई आपत्ति नहीं है।
coredump

बस उम्मीद करते हैं कि आपको अंतहीन लूप्स के साथ कोई कार्यक्रम नहीं मिलेगा, या गैर-शून्य नहीं लौटाएगा।
पाओलो एबरमन

@Mego यदि कोई प्रोग्राम स्वयं किसी कारण से विफल हो जाता है (जैसे फ़ाइल खोलते समय जो मौजूद नहीं है - या जब वह तर्क की उम्मीद कर रहा है, जो मुझे संदेह है कि वास्तव में उत्पादक कार्यक्रमों के लिए अधिक बार हो सकता है), तो इसे एक गैर-शून्य मान वापस करना चाहिए उस दशक पुराने मानक के अनुसार। इसका मतलब यह नहीं है कि यह उस भाषा से संबंधित नहीं है। (यह परीक्षण के मामलों में से कोई भी हो सकता है वास्तव में उस प्रकार के हैं, हालांकि।) एक और मामला इनपुट की प्रतीक्षा कर सकता है, जैसे एक catकार्यक्रम ... शायद आपको कम से कम इनपुट पर पुनर्निर्देशित / देव / अशक्त करने की कोशिश करनी चाहिए?
पाओलो एबरमन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.