あなたの仕事は、できるだけ少ない文字数で、できるだけ多くの言語で実行するプログラムを書くことです。些細な解決策を避けるために、プログラムは実行された言語の名前を印刷する必要があります。
得点
プログラムは少なくとも5つの言語で動作する必要があります。プログラムのスコアは次のとおりです。
(number of languages)1.5 / (length of program)
最初の有効な回答から10日以内に最高のスコアが獲得されます。
n * n / length
あなたの仕事は、できるだけ少ない文字数で、できるだけ多くの言語で実行するプログラムを書くことです。些細な解決策を避けるために、プログラムは実行された言語の名前を印刷する必要があります。
プログラムは少なくとも5つの言語で動作する必要があります。プログラムのスコアは次のとおりです。
(number of languages)1.5 / (length of program)
最初の有効な回答から10日以内に最高のスコアが獲得されます。
n * n / length
回答:
スコア〜0.1236
CおよびCのようなコードについては、@ baby-rabbitに借金があります。他の言語は、多くの言語にeval
は不本意ながら無効な構文を受け入れるステートメントがあるという認識に触発されています。
言語名を標準出力に出力します。標準エラーで多くのエラーメッセージが生成される場合があるため、2>/dev/null
実行時にそれらを抑制します。
#if 0
'PHP<?/*';eval "print\$=?'Perl':'Ruby';echo Bash";exit
__END__
#endif
#include <stdio.h>
main(){puts(
#ifdef __OBJC__
"obj-"
#endif
"C"
#ifdef __cplusplus
"++"
#endif
);}//*/?>'
PHPソリューションの出力'PHP'
(単一引用符を含む)は、ルールを少し曲げている可能性があります。
最終編集:洞察から12個の文字を剃っ$=
でfalse
、Rubyで60
Perlで、かつprint$=?...
、ほぼ確実にバッシュでエラーです。Perl / Ruby / Bashテストは、洞察からさらに7つ削られ、単一のevalステートメントに入ることができます。
ルールがより多くの曲げに耐えられる場合、この8つの言語、43文字のソリューション(スコア0.5262)を提示します
print("phperluarscriptrubypythoncatebg13");
そのため出力のためのインタプリタの名前を含むphp
、perl
、lua
、rscript
、ruby
、python
、cat
、およびをrot13
。
print("phperluarscriptrubypythontibasicatebg13");
Disp
or Output(
またはtext(
トークンを使用しprint(
ます。コマンドはありません。そして、それ以外の場合は実数値の式の一部として文字列を含めると、文字列ERR:INVALID SYNTAX
の表示ではなくが返されます(戻り値としても)。(また、NOがあり;
、TI-基本用途が:
)
echo Bash
てps -ocomm= -p$$
?これにより、少なくともbash、zsh、ksh、csh、tcshなどのシェルの名前が出力されます。
スコアは約0.040です
#include "stdio.h"
#define s "C"
#ifdef __cplusplus
#define s "C++"
#endif
#ifndef s
#"+++++++++[>++++++++++>+++++++++<<-]>>-.<++++.>-.++++++++.<----.>---.<+++++++.>---.++++++++.<<++++++++++.[-]"
if [ 1 == 2 ];then
puts "Ruby"
exit
fi
echo "BASH"
exit
end
#endif
main(){puts(s);}
Linuxシステムを使用していることに注意してください。
コードは次のコマンドで実行またはコンパイルされます(ファイルの名前はですtest.c
)
C:
gcc test.c
で実行すると./a.out
、出力はC
C ++:
c++ test.c
で実行すると./a.out
、出力はC++
BASH:
./test.c
出力: BASH
ルビー:
ruby test.c
出力: Ruby
BrainF ***:
以下を使用して検証済み:
出力: brainfuck
JSデバッガーを使用する場合は、最初の2つのマイナス記号を削除する必要があることに注意してください。文字列リテラルのプラス記号を相殺するために含まれています"C++"
。これは非常に楽しいプロジェクトでした。私は言語の追加に取り組んでいます。
さらに明確にするために、インタープリター/コンパイラーの仕様を以下に示します。
gccバージョン4.6.3
ruby 1.9.3p194(2012-04-20リビジョン35410)[x86_64-linux]
GNU bash、バージョン4.2.24(1)-release(x86_64-pc-linux-gnu)
サイドノート
@ baby-rabbitのトリックを使用して、コードを拡張して7言語(objective-CおよびObjective-C ++を追加)で実行できるようにしました。私はいくつかをコピーしたので、これは私の解決策ではありませんが、私はそれを誇示すると思った。
更新9.12 gnu-smalltalkで実行されるSmallTalkを追加しました!
SmallTalk、C、C ++、Objective-C、Objective-C ++、BASH、BF、Ruby; 384文字(スコア:0.059)
#if (a)
##(true) ifTrue: ['SmallTalk' printNl]
##(ObjectMemory quit)
#"+++++++++++[>++++++++++>+++++++++<<-]>>-.<++++.>-.++++++++.<----.>---.<+++++++.>---.++++++++.<<++++++++++.[-]"
if [ 1 == 2 ];then
puts 'Ruby'
exit
fi
echo 'BASH'
exit
end
=begin
#endif
#include "stdio.h"
main(){puts(
#ifdef __OBJC__
"Objective-"
#endif
"C"
#ifdef __cplusplus
"++"
#endif
);}
#ifdef b
=end
#endif
上記のコードでは、objective-c、obj-c ++、c、c ++の言語名を生成するためにファイルの名前を変更する必要があります。
brainf***
か?
if [ 1 = 2 ]
代わりに使用する必要がありますif [ 1 == 2 ]
。shはbashである場合とそうでない場合があり、Debianではダッシュです。
#if x
echo "bash"
exit
#endif
#include <stdio.h>
int main(){puts(
#ifdef __OBJC__
"obj-"
#endif
"c"
#ifdef __cplusplus
"++"
#endif
);}
ファイルの名前を変更し、次のように実行/コンパイルします。
(ccはclang-421.10.42です)
これが重要かどうかはわかりませんが、sed部分はシェバンラインに埋め込まれていますが、これは間違いなく制限を回避するためのハックです。これはまた、直接実行するのではなく、実行可能ファイルとして実行する必要があることを意味しsed
ます。
他のすべての言語(Befunge以外)がシェバン行を自動的に無視することは幸運でした(ただし、文字列「ruby」を含まないシェバン行がある場合、Rubyはファイルの実行を拒否しているようです)。
#!sed sanava;s/.*/sed/;q;ruby
--"".to_i#>"egnufeB">:#,_@
if 0
then
if IO
then
puts"Ruby"
else
print"Lua"
end
else
echo"VimL"
end
サンプル使用法:
% lua tmp/glot.poly
Lua
% ruby tmp/glot.poly
Ruby
% ./tmp/glot.poly
sed
% cfunge tmp/glot.poly # Requires Befunge-98
Befunge
:source tmp/glot.poly # from vim
VimL # displayed as message
(<ESC>
ASCIIコード27を表します。)
rem (){ ((0));};true /*
rem ;goto(){ rem;}
rem ivi<ESC>ZZ'++++++++[>NUL ++++++++<NUL -]>NUL ++.++++.*/;main(){puts("C");}/*'
goto a
echo Bash
exit
:a
echo Batch
rem */
これをバッチファイルとして、COMMAND.COMのMS-DOS 6.22バージョンでテストしました。デフォルトでは、そのインタープリターはソースコードの行と出力を混合します。それを防ぐにはecho off
、バッチファイルを実行する前に実行してください。
Vimを使用してテストしただけのviコードを実行するには、次のコマンドを使用します。
cat /dev/null > tmpfile && vi -s polyglot.sh tmpfile > /dev/null 2>&1 && cat tmpfile
touch tmpfile
またはの: > tmpfile
代わりに使用できますcat /dev/null > tmpfile
。
import sys
print('Python '+'.'.join(map(str,sys.version_info[:-2])))
技術的に有効なのは、すべてのpythonバージョンを異なる言語と見なす場合です。現在、116のpythonバージョンがあり、18.37291程度のスコアが得られると思います。
(これが有効な答えとはみなされない場合、これはただの楽しみのためでした)
(<BS>
ASCIIコード8を<ESC>
表します。ASCIIコード27を表します。)
#define echo//<BS><BS><BS>vi<ESC>ZZ
#define BEGIN A()
#define B\
{
echo Bash ;exit;
#define C\
}
BEGIN {printf(A=="A"?"Perl":"Gawk");exit;}
main(){puts("C");}
Vimを使用してのみテストしたviコードを実行するには、次のコマンドを使用します。
cat /dev/null > tmpfile && vi -s polyglot.sh tmpfile > /dev/null 2>&1 && cat tmpfile
これは言語の安い選択ですが、ここに行きます:
a="undefined"
x="ECMAScript 3"
if(Array.prototype.map)
x="ECMAScript 5"
if(typeof CoffeeScript!=a)
x="CoffeeScript"
if(typeof uneval!=a)
x="Mozilla JavaScript"
if(typeof WScript!=a)
WScript.echo("JScript")
else alert(x)
a="undefined";if(typeof arguments!=a)...else if(typeof WScript!=a...
ああ、あなたも....それがゴルフを試すことができます
{
/ }
/ ;
...アイデアが使用することですa
再利用を避けるために、"undefined"
あなたも行うことができ、b=alert
その後、とb("this is also still just javascript")
。とにかくThe golden rule of CoffeeScript is: "It's just JavaScript"
(からcoffeescript.org)、あなたはまた、第六言語....追加するには、いくつかのjQueryを使用することができます
[].map
代わりにできますArray.prototype.map
か?
これは、もともとの答えだったこれ。
;\\0"egnufeB">:#,_@SSSTTTSTTTL
;TL
;SSSSSTTSTSSSL
;TL
;SSSSSTTSTSSTL
;TL
;SSSSSTSTSTSSL
;TL
;SSSSSTTSSTSTL
;TL
;SSSSSTSTSSTTL
;TL
;SSSSSTTTSSSSL
;TL
;SSSSSTTSSSSTL
;TL
;SSSSSTTSSSTTL
;TL
;SSSSSTTSSTSTL
;SSL
;L
;L
;L
;public class H{ public static void main(String []a){System.out.println("JAVA");}}
;/*
(print "LISP")
;*/
;//<?php
; echo "PHP"
;//?>
;/*
#|
DO ,1 <- #8
DO ,1 SUB #1 <- #110
DO ,1 SUB #2 <- #32
DO ,1 SUB #3 <- #72
DO ,1 SUB #4 <- #136
DO ,1 SUB #5 <- #88
DO ,1 SUB #6 <- #136
PLEASE DO ,1 SUB #7 <- #64
DO ,1 SUB #8 <- #80
PLEASE READ OUT ,1
PLEASE NOTE |#
;*/
;// PLEASE GIVE UP
public class...
はコンパイラの問題を引き起こします。
::¤Quomplex¤:"'*[]'":~"GTB":g;1:d`"GOLF-BASIC 84":g`1:"TI-BASIC":Lbl 1:End
echo Windows Batch
使い方
::
コメントを開始するため、Windowsバッチが最も簡単でした。実装はかなり簡単です。
TI-Basicは小文字またはバックd`"GOLF-BASIC 84":g`1
ティックをサポートしていないため、Golf-Basicが評価し、メッセージを表示してラベル1に転送し、すぐに終了するステートメントをスキップします。これは、便利な表示文字であるGTBにも似てい~
ます。ところで、表示のない文字列はに入れられAns
ます。その後に表示コマンドがないAns
場合は、出力されます(ここでは該当しません)。
Quomplexは、その複雑な構文では多くの部分をスキップできないため、最初に組み込まれました。"Quomplex"
出力に追加するだけで、プログラムを使いこなすことができます...
プログラミング構文の習得
:"'*[]'"
純粋な天才。Quomplexは無視:
し、かかる"'
と'"
出力に残して、スタックを文字列として、およびwhileループ(無限に死にます[]
)。一方、Golf-BasicおよびTI-Basic は、文字列演算子ではなく数学演算子である"'*[]'"
ため、全体を文字列として取り'
ます。
:
コメントではなくバッチファイル内のラベルを示します。ただし、それ自体では何も実行しないのは事実です。
::
(まだラベル)。REM
特にTI-Basicで必要なので、私はむしろそれを使いたいです。
この回答はもともとPeter Olsonの回答に基づいていますが、CoffeeScriptを除いています(空白が重要な言語はゴルフには恐ろしいことがあるため)。
また、Node、ES6およびES2016を追加し、コードを少しゴルフして、元のスコアをほぼ3倍にしました。
$=this,y="EcmaScript ",x=$.module?"Node":$.uneval?"Mozilla JavaScript":"".padStart?y+2016:$.Map?y+6:[].map?y+5:y+3,($.WScript||$.alert)(x)
#include <stdio.h>
#if 0
#replace "C(gcc)" "C(ecpp)"
#replace "C++(gcc)" "C++(ecpp)"
#endif
#ifdef __clang__
#define d 2
#elif __TINYC__
#define d 4
#else
#define d 0
#endif // rk:start print: "rk" \
ps -ocomm= -p$$; exit;
int x=sizeof('a')%2+d;char*arr[]={"C(gcc)","C++(gcc)","C(clang)","C++(clang)","C(tcc)"};int main(){puts(arr[x]);}
これは、C(gcc)、C ++(gcc)、C(ecpp)、C ++(ecpp)、C(clang)、C ++(clang)、C(tcc)、sh、dash、bash、zsh、ksh、csh、 tcsh、rk、およびSIL。
print()
Perl、Python、PHP、Processing、およびRに使用するようなソリューションを使用することは簡単なことと見なされますか?