3…2…1…クラッシュ!


47

あなたの仕事は、実行されるたびに10からカウントダウンし続ける完全なプログラムを書くことです。

  • プログラムを初めて実行すると、印刷されます10
  • 次回は、が出力されるはず9です。
  • 次回は8、などを出力するはずです。
  • 印刷する代わりに0、プログラムがクラッシュするはずです。その後、実行中のプログラムをこれ以上処理する必要はありません。
  • 保管に使用される機能は、プログラムを最初に実行する前に空であると想定される場合があります。

Python 3での実装例は次のとおりです。

try:f=open("a","r+");v=int(f.read())
except:f=open("a","w");v=10
1/v
print(v)
f.seek(0)
f.write(str(v-1))

これはなので、最短の回答(バイト単位)が勝ちます。


12
クラッシュとは何を意味しますか?
コナーオブライエン

2
@ ConorO'Brienうーん...これはメタで議論されていませんか?
エソランジングフルーツ

2
@ Challenger5私が知っていることではない。エラーをスローするだけで十分ですか?
コナーオブライエン

1
@ ConorO'Brienはい。
エソランジングフルーツ

回答:


18

6502機械語+ Apple] [+ ROM、12(11?10?9?)バイト

CE 06 80 F0 01 A2 0B A9 00 4C 24 ED

から開始する必要があり$8000ます。カウントが0に達すると、システムモニターがクラッシュします。


C6 B6 F0 01 A2 0B A9 00 4C 24 ED

から開始する必要があり$B1ます。の(2バイト)ゼロページバージョンを使用できるため、これによりバイトが節約されDECますが、重要なApplesoftルーチンは上書きされますCHRGET。ロードしてモニターから呼び出す必要があり、完了したらBASICを再初期化するためにCTRL+ BReturnを使用します。これで無効になるかどうかはわかりません。


CE 06 80 F0 01 A2 0B 4C 26 ED

から開始する必要があり$8000ます。これは初期化せず$9E、2バイトを節約します。ただし、これは、負のアドレスで呼び出してはならないことを意味します(または、モニターから呼び出す場合は、正のアドレスでモニターを呼び出す必要があります)。実行すると、ApplesoftのCALLルーチンはに格納さFF$9E、印刷時に65280が数字に加算されます。繰り返しますが、これがソリューションを無効にするかどうかはわかりません。


C6 B6 F0 01 A2 0B 4C 26 ED

から開始する必要があり$B1ます。これは上記の2つのプログラムの組み合わせで、合計3バイトを節約します。正のアドレスでモニターを呼び出し、そこからロードして実行し、完了したらBASICを再初期化するためにCtrl+ BReturnを使用する必要があります。


これらのプログラムはメモリ内のプログラムのみを変更することに注意してください。ディスクからプログラムを再ロードすると、カウントダウンがリセットされます。これは、Apple] [(および] [+、// e、および// c)にメモリ保護システムがまったくないために機能します。プログラム(およびその自己修正)は、終了した後でもメモリ内にとどまるため、そのメモリを他の何かで上書きするまでメモリから実行し続けることができます。


サンプル実行

]BLOAD COUNT THEN BRK
]CALL 32768
10
]CALL 32768
9
]CALL 32768
8
]CALL 32768
7
]CALL 32768
6
]CALL 32768
5
]CALL 32768
4
]CALL 32768
3
]CALL 32768
2
]CALL 32768
1
]CALL 32768

8008-    A=80 X=9D Y=00 P=36 S=EE
*

説明

     DEC NUM+1  ; Decrement the LDX instruction's operand
     BEQ NUM+1  ; If it is now zero, branch to it; 00 is the opcode for the BRK instruction, which causes the program to crash to the monitor
NUM  LDX #$0B   ; Load the X register with 0x0A; the operand has already been decremented once
     LDA #$00   ; Load the accumulator with 0
     JMP $ED24  ; Jump to $ED24, an Applesoft ROM routine which prints A (high byte),X (low byte) in decimal

