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
충돌은 무엇을 수반합니까?
Conor O'Brien

2
@ ConorO'Brien Hmm ... 이것은 메타에서 논의되지 않았습니까?
Esolanging Fruit

2
@ Challenger5 내가 아는 바가 없습니다. 오류를 던지는 것으로 충분합니까?
Conor O'Brien

1
@ ConorO'Brien 예.
Esolanging Fruit

답변:


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. 로드 한 다음 모니터에서 호출해야하며 완료되면 CTRL+ BReturn를 사용 하여 BASIC을 다시 초기화해야합니다. 이것이 무효인지 아닌지 확실하지 않습니다.


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

에서 시작해야합니다 $8000. 초기화되지 않아 $9E2 바이트를 절약합니다. 그러나 이는 네거티브 주소로 호출해서는 안됩니다 (또는 모니터에서 호출하면 포지티브 주소로 모니터를 호출해야 함). 그렇게하면 Applesoft의 CALL루틴이에 저장 FF되어 $9E인쇄 할 때 번호에 65280을 추가합니다. 다시 말하지만 이것이 솔루션을 무효화하는지 여부는 확실하지 않습니다.


C6 B6 F0 01 A2 0B 4C 26 ED

에서 시작해야합니다 $B1. 이것은 위의 두 프로그램의 조합으로 총 3 바이트를 절약합니다. 양의 주소로 모니터를 호출하고로드하여 실행 한 다음 Ctrl+ BReturn를 사용 하여 BASIC을 다시 초기화해야합니다.


이러한 프로그램은 메모리의 프로그램 만 수정합니다. 디스크에서 프로그램을 다시로드하면 카운트 다운이 재설정됩니다. 이것은 애플] [(그리고] [+, // 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 No-Apple II에는 문자 적으로 메모리 할당 시스템이 없습니다. RAM의 어느 곳에 나 저장할 수 있으며 다른 값으로 덮어 쓸 때까지 모든 프로그램에서 액세스 할 수 있습니다.
insert_name_here

@inset_name_here, RAM의 어느 곳에서 액세스 할 수 있는지 변경하는 것이 확실하지 않습니다. 다른 프로그램을 안정적으로 실행하고 나중에이 프로그램을 계속 실행할 수 있습니까? 어쩌면 나는 여기의 규칙을 완전히 이해하기에 익숙하지 않을 수도 있으므로 그냥 버릴 것입니다. 나는 전체 프로그램이 재부팅을 통해 지속되고 다른 프로그램이 실행 사이에 실행될 경우 정상적으로 실행될 수 있기를 기대하지만 커뮤니티가 전체 프로그램을 무엇으로 규정하는지 모르겠습니다.
redstarcoder

1
@redstarcoder 일반적인 합의는 프로그램이 필요한 소프트웨어만으로 개발 컴퓨터에서 실행되고 그 동안 다른 작업을 수행하지 않는다는 것입니다.
Tom Carpenter

1
대신 $ 6E에서 실행하면 8 바이트 : C6 75 F0 03 4C 22 ED 0B
peter ferrie

35

Linux의 Perl, 17 바이트

상태 자체를 유지하지 않고 자체 소스 코드를 수정하지 않는 프로그램을 만드는 것이 흥미로울 수 있다고 생각했습니다. 즉, 실제로 OS를 요청하여 얼마나 자주 실행되는지 확인합니다. 문제는 "프로그램을 처음 실행하기 전에 스토리지에 사용 된 모든 시설이 비어있는 것으로 가정 할 수 있습니다."라고 말하면서 완전히 빈 OS에서 시작하려고합니다. 따라서 프로그램을 테스트하기가 어렵 기 때문에 어떻게하는지에 대해 설명하는 것이 좋습니다.

실제로 프로그램을 실행하기위한 두 가지 방법이 있습니다. 어느 쪽이든, 목적을위한 최소한의 OS는 쉘을 실행하고 (Perl을 차례로 실행할 수 있도록) 쉘에서 가장 간단한 쉘을 사용하여 (OS가 아닌 것을 만드는 멋진 일을하지 않도록) 공백). /bin/dash시스템 복구를위한 최소한의 쉘로 의도되었으므로 여기서는 좋은 선택입니다. 그런 다음 Linux 만 시작하는 방식으로 Linux를 시작해야합니다 dash. 우리는 init=/bin/dash리눅스 커맨드 라인 에서 컴퓨터를 재부팅하여 이외의 아무것도 시작 하지 않거나 터미널에서 dash사용하여 Linux 컨테이너를 만드는 것이 훨씬 편리합니다 unshare -Urfp /bin/dash( unshare실제로 빈 OS를 생성 하지는 않지만 시뮬레이션합니다)하나; 특히 컨테이너 내부 dash는 실제 빈 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.
#

어떤 OS를 사용하고 있습니까? Ubuntu Linux 14.04 unshare에 있으며 플래그를 지원하지 않습니다 -Urfp.
isaacg

@isaacg : 우분투 16.04. unshare아주 새롭고 (새로운 기능인 OS 기능에 대한 인터페이스이기도 함) 버그는 지난 1 년 동안 실제로 해결되었습니다. 2½ 년 된 버전을 사용하는 경우 기능이 매우 제한적이라는 것은 놀라운 일이 아닙니다.

14

배쉬 + sed, 41 40 38 바이트

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

온라인으로 사용해보십시오!


TIO 링크에는 머리글과 바닥 글이 있습니다. 바이트 수에 추가되지 않습니까?
Pavel

2
아니요, 프로그램을 11 번만 실행하면됩니다.
Dennis

나는 얻는다 sed: invalid option -- '/'. sed (GNU sed) 4.2.2
shrx

@shrx 허. 로컬 및 TIO에 동일한 버전의 sed가 있으며 해당 오류를 표시하지 않습니다.
Dennis

9

자바 스크립트, 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 바이트입니다.
Kevin Reid

죄송합니다. 방금 답변을 보았습니다. 원하는 경우 l=localStorage;l.l=-~l.l;alert(10-l.l||l)바이트를 저장하는 데 사용할 수 있습니다. 삭제합니다
C5H8NNaO4

나는이 표시되지 않습니다 :) 물론 @Mego console.log여기에,하지만 난 그 중 하나를 원합니다
C5H8NNaO4

