違法な文字列を見つける


81

課題は、文字の文字列を見つけることですができませんに表示されるすべてのお好みのプログラミング言語で法的なプログラムを。これには、コメント、文字列、またはその他の「実行不可能な」部分が含まれます。

チャレンジ

  • プログラムは、言語のコンパイラ/インタープリター/ランタイム環境の特定のバージョンまたは実装に固有のものである場合があります。その場合、詳細を指定してください。
  • 標準のコンパイラ/インタープリター/ランタイムオプションのみが許可されます。特定の結果を得るために、コンパイラに奇妙なフラグを渡すことはできません(たとえば、フラグを渡して警告をエラーに変換する)。
  • プログラミング言語が特定のエンコード(UTF-8など)を必要とする場合、文字列も正しくエンコードする必要があります(つまり、文字デコードエラーのみによって失敗する文字列は許可されません)。
  • 提出する個々のキャラクターはすべて、法的プログラムで認められる必要があります。つまり、常に拒否される文字を使用することはできません。
  • 与えられたとき、コンパイラ/インタプリタ/ランタイムはエラーを与える必要があります任意の部分文字列として、あなたの文字列が含まれているソースコードを。エラーはプログラム間で同じである必要はありません。文字列を埋め込むと構文エラーが発生し、別の文字列を埋め込むとランタイムエラーが発生する可能性があります。

得点

  • 各言語の最短の違法文字列が優先されます。
  • 文字列が違法である理由を説明する必要があります(正当なプログラムのどこにも表示できない理由)。
  • コメント内の誤った解決策に異議を唱えます。より具体的には、提案された部分文字列を含む合法的なプログラム(エラーを生成しないプログラム)を示すTIOまたは同等物へのリンクを提供する必要があります。
  • 一部の言語(Bash、Batch、Perlなど)では、妥当性に影響を与えることなく(__DATA__Perlでの使用など)プログラムに任意のバイナリデータを追加できます。そのような言語については、そのような末尾のセクションにのみ表示されるソリューションを提出できます。回答にそのことを必ず書き留めてください。(この「末尾セクション」の定義は言語に依存しますが、一般的には、パーサーがスクリプトの読み取りを完全に停止した後のテキストを意味します)。

Pythonでは、私は提出するかもしれません

