手付かずでユニークなコードボウリング


82

あなたの挑戦は簡単です:一意のバイトのみを使用して、選択した言語でできるだけ長く元のプログラムを書きます。(そのリンクからコピーされた元のプログラムの完全な定義は、この質問の最後にあります。)

そうです、紐は付いていません。コードは何もする必要がなく、エラーなしで実行され、元のプログラム(上記のリンク)の要件を満たし、使用するエンコードに重複バイトを含めません。

上記の説明と「元のプログラム」のリンクされた定義の目的で、エラーは、プログラムが完全に実行できないか、有限時間後にゼロ以外の終了コードで終了するものとして定義されます。

これは最長ではなく最短でコードが勝ちます(バイトカウントで測定)。256個の異なるバイトが可能なため、理論的に可能な最大スコアは256です。同点の場合、最高スコアの最初の回答が勝ちです。


上記のリンクからコピーされた、元のプログラムの完全な定義は次のとおりです。

そのままのプログラムを、それ自体にエラーはないが、N文字の連続する部分文字列を削除して修正するとエラーになるプログラムとして定義してみましょう1 <= N < program length

たとえば、3文字のPython 2プログラム

`8`

長さ1の部分文字列を削除した結果、すべてのプログラムがエラーを引き起こします(実際には構文エラーですが、あらゆるタイプのエラーが発生します)。

8`
``
`8

また、長さ2の部分文字列を削除した結果、すべてのプログラムがエラーを引き起こします。

`
`

