INTERCALは素晴らしい言語ですが、他の人のコードを理解するのは必ずしも容易ではありません。これは、COME FROMステートメントを使用する場合に特に当てはまります。
チャレンジの定義
- INTERCALプログラムのソースコードをテキスト/データストリームとして取得するプログラムまたは関数を記述します。関数を作成する場合は、関数を呼び出すプログラムも提供することをお勧めしますが、スコアにはカウントされません。
- 関数の出力は、以下の指示に従って、プログラムが行うジャンプのテキスト/データストリームになります。出力は印刷する必要はありませんが、(たとえば)文字列の配列ではなく、単一のテキストである必要があります。
出力の各行は、COME FROMになるステートメントと、そのCOME FROMステートメントの行番号で構成され、で区切られます
->
。例:(310) DO .4 <- .3 -> 55
ソースコードのこれらの行をトリミングできますが、そうする必要はありません。
- テストケースは、計算されていないラベル(つまり、整数ラベル)のみで構成されます。
- 出力は、COME FROMになるステートメントのソースコードの順序で並べ替える必要があります。ラベルではなく、COME FROMステートメントまたはそのラベルの順序ではありません。
- 複数のステートメントが同じラベルから来る可能性があります。このような場合は、COME FROM行番号を並べ替えて、コンマで区切る必要があります。
- ステートメントがそれ自体から来る可能性があります。
- COME FROMステートメントの前にNOTステートメントを付けることができます。このような場合、行番号は角括弧で囲む必要があります。
- COME FROMという単語はコメントに含めることができ、無視する必要があります。ファイルを完全に解析する必要はありません。ラベル(括弧内の数字)が後に続く場合は、それが実際のステートメントであると想定できます。
得点
応募者は、プログラムまたは機能のキャラクターの長さによって採点されます。
テストケース
これらのテストケースはすべて、calvinmetcalf / intercal Github repoからのものです。有用なアプリケーションはすべての入力を安全に受け入れますが、この課題では、これらの5つのテストケースのみを説明する必要があります。
(10) PLEASE DON'T GIVE UP -> 87
(33) DON'T GIVE UP -> 92
(15) DO (13) NEXT -> 26
(16) DO .12 <- .1 -> 6
(23) DO (21) NEXT -> 3
(7202) DO RETRIEVE .203+,202 -> 75
(4202) DO ,202SUB.201.202#7 <- ,201SUB.201.202#7 -> 108
(6202) DO ,201SUB.201.202#7 <- ,202SUB.201.202#7 -> 117
(4203) DO READ OUT ,201SUB.201.202#7 -> 133
(4302) DO .302 <- .2 -> 181
(5410) DO ,400SUB#124 <- #4 $ #17 -> 293
(3410) PLEASE (4410) NEXT -> 288
(5402) DO (412) NEXT -> 328
(4412) PLEASE (3412) NEXT -> 334
(3423) DO FORGET #2 -> 375
(4404) DO RETRIEVE .311+.312 -> 411
(5404) PLEASE DO (414) NEXT -> 430
(4434) DO FORGET #1 -> 441
(3454) DO (103) NEXT -> 451
(5502) DO .512 <- .312 -> 520
(8503) PLEASE RETRIEVE .311+.312 -> 621
(7503) DO (302) NEXT -> 515
(3622) DO (302) NEXT -> 514
(603) PLEASE FORGET #2 -> 622
(10) DO NOTHING -> 5, 11
(20) PLEASE (100) NEXT -> 6
(30) PLEASE (200) NEXT -> 12
(103) DO (104) NEXT -> 27
(104) DO (105) NEXT -> 19
(1) DO (2) NEXT -> 36
(2) DO (105) NEXT -> 194
(202) DO NOT .2 <- #2 AGAIN -> [196]
(203) DO (204) NEXT -> 167
(204) DO (205) NEXT -> 159
(8201) DO NOTHING -> 165, 271
(8202) PLEASE NOTE Fork threads, one dormant, one alive -> 53, 58
(8211) DO COME FROM (8211) -> 60
(8216) DO NOTHING -> 71
(8215) DO NOTHING -> 68
(8217) DO COME FROM (8217) AGAIN -> 118
(8299) DO COME FROM (8299) AGAIN -> 141
(8274) DO (8273) NEXT ONCE -> 158
(8259) PLEASE DO NOTHING -> 166
(8276) DO COME FROM (8276) AGAIN -> 199
(8278) PLEASE DO COME FROM (8278) AGAIN -> 237
2
まだコットンアイドジョーのリファレンスを誰も作成していないことは、私を困惑させます:-)。
—
mınxomaτ
INTERCAL is a wonderful language
攻撃的な言葉に反対票を投じました。
文字の長さでスコアを付けてもよろしいですか?チャレンジは通常、ここではバイト長でスコアリングされます。
—
15
@Fatalize両方の方法で考えました。Unicodeの文字として大きな数値をエンコードするような文字スコアリングの一般的な利点はおそらく役に立たないでしょうが、誰かがスコアリングを利用できるなら、何ができるかを知りたいと思います。
—
curiousdannii
ラベルが行の先頭にあると想定できますか?
—
orlp
^(\d+)
ラベルをつかむような?