x
"""
'''

しかし、これは大きなプログラムに埋め込むことができます

"""
x
"""
'''
y
'''

そのため、許可されていません。


2
反例はSTDINからの入力に依存できますか?
ザカリー

5
これは良いCnRになりますか?
電卓

2
遅すぎると思うが、これは警官と強盗の挑戦であったようだ。有効なプログラムを作成しようとする試みには明らかなスキルがあり、そもそも文字列を思い付くことができます。
user2390246

4
Perlの試みに対する私の哀dolの意。:)
カズ

2
ネストされたコメントのおかげで、非識字のHaskellでは完全に不可能だと確信しています。
dfeuer

回答:


57

Changeling、2バイト




これは2つの改行です。有効なChangelingは、印刷可能なASCII文字の完全な正方形を常に形成する必要があるため、2つの改行を連続して含めることはできません。

エラーは常にパーサーエラーであり、常に同じです。

This shape is unpleasant.

終了コード1を伴います。

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


これは2Colでも機能しますオンラインでお試しください!。しかし、これが2Colで壊れる理由は、すべての行が正確に2文字で構成されている必要があるが、空の行でそれが壊れているためです。
クリチキシリソス

2
+1。これは自動的に勝者となるためです。なぜなら、「常に拒否されるキャラクターを使用することはできないから」という理由で1バイトのソリューションは許可されないからです。
ザカリー

1
@Cowsquack tfw自分の言語を忘れてしまった
Skidsdev

1
@Skidsdev tfw私は自分の言語を再忘れ、自分の言語を忘れることを忘れていました
Skidsdev

@Zacharý0バイトのソリューションはどうですか?
PyRulez

32

Java、4バイト

;\u;

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

これは無効なUnicodeエスケープシーケンスであり、コンパイラでエラーが発生します。

error: illegal unicode escape

動作しません-のような文字列リテラルを持つことができます"\\u;"
feersum

@feersum 1バイトのコストで修正
Kritixi Lithos

21
@TheLethalCoderは:Javaのソースコードを変更する前処理\uXXXXを実行する前にエスケープを何も他に、そうそう、これもcomments.za内で動作します
nneonneo

3
私はこれはまだこのサイトの歴史の中で最短のJavaの答えだと思う...
マジックタコ壺

1
@MagicOctopusUrn実際には、この0バイトのJavaの回答があります(STDOUTではなくSTDERRに出力するため、現在のメタではもう関係ありません)。どちらもかなり驚くほど賢いものですが。:)
ケビンクルーイッセン

25

COBOL(GNU)、8バイト


THEGAME

まず、コメントされた行に私の言葉を入れないようにするための改行。

その後、歴史的に、COBOLプログラムはコーディングシートに印刷され、コンパイラは80文字の制限された行に大きく依存し、複数行のコメントはなく、最初の6文字はコメント(多くの場合編集可能な行番号として使用されます) 、 私の知る限り。THEGAM次の行の先頭で選択しました。

次に、任意の行の7番目のシンボルは、スペース(効果なし)、アスタリスク(行の残りの部分にコメント)、ハイフン、スラッシュなど、非常に制限された文字のリストのみを受け入れますE

たとえば、GnuCobolによって与えられるエラーは次のとおりです。

error: invalid indicator 'E' at column 7

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

また、ゲームに負けたばかりです。


30
Also, you just lost the game.私はほとんどダウン投票
スティーブン

24

JavaScript、7バイト


;*/\u)

先頭の改行に注意してください。

  • \u) 無効なUnicodeエスケープシーケンスであるため、この文字列は無効です
  • //先頭にa を追加しても、先頭の改行のために機能しません。2行目はコメントなしのままにします
  • 追加すると、/*完全に理由決算の文字列コメントを解除しません*/残し、それを完了\u)暴露します
  • @tshで述べられているように、最後/の文字列の後に文字列を付けることで、最後の行を正規表現に変換できるため、の)前に置く\uことで、正規表現リテラルが常に無効になることを保証できます
  • @asgallantで述べられ1||1(string)/ているように、正規表現を評価する必要を回避するために行うことができます。2行目の先頭にあるセミコロンは、2行1||1目に達する前に式を終了することにより、その発生を停止し;*ます。したがって、でSyntaxErrorを強制します。

それを試してみてください!


2
/* */\u0045 = 3有効なJavaScriptコードのようです。
TSH

2
3 */\u;/まだ有効です。
tsh

3
興味深いことに、ES2018(今年の終わりまで公式ではありません)のおかげで、これによりバッククォートで全体をラップすることができます。ただし、バックティックを挿入するだけでこれを修正でき/ます(修正する必要はありません)。(また、;それはとにSyntaxErrorを強制的に、悪い正規表現の構文解析を強制するものではありません*。)
ETHproductions

1
@Leushenkoしかし、これは#if 0ここで見られるようには機能しません:オンラインで試してみてください!
KritixiのLithos

3
新しいJSバージョンでは、無効なエスケープが失敗するため、テンプレート文字列を含むString.rawがこれを壊さないようにすることができます。String:raw`code here`
iovoid

15

Python、10バイト(cpythonではない)


?"""?'''?

先頭の改行に注意してください。改行のためコメント化できず、これについて正しく考えた場合、三重引用符で囲まれた文字列の組み合わせは機能しません。

コメントの@feersumは、ファイルの先頭に0x1A文字を追加することでわかる限り、Windows上のcpythonプログラムを完全に破壊したようです。多分(?)これは、この文字がオペレーティングシステムによって処理される方法によるものと思われます。一部のレガシーDOS標準のために、stdinを通過する際にEOFに変換されるようです。

非常に現実的な意味では、これはPythonの問題ではなく、オペレーティングシステムの問題です。ファイルを読み取り、そのファイルに組み込まcompileれているものを使用するpythonスクリプトを作成すると、構文エラーをスローするという予想される動作が得られます。Pypy(おそらくこれを内部で行うこともあります)もエラーをスローします。

編集:

Pythonインタープリターを破壊するためのあいまいな方法を見つけることに@feersumが勤勉であるため、この答えは、私が知る限り、典型的なcpython環境では完全に無効になっています!(WindowsとLinuxのPython 2および3)これらのクラックは、どのプラットフォーム(私がテストした他の唯一のPython実装)のPypyには機能しないとまだ信じています。


1
@officialaimm検討"""?'''"""
KSab

3
私のマシンで実行するこの部分文字列でプログラムを作成しました。ただし、多くのインタープリター/プラットフォーム/バージョンでは動作しないと思います。この回答が対象とするPythonインタープリターとOSのバージョンを指定できますか?
feersum

1
Windows 7上のPython 3は、たまたま私のクラックが機能している場所です。base64でエンコードされたプログラムのペーストビン
feersum

1
これもクラックできます。ファイルの先頭に0x1A文字を置くだけで、残りはすべて無視されます(これは実際にはPython 3でも機能します)。
-feersum

1
私は、これは本当に古いですけど、Pythonの確執にいくつかの人々とオーバー働いた後、私たちが見つかりました。この亀裂エンコーディングを変更すると不正行為とみなすことができる場合、私は知りませんが、
EdgyNerd

14

C(clang)、16バイト

 */
#else
#else

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

*//*コメントを閉じます。先頭のスペースは、コメントを開始しただけではないことを確認します。改行は//コメントを閉じ、文字列リテラルを中断します。次に、#else without #if#else after #elseエラーの数に関係なく)またはエラーが発生します#if 0



2
また、C ++ 11の生の文字列が機能しているように見えるため、gccでは解決できません。
feersum

@feersum Huh、GCCがCコードのそれらを受け入れるTIL。を指定できますが-std=c99、clangに切り替えてみましょう。
アンダースカセオルグ

3
gccがC ++ 11の生の文字列を受け入れることに本当に驚いています。コンパイラのバージョンまたは実装を指定することはまったく問題ありません。したがって、Clangで違法であれば、それは公正なゲームです。
nneonneo

1
@ l4m2私は(彼らが誰であるか、そして、あなたは再びによって何を意味していますか?)あなたの質問を解析することはできませんが、C ++リテラル生の文字列は、カスタム区切り文字をサポートしていることに注意してください: R"foobar(...)foobar"、唯一の右の括弧が一致する区切り記号と続きます引用符で閉じます。
アンデルスカセオルグ

11

Pyth、6バイト

¡¡$¡"¡

¡は実装されていない文字です。つまり、Pythパーサーがこれを評価すると、PythParseErrorでエラーが発生します。コードは、これがのいずれかで発生することを保証し¡ます。

バイトがPythプログラムに存在し、解析されない3つの方法があります。文字列リテラル("または."、同等に解析される)、Pythonリテラル($)、およびの直後\

このコード\は、すぐ後に続くバイトと2番目の¡エラーにのみ影響するため、エラーなしで評価することを防ぎます。

$$s 内のコードをコンパイルされたPythonコードに直接埋め込みます。私はそこで何が起こるかについて何も仮定していません。

プログラムが$コンテキスト内でこのコードに到達すると、プログラムはで終了し、$その¡直後にパーサーエラーが発生します。PythのPythonリテラルは$、Pythonコードが何をしているかに関係なく、常にnext で終わります。

プログラムが"コンテキストで開始する場合、"文字列が終了し、最後¡がパーサーエラーになります。


11

Ada-2バイト

私はこれがうまくいくと思う:


_

それが改行アンダースコアです。改行はコメントを終了し、文字列では使用できません。アンダースコアは空白に続くことができません。以前は文字と数字の後にのみ許可されていましたが、Unicodeの導入により事態は複雑になりました。


2
サイトへようこそ!:)
DJMcMayhem

9

x86 32ビットマシンコード、11バイト(および将来性のある64ビット)

90 90 90 90 90 90 90 90 90 0f 0b

これはtimes 9 nop/ ud2です。これは基本的にNOPスレッドなので、0個以上nopのs として実行され、前のオペコードのオペランドとして消費されud20x90バイト数に関係なく、例外を発生させます。他のシングルバイト命令(などtimes 9 xchg eax, ecx)も動作します。

x86 64ビットマシンコード、10バイト(現在のCPU)

64ビットモードには1バイトの不正な命令がありますが、将来のISA拡張機能は、32ビットモードでの意味とは別に、64ビットモードでのみプレフィックスまたはマルチバイトオペコードの一部として再利用します。 0x0epush cs32ビットモードですが、64ビットの現在のCPU(Intel Skylakeでテスト済み)では無効です。

0e 0e 0e 0e 0e 0e 0e 0e 0e 0e

実行可能なマシンコードのルール解釈

  • バイトはジャンプできません(「解析されない」制限のように)。CPUは実際にデコード/実行(非投機的)を試みるまで例外を発生させないためです。

  • 違法とは、たとえば、不正な命令の例外など、常に例外を発生させることを意味します。(実際のプログラムは、ベアメタルの例外ハンドラーでそれをキャッチするか、OSシグナルハンドラーをインストールできますが、これは挑戦の精神を捉えていると思います。)


で終わるより短いバイト文字列ud2がimm32および/または別の命令のアドレス指定モードの一部として表示されるか、1組の命令に分割されるため、機能します。これは、命令の一部としてバイトを「消費」するために文字列の前に何を置くことができるかという点でこれを考えるのが最も簡単であり、故障しないものを残します。

命令は、SIBバイト、disp32、およびimm32という最大9バイトの任意のものを消費できると思います。つまり、この命令の最初の2バイトは8つのNOPと1つのud2を消費できますが、9は消費できません。

c7 84 4b 00 04 00 00 78 56 34 12        mov dword [rbx+rcx*2+0x400],0x12345678

9 nopsに勝てない:

    db 0xc7, 0x84   ; opcode + mod/rm byte: consumes 9 bytes (SIB + disp32 + imm32)
    times 9 nop          ; 1-byte xchg eax, ecx or whatever works, too
    ud2
  ----
   b:   c7 84 90 90 90 90 90 90 90 90 90        mov    DWORD PTR [rax+rdx*4-0x6f6f6f70],0x90909090
  16:   0f 0b                   ud2    

64ビットモード:

 c7 84 0e 0e 0e 0e 0e 0e 0e 0e 0e        mov    DWORD PTR [rsi+rcx*1+0xe0e0e0e],0xe0e0e0e
 0e                      (bad)  

ただし、8つのNOP + ud2(またはtimes 9 db 0x0e)のバイトは、他のinsnの一部として表示できます。

    db 0xc7, 0x84   ; defender's opcode + mod/rm that consumes 9 bytes

    times 8 nop          ; attacker code
    ud2

    times 10 nop    ;; defenders's padding to be consumed by the 0b opcode (2nd half of ud2)
----
  18:   c7 84 90 90 90 90 90 90 90 90 0f        mov    DWORD PTR [rax+rdx*4-0x6f6f6f70],0xf909090
  23:   0b 90 90 90 90 90       or     edx,DWORD PTR [rax-0x6f6f6f70]
  29:   90                      nop
  2a:   90                      nop
  ...

ここでのルールは、私がasm /マシンコードの回答を投稿することを検討するほどには明確ではありませんでした。たとえば、どうしてできないのですud2か?あなたはルールをバイトを飛び越えることを禁じていると解釈していると言っているようですud2。ああ…問題はud2、有効な命令の接頭辞として表示される可能性があるということですか?この答えの2番目の部分は、私にとって理解が少し難しいものでした。
コーディグレー

@CodyGray:右、エンコードが2バイトud2に表示できるimm32任意の命令。0f 0bとしてデコードするのではなく、以前の命令の一部として「消費する」文字列の前にどのバイトを置くことができるかという点でこれについて考えていましたud2。私はそれをどのように提示したかについて完全には満足してnopいませんでしたが、8 秒だけでは不十分な理由と9 nop秒+で何が起こったのかを説明したかったのud2です。
ピーターコーデス

@CodyGray:asmソースプログラムはまったく異なる答えになります。それは、アセンブラーが使用するパーサーをエラーにする必要があり、エラーのあるマシンコードを生成しません。だから、のようなもの%else/ %else敗北に働くかもしれない%if 0正常に解析されてから、無効なテキストを保護することができ、。(CPPの回答からのアイデア)
ピーターコーデス

十分に満足しないでください。あなたのソリューションは.dataにあるだけかもしれません。(それは不可能になりますが)
-l4m2

@ l4m2:質問を回答可能/興味深いものにするために、実行される(飛び越えない)コードに制限する必要がありました。私の答えのルール解釈の箇条書きを参照してください。もちろん、静的データも除外されます。マシンコードではなく、単なるデータであるためです。この質問は、パーサーをエラーにすることができるコンパイル/アセンブル段階がないため、マシンコードの答えが意味をなすために、ほとんどの場合よりも多くの適応が必要でした。
ピーター

7

C#、16バイト


*/"
#endif<#@#>

動作する理由:

  • // コメントは新しい行のために機能しません
  • /* のためにコメントが機能しません */
  • コードだけに定数を持つことはできません
  • #if falseために開始に追加しても機能しません#endif
  • "任意の文字列リテラルを閉じ
  • <#@#>そうT4テンプレートに失敗した無名のディレクティブです。
  • 新しい行はそれを/だますので、最初に持っていてもだまされない*/

各バリエーションはコンパイルエラーで失敗します。


1
奇妙なことに、コードにT4テンプレートを含めることにしました。T4は別の言語と見なされませんか?
アルトゥーロトーレスサンチェス

1
@ArturoTorresSánchez私は彼らのことを聞いたことがないのかわかりません。T4テンプレートを含めると、これは機能しないと誰かがコメントしたので、修正を追加しました。
TheLethalCoder


5

Literate Haskell、15バイト

nimiによる削除された試行の修復。


\end{code}
5
>

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

nimiの最初の試みは、Literate Haskellに基づく最後の2行です。>スタイルリテラシーコードは、リテラシーコメント行(5ここ)の隣の行にあることを許可していません。代替( "LaTeX")文芸コーディングスタイルのコメントに埋め込むことができるため、失敗しました。

\begin{code}
{-
5
>
-}
\end{code}

しかし、\begin{code}文芸Haskellのスタイルはありませんではない自体にも中にも、巣{- -}にラインを置くことによってので、複数行のコメント\end{code}だけで行の前に5、その回避策が失敗した、と私は別のものが表示されません。


4

Free Pascal、18バイト


*)}{$else}{$else}

最初に可能なコメントをすべて閉じてから、条件付きコンパイルを処理します。

私が何かを忘れた場合はここにコメントしてください。


3
@ user902383あなたの例には、彼のスニペットの先頭の改行が含まれていますか?
ブライアンJ

@BrianJいや、私はそれがただのフォーマットの問題だと思った、私の悪い
-user902383

Free Pascalでは不可能だと思います。あとに置いてくださいbegin end.
jimmy23013

@ jimmy23013しかし、end.有効になった後のコードは質問で許可されているようです。
tsh

4

Commodore 64 Basic、2バイト


B

(それは文字「B」が後に続く改行です)。

Commodore 64プログラムのすべての行は、行番号またはBASICキーワードで始まる必要があり、保存されたプログラムは行番号のみを許可します。「B」(または「H」、「J」、「K」、「Q」、「X」、「Y」、または「Z」)で始まるキーワードはありません。


追加すると=0、これは代入文になります
ニール

1
@Neil、これは有効な即時モードコマンドですが、有効なプログラムではありません。
マーク

4

Brain-HackBrain-Flakのバリエーション)、3 2バイト

Brain-Hackはコメントをサポートしていないことを指摘してくれたWheat Wizardに感謝します。

(}

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


Brain-Flakでどのようにコメントしますか?私はそれらを行う方法を知りません。
エリックアウトゴルファー

@EriktheOutgolfer # TIO
ライリー

文書化されていない動作です。
エリックアウトゴルファー

@EriktheOutgolfer私はいつもどこかで文書化されていると思っていました。それらを追加することを検討します。
ライリー

BrainHackやCraneflakに改行は必要ありません。Rain-Flakは3つのバージョンのうち、行コメントがある唯一のものです。Craneflakはオンザフライで解析するため、Craneflakでこれを解決することはできませんが、を追加すると解決策に勝てます(()){()}
小麦ウィザード


3

VBA、2バイト

アンダースコアが続くラインフィード-VBA _の行継続文字として機能し、行継続のすぐ左または上の行には何もないため、VBAの複数行コメントの欠如と相まって、これは常にコンパイルをスローすることを意味します時間誤差Compile Error: Invalid character


_

新しい行から始まるパターンに依存するので、新しい行を追加します。

@Deduplicatorそれはすでに、新しい行を持っている-以下のかは重要ではありません_、唯一の左またはそれ以上の有効なラインが存在しないこと
テイラー・スコットは、

次のように埋め込まれている場合はどうなりmyfunction( \n_ )ますか?

それはすなわち続けているよう@Deduplicator行継続文字が同じ行になければなりませんPublic Function Foo( ByVal bar as Integer, _ (改行)bas as long) as double-あなたが記述された関数を呼び出した場合ので、はい、それはエラーになり
テイラー・スコット

わかりました、その場合はもっと似ていmyfunction( _ \n_ )ます。混乱させて申し訳ありません。別の言い方をすれば、2つの改行を使用する必要があります。
デュプリケータ

3

SmileBASIC、2バイト


!

行末まで続くものは何もないので、必要なのは、改行の後に文の開始になり得ない何かが続くことだけです。!は論理否定演算子ですが、式の結果を無視することは許可されていないため、そのようなもので!10も無効になります(X=!10もちろん動作します)

同様のことは、実行前にコードを解析する限り、すべてが行の終わりで終わるすべての言語で機能します。

ここで使用できる代替文字はたくさんあるので、COULDが有効な文字をリストする方が面白いと思います。

@ラベルの始まり@DATAです。たとえば、; 何らかの理由で許可される(ような式の一部である可能性があり(X)=1ます。任意の文字または_変数名X=1、関数呼び出しLOCATE 10,2、またはキーワードを使用できWHILE 1ます。'コメントです。そしての?略ですPRINT


ああ、何らかの理由で私が投稿を編集したときに複製されました
...-12Me21

3

INTERCAL、12バイト

DOTRYAGAINDO

オンラインでクラックしてみてください!

INTERCALの構文エラーへのアプローチは少し特別です。基本的に、プログラムが実行を試みない限り、無効なステートメントは実際にはエラーになりません。実際、コメントの慣用的な構文は、コメントを開始することですPLEASE NOTE。これは実際にステートメントを開始し、実行しないことを宣言してから、文字で開始しEます。コードがDODO途中にある場合は、DOABSTAINFROM(1)(1)有効なステートメントを先頭に追加して最後に追加することができます。それで問題ない場合は、DODODO実行を曲げることができます(1)DON'TDODODOCOMEFROM(1)。INTERCALにはエスケープするための文字列リテラル構文がありませんが、構文エラーを使用して不正な文字列を作成する方法はありません。(1)DO(2)DO...(65535)DODODOCOME FROMそれらのいずれかを使用して行番号を重複させることは十分に可能であると思われるためです。

不正な文字列を作成するには、実際に完全に有効なステートメントを使用する必要がありますTRY AGAIN。たとえ実行されなくても、プログラム内にある場合は、プログラムの最後のステートメントでなければなりません。私の知る限り、不正な文字列が使用できるのは12バイトです。TRY AGAINこれは、その後にステートメントがあること(実行されているかどうか)を保証する必要があるためDOTRYAGAINです。は、実際には無視され、通常の構文エラーに簡単に変換できるためTRY AGAINTRYAGAINDO機能しません:DON'TRYAGAINDOGIVEUP、またはPLEASE DO NOT TRY TO USE TRYAGAINDO NOT THAT IT WOULD WORK。どちらの側に何を置いてもDOTRYAGAINDO、、、またはのいずれかICL993I I GAVE UP LONG AGOでエラーが発生します。ICL079I PROGRAMMER IS INSUFFICIENTLY POLITEICL099I PROGRAMMER IS OVERLY POLITE


以前に発生する可能性のある他のコンパイル時エラーがいくつかある可能性がありますICL993I I GAVE UP LONG AGO
無関係な文字列

すべてのラインラベルを使用しているときに、すべてのラインラベルを使用している場合、COME FROMブロックの周りの制御フローを迂回するのは少し難しいかもしれませんが、それだけであなたを止めることはできませGIVING UPん!
無関係な文字列


2

Fortran、14バイト


end program
e

Fortranには複数行コメントまたはプリプロセッサディレクティブはありません。


1
これをオンラインでテストする良い方法はありますか?また、Fortranのどのバージョン/コンパイラーですか?
ロバートベンソン

2

JavaScript(Node.js)9 8バイト

`*/
\u`~

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

これは十分違法だと思う。

他の回答での以前のJSの試み

; * / \ u)

@Cows quackによる

ES5の回答として、これは有効であるはずですが、ES6では、コードを2つのバックティックでラップすると、これが破壊されます。そのため、有効なES6回答にはバッククォートが必要です。

`
`* /} '" `\ u!

@iovoidによる

これは、バックティックを含む改善されたバージョンです。ただし、/コードの後のシングルはこれを破ります(これは、正規表現が乗算されるテンプレートリテラルになりますが、役に立たないが構文的には有効です。)@Neilはに変更!することを提案しました)。これは理論的には機能するはずです。なぜなら/、最後に追加すると機能しなくなるからです(不正な正規表現のため)。

説明

`*/
\u`~

これはそれ自体違法であり、すべての単一引用符と二重引用符もブロックします。これらの引用符\は、行末で

//`*/
\u`~

そして

/*`*/
\u`~

不正なエスケープシーケンスを導入してコメントをブロックします

``*/
\u`~

終了していないRegExpリテラルを導入することにより、初期バックティックをブロックします

console.log`*/
\u`~

2つのバックティックの間に予期される演算子を導入することにより、タグ付きテンプレートリテラルをブロックします


2

ロックスター4 5バイト

取り消し線4はまだ4です:(

)
"""