10バイトバージョンの説明

     DEC NUM+1  ; Decrement the LDX instruction's operand
     BEQ NUM+1  ; If it is now zero, branch to it; 00 is the opcode for the BRK instruction, which causes the program to crash to the monitor
NUM  LDX #$0B   ; Load the X register with 0x0A; the operand has already been decremented once
     JMP $ED26  ; Jump to $ED26, which is two bytes into the Applesoft routine at $ED24. The two skipped bytes would store the accumulator in $9E

バリアント

ERRカウントが0に達すると印刷してビープ音を鳴らします

通常-15バイト

CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF

上書きCHRGET-14バイト

C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF

初期化しない$9E-13バイト

CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF

上書きCHRGETして初期化しない$9E-12バイト

C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF

カウントが0に達するとフリーズします

通常-12バイト

CE 06 80 F0 FE A2 0B A9 00 4C 24 ED

上書きCHRGET-11バイト

C6 B6 F0 FE A2 0B A9 00 4C 24 ED

初期化しない$9E-10バイト

CE 06 80 F0 FE A2 0B 4C 26 ED

上書きCHRGETして初期化しない$9E-9バイト

C6 B6 F0 FE A2 0B 4C 26 ED

私はこれを理解していると確信していません..これは、Pythonでグローバル変数をデクリメントし、シェルで実行された場合にのみ機能する関数を持つのと同じではないでしょうか?それは許されますか?私が意味することは、プログラムが何らかの時点でメモリを離れ、後で再びリロードされることは通常予想されていませんか?
redstarcoder

3
@redstarcoderいいえ-Apple IIには文字通りメモリ割り当てシステムがありません。RAMのどこにでも何でも保存でき、別の値で上書きされるまで、どのプログラムからもアクセス可能です。
insert_name_here

@ inset_name_here、RAMのどこからでもアクセスできるようになった場合、どのように変化するかわかりません。他のプログラムを確実に実行しても、このプログラムを後で実行できますか?たぶん、私は完全に理解するためにここの周りのルールに十分に精通していないので、私はそれをやめます。再起動後も完全なプログラムが持続し、実行と実行の間に他のプログラムが実行されると通常は正常に実行できると期待していますが、コミュニティが完全なプログラムをどのように規定しているのかわかりません。
redstarcoder

1
@redstarcoderの一般的なコンセンサスは、プログラムは必要なソフトウェアのみを使用して開発用コンピューターで実行され、その間は何もしないということです。
トムカーペンター

1
代わりに$ 6Eから実行する場合は8バイト:C6 75 F0 03 4C 22 ED 0B
ピーターフェリー

35

Linux上のPerl、17バイト

状態自体を維持せず、独自のソースコードを変更しないプログラムを作成することは興味深いかもしれません。言い換えれば、OSに問い合わせることにより、実際に実行された頻度を実際にチェックします。質問は、「ストレージに使用される施設はすべて、プログラムの最初の実行前に空であると想定される可能性があります。」と言うため、完全に空のOSから開始したいと思います。そのため、プログラムをテストするのは難しいので、それをどのように行うのかを説明した方が良いでしょう。

プログラムを実行するためのセットアップには、実際には2つの方法があります。いずれにせよ、この目的のための最小限のOSは、シェル(Perlを順番に実行できるようにするため)だけを実行し、その時点で可能な限り単純なシェル(OSを非ブランク)。/bin/dashこれは、システム回復のための最小限のシェルとして意図されていたため、ここでは適切な選択です。次に、を実行するだけの方法でLinuxを起動する必要がありdashます。これを行うinit=/bin/dashには、Linuxコマンドラインでコンピューターを再起動して、それ以外は何も開始しないようにするdashか、(はるかに便利な)unshare -Urfp /bin/dashターミナルでLinuxコンテナーを作成しますunshare実際には空のOSを作成しませんが、シミュレートします)1; 特に、コンテナの内部は、dash実際の空のOSで発生するのと同じように、それがルートだと思ったり、initなどだと思ったりします。免責事項:ベアメタルで実際にテストしたことはありませんが、内部unshareでのみテストしていますが、理論的には両方の方法で動作するはずです。

