エラー404:文字が見つかりません


74

シナリオ

友達の1人が宿題に苦労しています。彼は最初の404自然数を印刷する簡単なプログラムを必要とします:

1 2 3 4 5 6 7 8 9 10 11 ... 401 402 403 404

あなたの挑戦は簡単です:彼のためにこのプログラムを書いてください。

ただし、接続はひどいため、プログラムを送信するたびにランダムな文字が1つ失われます。これがプログラムを壊さないようにするには、単一の文字を削除しても効果ないようにする必要があります。プログラムは関係なく動作します。(元のプログラムも動作する必要があります。)

接続が不十分で大きなファイルを送信できないため、コードはできるだけ短くする必要があります。

TL:DR-放射線強化プログラムを作成して、1〜404の数値を出力します


ルール/詳細

  • 出力は、任意の妥当な形式の整数のリスト(スペース、改行、コンマなどで区切られたもの)である場合があります。ただし、出力は一貫性があり、プログラムが変更されたときに変更れない必要があります
  • ロジックを含むコマンドラインフラグ、実際のコードの実行、番号リストの生成などは禁止されています。
  • これはなので、最短の送信(バイト単位)が勝ちです!


16
元のプログラム(文字が削除されていない)も動作する必要がありますか?
アドナン

5
プログラムがまだ1〜404を出力する場合、エラーは無視できますか?
jrich 16

4
たぶん放射線耐性のようなタグがあるはずですか?
Vi。

5
閉会の投票、私たちはあなたのためにあなたの宿題をしていませんXD
チーズパン

回答:


16

05AB1E、12バイト

コード:

XX440044ÔÔŸŸ

通常のコードの説明:

X             # Pushes the number 1.
 X            # Pushes the number 1 again.
  440044      # Pushes the number 440044.
        Ô     # Connected uniquify.
         Ô    # Connected uniquify.
          Ÿ   # Inclusive range of the top two elements.
           Ÿ  # Inclusive range on the array, which leaves it intact.

これは、次のゴルフコードにつながります:X404Ÿ、これが達成したいものです。

番号404は、次のいずれかのバリアントによって生成されます。

440044ÔÔ
40044ÔÔ
44044ÔÔ
44004ÔÔ
440044Ô

包括的範囲は、2つの数値で次のように機能します。

`1 5Ÿ`             ->    [1, 2, 3, 4, 5]
[1, 5]Ÿ            ->    [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]Ÿ   ->    [1, 2, 3, 4, 5]

これは常に2番目Ÿノーオペレーションにします。

CP-1252エンコードを使用します。オンラインでお試しください!


34

JavaScript、228バイト

etInterval=stInterval=seInterval=setnterval=setIterval=setInerval=setIntrval=setInteval=setInteral=setIntervl=setInterva=top=>4

setInterval
`405>(i=this.i?i:1)?alert(i++):0`///`
setInterval
`405>(i=this.i?i:1)?alert(i++):0`///`

説明

でコードを評価setIntervalすると、エラーが発生してもプログラムを続行できます。単一の文字が削除された場合、渡されたコードがエラーになることを確認します。テンプレート文字列構文はsetInterval、括弧のない定数文字列で呼び出すために悪用される可能性があります。幸いなことに、テンプレート文字列が次の行にある場合でも、そのような構文の関数呼び出しとして解析されます。

最初に遭遇する問題はsetInterval関数です。したがって、文字が削除され、プログラムがsetInteval代わりに呼び出そうとすると、エラーが発生します。もちろん、の2つの同じ呼び出しがあるsetIntervalため、エラーを回避する限り、実際に正しく機能することを心配する必要はありません。したがって、最初の行はsetTimeout、有効な関数へのすべての可能な「ミススペル」を定義しています。

最初の行は、これらの「スペルミス」をすべて関数に割り当てることで機能しますtop=>4。ES6構文に注意してください。これは単に「top」という名前のパラメーターを取り、4を返します。なぜ「top」なのですか?さて、最初の行は、文字が削除されてもエラーをスローしてはいけません。=がmake top>4で削除された場合、topブラウザで事前に定義されているため、このブール式は有効になりますfalse。4が削除されると、関数本体は単に最初のsetIntervalセグメントになり、2番目は無害で実行されます。