1
@obarakon Yep 및 Boolean short-circuiting 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대신 ReadAllText하고 WriteAllText. 파일 이름이 있는지 확인하고 파일 내용과 함께 있지 마십시오. 또한 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

8

Dyalog APL , 33 28 22/20? 바이트

함수 (더미 인수로 호출해야 함)로 구성되어 있기 때문에 이것이 유효한지 확실하지 않습니다. 그러나 모든 APL 프로그램 (순전히 기능적이든 아니든)의 상태는 동일하며 실제로 일부 APL 버전에는 전통적인 프로그램이없고 기능 만 있습니다. 보상으로, 원하는 효과에 필요하지 않지만 이름을 지정하기 위해 2 바이트를 추가했습니다.

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

이것은 ∘←전 세계적으로 할당 되는 비공식적 특질에 의존 합니다.

6:: 어떤 가치 오류에

⊢cc를 반환

∘←10 전 세계적으로 10으로 설정되어 있습니다

지금

÷÷c 두 번 거꾸로 반환 (0의 오류) c

∘← 전 세계적으로

c-1c 보다 하나 적은

TryAPL 온라인!


확실히 유효한 28 바이트 버전 :

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

설정하여 서지 (C)가 없는 경우에는 다음에, 11 내지 1 감산 C (DIV 경우 0으로 에러를주는 두 번 반전 C는 -1 0)에 할당 C , 새로운 값을 출력한다.


이전 33 바이트 버전 :

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










각 실행에서 자체적으로 재정의하지만 후행 줄 바꿈이 적어집니다. 나머지 두 줄의 반전 된 수를 두 번 (2 개 이하) 출력하여 두 줄만 남으면 (div 및 실제 코드) 0으로 나누기 오류가 발생합니다.


1
어 ... 왜 그렇게 많은 줄 바꿈이 있습니까?
Kritixi Lithos

4
@KritixiLithos이 프로그램은 각 실행마다 한 줄씩 줄어 듭니다.
Adám

7

펄, 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

펄 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이없는 사람들을위한 Permalink
Dennis

하나는 지금까지 구식 Ideone이 무슨으로 아니라고 적어도 @Dennis는 (실행 say $*PERL.compiler.version)
브래드 길버트는 b2gills

1
2014.7 ...와! 2016.11은 2016.7과 매우 다른가요? 그렇다면 소스에서 빌드 할 수 있습니다.
Dennis

@Dennis Perl 6의 공식 릴리스는 2015-12-25입니다. 2015 년 말에 GLR (The Great List Refactor)이라는 큰 변화가 있었으므로 2014.7에서도 코드를 작동시키는 것은 거의 불가능합니다. 많은 엣지 조건 수정이 있었지만 2016 년에 발생한 대부분의 작업은 성능 관련입니다. 여기서 골프 코드의 대부분은 Rakudo 2015.12 릴리스 이후에 작동해야합니다. v2016.07은 괜찮습니다.
Brad Gilbert b2gills