たとえば、エラーのない`8プログラムであった場合、部分文字列の削除の結果はすべてエラーに`8`なるため、初期状態ではありません。


37
良いコードボウリングチャレンジを作成するために管理するためにあなたに帽子をかぶっています!
-ETHproductions

サブプログラムが永久に実行されてもエラーが発生しない場合、答えは無効になりますか?
ディルナン

1
@dylnan「エラーは、有限時間後に[...]終了[...]として定義されます。」
user202729

3
@Baldrickkいいえ、このチャレンジには許可されません。(質問の例を参照している場合、それは初期のプログラムとは何かを示すものですが、固有のバイトの追加要件を満たしていません。)
エイダンF.ピアース

1
実際に通常エラーになる場合、未定義の動作をエラーとしてカウントできますか?JMP <address outside of the program's memory>アセンブリのようなものを考えています。原則として、実際のコンピューターでは無限ループまたはゼロ以外のエラーで終了する可能性がありますが、通常は異常終了します。
クリス

回答:


22

ゼリー253254256バイト

M“¢£¥¦©¬®µ½¿€ÆÇÐÑ×ØŒÞßæçðıȷñ÷øœþ !"#%&'()*+,-./0145689:;<=>?@ABCDEFGHIJKNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~¶°¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ƁƇƑƓƘⱮƝƤƬƲȤɓƈɗƒɠɦƙɱɲƥʠɼʂƭʋȥẠḄḌẸḤỊḲḶṂṆỌṚṢṬỤṾẈỴẒȦḂĊḊĖḞĠḢİĿṀṄȮṖṘṠṪẆẊẎŻḅḍẹḥịḳḷṃṇọṛṣṭụṿẉỵẓȧḃċḋėḟġḣŀṁṅȯṗṙṡṫẇẋẏż”L»«’Ɗạ‘}237$¤¡

オンラインでお試しください!または確認してください!

ゴルフ言語はボウルすることができます...

  • で作業して+1バイト«»は使用されません
  • +で2バイト«»。今、最適なスコアを持っています!

どうやって?

これを可能にするJellyの重要な機能は、文字列リテラルの開始文字と終了文字が他のほとんどすべての言語と同じではないことです。

プログラム構造は次のとおりです。

M <239 character long string> L»«’Ɗạ‘}237$¤¡

M最大の要素を指す引数のインデックスを見つけます。重要なのは、このプログラムへの引数なしで0、Jellyがチェーンに割り当てられ、Jelly Mが適用されるときにJellyエラーが発生すること0です。

完全なプログラムでM動作するのを防ぐために0¡quick を使用します。quickは、M直前のリンクの結果によって決定される回数を適用します。この場合、そのリンクは<239 character long string> L»«’Ɗạ‘}237$¤です。

Lこの文字列の長さ(239)»«’Ɗを取得し、これを238にデクリメントします。»«パーツはƊ(モナドとして最後の3つのリンク)何もしません。次に、の結果»«’Ɗ‘}237$文字列に適用されるモナドの絶対差を取ります。インクリメントし、モナドですが、}これはダイアドに変換し、それを正しい引数に適用し237、を生成し238ます。したがって、完全なプログラムで歩留まりが向上0します。

¤niladを形成する文字列リテラルへのリンク。この結果はです0のでM、まったく適用されず、エラーが発生しません。

可能なサブプログラム:

  • 文字列の一部が削除<string>..¤されると、ゼロ以外になり、Mに適用され0てエラーが発生します。
  • の一部L»«’Ɗạ‘}237$が削除されるM0、文字列と数値の間に適用されるか、演算が行われ、結果がになりTypeErrorます。
  • のいずれか¤¡が削除されると、Mに適用され0ます。
  • 文字列の終了文字とその両方が’‘削除されて削除されない場合、その後のすべてMが文字列に変わるため、Mに作用し0ます。
    • 文字列は、文字を閉じた場合削除されますと、間のすべてのものはありませんとは、整数のリストになります。
  • M単独で削除された場合、先行するniladの前にリンクが必要になるEOFErrorため、anがあり¡ます。
  • もしM“、それが除去された後に任意の数の文字が、そこになりますEOFErrorので¤niladためのルックスは、それに先立つが、1つを見つけることができません。238それはモナドの一部なのでカウントしません。

これはほとんどすべてをカバーしています。

«»‘後者の2つは文字列に含めることができないため、以前は使用していませんでした。文字列と一致しないため、文字列以外のものを形成するからです。文字列«にすることもできませんが、“”理由はわかりません。


31

Haskell39 45 50 52 60バイト

main=do{(\𤶸	陸 ⵙߜ 新->pure fst)LT
EQ[]3
2$1}

識別子にmainIO a、いくつかのタイプaのタイプが必要です。プログラムが実行されると、計算が実行され、mainその結果は破棄されます。この場合、そのタイプはIO ((a,b)->a)です。

結果は(λ a b c d e f → return fst)、IOモナドに注入された関数fst(2タプルの最初の要素を与える)を返す6引数定数関数functionのアプリケーションです。6つの引数は、LT(より少ないため列挙型)、 EQ(平等のための列挙型)、空のリスト[]32および1

スペースとなるものは、スペースとしてカウントされる固有の文字に置き換えられます。タブ、改行なしスペース、改ページ、垂直タブ、OGHAM SPACE MARK、通常のスペース、改行、キャリッジリターン。これらのいずれかが欠落している場合、引数の数に不一致があります。パラメーター名は、3バイトまたは4バイトのUTF-8文字として𤶸陸ⵙ商ߜ新選択されます。バイトが重複しない文字を慎重に選択します。

彼の貴重な貢献に対して@BMOに感謝します。

六角ダンプ:

00000000: 6d61 696e 3d64 6f7b 285c f0a4 b6b8 09ef  main=do{(\......
00000010: a793 c2a0 e2b5 990c e595 860b df9c e19a  ................
00000020: 80e6 96b0 2d3e 7075 7265 2066 7374 294c  ....->pure fst)L
00000030: 540a 4551 5b5d 330d 3224 317d            T.EQ[]3.2$1}

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


うーん、'\109999'少なくともGHC 8.2.2では有効なようです。'\10999a'字句エラーを生成します。
-chepner

@chepner:GHC 8.2.2でテストしたところ𚶯、字句エラーも発生します。
ბიმო

2
@chepner:最大のCharはmaxBound :: Char、つまり'\1114111'です。注:進をしたい場合、あなたは配置する必要がありますので、数字は、デフォルトで小数ですx\ 、例えば'\x10999a'
-nimi

@nimi Aaaand私は実際にUnicodeエスケープを使用する頻度を確立していると思います:) 16進値に正しい形式を使用すると、正常に\x10ffff動作\x110000し、予想どおりに範囲外エラーが発生します。
-chepner

25

パイソン2 20の21 33 39 45  50バイト

今、非常に協力的な努力です!

+2 Aidan F. Pierceに感謝(代わりsorted({0})map(long,{0})

dylnanに+8おかげ(の使用\空間を交換すると改行;から移動する提案0数式に、交換-1して-True、16進数の使用)

Angsのおかげで+11(4*23+~91-> ~4836+9*1075/2その後後で~197836254+0xbCABdDF-> ~875+0xDEAdFBCbc%1439/2*6


if\
map(long,{~875+0xDEAdFBCbc%1439/2*6})[-True]:q

オンラインでお試しください!または確認スイートを見る

0xDEAdFBCbcは16進数で、評価はになり59775106236ます。
~はビット単位の補数であるため、と~875評価され-876ます。
%はモジュロ演算子なので、に0xDEAdFBCbc%1439評価され293ます。
/は整数除算なので、に0xDEAdFBCbc%1439/2評価され146ます。
*は乗算なので、にxDEAdFBCbc%1439/2*6評価され876ます。
+は加算なので、と~875+xDEAdFBCbc%1439/2*6評価され0ます。
...削除されたバージョンも評価されません0

{0}は、set単一の要素を含む0です。

引数としてsorteda setを呼び出すと、リストが生成され[...]ます。

なしでsortedコードが({0})ちょうどもたらすであろうsetと、これは同じようににインデックスを作成することができない、if({0})[-True]:q引き上げますTypeError

Pythonでインデックス付けは0ベースであり、背面から負の索引付けを可能にし、Trueに相当し1、したがってsorted({0})[-True]要素を見つけ0ながら、sorted({0})[True]引き上げるIndexErrorれるように、sorted({})[-True]そしてsorted({0})[]無効な構文です。

0発見されたことはfalseyの身体ようでifqそれはそれは引き上げるだったがあれば、実行されることはありませんNameErrorので、q定義されていません。

空ではないリストは真実であるため、if[-1]:qどちらにも絞り込むことはできません。

参照してください確認のスイートを参照してください:確認のバイトはユニークであること。すべてのエラー。そして、コード自体の成功。


17

C(TCC)、x86_64の、29の 31 33 39 40バイト

main[]={(23*8),-~0xABEDFCfebdc%95674+1};

0を返します。大文字の16進数を提案してくれた@feersumに感謝します。

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

使い方

割り当てにより、mainのメモリ位置に2つのint(184および49664)が書き込まれます。32ビット整数とリトルエンディアンのバイト順では、正確なバイトはです。b8 00 00 00 00 c2 00 00

tccは定義された配列を.dataとして宣言しないため(ほとんどのコンパイラーはそうします)、mainにジャンプすると、それが指すマシンコードが実行されます。

  • b8 00 00 00 00mov eax, imm32)int 0をeaxレジスタに保存します。

  • c2 00 00ret imm16)スタックから余分な0バイトをポップして返します。(eaxレジスタの値は関数の戻り値です)。


TIOリンクにセグメンテーション違反が表示されています。
pppery

15

> <>、122バイト

e"~l=?!z6-d0p}xwutsrqonmkjihgfcba`_]\[>ZYXWVUTSRQPONMLKJIHGFEDCB@<:98754321/,+*)('&%$# .	|{Ay

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

何もしません。私のプログラミングa Pristine Worldの答えと同じフォーマットに基づいています。

まず、コードの長さが122であることを確認し、そうでない場合はエラーを確認します。コマンドを><>使用せずにプログラムを終了することはできません;が、このコマンドがプログラム内にある場合は、その前のすべてを削除して、プログラムをすぐに終了できます。これに対処するために、実行時にpコマンドを使用;してコードにaを配置します。これを行うには、から6を減算しA、の後に配置しpます。

正しい2バイトの値を見つけたら、おそらく127を超える他の値のほとんどを追加します。欠落している5つの値はv^;2つの改行です。

7502個のサブプログラムのうち、7417個は無効な命令によるエラー、72個はメモリアンダーフローによるエラー、13個はメモリ不足によるエラーです。


13

JavaScript、42バイト

if([0XacdCADE*Proxy.length]!=362517948)田
  • を削除iするf、またはif原因となりSyntaxError: missing ; before statementます。
  • 削除すると発生しSyntaxError: expected expression, got end of scriptます。
  • から1または2バイトを削除するとInvalid or unexpected token
  • ブール式を変更すると、構文エラーまたは参照エラーが発生します

00000000: 6966 285b 3058 6163 6443 4144 452a 5072  if([0XacdCADE*Pr
00000010: 6f78 792e 6c65 6e67 7468 5d21 3d33 3632  oxy.length]!=362
00000020: 3531 3739 3438 29e7 94b0                 517948)...


9

Brain-Flak、2バイト

<>

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

また、[]{}または()。いずれかのブラケットを取り外すと、もう一方のブラケットが一致しなくなります。

これが最適なソリューションであることの証明:

Brain-Flakプログラムは、nilads(それ自体がブラケットのペア)またはモナド(1つ以上のniladを含むブラケットのペア)で構成されています。モナドは、1つまたは複数のniladを単純に削除できるため、初期のプログラムに含めることはできません。同様に、プログラムを壊すことなくそのうちの1つを削除できるため、プログラムに複数のniladを含めることはできません。

そのため、これは、原始的なプログラミングまたは独自のプログラミングに最適な言語ではない可能性があります。


6

Ada、110バイト(latin1)

おそらく、業界で使用されている言語から得られる最良の答えは何ですか?

Hexdump:

0000000: 7061 636b 4167 4520 6266 686a 6c6d 6f71  packAgE bfhjlmoq
0000010: 7274 7576 7778 797a e0e1 e2e3 e4e5 e6e7  rtuvwxyz........
0000020: e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f8  ................
0000030: f9fa fbfc fdfe 0d69 730b 656e 6409 4246  .......is.end.BF
0000040: 484a 4c4d 4f51 5254 5556 5758 595a c0c1  HJLMOQRTUVWXYZ..
0000050: c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1  ................
0000060: d2d3 d4d5 d6d8 d9da dbdc ddde 3b0a       ............;.

で終わるファイルに保存して.ads実行しgcc -c <filename>ます。何も実行しない実行可能ファイルを生成します。(TIOはコードを.adbファイルに入れgcc、デフォルトでそれらに一致する仕様を見つけようとするため、TIOリンクを提供できません)

基本的に、大文字/小文字のlatin1文字を乱用する名前のパッケージを宣言します。スペースごとに異なる空白文字が必要なので、スペース、CR、LF、およびTABを使用します。

vimバージョンでの表示:

packAgE bfhjlmoqrtuvwxyzàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ^Mis^Kend^IBFHJLMOQRTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ;

使い方

Adaでは、仕様もコンパイルできます。仕様はcのヘッダーファイルに似ていますが、よりフル機能であり、いくつかの基本的なコードをコンパイルできます。:有効であるためには任意の仕様は、形式持っている必要がありますpackage <NAME> is ... end <NAME>;との<NAME>マッチングを。Adaの良いところは、大文字と小文字が完全に区別されないことです。したがって、名前に大文字と小文字のバリエーションがある限り、大丈夫です!

難しい部分は、コンパイル可能なユニットを得ることでした。通常、Adaプログラムには、最終的な実行可能ファイルになるパッケージの外側にある「メイン」プロシージャまたは関数があります。残念ながら、プロシージャにはbeginキーワードが必要です。これはes が多すぎる(2つのケースのみが知られています)一方で、関数にはreturnキーワードが必要で、ns が多すぎます。したがって、パッケージをコンパイルする必要がありました。


5

C、8バイト

main(){}

何もしません。

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


1
たぶん私は挑戦を理解していませんが、どうmain(){short x;}
ジェリーエレミヤ

@JerryJeremiah:いいえ、main(){short;}aのみでコンパイルしwarning: useless type name in empty declarationます。C99とC ++は明示的な戻り値の型を必要とするのでint main(または多分unsigned main)動作する可能性がありますが、gccでは-std=c11
ピーター

@JerryJeremiah:return 0;C89で可能性があります。C89 では、暗黙return 0の終わりはありませんmain。他の回答によれば、ゼロ以外のステータスで終了することは失敗と見なすことができます。-Werrorコードボウリングで良い方法でスコアにカウントするようなコンパイラフラグを追加することはできますか?C11の違反を厳密に強制すると、プログラムがはるかに長くなる可能性があるためです。うーん、#include<>何かし、それを使用します。includeとusageの両方を削除することはできません。プロトタイプまたはマクロdefなしでクラッシュした場合は、勝ちます。
ピーター・コーデス

@PeterCordes私はそれについて考えましたがmaininclude両方が含まれているiので、両方を持つことはできません。関数を宣言して使用する場合も同様です。また、それを使用returnすることも考えられます。
クリス

おっと、一意のバイト要件を忘れてしまいました。もちろんint main動作しません。
ピーター

4

JavaScript、22バイト

with(0xF?JSON:[])parse

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

考えられるエラー

変更すると、次のエラー1のいずれかがスローされます。

[some_identifier] is not defined
expected expression, got ')'
expected expression, got ':'
expected expression, got '?'
expected expression, got ']'
expected expression, got end of script
identifier starts immediately after numeric literal
missing ( before with-statement object
missing ) after with-statement object
missing : in conditional expression
missing ] after element list
missing exponent
missing hexadecimal digits after '0x'
missing octal digits after '0o'
unexpected token: ')'
unexpected token: ']'
unexpected token: identifier

