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 Hmm ...这还没在meta中讨论过吗?
硕果累累

2
@ Challenger5我不知道。抛出一个错误就足够了吗?
科纳·奥布莱恩

1
@ ConorO'Brien是的。
硕果累累

Answers:


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。这可以节省一个字节,因为我可以使用(两个字节)的零页版本DEC,但是可以覆盖关键的Applesoft例程CHRGET;您将需要加载它并从监视器中调用它,并在完成后使用CTRL+ BReturn重新初始化BASIC。不知道这是否会使它无效。


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

应该从开始$8000。这不会初始化$9E,节省两个字节。但是,这意味着您不能使用负地址来调用它(或者,如果从监视器调用它,则必须使用正地址来调用监视器)。如果这样做,Applesoft的CALL例程将存储FF在中$9E,从而在打印时将其添加65280。同样,不确定这是否会使解决方案无效。


C6 B6 F0 01 A2 0B 4C 26 ED

应该从开始$B1。这是上述两个程序的组合,总共节省了三个字节;您必须使用一个正地址调用监视器,然后从那里加载并运行它,并在完成后使用Ctrl+ BReturn重新初始化BASIC。


请注意,这些程序仅修改内存中的程序。从磁盘重新加载程序将重置倒数计时。之所以可行,是因为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中有一个减少全局变量并且仅在shell中执行的函数相同?可以吗 我的意思是,通常不期望程序在某个时候离开内存,以便稍后重新加载吗?
redstarcoder '16

3
@redstarcoder否-Apple II实际上没有内存分配系统;您可以将任何内容存储在RAM中的任何位置,并且任何程序都可以访问它,直到被另一个值覆盖为止。
insert_name_here

@inset_name_here,我不确定它在RAM中的任何位置均可访问如何改变任何东西。您能否可靠地运行其他程序,并且以后仍然运行此程序?也许我对这里的规则不够熟悉,无法完全理解,所以我就删除它。我只是希望完整的程序可以在重新启动后继续存在,并且通常在其他程序在两次执行之间运行时都能正常运行,但是我不知道社区对完整程序的要求。
redstarcoder '16

1
@redstarcoder的普遍共识是,该程序在开发计算机上运行,​​除了所需的软件外什么都没有,并且在此期间不执行其他任何操作。
汤姆·卡彭特

1
如果从$ 6E运行,则改为8个字节:C6 75 F0 03 4C 22 ED 0B
彼得·费里

35

Linux上的Perl,17个字节

我认为创建一个不维护任何状态并且不修改自己的源代码的程序可能会很有趣。换句话说,它实际上通过询问操作系统来检查它的运行频率。这个问题说:“在第一次执行程序之前,任何用于存储的设施都可能被假定为空。”因此,我们想从一个完全空白的OS开始。因此,我最好只说明您如何执行此操作,否则将很难测试程序。

实际上有两种方法可以设置运行程序。无论哪种方式,用于此目的的最小OS都将只运行一个shell(以使我们能够依次运行Perl),然后运行最简单的shell(这样它就不会产生使OS成为非操作系统的幻想)。空白)。/bin/dash在这里是一个不错的选择,因为它被用作系统恢复的最小外壳。然后,我们需要以某种方式运行Linux来启动Linux dash。我们可以通过以下方式来执行此操作:init=/bin/dash在Linux命令行上使用重启计算机,以便除了启动之外dash,什么也没有启动,或者(更加方便地)unshare -Urfp /bin/dash在终端中使用创建Linux容器(unshare实际上并没有创建空白OS,但是它确实模拟了一; 值得注意的是,容器的内部认为它是根,dash认为它是init等,就像在实际的空白OS上一样。免责声明:我尚未真正在裸机上对此进行过测试,仅在内部进行过测试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.
#

您在什么操作系统上运行它?我在Ubuntu Linux 14.04上,unshare不支持任何标志-Urfp
isaacg's

@isaacg:Ubuntu 16.04。unshare是非常新的功能(这是操作系统功能的接口,也很新),并且这些错误仅在过去一年左右的时间里得到了解决。如果您使用的是2½岁的版本,那么功能上的限制就不足为奇了。

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)可以为您节省一个字节。
奥利弗(Oliver)

您可以使用sessionStorage更轻松的重置进行测试(只需使用一个新选项卡),但是当然需要+2字节。
凯文·里德

哎呀,对不起,我刚刚看到了你的答案,我最终做了几乎一样的事情。如果你愿意,你可以使用l=localStorage;l.l=-~l.l;alert(10-l.l||l)保存字节,我会删除我的
C5H8NNaO4

@Mego当然:)我在console.log这里看不到,但是我更愿意
-C5H8NNaO4

1
@obarakon是的,和布尔短路防止a从评估时的localStorage的值不为0。
迈戈

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.ExistsFile.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版本没有传统程序,只有功能。作为补偿,我添加了两个字节来命名它,尽管对于达到预期效果并不是必需的。

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

请注意,这依赖于一个非官方的怪癖,它是∘←全局分配的。

6:: 任何值错误

⊢c返回c

∘←10 全局设置为10

现在

÷÷c 返回两次反转(错误为零)c

∘← 全局设置为

c-1c小一

在线尝试APL!


肯定有效的28字节版本:

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

通过将c设置为11(如果丢失),然后从c减去1 ,进行两次反转(如果c -1为0 则给出div零误差),分配给c并输出新值来工作。


旧的33字节版本:

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










通过在每次运行中重新定义自身来工作,但尾随换行符要少一些。输出剩余行的两倍的倒数(较少的两行),因此,当仅剩下两行(标头和实际代码)时,将产生div零错误。


