真剣に、GolfScript、CJam、またはPyth?


56

少し前に、次の質問が尋ねられました:GolfScript、CJam、またはPyth? タイトルのみに基づいて、私はそれは非常に素晴らしい挑戦になると思いましたが、残念なことに、それはヒントを求める質問であることが判明しました。これが私が読みたかった挑戦です:

ゴルフの言語は実世界では使用されていないと誰が言ったのですか?誰もが知っているように、コードの行ごとのバグの割合は、使用されているプログラミング言語に関係なく同じであるため、これらの言語のデバッグおよび保守コストを削減する明確な機会があります。あなたの会社はついに光を見て、Golfscript、CJam、Pythを使用して製品を開発することにしました。

残念ながら、2、3か月後、ハードドライブにはコードスニペットが散らばっており、どの言語がどの言語で書かれているのかさえわかりません(Perlを使用しているプログラマーもいます)。

CJam、Golfscript、Pythのどれがプログラムの記述言語であるかを検出するツールを作成する必要があります。状況は非常に重要です。任意の言語を使用できますが、短くしてください(データストレージは高価です。使用するバイトが多いほど、コストがかかります)。

全般

  • 最短コード勝利
  • 標準的な抜け穴など
  • オンライン通訳を使用しないでください
  • 関数またはプログラムを書くことができます
  • evalを使用して独自の言語を検出できます

入力

  • 入力は標準入力ストリームから、または文字列として取得されます
  • 入力には、ASCII印刷可能文字と改行のみが含まれます
  • 入力のサイズは最大256バイトです

出力

  • 出力は出力ストリームに出力されるか、文字列/シンボルのシーケンスとして返されます
  • 入力は間違いなく有効である場合Xの印刷、プログラム又は戻りXをX ∈{CJam、Pyth、Golfscript}

    注釈:「疑いなく」とは、言語の検出に一貫して失敗するダムアナライザーで答えることができるという意味ではありません。Pyth、私は期待していない単純なプログラムが認識される(ただし、ハードコード)。同じことがCJamチートシート)とGolfscript)にも当てはまります。前のリンクは、各言語の仕様を指しています。ファジー/ベイジアンアプローチを使用する場合、「疑いのない」とは、高いレベルの信頼性を意味します(たとえば、分類で99%を獲得します)。 実際のテストスイートについては、以下を参照してください。

  • 入力が複数の言語で有効な場合、検出された各言語を印刷/返却する必要があります。印刷するときは、複数の出力の間に区切り文字が必要です(スペース、改行、コンマなど)。

  • 言語が試行される順序は重要ではありません
  • ケースは気にしません(CJam、cjam、CJAM、SPAM)[1]
  • 上記の言語いずれも検出されない場合は、Probably Perl」を印刷します。mbomb007からのこのコメントのおかげで、上記のケースではSeriously、4バイトのペナルティ(両方の文字列の差)に対して" "を出力することもできます。

[1]明確にするために、スパムは無効です

  • 入力

    "Crime predicted: --
    Calling: 1--555-
    
    "30*{_5<{iAa*:mr}&}/
    
  • 出力(複数の戻り値の例)

    ["Golfscript", "Cjam"]
    
  • 入力

    3
    
  • 出力(標準出力の例)

    golfscript
    cjam
    pyth
    
  • 入力

    if {} aazd
    
  • 出力

    Probably Perl
    

最後のケースでは、入力プログラムはエラー生成して すべての スリーオンライン通訳を。

得点、勝利基準

最短のコード勝利。「本気で」出力する場合は4バイトを追加します。次に、ボーナスを適用します。

失敗したテスト

以下は、上記の3つの言語のいずれとしても認識してはならないスニペットです。

1行(つまり、1行に1つのエントリ)
$^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!')
ブレインファック
>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++.
-----------------.
++++++++.
+++++.
--------.
+++++++++++++++.
------------------.
++++++++.
Perl
@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(){}

基本的なテストスイート

これらは合格しなければならないテストです。以下は、プログラムが書かれている言語をプログラムが検出する必要がある各言語のワンライナーです(どれが多言語かをチェックしませんでした)。

パイス

*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

次のワンライナーと同様に、以前のすべてのテストに合格する必要があります。これらのスニペットはすべて、実際のCodeGolfの回答から取得されています。

パイス

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

パイス

比較する
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真面目:Golfscriptで解釈されたソースの結果をPythとして実行し、改行で区切られた値をCJamスタックにプッシュし、最終的にそこからSTDOUTに出力する言語。perlのように使いやすい2回:^)
FryAmTheEggman

3
@ mbomb007あなたの失望を感じます。あなた自身の質問をすることをお勧めしますか?「それほど前ではありませんが、次の質問が尋ねられました...」
コアダンプ

31
そして、これは、私の友人、シバンが発明された理由です。
プリモ

6
通訳を介してプログラムを実行するという単純なソリューションではなく、ゴールドボーナスの対象であり、パターンマッチングに基づいて入力を検証する最初のソリューションに150の報奨金を提供します。
メゴ

回答:


2

ルビー、(135 + 4)* 0.6 * 0.8 = 66.72

これはWindows上で実行され、Unix上で実行することで短縮するには疲れすぎています。

(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].jarcjampyth.pypythgolfscript.rbgolfscript
  • f入力を取得する代わりにファイルから読み取ります。(IO.write(?f,gets);それを修正するために先頭に追加し、新しい長さは(153 + 4)* 0.6 * 0.8 = 75.36です)

残念ながら、それをテストすることはできません(Windowsと時間不足の組み合わせ)。それはよさそうだし、あなたのスコアは低いので、チェックマークを移動しています。
コアダンプ

39

Python 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.pycjam.jargolfscript.rb)現在のディレクトリにある、とPython 3、Java、およびRubyがインストールされています。簡単なテスト:プログラムを実行してみてください。で返される場合0、私たちは良いです。そうでない場合、それは無効です。$TMPCJamにはスクリプトオプションがないため、プログラムを保持するために名前付き一時ファイル(例:で作成されたファイル)が作成されます。delete=Falseフラグは、それが閉じているとき(OSが私たちのためにそれの世話をする)削除されたファイルを防止する必要があります。ファイルを読み取ろうとする前に、ファイルを閉じる必要があります(ただし、ファイルを手動でフラッシュすることもできますが、これは簡単です)。stdoutstderrリダイレクトされます/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人の通訳を必要とする
コアダンプ

1
bashの、Pythonの2、Pythonの3、ルビー、ジャワ、CJam、Pyth、Golfscript -私は8カウント
MEGO

2
そのとおり。また、正しい入力ファイルを使用すると、ホームディレクトリを消去することもできます。とにかく、これは有効なアプローチです、私は気にしません。
コアダンプ

無限ループ、またはゼロ以外の値を返すプログラムがないことを期待しましょう。
パエロエベルマン

@Megoは、プログラム自体が何らかの理由で失敗した場合(存在しないファイルを開くとき、または実際に生産的に使用されるプログラムで頻繁に発生する可能性がある引数を予期しているときなど)、ゼロ以外の値を返す必要がありますその10年の標準に従って。これは、その言語に属さないという意味ではありません。(ただし、実際にはそのタイプのテストケースはないかもしれません。)別のケースは、catプログラムのように入力を待っているかもしれません...多分、少なくとも/ dev / nullも入力にリダイレクトする必要がありますか?
パエロエベルマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.