당신의 작업은 가능한 한 적은 문자로 가능한 한 많은 언어로 실행되는 프로그램을 작성하는 것입니다. 사소한 해결책을 피하려면 프로그램이 실행 된 언어의 이름을 인쇄해야합니다.
채점
프로그램은 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, 루비 60펄, 그리고 print$=?...거의 확실 배쉬에서 오류가 발생합니다. Perl / Ruby / Bash 테스트에 대한 통찰력을 7 개 더 향상시켜 이제 단일 평가 문으로 넘어갈 수 있습니다.
규칙이 더 많은 굽힘을 견딜 수 있다면이 8 언어, 43 문자 솔루션 (점수 0.5262)을 제시합니다.
print("phperluarscriptrubypythoncatebg13");
하는 출력을위한 통역자의 이름이 포함되어 php, perl, lua, rscript, ruby, python, cat, 및 rot13.
print("phperluarscriptrubypythontibasicatebg13");
Disp하거나 Output(또는 text(토큰에는 존재하지 print(명령. 그렇지 않으면 실제 표현식의 일부로 문자열을 포함하면 문자열이 ERR:INVALID SYNTAX아닌 (반환 값이 아닌) 결과가됩니다. (또한, ;TI-Basic 용도 는 없습니다 :)
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).
씨:
gcc test.c
로 실행하면 ./a.out출력은C
C ++ :
c++ test.c
로 실행하면 ./a.out출력은C++
세게 때리다:
./test.c
출력 : BASH
루비:
ruby test.c
출력 : Ruby
BrainF *** :
다음을 사용하여 확인했습니다.
출력 : brainfuck
JS 디버거를 사용하는 경우 처음 두 빼기 부호를 제거해야합니다. 문자열 리터럴에서 더하기 부호를 오프셋하기 위해 포함되었습니다 "C++". 이것은 매우 재미있는 프로젝트였습니다. 더 많은 언어를 추가하고 있습니다.
더 명확하게하기 위해 여기 내 통역사 / 컴파일러 사양이 있습니다.
gcc 버전 4.6.3
루비 1.9.3p194 (2012-04-20 개정 35410) [x86_64-linux]
GNU bash, 버전 4.2.24 (1)-릴리스 (x86_64-pc-linux-gnu)
사이드 노트
@ baby-rabbit의 트릭을 사용하여 7 가지 언어 (objective-C 및 objective-c ++ 추가)로 실행 가능하도록 코드를 확장 할 수있었습니다. 이것은 일부를 복사 한 이후 내 해결책이 아니지만 그것을 보여 줄 것이라고 생각했습니다.
9.12 업데이트 gnu-smalltalk로 실행되는 SmallTalk가 추가되었습니다!
스몰 토크, C, C ++, 오브젝티브 -C, 오브젝티브 -C ++, BASH, BF, 루비; 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 일 수도 있고 아닐 수도 있습니다. 데비안에서는 대시입니다.
#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-part는 shebang 라인에 내장되어 있으며 제한을 극복하기위한 해킹 일 것입니다. 또한 실행 파일로 직접 실행하지 말고 실행 파일로 실행해야합니다 sed.
다른 모든 언어 (Sans Befunge)는 자동으로 shebang 라인을 무시합니다 (루비에 문자열 'ruby'가 포함되어 있지 않은 shebang 라인이 있으면 파일 실행을 거부하는 것 같습니다).
#!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])))
모든 파이썬 버전을 다른 언어로 간주하면 기술적으로 유효합니다. 현재 116 개의 파이썬 버전이 있으며, 약 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 Batch가 가장 쉬웠습니다 . 구현이 상당히 간단합니다.
TI-Basic은 소문자 나 백틱을 지원하지 않으므로 d`"GOLF-BASIC 84":g`1Golf-Basic에서 설명하는 메시지 를 생략 하고 메시지를 표시하고 레이블 1로 전달 하는 문을 건너 뜁니다 . 이것은 편리한 표시 문자 인 GTB와 유사합니다 ~. 그건 그렇고, 표시가없는 문자열이에 삽입됩니다 Ans. 뒤에 표시 명령이 없으면 Ans출력됩니다 (여기서는 해당되지 않음).
Quomplex는 복잡한 구문으로 많은 것을 건너 뛸 수 없기 때문에 처음에는 몰두했습니다. 그것은 "Quomplex"출력에 추가 한 다음 프로그램의 숙달을 위해 추가됩니다 ...
프로그래밍 구문의 숙달
:"'*[]'"
순수한 천재. Quomplex는 무시 :하고 소요 "'및 '"출력에두고 스택을 문자열로하면서 루프 (무한에 소멸 []). 한편 Golf-Basic과 TI-Basic 은 문자열 연산자가 아닌 수학 연산자 "'*[]'"이기 때문에 전체 를 문자열로 사용합니다 '.
:주석이 아닌 배치 파일의 레이블을 나타냅니다. 그러나 자체적으로 아무것도 실행하지 않는다는 것은 사실입니다.
::(여전히 레이블입니다). REMTI-Basic에서 필요 하기 때문에보다 사용하고 싶습니다 .
이 답변은 원래 Peter Olson의 답변을 기반으로하지만 CoffeeScript를 뺀 것입니다 (공백에 중요한 언어는 골프에 끔찍할 수 있음).
또한 Node , ES6 및 ES2016 을 추가하고 코드를 약간 골프화하여 원래 점수를 거의 세 배로 늘 렸습니다.
$=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.
$=this,y="EcmaScript ",($.WScript||alert)(x=Object.values?y+2017:$.module?"Node":$.uneval?"Mozilla JavaScript":[].includes?y+2016:$.Map?y+6:[].map?y+5:y+3)
print()Perl, Python, PHP, Processing 및 R에 사용하는 것과 같은 솔루션을 사용하는 것이 사소한 것으로 간주됩니까?