さて、心配することは、 `が削除されたかどうかだけです。

最初から削除した場合setIntervalは、何もせず、独自の式として評価されます。次に、2行目の残りの部分は、ループの1回の繰り返しを実行し、他のsetIntervalフラグメントにジョブを終了させます。最後から削除すると、残りのバックティックがコメントの最後から選択されます。

改行は、プログラムを削除してもプログラムの動作に影響を与えないように配置されますが、先頭のバックティックなどの一部の文字を削除した場合のエラーを防ぎます。


3
私は、aの数字の1つ405が削除された場合に何が壊れるかを考えましたが、気づきました。壮大な仕事。
ETHproductions 16

「トップ」の一部が失われるとどうなりますか?
Scimonster

@Scimonsterまだ関数として解析され、 "to"または "op"または "tp"という名前の未使用のパラメーターを使用して4を返す
jrich

1
もちろん、@ jrich。脳けいれん。:P
Scimonster 16

一部を失った場合はどうなりますthisか?
dkudriavtsev

25

Pyth-16バイト

この背後にある基本的な考え方は404、から数字を取り出すと、数字が小さくなるだけなので404、正しい数字を得るために最大2を取得するだけです。明らかに、より多くの冗長性があります。

SSsetSS[404  404

説明:

SS                       First one does 1-index range, second one sorts, which is no-op 
 s                       If the e is there, this is no-op, if only t is there, it sums a one element list, which is the item
  et                     e picks last element in list, and if e is gone, then t gets you the list without the first element which is good enough when combined with s
   SS                    Sorting twice is no-op
    [                    Start list, this can't be two element because if we get rid of initial 4, the 0 becomes third element which neeeds to be captured
     404                 One of the 404's
     <space><space>404   Need two spaces for redundancy, because 404404 *is* bigger than 404

こちらからオンラインでお試しください


23

Befunge-98、37バイト

20020xx##;;11++::''ee44**``kk@@::..;;

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

説明

Befunge-98で耐放射線性を強化したコードを作成するのは悪くありません。「デルタ」(つまり、命令ポインタのステップサイズ)を手動で設定できるからですx。そのため(2,0)、デルタをに設定すると、それ以降は1文字おきにスキップされ、すべてのコマンドを単純に2倍にできます。厄介なことは2 0、信頼できる方法でスタックの先頭に立つことです。実際に0 2 0は、残りのプログラムが正しく機能する必要がありますが、それは無料です。これを行う方法は次のとおりです。

20020xx

各桁がそれ自体をプッシュすることに注意してください。したがって、完全なプログラムで2 0は、単純に無視する開始があります。

したがって、プログラムから最初の文字または2番目の文字を削除することは、これらの数字を使用しないため無関係です。同様に、3番目の文字を削除することは2番目の文字を削除することと同じであるため、それについても心配する必要はありません。

他の2つのケースで何が起こるか考えてみましょう。4番目の文字のドロップ:

2000xx

デルタがに設定されていることに注意してください(0,0)。しかし、これは命令ポインタをまったく動かさないので、同じものxがすぐに再び実行され、今回はポップし(2,0)、すべてがうまくいきます(後の目的のためにスタックの下部に暗黙的なゼロがあります)。

代わりに5番目の文字をドロップしましょう:

2002xx

これで、デルタがに設定され(0,2)ます。ただし、水平方向の動きはまだないため、IPはすぐに折り返されx、正しいデルタが設定されます。

この時点から、文字の複製とこの最初の部分は、常にスキップされるため、基本的に無視できます。

...#;1+:'e4*`k@:.;

;次回は、まですべてをスキップするコメントコマンドの一種で;遭遇しました。しかし、我々は最初に飛び越える;#の間にこれだけの部分;以降そのポイントから実行されます。