最後に、セットアップが完了したら、PIDを確認するだけです。空白のシステムであるため、initシステム(ここではシェル)のPIDは1であるため、Perlの実行では2から12までのPIDが含まれます。したがって、プログラムは次のようになります。

say 12-$$||die

以下にサンプルの実行を示します。

$ unshare -Urfp /bin/dash
# perl -E 'say 12-$$||die'
10
# perl -E 'say 12-$$||die'
9
# perl -E 'say 12-$$||die'
8
# perl -E 'say 12-$$||die'
7
# perl -E 'say 12-$$||die'
6
# perl -E 'say 12-$$||die'
5
# perl -E 'say 12-$$||die'
4
# perl -E 'say 12-$$||die'
3
# perl -E 'say 12-$$||die'
2
# perl -E 'say 12-$$||die'
1
# perl -E 'say 12-$$||die'
Died at -e line 1.
#

これを実行しているOSは何ですか?私はUbuntu Linux 14.04を使用unshareしていますが、フラグのいずれもサポートしていません-Urfp
isaacg 16

@isaacg:Ubuntu 16.04。unshareはかなり新しいもので(OSの機能へのインターフェースでもあり、これもかなり新しいものです)、バグは去年かそこらで本当に解決されました。2.5年前のバージョンを使用している場合、機能が非常に制限されていることは当然です。

14

Bash + sed、41 40 38バイト

echo $[n=10/1]
sed -i s/$n/$[n-1]/g $0

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


TIOリンクにはヘッダーとフッターがありますが、これらはバイトカウントに追加されませんか?
パベル

2
いいえ、プログラムを11回実行するだけです。
デニス

私は得るsed: invalid option -- '/'。sed(GNU sed)4.2.2
shrx

@shrxハァッ。ローカルとTIOに同じバージョンのsedがありますが、そのエラーは表示されません。
デニス

9

Javascript、42バイト

y=localStorage;y.a=y.a||10;alert(y.a--||a)

でテストそれアウトこのフィドル -カウントダウンをリセットするには、ローカルストレージをクリアしてください。

たくさんのバイトをしてくれたsteenbergh、Lmis、およびobarakonに感謝します!


y=localStorage;y.a=y.a||10;alert(y.a>0?y.a--:a)1バイト節約できます。
オリバー

sessionStorage簡単なリセット(新しいタブを使用するだけ)でテストできますが、もちろん+2バイトです。
ケビンリード

申し訳ありませんが、あなたの答えを見ただけで、ほぼ同じことをしました。あなたは、あなたが使用することができますしたい場合はl=localStorage;l.l=-~l.l;alert(10-l.l||l)、バイトを保存するために、私は私を削除したい
C5H8NNaO4

もちろん@Mego :)私は表示されませんconsole.logここで、しかし、私はどちらかそれを好む
C5H8NNaO4

1
うん、ブール短絡防止@obarakon aのlocalStorageの値が0でない場合に評価から
MEGO

8

C位、197の 160 159 125バイト

namespace System.IO{class P{static void Main(){int n=11;for(;File.Exists(""+--n););File.Create(""+n);Console.Wr‌​ite(n*n/n);}}}

牛乳のおかげで34バイト節約

そして、フォーマットされたバージョン(ReadKey追加されているので、出力を表示できます):

namespace System.IO
{
    class P
    {
        static void Main()
        {
            int n=11;
            for(;File.Exists(""+--n););
            File.Create(""+n);
            Console.Wr‌​ite(n*n/n);
        }
    }
}

それは思っていたよりも長いので、おそらくゴルフの余地があるでしょう。


2
File.Existsそして、File.Createの代わりに、ReadAllTextWriteAllText。ファイル名が存在するかどうかを確認するだけで、ファイルの内容と一緒にしないでください。また、namespace System.IOから名前空間を削除できますSystem.Console.Write。125バイト:namespace System.IO{class P{static void Main(){var n=11;for(;File.Exists(""+--n););File.Create(""+n);Console.Write(n*n/n);}}}
ミルク