ロックスターは非常に...言葉の多い言語です。
一方で"、文字列を定義するために使用することができ、などはPut "Hello" into myVar、私の知識に3重引用符は、コメントの外に現れする方法はありません、と近くの括弧は、それがいずれかの発生しません(ロックスターでのコメントは括弧で囲まれている、ように保証しますこの)。

Rockstarには、句読点が無視される詩的なリテラル構文もあるため、改行は3つの引用符がコード行の始まりであることを確認します。


について(()""")はどうですか、それはノーオペレーションではないでしょうか?
ბიმო

@BMO最初の括弧はコメントを開き、2番目の括弧はコメント""")されているため何もしません。3番目の括弧はコメントを閉じます。その後、コードとして解析されます。これは無効です
Skidsdev

ネストされたコメントは仕様に含まれていません。とにかくコメントはお勧めできません。しかし、文字列を許可する詩的な文字列リテラルを監督したのでGoethe says )"""、有効です
ბიმო

@BMO良い点は、中間に改行を挿入して固定することができる)"""
Skidsdev

2

Powershell、10 8 12 14 13 14 16バイト

-2バイトは、Mazzyがそれを破るより良い方法を見つけて
くれたおかげです+4 -1バイトはIsItGreyOrGrayのおかげです

$#>
'@';
"@";
@=