1
嗯...为什么会有这么多换行符?
Kritixi Lithos

4
@KritixiLithos程序在每次运行时以少一行的方式重新定义自己。
2013年

7

Perl,37 36字节

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

当初始值达到-1(将显示0)时崩溃,因为它覆盖了=~运算符。

使用sysopen而不是保存了一个字节open。这使我可以在重新分配之前STDOUT使用返回值作为文件模式(1,aka 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则打印该行,否则为die

它要做的最后一件事是在追加模式下打开自己,并在末尾添加另一行。


固定链接对于那些不具备的Perl 6.谁
丹尼斯

@Dennis至少没有一个像Ideone那样过时(运行say $*PERL.compiler.version
Brad Gilbert b2gills

1
2014.7 ...哇!2016.11与2016.7有很大不同吗?如果是这样,我可以从源代码构建它。
丹尼斯

@Dennis Perl 6的正式发布时间为2015-12-25。2015年底发生了很大的变化,称为“大列表重构(GLR)”,因此几乎不可能在2014.7上运行代码。尽管有许多边缘条件修复程序,但2016年发生的大多数事情都与性能相关。在2015.12版本的Rakudo之后,此处的大多数代码都可以使用。所以我认为v2016.07很好。
布拉德·吉尔伯特b2gills '16

6

Python 2,65个字节

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

受到L3viathan的回答的启发。

如果可以选择以单个字符命名文件x,然后替换__file__为,则可以减少到60个字节'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在第一次运行时创建一个命名文件并输出10。每次后续运行,0它都会输出少一个数字,除非它崩溃了。

说明

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可能使用ASCII或UTF-8编码,因此仅与ASCII码的脚本,比如这里的情况下,每个字符占用1个字节
路易斯Mendo

欢迎来到PPCG!根据挑战编写者的观点,所有提交的内容都必须是一个完整的程序,而实际上,它不是在一个等效于PowerShell的REPL中运行。
AdmBorkBork '16

例如,如果我在.ps1内编写此代码并执行了10次crash-off.ps1,那算作一个完整程序吗?
基隆·戴维斯

@KieronDavies是的,只要在两次之间关闭并重新打开外壳程序,您仍然会得到相同的结果。在执行之间,将项目“保留在外壳中”存储在外壳中,这就是从“完整程序”环境定义PowerShell的“ REPL环境”的原因。
AdmBorkBork

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 + "");
        }
    }
}

您可以通过导入java.io.*并避免使用完全限定的构造函数名称来将其压缩为300个字节,还可以使用“ print”将其参数自动字符串化的事实将其减少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);}}}
Glen

您可以通过不将“ 10”写入文件来减少到237个字节,而是?在读取b以下内容时仅使用基于文件存在的运算符:import 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);}}}
Glen

我可以做的最优化的: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);}}
奥利维尔·格雷戈里


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

再加上1名xsqlite3 x '…'


1
真好!以前没有看过SQLite这样使用。您可以通过将“ values(11)”替换为“ select 11”,并将“从t limit 1选择select n”替换为“从select t选择min(n)”来压缩几个字节
Bence 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我的修订稿是否符合完整程序的要求?
奥利弗(Oliver)

我不知道,但我不这么认为。我要说的是,没有致电alert或类似邀请,这只是REPL片段。
丹尼斯

2
对我来说看上去很好。(无法通过我的手机对其进行测试。)
Dennis

3

Ruby,94 87 84 61 59字节

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

请在下面留下建议。

感谢@ ConorO'Brien的想法(有些无耻地从他的回答中r了出来)。


puts i=>p i
Conor O'Brien

使用newsize代替openlength
李W

2

Ruby,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 '16

您可以在最后一行使用$ 0代替a和'echo >>#$ 0'(带反引号)。
GB

@GB比假设的字节数a(仅+1)还要多。
wizzwizz4 2016年

?a是2个字节,$ 0是2个字节,但不需要白点。
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

2

TI-BASIC(TI-84 Plus)(15字节)

If not(Ans
11
Ans-1
AnsAns/Ans

在第一次运行前,Ans应该等于0(默认值)。

由于AnsAns/Ans是程序的最后一行,因此除非Ans为0,否则它将被输出并存储到Ans,在这种情况下,会发生被0除的错误。


2

JavaScript,41岁

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


@Mego是的,显然,我不知道这是怎么回事...我写al时候不是,而是不加思索地更改了它,因为我认为它看起来更有趣...它已经来不及了, 感谢您指出了这一点。
C5H8NNaO4

1

GNU Smalltalk, 70,68字节

66字节代码+“-S”标志的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)

重要

您必须以root用户身份运行gst,以便它能够修改默认映像,或使用-I指定您自己的映像。


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,否则为sub1。在处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 g错误,因为没有标签:g


0

R,52个字节

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

本质上用于ls()列出所有全局存储对象的名称。如果我们假设全局环境为空且"x"尚不存在,请生成x=10,否则,如果x!=0减去1else则调用缺少的参数,该参数返回错误。


您可以通过删除!和切换then和else参数的顺序来保存一个字节,并通过更改x>0为来保存另外两个字节x。(此外,虽然字节数相同,但exists("x")比整洁一点"x"%in%ls()。)
rturnbull16

嗯,重新阅读规范中的注释,似乎需要一个完整的程序,这意味着您不能依赖两次运行之间的对象持久性。
rturnbull

@rturnbull尽管我找不到明确说明的位置。如果您能指出答案,我将删除答案。
Billywob

尽管尚未对其进行编辑,但此处已提及。
rturnbull

0

Windows Batch,61个字节

@if %n%.==. set n=10
@if %n%==0 goto.
@set /a n-=1&@echo %n%

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)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.