1.明確なエラーの正確な数は、エンジンによって異なります。このリストは、SpiderMonkey(Firefox)で生成されました。


4

Python 3 + Flask-Env7 13 14 17バイト

import\
flask_env

TIOがないのでflask-env

名前importの末尾に交差点がなく、番号のない最も長いモジュール名が見つかりました。_sha256長いですが256、それ自体はエラーになりません。私は1つのライブラリを見つけました。b3j0f.syncそれは1バイト長くなりましたが、正しくインポートすることができませんでした。

  • 後のスペースを置き換えることにより+1バイト import\<newline>。いずれかまたは両方を取り出すとエラーが発生します。

まだflask_env、より長いオプションがあるかもしれませんが、私は実際に徹底的な検索を行いませんでしたが、〜70,000モジュールを調べました。提案を受け入れます。


256エラーなしで実行されます。
エイダンF.ピアース

@ AidanF.Pierceありがとう、修正。
ディルナン

私は試してみましたimport *[hawkey]が、残念ながら機能しません
...-dylnan

1
hawkeyは標準ライブラリにないので、これは「Python with hawkey」です(おそらく、どこか他のモジュールでより良い結果を得ることができます)
ジョナサンアラン

@JonathanAllan良い点。今すぐ行かなければならないが、後で検索する
ディルナン