これがうまくいくことを願っています。'そして"、引用符を防ぐために#>ブロック・コメントを破るために、新しい行が、両方を単一行コメントを停止する'@"@、文字列の別のスタイルをキャッチし、その後、構文エラーをスローするように、不適切な配列を開始します。

ロジックは、どちらの引用符も使用できないため、ブロックコメントすることはできません@"。使用した場合、その後トークンを保持できないhere-stringを作成します。そのままにしておくと、壊れた配列を作成しようとします。この声明は一生懸命生きたいと思っているので、鎧にさらに多くの穴を見つけ続けています。


1
またはプロテクター+@=
mazzy

1
@IsItGreyOrGrayああああああああああああ
ヴェスカ

2
#>を$#>に変更すると、「コマンドレットの名前として認識されない...」というように壊れてしまうようです。まだ。:)
GreyOrGray

1
そらる セミコロンのアーマーが登場しましたか?
ヴェスカー

1
いいね!何もありません。私が試したすべてが失敗しました。
GreyOrGray

2

ルーン文字のエンチャント、3バイト

多くの可能なバリエーションの1つ。

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

Runicは、「Mmodify the behavior of C」(Cコマンドは)内の文字を結合するUnicodeを利用します。そのため、同じコマンドを変更するために2つの修飾子を使用することはできません。そのような発生が見つかった場合、パーサーはエラーをスローします。