@milkどうもありがとう!しかし、ファイル名のみを使用することを考えていなかったとは信じられません!そして、その名前空間のトリックについては知りませんでした。
TheLethalCoder 16

8

Dyalog APL33 28 22/20?バイト

これが有効かどうかはわかりません。関数で構成されているためです(仮引数で呼び出す必要があります)。ただし、すべてのAPLプログラム(純粋に機能するかどうかに関係なく)のステータスは同じであり、実際、一部のAPLバージョンには従来のプログラムがなく、機能のみがあります。補償として、2バイトを追加して名前を付けましたが、目的の効果には必要ありません。

f←{6::⊢c∘←10⋄÷÷c∘←c-1}

これは、∘←グローバルに割り当てられる非公式の癖に依存していることに注意してください。

6:: 値エラーが発生したとき

⊢ccを返す

∘←10 グローバルに10に設定されています

÷÷c 2回反転(ゼロのエラー)cを返します

∘← グローバルに設定されています

c-1cより1つ少ない

TryAPLオンライン!


確かに有効な28バイトバージョン:

f
'c←11'/⍨0=⎕NC'c'
c←÷÷c-1

設定作品Cを欠落している場合、その後、11から1減算C(IF DIVゼロによる誤差を与える倍、反転cは -1 0である)、に割り当てるC、及び新たな値を出力します。


古い33バイトバージョン:

f
÷÷≢2↓r⊣⎕FX¯1↓r←⎕NR'f '










実行ごとに自分自身を再定義しますが、末尾の改行が1つ少なくなります。2行反転した残りの行数(2行未満)を出力します。したがって、2行しか残っていない場合(ヘッダーと実際のコード)、ゼロ除算エラーが発生します。


1
えー...なぜそんなに多くの改行があるのですか?
Kritixi Lithos

4
@KritixiLithosプログラムは、実行ごとに1行少なくなるように再定義します。
アダム

7

Perl、37 36バイト

9=~//;print$'-sysopen$~,$0,print$'+1

初期値が-1(0を出力するはずだった)に達すると、=~演算子を上書きしてクラッシュします。

sysopenではなくを使用してバイトを保存しましたopen。これにより、再割り当ての前にSTDOUT、戻り値をファイルモード(1、別名O_WRONLY)として使用して最初に出力できます$~

サンプルの使用法

$ perl crash-off.pl
10
$ perl crash-off.pl
9
$ perl crash-off.pl
8

...

$ perl crash-off.pl
2
$ perl crash-off.pl
1
$ perl crash-off.pl
syntax error at crash-off.pl line 1, near "1~"
Execution of crash-off.pl aborted due to compilation errors.

6

Perl 6の 60の  58バイト

put 10-$=finish.lines||die;
$*PROGRAM.open(:a).put;
=finish
 
open($*PROGRAM,a=>put 10-$=finish.lines||die).put
=finish
 

の後に改行文字が必要=finishです。

dieに置き換えることができます1/0

説明:

=finish$=finish.lines)からそれを減算した後の行のリストを取得し10、結果が0そうでない場合はそれを印刷し、そうでなければdies

最後に行うことは、自身を追加モードで開き、最後に別の行を追加することです。


Perl 6を持っていない人のためのパーマリンク
Dennis