1+    Increment the top of the stack.
:     Duplicate it.
'e    Push 101.
4*    Multiply by 4 to get 404.
`     Greater-than check. Pushes 1 once the top
      reaches 405, otherwise 0.
k@    Terminate the program that many times.
:.    Print a copy of the top of the stack (and a space).

16

> <>103 60 51バイト

               vv
;?=*4o" e"n:ll<<
;?=*4o" e"n:ll<<

ここでテストしました。

このプログラムと同じ戦術を使用します。最初の行で文字が削除されても、2行目は引き続き実行されます。2行目の文字が削除されるとv、2行目は文字が短くなるため、実行は3行目に移動します。3行目の削除は、2行目の削除後の実行のみであるため、プログラム制御には影響しません。

プログラムは、改行が削除された場合にも機能します:

事例1:

2行目が実行されます。

               vv;?=*4o" e"n:ll<<
;?=*4o" e"n:ll<<

ケース2:

両方の行は、2回の命令で1行になります。

               vv
;?=*4o" e"n:ll<<;?=*4o" e"n:ll<<

説明:

プログラムの中核は次のとおりです。a 1は最初の行で既にスタックにプッシュされていることに注意してください。

ll:n        Push length of the stack twice, duplicate, print as number
"e "o       Push 101, 32, output 32 as space
4*          101 * 4 is 404
=?;         Pop twice, if equal, halt
            (Execution wraps around)

使用できますo" e"か?
マーティンエンダー

そして、代わりに+1を使用できますl。また、fishlanguage.comインタープリターは少し奇妙です(使用するのは面倒ですが、デバッグ機能はもちろん便利です)。TIOはやや賢いPythonインタープリターを使用しています。tio.run/ nexus
Martin Ender

@MartinEnder 1最初の行のsの1つを削除しても機能しません 。
mbomb007 16

ああ、とにかくそれらは私を悩ませていました:tio.run/nexus/fish#@q@ACsrKuKztAbPVMslXUkhVysnLybGxwRD4/x8A
Martin Ender

12

> <>42 38 34バイト

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

@Martin Ender@Teal Pelicanに8バイトを削ってくれてありがとう!

<<;?=*4o" e"lnll/
 ;?=*4o" e"lnll<

mbomb007の回答に似ていますが、2行しか使用しません。

単一のメモリ値を使用して1から404までカウントアップする代わりに、スタックの長さを継続的にプッシュしました。これにより、ループを開始する前にスタックに何も置く必要がなくなり、物事がずっと簡単になりました。

元のコード

<sが周りのIPを有効にし、/IPがラップアラウンドし、それが正常なパスだ沿って続くように、何もしません。したがって、関連するコードは次のとおりです。

          lnll   Prints the size of the stack + 1 and pushes the stack size twice
     o" e"       Prints a space and pushes 101
   *4            Multiplies to get 404
;?=              If the number we just printed was 404, end the program

そしてこれが繰り返されます。

削除

ここの大きな鍵は鏡/です。2番目の行が変更されても何もしません-それ自体に折り返すだけで、基本的には何もしません。ただし、最初の行の文字が削除されると、行が下に移動し、ミラーが矢印<に当たり、同一の変更されていないループになります。

他の重要な削除は、\nキャラクターだけです。このコードも生成されるため、これも考慮されます。

<<;?=*4o" e"lnll/ ;?)*4o" e"lnll<

これで、元のループのコピーが;?=*4o" e"lnll自分自身に追加されました。これはループであるため、実行に違いはなく、何も変更されていないかのように実行されます。


1
それを2行に減らす本当に良い方法です。私が見ることができる唯一の問題は、それが38バイトではなく42であることです?内部コードを減らす; ;?= * 4o "e":n:+ 1lはそれを38バイトに減らします。これにより、84 *が文字列 "e"内に分離されずに配置されます。
ティールペリカン

1
また、置き換えることができます:+1し、他の:ものとlそれぞれ。
マーティンエンダー

はい、ありがとうございます!
MildlyMilquetoast 16

;?=*4o" e"n:llも動作します。
mbomb007 16

11

梨の木、34バイト

プログラムには制御文字が含まれているため、ここにxxdダンプがあります。

00000000: 7072 696e 7420 312e 2e34 3034 2327 108a  print 1..404#'..
00000010: af70 7269 6e74 2031 2e2e 3430 3423 2710  .print 1..404#'.
00000020: 8aaf                                     ..

Pear Treeは基本的にPerlの派生物で、いくつかの「興味深い」機能があります。私は冗談としてそれを一緒に投げました(私のポリグロットがa partridge梨の木に印刷されたと言うことができるように、実際、ほとんどすべてのプログラムがそうします)。しかし、それはチューリング完全であり、実際にはこの種の課題に優れています。

ここで主に注目する機能は、コードの一部の文字列にのCRC-32がある場合にのみ、Pear Treeがプログラムを実行することです00000000。問題の部分文字列を先頭に配置するためにコードが回転します。偶然にも、コードの2つの(同一の)半分にはそれぞれ問題のCRC-32があります(最後に疑わしいバイナリコメントがあるため)。ソースから文字を削除する(CRCを壊す)場合、残りの半分は開始点まで回転し、#終了近くの記号は、バイナリジャンクに加えて、破損した半分をコメントアウトします。

別の機能により、プログラムがわずかに小さくなります。APear Treeは主にPerlとして解釈されますが、Pythonのように動作するように若干の変更が加えられています。ここで重要なのは、Perlのprintステートメント(単に数字を一緒に実行する)とは異なり、Pear Treeのprintステートメントは引数をスペースで区切り、最終的な改行を出力するということです。これにより、スペースで区切られた適切な出力が得られます。つまり、フォーマットにバイトを浪費する必要はありません。(プログラムに入力を与えないでください;言語が入力を受け取った場合、デフォルトではそれで何かをすることになっていると想定します。)

もちろん、これは実際のゴルフ言語と競合することはできません(私も期待していません)が、人々はそれを面白いと思うかもしれないと思いました。


9

Befunge 98、34バイト

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

<<.:@k`*4e':+1[

