triplegolf-ソースコードの長さだけでなく!


15

この課題の目標は、次の3つの長さがまったく同じであるプログラムを作成することです。

  • ソースコードの長さ
  • 標準出力に出力する出力の長さ
  • 選択した(変更されていない)コンパイラで生成されるコンパイラ警告の長さ

勝者は、3つの基準をすべて満たす最短のコードであり、少なくとも1文字の長さが必要です。

物事を盛り上げるために、出力の文字数が3未満の場合、各文字の長さに5ポイントのペナルティが加算されます(単一のタイプの場合は+10、2つの場合は+5)。

(改行は選択として1文字または2文字としてカウントされますが、3つの基準すべてで一貫している必要があります。先頭および末尾の空白は、3つの基準すべての行で無視されます)

等しいスコアの場合、(ゴミの代わりに)最も興味深い結果を出力するものが勝者です。


1
「キャラクターのタイプ」とは何ですか?
ピーターテイラー

5
また、コンパイラが警告なしの出力を生成した場合(「メインのコンパイル」など)また、ソースファイルの名前が警告メッセージに表示された場合(「foo.c:1:1:...」など)
ジョーイアダムス

3
私が選んだ武器はVBAで、実際にはコンパイラーがなく、実行するバイナリファイルを出力しません(他の言語の場合と同様)。これに関する考慮事項はありますか、それともデフォルトで失格になりますか?
ガフィ

2
一部の言語でトリプルクインが可能かどうか疑問に思いますか?
Ry-

2
インタプリタ言語の場合、エラーが発生しても出力を取得します。そのような場合、それらのエラーは受け入れられますか、警告のみが受け入れられますか?
l0n3sh4rk

回答:


14

Bash、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 gccバージョン4.7.0 20120505(プレリリース)(GCC)
l0n3sh4rk

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大部分は非印刷文字であるため、hexdumpをパイピングすると次のようになります。

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

私の理解では、非印刷可能(ホワイトペース?)は切り捨てられるため、これは考慮されません。それがうまくいけば、自分の答えを改善できます。
ガフィ

1
制御文字は通常、\ t、\ n、\ r、\ f、および場合によっては\ vを除き、空白とは見なされません。これらのいずれも先頭または末尾の位置にないため、安全であると考えました。
ブレッドボックス

1
これは完全に受け入れられると思います。彼らは、空白ではなく、いずれの場合も、これはACMがでないことがあるという要件を厳格に。この「空白ルール」の主な理由は、一部のIDEがコンパイラ出力を大幅にフォーマットする可能性があることです。
-vsz

1
@copy、またはmain(i){i='\z';while(i-->74)putchar(i);}-しかし、プログラムのサイズを小さくすると、実際には逆効果になります。
ブレッドボックス

1
これは私のお気に入りの答えです。ファイルの内容へのアクセスを禁止する必要がありました(実際のクインと同じように)
vsz

5

JavaScript、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

ジー、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
    ~~~~~~~~~~~~

(今回は、実際にはタブではなく4つのスペースです。)


3

Zsh、20バイト

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

ここで直面している問題は、上記のコメントで示唆されています。Zshは、すべてのエラーの前に行番号に加えてプログラム名を出力します。このソリューションでは、1文字のファイル名を使用してこれを悪用しています。 それを正確に表示するためにヘルパースクリプトでラップしwc -c、stderr、stdout、およびソースファイルで使用しました。

出力:569Xcatcatcatcatcat改行が続きます
エラー:s:[:2: ']' expected改行が続きます


編集:ファイル制限のない代替20バイトソリューション:

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

オンラインでお試しください!

zshのzsh -x10のバイト

<<<$_$_$_

-xフラグはxtraceを有効にします。この場合も、1文字のファイル名が必要です。 オンラインでお試しください!

Zsh zsh -JNTwEDY、12バイト

<<<$->&1 >&2

-flagファイル名を必要としない最短回答。さらにフラグを設定し、$-それらをすべて印刷します。オンラインでお試しください!


2

JavaScript(Firefox 54)、34バイト

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

出力:

1234function(x)1234function(x)1234

そして、この警告をブラウザコンソールに送信します。

expression closures are deprecated

私のFirefox Developer Edition(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:警告が表示されます...)

Rubyにはwarnメソッドがありますが、引数を$ stderrに出力するだけなので、警告のようには見えません。


1

Python、57バイト

他のインタープリターでは、警告の表示が異なる場合があります。これは、TIOで動作するようにのみテストされました。

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

オンラインで試す

出力

prtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprt

警告

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

先頭のスペースはバイト数にカウントされないことに注意してください。先頭のスペースが無視されない場合、これは51バイトで実行できます。


1

Javascript(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は、任意のコンパイラの警告を与えるものではありません
テイラー・スコット

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.