1は、限り日付のうちIdeoneが持っているものとしてではないことを、少なくとも@Dennisは(ランsay $*PERL.compiler.version
ブラッド・ギルバートはb2gills

1
2014.7 ...すごい!2016.11は2016.7と大きく異なりますか?もしそうなら、ソースからビルドできます。
デニス

@Dennis Perl 6の公式リリースは2015-12-25でした。2015年後半にThe Great List Refactor(GLR)と呼ばれる大きな変更があったため、2014.7でもコードを動作させることはほとんど不可能です。2016年に起きていることのほとんどはパフォーマンスに関連していますが、エッジ条件の修正は数多く行われています。ここにあるゴルフコードのほとんどは、Rakudoの2015.12リリース以降、何でも動作するはずです。だから、v2016.07は大丈夫だと思う。
ブラッドギルバートb2gills

6

Python 2、65バイト

f=open(__file__,"r+")
x=75-len(f.read())
x/x
print x
f.write('#')

L3viathanの答えに触発されました

あなたがファイルにのような単一の文字に名前を付けることを選択することができれば60バイトに減少させることができx、その後、交換してください__file__'x'。その場合は、交換してください7570


@ Flp.Tkcはい、しかし同じバイト数ではありませんか?
アレックスホール

ああ、それは本当です:P
FlipTack


4

Applesoft BASIC、21バイト(トークン化)

0  PRINT 9 + 1: CALL 2066: END : OR <CTRL-F><CTRL-H>`

<CTRL-F><CTRL-H>リテラルバージョンを置き換えます。これはメモリ内のプログラムのみを変更することに注意してください。ディスクから再ロードすると、カウントダウンがリセットされます。


サンプル実行

]RUN
10

]RUN
9

]RUN
8

]RUN
7

]RUN
6

]RUN
5

]RUN
4

]RUN
3

]RUN
2

]RUN
1

]RUN

?SYNTAX ERROR IN 0

説明

PRINT 9 + 1あなたが期待することを行います。CALL 2066は、メモリロケーション2066で6502マシン言語ルーチンを呼び出しますEND :ENDプログラムを停止して、マシン語ルーチン(Applesoftインタープリターにとってはゴミ)が実行されないようにします。

機械語ルーチンは単に9inをデクリメントしPRINT 9 + 1ます。分解:

0812-   CE 06 08    DEC $0806
0815-   60          RTS

カウンターが0に達すると、「減分」され/ます。プログラムを実行しようとすると、構文エラーが発生します。


4

*> <>20 18バイト

a1Fi:0(?b1-:?:1Fn;

これは実際にはLinux(および\n私が推測する名前のファイルをサポートするもの)で動作します。\n最初の実行時に名前の付いたファイルを作成し、出力します100代わりにクラッシュする場合を除き、各サブスクェント実行で1つ少ない数値を出力します。

説明

a1F                   open file named "\n"
   i:                 recieve input and duplicate it (-1 if empty)
     0(?b             if the file is empty, push 11 to the stack
         1-           subtract one
           :          duplicate the number
            ?:        if the number isn't 0, duplicate it again
              1F      save the number to the file
                n     output the number (crash if non-existant)
                 ;    exit

2
*> <>がIOを追加すると便利
Alfie Goodacre

4

PHP 57バイト

echo$n=($f=file(f))?$f[0]:10?:die;fputs(fopen(f,w),--$n);

実際にはクラッシュしませんが、ヒットすると終了します(カウントダウンせずに)0。それで十分ですか?

で実行し-rます。


4

C#、156バイト

私は@TheLethalCoderの答えを少し試しましたが、ステートメントを並べ替えてint.parse()を削除することで3バイトを節約することができました。まだ改善の余地があると思います。

using System.IO;class P{static void Main(){int n;try{n=File.ReadAllText("f")[0]-48;}catch{n=10;}System.Console.Write(n/n*n);File.WriteAllText("f",""+--n);}}

ゴルフをしていない:

using System.IO;
class P
{
    static void Main()
    {
        int n;
        try
        {
            n = File.ReadAllText("f")[0] - 48;
        }
        catch {
            n = 10;
        }
        System.Console.Write(n / n * n);
        File.WriteAllText("f", "" + --n);
    }
}

メタ質問:TheLethalCoderの仕事を私の答えの出発点とするのはハックかもしれません。回答に対するコメントとしてこれを追加する方が良いでしょうか(担当者がいれば)?私は彼らと競争しようとはしていません。ただお互いを啓発するためにゴルフを披露したいだけです。


他の者が示唆改善に答えるの下に人々は通常、あなたが自分自身で結構ですので、私のは今非常に異なっている牛乳によって提案されたがために、鉱山の改善のため、コメントを残す
TheLethalCoder

彼らは誰か他の人の回答コメントに改善しているが、それは彼らに異なる十分であるならば、あなた自身の答え投稿する場合、私は通常で行く
TheLethalCoder

3

Powershell V2.0、49バイト

(最初にゴルフをコーディングしましたが、バイトの計算方法に関するルールが見つかりませんでした。文字列からバイトへの計算機をオンラインで使用しました)

if(!$n){$n=10;$n}else{$n-=1;if($n-eq0){throw};$n}

ランニング:

PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
10

____________________________________________________________________________________________________________________________________________________________________
PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
9

____________________________________________________________________________________________________________________________________________________________________
PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
8

____________________________________________________________________________________________________________________________________________________________________
PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
7

____________________________________________________________________________________________________________________________________________________________________
PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
6

____________________________________________________________________________________________________________________________________________________________________
PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
5

____________________________________________________________________________________________________________________________________________________________________
PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
4

____________________________________________________________________________________________________________________________________________________________________
PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
3

____________________________________________________________________________________________________________________________________________________________________
PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
2

____________________________________________________________________________________________________________________________________________________________________
PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
1

____________________________________________________________________________________________________________________________________________________________________
PS C:\Users\***> if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw};$n;}
ScriptHalted
At line:1 char:49
+ if(!$n){$n = 10;$n}else{$n=$n-1;if($n-eq0){throw <<<< };$n;}
    + CategoryInfo          : OperationStopped: (:) [], RuntimeException
    + FullyQualifiedErrorId : ScriptHalted

PPCGへようこそ!バイトを計算するルールは、言語で使用される文字エンコーディングによって異なります。PowerShellは、おそらくケースがここにあるように、各文字が1バイト占め、唯一のASCIIコードとスクリプトのためにASCIIまたはUTF-8エンコーディングを使用し、そう
ルイス・Mendo

PPCGへようこそ!チャレンジライターによれば、すべての提出物は完全なプログラムでなければなりませんが、これはそうではありません。つまり、本質的にはREPLに相当するPowerShellで実行されています。
AdmBorkBork

たとえば、これを.ps1内に記述し、その10回crash-off.ps1を実行すると、それは完全なプログラムとしてカウントされますか?
キーロンデイビス

@KieronDaviesはい、毎回の間にシェルを閉じて再度開いた場合でも、同じ結果が得られます。実行間でシェル内のアイテムを「メモリ内」に保持することが、「フルプログラム」環境からのPowerShellの「REPL環境」を定義するものです。
AdmBorkBork 16

3

Java、343バイト

私の最初のゴルフの試み

import java.io.PrintWriter;class M{public static void main(String[] a) throws Exception{if(!new java.io.File("x").exists()) try(PrintWriter p=new java.io.PrintWriter("x")){p.write("10");}int b=new java.util.Scanner(new java.io.File("x")).nextInt();try(PrintWriter p=new java.io.PrintWriter("x")){p.print(b/b*b-1+"");System.out.print(b+"");}}}

食べない

import java.io.PrintWriter;

class M {
    public static void main(String[] a) throws Exception {
        if (!new java.io.File("x").exists()) {
            try (PrintWriter p = new java.io.PrintWriter("x")) {
                p.write("10");
            }
        }
        int b = new java.util.Scanner(new java.io.File("x")).nextInt();
        try (PrintWriter p = new java.io.PrintWriter("x")) {
            p.print(b / b * b - 1 + "");
            System.out.print(b + "");
        }
    }
}

あなたは、インポートすることにより、300バイトにそれを得ることができますjava.io.*し、完全修飾コンストラクタ名を使用して避け、そしてあなたは、自動的にその引数を文字列化されます「印刷する」という事実を使用して別の8をカットすることができますimport java.io.*;class M{public static void main(String[] a) throws Exception{if(!new File("x").exists()) try(PrintWriter p=new PrintWriter("x")){p.print(10);}int b=new java.util.Scanner(new File("x")).nextInt();try(PrintWriter p=new PrintWriter("x")){p.print(b/b*b-1);System.out.print(b);}}}
グレン

あなたは、ファイルに「10」を書き込まないで237バイトに、それを降りて、代わりにだけ使用することができます?あなたが読んだときにファイルの存在に基づいてオペレータをbimport java.io.*;class M{public static void main(String[] a) throws Exception{int b=new File("x").exists()?new java.util.Scanner(new File("x")).nextInt():10;try(PrintWriter p=new PrintWriter("x")){p.print(b/b*b-1);System.out.print(b);}}}
グレン

最も最適化できるのは220バイトです。ここでは獣だ:import java.io.*;class A{public static void main(String[]a)throws Exception{File f=new File("f");int b=f.exists()?new FileInputStream(f).read()-48:10;new PrintWriter(f).printf("%d",b/b*b-1).close();System.out.print(b);}}
オリヴィエ・グレゴワール

提案のためのthx :)
ヴィクトルメルグレン

3

SQLite、 142 137

これはおそらくもっと賢く行うことができます。 141 コード用の136文字:

create table if not exists t(n not null);insert into t select 11;update t set n=case n when 1 then null else n-1 end;select min(n)from t

のファイル名xに1を加えたものsqlite3 x '…'


1
いいね!SQLiteがこのように使用されるのを見たことがありません。あなたは「11を選択」、および「tから選択分(N)」と「Tリミット1からNを選択」と「値(11)」を置き換えることによって、いくつかのバイトを絞ることができる
ベンスJoful

3

JavaScript、74バイト

x=typeof x!=typeof 1?10:x!=1?x-=1:_

l=localStorage;l.a=typeof l.a!=typeof""?10:l.a!=1?l.a=--l.a:_;aler‌​t(l.a)


5
OPは、(コメントで)完全なプログラムが必要であることを明確にしました。
デニス

1
@Dennis改訂版の提出物はフルプログラムとして認められますか?
オリバー

知りません、そうは思いません。呼び出しalertまたは同様のものがなければ、それは単なるREPLスニペットだと思います。
デニス

2
は、私にはよく見えますよ。(私の電話からはテストできません。)
デニス

3

ルビー、94 87 84 61 59バイト

j=File.open(?a,"a+");1/(i=j.readlines.size-14);p -i;j.puts

以下に提案を残してください。

@ ConorO'Brienのアイデアに感謝します(彼の答えから恥ずかしがり屋もありました)。



newandのsize代わりにopenandを使用しlengthます。
リーW

2

ルビー、52 + 1 = 53バイト

ファイルに名前が付けられていると仮定しますa(+1バイト)。

q=File.read ?a
0/h=62-q.size
p h
File.write ?a,q+?1#

ランニング

C:\Users\Conor O'Brien\Documents\Programming
λ type a
q=File.read ?a
0/h=62-q.size
p h
File.write ?a,q+?1#
C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
10

C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
9

C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
8

C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
7

C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
6

C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
5

C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
4

C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
3

C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
2

C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
1

C:\Users\Conor O'Brien\Documents\Programming
λ ruby a
a:2:in `/': divided by 0 (ZeroDivisionError)
        from a:2:in `<main>'

...名前を推測できますか?
dkudriavtsev

最後の行で、aと 'echo >>#$ 0'(バックティック付き)の代わりに$ 0を使用できます。
GB

@GB想定よりもまだバイト数が多いa(+1のみ)。
wizzwizz4

?aは2バイト、$ 0は2バイトですが、whitepacesは必要ありません。
GB

2

Python 2、89バイト

x=10
x/x
print x
f=open(__file__,"r+")
s=f.read()
f.seek(0)
f.write(s.replace(`x`,`x-1`))

私はあなたのオープンのアイデアが好きだった__file__ので、答えでそれを利用しました。
アレックスホール

@AlexHall素晴らしいアイデアlen
L3viathan

@ Flp.Tkcこれでキャラクターを保存しません。s読み取り、シーク、書き込みが必要なため、変数を使用する必要があります。これprint x/x*xは機能しますが、バイトカウントは改善されません。
L3viathan 16

2

TI-BASIC(TI-84 Plus)(15バイト)

If not(Ans
11
Ans-1
AnsAns/Ans

最初の実行の前に、Ansは0(デフォルト値)に等しくなければなりません。

以来、AnsAns/Ansプログラムの最後の行である回答が0でない限り、0除算エラーが発生した場合には、回答に出力して格納されるであろう。


2

JavaScript、41

l=localStorage;l.l=-~l.l;alert(11-l.l||I)


@Megoはい、明らかに、これがどのように起こるかわかりません...私はそれを書いalときの代わりに持っていました、そして私はそれがもっと楽しく見えると思ったので... 、指摘してくれてありがとう。
C5H8NNaO4 16

1

GNU Smalltalk、 70、68バイト

「-S」フラグの66バイトコード+2バイト

編集

  • 不要な括弧、-2バイトを削除

ゴルフ

X=Y ifTrue:[Smalltalk at:#X put:10]ifFalse:[X:=X-1].(X*X/X)printNl

テスト

>seq 11|xargs -L1 sudo gst -S fail.st 2>/dev/null
10
9
8
7
6
5
4
3
2
1
Object: 0 error: The program attempted to divide a number by zero
ZeroDivide(Exception)>>signal (ExcHandling.st:254)
SmallInteger(Number)>>zeroDivide (SysExcept.st:1426)
SmallInteger>>/ (SmallInt.st:277)
UndefinedObject>>executeStatements (fail.st:1)

重要

デフォルトのイメージを変更したり、-Iで独自のイメージを指定したりするには、gstをルートとして実行する必要があります。


1

PHP、45バイト

これが重要であるかどうかは正直わかりません。

<?session_start();echo10-$_SESSION[0]++?:die;

例へのリンクを投稿しますが、私が知っているすべてのオンラインテスターは使用できませんsession_start()

これにより、dieコマンドが実行される0までページを更新するたびにカウントダウンが続けられます。


0

QBIC、70バイト

open"r",1,"a.b" $get#1,1,e|~e=0|e=z\e=e-1]?e~e=0|$error 1|]$put#1,1,e|

ファイルを開きa.b(または最初の実行で見つからない場合は作成します)、レコード1を読み取りますe。そのレコードが見つからない場合は10、それ以外の場合は1を想定e==0します。でエラーが発生します。バックライトea.b

ファイルアクセスはQBICに組み込まれていません。これは、基礎となるQBasicに大きく依存しています。


0

バッチ、72バイト

@call:l
@if %n%==0 goto g
@echo %n%
@cmd/cset/a-1>>%0
:l
@set/an=10

拡張子を含む完全なファイル名を使用して呼び出す必要があります。最後の行に末尾の改行を含めることはできません。-1最後の行の最後に書き込むことで機能し、毎回1ずつ少なく評価されます。goto glabelがないためエラーになり:gます。


0

R、52バイト

`if`(!"x"%in%ls(),cat(x<-10),`if`(x>0,cat(x<-x-1),))

基本的ls()に、グローバルに保存されているすべてのオブジェクトの名前をリストするために使用します。グローバル環境が空で"x"既に存在しないと仮定した場合、を生成しx=10x!=0減算1elseがエラーを返す欠落している引数を呼び出します。


あなたは削除することで、バイトを保存することができます!変更することで、その後、他の引数の順序を切り替えて、別の2 x>0x。(また、バイトカウントは同じexists("x")ですが"x"%in%ls()、に比べて少しきれいです。)
rturnbull

ああ、仕様のコメントを読み直すと、完全なプログラムが必要なようです。つまり、実行間でオブジェクトの永続性に頼ることはできません。
rturnbull

@rturnbullこれが明示的に述べられている場所を見つけることはできませんが。あなたが私にそれを指し示すことができるならば、私は答えを削除します。
ビリーウォブ

ここで言及さていますが、仕様には組み込まれていません。
rturnbull


0

JavaScript、44バイト

function* f(n=11){for(;--n;yield n);throw''}

p=f()
console.log(p.next().value)
console.log(p.next().value)
console.log(p.next().value)
console.log(p.next().value)
console.log(p.next().value)
console.log(p.next().value)
console.log(p.next().value)
console.log(p.next().value)
console.log(p.next().value)
console.log(p.next().value)
console.log(p.next().value)

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