3

R、14バイト

(Sys.readlink)

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

これは、Rで可能な限り長くなる可能性があります。関数の呼び出しは失敗する運命にあります。関数名以外のすべてを削除できるため、関数のソースコードが出力されるだけだからです。これは、重複する文字や連続する文字を削除するときにオブジェクト名が残らない、デフォルトのRセットアップで最も長い名前のオブジェクトです。

この最初の試行はうまくいきませんでしたが、試して多くのことを学びました!

dontCheck({family;NROW})


2

Perl 5、3バイト

y=>

=>左側のベアワードを引用する「ファットコンマ」です。だからこれは

"y",

何もしません。

太いコンマがなければ、 yは、音訳演算子です。これは、後で同じ文字を3つ繰り返さ無効です。

あるとして単独で脂肪コンマは、また、無効である=>のみ。




1

標準ML、22バイト

val 1089=op-(765,~324)

オンラインでお試しください! op-(a,b)はの脱糖形式ですa-b~は単項マイナスを表すため、実際に計算してい765+324ます。この式は定数でパターンマッチングされます1089ます。プログラムが改ざんされていない場合、この一致は成功します。

一部の数字が削除されたために一致しない場合は、が取得されunhandled exception: Bindます。op-タプルがで一致するため、削除すると型エラーが発生しますint。他のすべての削除は、構文エラーになります。