同様に、IPをリダイレクトする特定のコマンドは、方向修正修飾子文字が存在するため(および同じセル内の両方が意味をなさないため)、いかなる方法でも修正できません。

文字列をエスケープまたはリテラル化して有効にする方法はありません。Tioリンクには、;優先度の高い「ターミネーターなし」エラーをバイパスするためにが含まれています。


2

TI-Basic(83 + / 84 + / SE、24500バイト)

A

(24500回)

TI(-83 + / 84 + / SE)-Basicは到達したステートメントに対してのみ構文チェックを行うためEnd、行内の5000 ステートメントでさえスキップできますReturn。対照的に、これはTI-83 + / 84 + / SEのRAMに収まらないため、この文字列を含むプログラムはありません。ここでの文字数には少し保守的です。

元のTI-83には27000バイトのRAMがあるため、その場合は27500 A秒が必要です。

TI-Basic(89 / Ti / 92 + / V200、3バイト)

"

改行、引用、改行。改行はコメントを閉じます(また、AFAIKの複数行の文字列定数は許可されないため、文字列に不正な文字を埋め込むことを禁止します)。

あなたは2バイトを得ることができます

±

改行なし±ですが、文字列定数でのみ有効であるため、これがカウントされるかどうかはわかりません。


完了、ありがとう:)
bb94