2.:@k`*4e':+1<^^j

これは、私の<<>回答と非常によく似ていますが、ミラーの代わりに/左回転操作を使用し[、IP方向を逆にします。これは、この場合のミラーと機能的に同等です。

元のコード

<<                 Reverses code direction, sending IP to right
               [   Turns the IP left, into the ^, which reverses it.
                   It then hits this again, turning left to go West. (No-op)
            :+1    Adds 1 to the sum
        *4e'       Pushes 404
     @k`           Ends the program if (sum > 404)
   .:              Prints the sum

削除

2行目の何かが削除された場合、それはシフトし、上部にはまったく影響しません。

最初の行のいずれかが削除された場合、[はにIPを送信し<、同一のループを開始します(例外として2j^^^sとのタンデムでの使用を回避します[

新しい行が2行あるため、1行削除してもコードに違いはありません(@ masterX244に感謝します!)


コードの空行はどうなりますか?たぶん、あなたはあまりにも、それは免疫にするために改行を倍増でした
masterX244

@ masterX244に感謝します!それについて考えなかった。
MildlyMilquetoast

笑、すべての言語を使用していないが、何らかの理由で第六感覚が私にそのアイデアを与えたん...
masterX244

5

Befunge-93、54の 51バイト

3バイト節約してくれたMistah Figginsに感謝します。

111111111111111vv
+1_@#-*4"e":.:<<
+1_@#-*4"e":.:<<

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

これは、フォールトトレラントなHello Worldチャレンジで使用されたものと本質的に同じトリックです。最初の行は、シーケンスの開始のためにスタックの一番上に1が存在することを確認することから始まり、その後v、行の終わりにある矢印の1つがコードパスを2行目のメインルーチンの開始にリダイレクトします、右から左に実行します。

最初の行から文字を削除すると、v矢印が1つだけ移動しますが、それでもコードは2行目に正常にリダイレクトできます。2行目から文字を削除する<と、行末の矢印がそのv上のパスから移動するため、コードパスは3行目のバックアップルーチンにリダイレクトされます。

最初の改行を削除しても害はありません。3行目を移動して2行目を置き換えるだけだからです。また、2番目の行の終わり以降に何かを削除しても、それは単なるバックアップコードであるため、効果はありません。


The first line starts by making sure there is a 1 on the top of the stack...その点で、最初の行はそれ自体がかなり確実です。また、<code> _ @#!を短縮できます!</code> to _ @#-`と3バイトを節約するために印刷の前にそれを置きます。
MildlyMilquetoast 16

5

JavaScript + HTML +スタックスニペット、 167 158 154バイト

スタックスニペットのJavaScriptが<script>要素内のWebページに配置されるという事実を悪用します。

or(x="",i=405,d=document;--i;)d[i]||(x=d[i]=i+' '+x);d.write(x)</script></script><script>for(x="",i=405,d=document;--i;)d[i]||(x=d[i]=i+' '+x);d.write(x)


@ Flp.Tkc修正済み。
user2428118

4

実際には、18バイト

:404::404kMkMMRRSS

実際には、スタックベースのゴルフ言語です。

関連するコマンドの説明(上記のコンテキストで機能するため):

Numbers are indicated by round brackets () and lists by square brackets []

:         - pushes the longest string of characters in '0123456789+-.ij' as a numeric
k         - pop all the elements on the stack into a list [l] and push [l]
M         - pop [l], push max([l])
            pop (a), push (a)
R         - pop [l], push reverse([l])
            pop (a), push range([1,a])
S         - pop [a], push sorted([a])
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.