triplegolf-소스 코드 길이뿐만 아니라 카운트!


15

이 과제의 목표는 다음 세 길이가 정확히 같은 프로그램을 작성하는 것입니다.

  • 소스 코드의 길이
  • 표준 출력으로 출력되는 출력 길이
  • 선택한 (수정되지 않은) 컴파일러로 생성되는 컴파일러 경고의 길이

우승자는 세 가지 기준을 모두 충족하는 가장 짧은 코드이며 1 자 이상이어야합니다.

결과를 세분화하기 위해 출력에 3 개 미만의 다른 문자가있는 경우 각 문자 의 길이에 5 점이 추가됩니다 (단일 유형 인 경우 +10, 2 인 경우 +5).

(줄 바꿈은 1 ~ 2 자 중 하나의 문자로 선택되지만 세 가지 기준 모두에서 일관되어야합니다. 세 가지 기준의 모든 행에서 선행 및 후행 공백은 무시됩니다)

점수가 같으면 가비지 대신 가장 흥미로운 결과를 인쇄하는 것이 승자입니다.


1
"캐릭터 유형"이란 무엇입니까?
피터 테일러

5
또한 컴파일러에서 경고가 아닌 출력을 생성하면 (예 : "컴파일 링 메인")? 또한 소스 파일의 이름이 경고 메시지에 나타나는 경우 (예 : "foo.c : 1 : 1 : ...")?
Joey Adams

3
내가 선택한 무기는 VBA이며, 실제로 컴파일러가 없으며 실행할 바이너리 파일을 출력하지 않습니다 (다른 언어의 경우와 마찬가지로). 이에 대한 고려 사항이 있습니까, 아니면 기본적으로 자격이 박탈 되었습니까?
Gaffi

2
어떤 언어로 트리플 퀸이 가능한지 궁금합니다.
Ry-

2
해석 된 언어의 경우 오류 발생시에도 결과를 얻습니다. 이러한 경우 해당 오류가 허용되거나 경고 만 허용됩니까?
l0n3sh4rk

답변:


14

배쉬, 23 자

오류:

bash: /: Is a directory

출처:

echo       $0-$01234;/;

산출:

/bin/bash-/bin/bash1234


Brainf * ck, 32 자

이 코드는 약 3 초 동안 실행되고 중지되고 다음 오류 및 출력을 표시합니다.

오류:

bff: out of memory (-2058691272)

출처:

+++++[......-]..+[>>>>>>>>>>>>-]

출력 : (Hexdump)

0505 0505 0505 0404 0404 0404 0303 0303
0303 0202 0202 0202 0101 0101 0101 0000


C, 35 자

경고:

b.c:1:30: warning: division by zero

소스 및 출력 :

main(){system("cat "__FILE__)/0;;;}


PHP, 50 자

경고:

PHP Warning:  Division by zero in /tmp/3 on line 1

소스 및 출력 :

<?php echo (0/0).''.file_get_contents(__FILE__);?>

1
bash 예제는 경고가 아니라 오류입니다.
피터 테일러

C 솔루션에 어떤 컴파일러를 사용하고 있습니까?
breadbox

@breadbox gcc 버전 4.7.0 20120505 (시험판) (GCC)
l0n3sh4rk 2016 년

8

C-48 자

main(i){while(++i<49)putchar(i);putchar('\z');}

참고 : 최종 (Unix 스타일) 줄 바꿈이 포함되어 있습니다.

출력에서 gcc a.c

a.c:1:41: warning: unknown escape sequence '\z'

출력 a.out은 대부분 비 인쇄 문자이므로 16 진 덤프를 통해 파이핑 한 후의 모양은 다음과 같습니다.

00000000: 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011  ................
00000010: 1213 1415 1617 1819 1A1B 1C1D 1E1F 2021  .............. !
00000020: 2223 2425 2627 2829 2A2B 2C2D 2E2F 307A  "#$%&'()*+,-./0z

내 이해는 인쇄 할 수없는 (흰 종이?)가 잘 리므로 계산에 포함되지 않습니다. 그것이 효과가 있다면, 나는 내 자신의 대답을 향상시킬 수 있습니다.
Gaffi

1
제어 문자는 일반적으로 공백으로 간주되지 않지만 \ t, \ n, \ r, \ f 및 때로는 \ v를 제외하고는 공백입니다. 이들 중 어느 것도 선행 또는 후행 위치에 있지 않으므로 안전하다고 생각했습니다.
breadbox

1
나는 이것이 완벽하게 수용 가능하다고 생각합니다. 그들은하지 공백, 그리고 어느 경우에이 수 ACM없는 요구 사항과 엄격한. 이 "공백 규칙"의 주된 이유는 일부 IDE가 컴파일러 출력을 많이 포맷 할 수 있기 때문입니다.
vsz

1
@copy, 또는 main(i){i='\z';while(i-->74)putchar(i);}-그러나 프로그램 크기를 줄이는 것은 실제로 비생산적입니다.
breadbox