6

파이썬 2, 65 바이트

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

L3viathan의 답변에서 영감을 얻었습니다 .

이 파일을 같은 단일 문자 이름을 선택할 수있는 경우 60 바이트로 줄일 수 있습니다 x후 교체 __file__와 함께 'x'. 이 경우, 교체 75와 함께 70.


@ Flp.Tkc 예, 같은 바이트 수가 아닌가?
Alex Hall

아,
맞아


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

3

Powershell V2.0, 49 바이트

(최초 코드 골프, 바이트 계산 방법에 대한 규칙을 찾을 수 없습니다. 온라인에서 String to bytes 계산기를 사용했습니다)

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 바이트를 사용합니다
Luis Mendo

PPCG에 오신 것을 환영합니다! 챌린지 작성자에 따라 모든 제출은 완전한 프로그램이어야하며, 이는 기본적으로 PowerShell과 동일한 REPL에서 실행되는 것은 아닙니다.
AdmBorkBork

이것을 .ps1 안에 작성하고 예를 들어 crash-off.ps1의 10 배를 실행하면 전체 프로그램으로 간주됩니까?
Kieron Davies

@KieronDavies 예. 매번 사이에 쉘을 닫았다가 다시 열면 여전히 같은 결과가 나타납니다. 실행 사이에 셸의 항목을 "메모리에"유지하는 것은 "전체 프로그램"환경에서 PowerShell의 "REPL 환경"을 정의하는 것입니다.
AdmBorkBork

3

자바, 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);}}
Olivier Grégoire

thx 제안 :)
Viktor Mellgren

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가 사용되는 것을 보지 못했습니다. "values ​​(11)"을 "select 11"로 바꾸고 "select n (t limit 1)"을 "select min (n) from t" "로 바꾸면 몇 바이트를 짜낼 수 있습니다.
Bence Joful

3

자바 스크립트, 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는 전체 프로그램이 필요하다는 의견을 명확히했다.
Dennis

1
@Dennis 수정 된 제출물이 전체 프로그램으로 인정됩니까?
Oliver

모르겠지만 그렇게 생각하지 않습니다. 전화를 걸 alert거나 유사한 것을하지 않으면 REPL 스니 펫일뿐입니다.
Dennis

2
나에게 좋아 보인다. (내 전화로는 테스트 할 수 없습니다.)
Dennis

3

루비, 94 87 84 61 59 바이트

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

아래에 제안을 남겨주세요.

아이디어에 감사드립니다.


puts i=>p i
Conor O'Brien

사용 new하고 size대신 openlength.
Lee 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 바이트이지만 공백은 필요하지 않습니다.
GB

2

파이썬 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__습니다.
Alex Hall

@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

자바 스크립트, 41

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


@ Mego 네, 분명히, 나는 이것이 어떻게 일어날 수 있는지 모르겠습니다 ... 나는 그것을 쓸 때 a대신에 그것을 가지고 있었고, l더 재미있어 보인다고 생각했기 때문에 생각없이 바꿨습니다 ... 너무 늦었습니다. 지적 해 주셔서 감사합니다.
C5H8NNaO4

1

GNU 스몰 토크, 70, 68 바이트

"-S"플래그의 66 바이트 코드 +2 바이트

EDITS

  • 불필요한 괄호, -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 를 root로 실행해야합니다 .


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=10, else를 x!=0빼면 1누락 된 인수를 호출하여 오류를 반환합니다.


!then 및 else 인수의 순서를 제거하고 순서를 바꾸면 바이트를 저장할 수 있고 로 변경 x>0하면 다른 두 인수를 바꿀 수 x있습니다. (또한,exists("x")"x"%in%ls() 바이트 수는 동일하지만 조금 더 깔끔 합니다.)
rturnbull

아, 사양에서 주석을 다시 읽으면 전체 프로그램이 필요한 것처럼 보이므로 실행 사이의 객체 지속성에 의존 할 수 없습니다.
rturnbull

@rturnbull 명시 적으로 명시된 곳을 찾을 수는 없지만. 답을 알려 주시면 답변을 삭제하겠습니다.
Billywob

사양으로 편집되지 않았지만 여기 에 언급되어 있습니다 .
rturnbull

0

윈도우 배치, 61 바이트

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

0

자바 스크립트, 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.