2

Go、6バイト


*/```

オンラインでクラックしてみてください!

重大なアクセント( `)は生の文字列リテラルをマークします。その中には、改行とバックスラッシュを含む、`を除くすべての文字が文字列の一部として文字どおりに解釈されます。連続する3つの `'がコアです。隣接する文字列リテラルは無効であり、`は常に`文字列を閉じるため、それらを理解する方法はありません。反回避のためにさらに3バイト、改行を使用して単一行コメントまたは通常の引用符で囲まれた文字列を使用し、* /を使用して複数行のコメントを挿入する必要がありました。


1

SILOS、4バイト

サイロは競争力があります\ o /


x+

SILOSは、2パスインタープリター/コンパイラーで実行されます。実行前に、「コンパイラ」はソースを単純化してソースを記述する配列にしようとします。各行は個別に扱われます。x + aは、xの値にeaを追加してxに格納する代入演算子です。ただし、「コンパイラ」は壊れます。したがって、この文字列を取得し、それが独自の行にあり、コンパイラを中断することを保証する前後に新しい行を追加します。

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


なぜax+エラーにならないのですか?
エリックアウトゴルファー

未定義のコンパイラの動作@EriktheOutgolfer
Rohan Jhunjhunwala

1

AutoHotkey、5バイト

`はエスケープ文字です。変数に割り当てるときにのみ、 "をエスケープできます。

\ n * /は、コメントアウトまたは変数への割り当てを防ぎます。


*/`"

1

JavaScript、11文字

`
`*/}'"`\u)

バックティックは必ずテンプレート文字列を削除し、引用符は文字列を取り除き、改行はコメント行を避け、コメントの終わりはブロックコメントを避け、最後のバックティックとエスケープ(数字の追加を避けるために!文字列。

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



ES5の答えは、)後に使用されました\u、多分それはここでうまくいくでしょうか?
ニール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.