1
이것은 내가 가장 좋아하는 대답입니다. 파일의 내용에 액세스하는 것을 금지해야한다는 것을 알고 있습니다 (실제 quines와 동일)
vsz

5

자바 스크립트, 63 66

!function x(){console.log(x+'...');eval(Array(33).join('$'))}()

출력은 다음과 같습니다.

function x(){console.log(x+'...');eval(Array(33).join('$'))}...

Chrome에서 오류는 다음과 같습니다.

ReferenceError: $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ is not defined

3

Visual Basic .NET, 185

Gee, vbc컴파일 경고와 함께 매우 장황합니다. 어쨌든 코드는 다음과 같습니다.

Public Module Main
    Public Sub Main()
        Console.WriteLine(New String("a"c,185))
    End Sub

    Public Function A()
        'This is actually just padding.
        'Hi
    End Function
End Module

(공백이 아닌 탭이어야합니다.)

결과는 다음과 같습니다.

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

그리고 컴파일러 경고는 다음과 같습니다.

warning BC42105: Function 'A' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.

    End Function
    ~~~~~~~~~~~~

(이번에는 실제로 탭이 아닌 네 개의 공백입니다.)


3

Zsh , 20 바이트

<<<   $-$_$_$_$_$_
[

여기서 우리가 직면하는 문제는 위의 주석에서 언급됩니다. Zsh는 모든 오류 전에 줄 번호와 함께 프로그램 이름 을 인쇄합니다 . 여기서 해결책은 한 문자 파일 이름을 사용하여이를 악용합니다. 나는 그것을 인쇄하는 것을 정확하게 보여주기 위해 도우미 스크립트로 싸서 wc -cstderr, stdout 및 소스 파일에서 사용했습니다.

출력 : 569Xcatcatcatcatcat줄 바꿈
오류 : s:[:2: ']' expected줄 바꾸기


편집 : 파일 제한없이 대체 20 바이트 솔루션 :

<<<$-$-$-$-$_>&1 >&2

온라인으로 사용해보십시오!

Zsh ,, zsh -x10 바이트

<<<$_$_$_

-x플래그는 xtrace를 활성화합니다. 다시 한 문자 문자 파일 이름이 필요합니다. 온라인으로 사용해보십시오!

Zsh zsh -JNTwEDY , 12 바이트

<<<$->&1 >&2

-flag파일 이름 요구 사항이없는 최단 답변. 더 많은 플래그를 설정 $-하고 모두 인쇄합니다. 온라인으로 사용해보십시오!


2

자바 스크립트 (Firefox 54), 34 바이트

alert((f=function(x)1234)(56)+f+f)

출력 :

1234function(x)1234function(x)1234

그리고이 경고를 브라우저 콘솔에 보냅니다.

expression closures are deprecated

그것은 모양 파이어 폭스 개발자 버전 (54.0a2)의 내 사본. 다른 버전의 Firefox에서도 작동 할 수 있습니다.


2

루비, 48 자

IO=1;puts ?a*48;# let's make it 48 bytes long :)

출력

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

경고

r.rb:1: warning: already initialized constant IO

(파일은 r.rb이며 경로를 제거했습니다. irb에서 실행하면 (irb) : 1 : warning ...)이 표시됩니다.

Ruby에는 경고 방법이 있지만 인수를 $ stderr에 출력하기 때문에 경고처럼 보이지 않습니다.


1

파이썬, 57 바이트

다른 통역사는 경고를 다르게 표시 할 수 있습니다. 이것은 TIO에서만 작동하도록 테스트되었습니다.

from warnings import*
print("prt"*19)
warn("Warning...!")

온라인으로 사용해보십시오

산출

prtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprt

경고

.code.tio:3: UserWarning: Warning...!
  warn("Warning...!")

선행 공백은 바이트 수에 포함되지 않습니다. 선행 공백을 무시하지 않으면 51 바이트로 수행 할 수 있습니다.


1

자바 스크립트 (ES6), 32 30 바이트

Screen(console.log(Function));

인쇄물

ƒ Function() { [native code] }

Chrome에서

TypeError: Illegal constructor

내 원래 32 바이트 솔루션 :

(x=y=>console.log(x+!0+10)||z)()

먼저 인쇄

y=>console.log(x+!0+10)||ztrue10

그리고 오류를 던졌습니다

ReferenceError: z is not defined

0

VBA, 39 바이트

컴파일러 제약 조건에서 이것이 자격이되는지 확실하지 않지만 다음을 수행하십시오.

입력 : (즉시 창에서)

For i=1 To 39:a=a & Chr(i):Next:Print a

* 출력에는이 창에서 잘 재생되지 않는 비 인쇄 문자가 포함됩니다.


VBA는 컴파일러 경고를 제공하지 않으므로 이것이 유효하다고 생각하지 않습니다.
Taylor Scott

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.