1

Swift 4、19バイト

[].contains{1 !=
0}

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

私が見つけたすべての可能なエラーは次のとおりです。

  • いずれかを削除し[]{または}構文エラーになります
  • 削除[].するとUse of unresolved identifier 'contains'
  • 削除.するとConsecutive statements on a line must be separated by ';'
  • 削除[]するとReference to member 'contains' cannot be resolved without a contextual type
  • 削除{1 !=␊0}するとExpression resolves to an unused function
  • 削除1 !=␊0するとMissing return in a closure expected to return 'Bool'
    • 改行を削除すると、 '!=' is not a prefix unary operator
    • スペースを削除すると、 '=' must have consistent whitespace on both sides
    • 削除!=するとMissing return in a closure expected to return 'Bool'
      • また、改行を削除すると、 Consecutive statements on a line must be separated by ';'
      • スペースと改行(およびゼロまたは1桁の数字)を削除すると、 Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored
  • 削除[].containsするとClosure expression is unused

その他の興味深いプログラムは次のとおりです(各行に1つ)。

[].isEmpty
[:].values
[1:2]

これには2つaのs が含まれています
ケアニコインヘリングアーイング



0

網膜、2バイト

これが最適である場合、私は驚かないでしょう...

()

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

正規表現に空のグループが含まれています。いずれかの括弧を削除すると、括弧が一致しないために解析エラーが発生します。

他の解決方法があります:\(\)\[\]\*\+\?a]


a]エラーはありません。
jimmy23013

@ jimmy23013ああ、私はそれを見逃した方法がわかりません。ロールバック。
mbomb007

-2

C(gcc)73 75バイト

#include <ftw.h>
ABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890(){g FTW_D-1;}

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

@Steadyboxの回答に基づき、重大なエラーを検出してくれた@Angsに感謝します。

はい、それ汚いハックです(実際には#definewith -DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=mainおよびを使用しているため-Dg=return)が、そのようなコンパイラオプションを禁止するルールはありません。


プログラムは自然のままではありませんので、最初の行は離れて撮影することができます
Angs

@Angsありがとう、修正(他のコンパイラオプションを追加する価格で)
trolley813

8
このメタ投稿によると、提出物はC言語ではなく、C89 +-DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=main + -Dg=returnので、私はこれがあると主張したい。具体的な課題のために設計され作られたアップ言語使用するデフォルトでは禁止されています、。
デニス

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