3… 2… 1… Çarpışmış!


47

Görevin her çalıştırıldığında 10'dan geriye saymaya devam edecek tam bir program yazmak.

  • Programı ilk çalıştırdığınızda, yazdırması gerekir 10.
  • Bir dahaki sefere, çıkışı olmalıdır 9.
  • Bir dahaki sefere, çıktı 8vb.
  • Yazdırma yerine 0, program çökmeli. Bundan sonra daha fazla çalışmakta olan programı işlemeniz gerekmez.
  • Depolama için kullanılan tüm tesislerin, programın ilk yürütülmesinden önce boş olduğu varsayılabilir.

İşte Python 3'te örnek bir uygulama:

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))

Bu , yani en kısa cevap (bayt cinsinden ölçülen) kazanır.


12
Çarpmanın anlamı nedir?
Conor O'Brien,

2
@ ConorO'Brien Hmm ... bu metada tartışılmadı?
Esolanging Fruit

2
@ Challenger5 Ben bilmiyorum. Bir hata atmak yeterli olur mu?
Conor O'Brien,

1
@ ConorO'Brien Evet.
Esolanging Fruit

Yanıtlar:


18

6502 makine dili + Elma] [+ ROM, 12 (11 - 10 - 9 -) bayt

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

Başlamalı $8000. Sayım 0'a ulaştığında, sistem monitörü çöküyor.


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

Başlamalı $B1. Bu, (iki baytlık) sıfır sayfalı sürümünü kullanabildiğim için bir bayt kazandırıyor DECancak kritik Applesoft yordamının üzerine yazıyor CHRGET; yüklemek ve monitörden çağırmanız ve BASIC'i yeniden başlattığınızda yeniden başlatmak için CTRL+ BReturndüğmesini kullanmanız gerekir. Bunun geçersiz olup olmadığından emin değil.


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

Başlamalı $8000. Bu, $9Eiki bayt tasarrufu sağlamaz . Ancak bu, negatif bir adresle aramamanız gerektiği anlamına gelir (veya monitörden ararsanız, monitörü pozitif bir adresle çağırmanız gerekir). Bunu yaparsanız, Applesoft'un CALLrutini saklanır FFve $9Eyazdırırken sayıya 65280 eklemesi sağlanır. Yine, bunun çözümü geçersiz kıldığından emin değiliz.


C6 B6 F0 01 A2 0B 4C 26 ED

Başlamalı $B1. Bu, yukarıdaki üç programın bir birleşimidir ve toplam üç bayt tasarruf sağlar; Monitörü pozitif bir adresle çağırmanız, yüklemeniz ve oradan çalıştırmanız ve tamamladığınızda BASIC'i yeniden başlatmak için Ctrl+ ' BReturnyı kullanmanız gerekir.


Bu programların yalnızca bellekteki programı değiştirdiğini unutmayın; Programı diskten yeniden yüklemek geri sayımı sıfırlar. Bu işe yarıyor, çünkü Apple] [(ve] [+, // e ve // ​​c) hiçbir bellek koruma sistemine sahip değil; program (ve kendi modifikasyonları) çıktıktan sonra bile hafızada kalacaktır, böylece o hafızayı başka bir şeyin üzerine yazana kadar hafızada çalıştırmaya devam edebilirsiniz.


Örnek çalışma

]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
*

açıklama

     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 byte versiyonun açıklaması

     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

Varyantlar

Sayı ERR0'a ulaştığında yazdırır ve bip sesi çıkarır

Normal - 15 bayt

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

Üzerine yazar CHRGET- 14 bayt

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

Başlamaz $9E- 13 bayt

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

Üzerine yazar CHRGETve başlatılmaz $9E- 12 bayt

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

Sayım 0'a ulaştığında donar

Normal - 12 bayt

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

Üzerine Yaz CHRGET- 11 byte

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

Başlamaz $9E- 10 bayt

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

Üzerine yazar CHRGETve başlatmaz $9E- 9 bayt

C6 B6 F0 FE A2 0B 4C 26 ED

Bunu anladığımdan emin değilim .. Bu, Python'da global bir değişkeni azaltan ve sadece kabukta çalıştırıldığında işe yarayan bir fonksiyona sahip olmakla aynı olmaz mı? Buna izin var mı? Demek istediğim, normalde bir programın belleği bir noktada bırakması, daha sonra tekrar yüklenmesi beklenmiyor mu?
redstarcoder

3
@ redstarcoder Hayır - Apple II'nin kelimenin tam anlamıyla bir bellek ayırma sistemi yok; herhangi bir şeyi RAM içerisinde herhangi bir yerde saklayabilirsiniz ve başka bir değere yazılana kadar herhangi bir program tarafından erişilebilir durumda kalır.
insert_name_here

@ inset_name_here, RAM'in herhangi bir yerinde erişilebilir olmasının herhangi bir şeyi nasıl değiştirdiğine emin değilim. Diğer programları güvenilir bir şekilde çalıştırabilir ve bu programı daha sonra da çalıştırabilir misiniz? Belki de buradaki kuralları tam olarak anlayacak kadar aşina değilim, o yüzden bırakacağım. Tam bir programın yeniden başlatmalar yoluyla devam etmesini ve genellikle yürütmeler arasında başka programlar yürütülürse genellikle iyi çalışmasını bekliyorum, ancak topluluğun tam bir programda ne gibi bir kural kullandığını bilmiyorum.
redstarcoder

1
@ redstarcoder genel fikir birliği, programın bir geliştirme bilgisayarında gerekli yazılımdan başka bir şey yapmadan ve aynı zamanda başka bir şey yapmadan yürütüldüğü yönündedir.
Tom Carpenter

1
6E $ yerine
koşarsanız

35

Linux'ta Perl, 17 bayt

Herhangi bir devleti sürdürmeyen ve kendi kaynak kodunu değiştirmeyen bir program yaratmanın ilginç olabileceğini düşündüm; Başka bir deyişle, aslında OS'ye sorarak ne sıklıkta çalıştırıldığını kontrol eder. "Programın ilk çalıştırılmasından önce depolama için kullanılan tüm tesislerin boş olduğu varsayılabilir." Sorusu, bu nedenle tamamen boş bir işletim sisteminden başlamak istiyoruz. Bu nedenle, bunu nasıl yapacağınızı tam olarak açıklayacağım, aksi halde programı test etmek zordur.

Programı çalıştırmak için hazırlanmanın iki yolu var. Her iki durumda da, amaç için minimal işletim sistemi bir kabuktan (sırayla Perl'i çalıştırmamızı sağlamak için) ve bu konuda mümkün olan en basit kabuğumdan (işletim sistemini işletim dışı kılan herhangi bir şeyi yapmaması için) hiçbir şey çalıştırmayacaktı. boş). /bin/dashsistem kurtarma için minimum bir kabuk olarak tasarlandığı için burada iyi bir seçimdir. Öyleyse, Linux'u hiçbir şey çalıştırmayacak şekilde başlatmamız gerekiyor dash. Bunu, bilgisayarı init=/bin/dashLinux komut satırında yeniden başlatarak ya da başka bir şeyden başlamayacak şekilde başlatabiliriz ya dashda (daha kolay bir şekilde) unshare -Urfp /bin/dashbir terminalde kullanarak bir Linux kabı oluşturarak ( unshareaslında boş bir işletim sistemi oluşturmaz , ancak simülasyonu gerçekleştiririz).bir; dikkat çekici bir şekilde, kabın içi kök dasholduğunu düşünüyor, tıpkı boş bir işletim sisteminde olduğu gibi, init olduğunu düşünüyor. Feragatname: Bunu henüz yalnızca metal içeride çıplak metal üzerinde test etmedim unshare, ancak teoride her iki yönde de çalışması gerekir.

Sonunda, bir kez bu kurulumu yaptıktan sonra, sadece PID'ye bakmak zorundayız; Boş bir sistemde olduğumuz için, init sistemi (burada kabuk) PID 1'e sahip olacak, böylece Perl'in yürütülmesi 2'den 12'ye kadar olan PID'lere sahip olacak. Yani programımız şöyle görünüyor:

say 12-$$||die

İşte örnek bir çalışma:

$ 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.
#

Hangi işletim sistemini kullanıyorsunuz? Ubuntu Linux 14.04'tayım ve unsharebayrakları desteklemiyor -Urfp.
isaacg

@ isaacg: Ubuntu 16.04. unshareoldukça yeni (aynı zamanda oldukça yeni olan bir işletim sistemi özelliğinin bir arayüzü) ve böcekler yalnızca geçen yıl ya da öylesine ütülenmiştir. 2 yıllık bir sürümü kullanıyorsanız, işlevselliği çok sınırlı olması şaşırtıcı değildir.

14

Bash + sed, 41 40 38 bayt

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

Çevrimiçi deneyin!


TIO bağlantısının üstbilgisi ve altbilgisi var.
Pavel,

2
Hayır, bunlar sadece programı 11 kez çalıştırmak.
Dennis,

Ben olsun sed: invalid option -- '/'. sed 4.2.2 (GNU sed)
shrx

@shrx Huh. Yerel olarak ve TIO'da aynı sed sürümüne sahibim ve bu hatayı göstermiyorlar.
Dennis,

9

Javascript, 42 bayt

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

Bu kemanla test edin - geri sayımı sıfırlamak için yerel depolama alanınızı temizlediğinizden emin olun.

Steenbergh, Lmis ve obarakon'a bir sürü bayt için teşekkürler!


y=localStorage;y.a=y.a||10;alert(y.a>0?y.a--:a)size bir bayt kaydedebilirsiniz.
Oliver

Daha sessionStoragekolay sıfırlama ile test etmek için kullanabilirsiniz (sadece taze bir sekme kullanın) ama tabii ki +2 bayt.
Kevin Reid

Üzgünüm, cevabınızı daha yeni gördüm, bitti, neredeyse aynı şeyi yaptım. İsterseniz, l=localStorage;l.l=-~l.l;alert(10-l.l||l)bir bayt kaydetmek için kullanabilirsiniz , benimkini silerim
C5H8NNaO4

@Mego Tabii ki :) console.logBurada bir şey görmüyorum , ama bunu da tercih ederim
C5H8NNaO4

1
@obarakon Yep ve Boolean kısa devre a, yerel depodaki değerin 0 olmadığını değerlendirmesini engeller.
Mego

8

C #, 197 160 159 125 bayt

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

Süt sayesinde 34 bayt kurtardı

Ve biçimlendirilmiş bir sürüm ( ReadKeyEklenen çıktıyı görüntüleyebilmeniz için):

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

Düşündüğümden daha uzun, muhtemelen golf oynamak için yer var.


2
File.Existsve File.Createyerine ReadAllTextve WriteAllText. Dosya adı olup olmadığını kontrol edin, her ikisini de dosya içeriğiyle değil. Ayrıca, namespace System.IOve ad alanını kaldırabilirsiniz System.Console.Write. 125 bayt:namespace System.IO{class P{static void Main(){var n=11;for(;File.Exists(""+--n););File.Create(""+n);Console.Write(n*n/n);}}}
süt

@milk Çok teşekkürler! Dosya adını ancak kullanmayı düşündüğüme inanamıyorum! Ve o isim alanı numarasını bilmiyordum, harika.
TheLethalCoder 17:16

8

Dyalog APL , 33 28 22/20? bayt

Bunun geçerli olup olmadığından emin değilim, çünkü (işlevsiz bir argümanla çağrılması gereken) bir işlevden oluşur. Ancak, tüm APL programları (tamamen işlevsel olan veya olmayan) aynı statüye sahiptir ve aslında bazı APL sürümleri geleneksel programlara sahip değildir, sadece işlevlere sahiptir. Tazminatta, isimlendirmek için iki bayt ekledim, ancak istenen etki için gerekli değil.

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

Bunun ∘←küresel olarak atanan gayri resmi bir tuhaflığa dayandığına dikkat edin .

6:: herhangi bir değer hatası üzerine

⊢cc dönüş

∘←10 küresel olarak 10'a ayarlanmıştır

şimdi

÷÷c iki kere ters çevrilmiş (sıfırda hata) döndür

∘← küresel olarak ayarlanmış

c-1bir az c

TryAPL çevrimiçi!


Kesinlikle geçerli 28 byte versiyon:

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

Eksikse c'yi 11'e ayarlayarak çalışır , sonra 1'i c'den çıkartarak , iki kere tersine çevirerek ( c -1 0 ise div-sıfır hatası verir ), c'ye atama ve yeni değeri çıkartarak çalışır.


Eski 33 bayt sürümü:

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










Her koşuda kendini yeniden tanımlayarak çalışır, ancak daha az takip eden bir yeni satırla. İki ters çevrilmiş kalan sayıyı (daha az iki) çıkarır, böylece yalnızca iki satır kaldığında (başlık ve gerçek kod) sıfır sıfıra neden olur.


1
Er ... neden bu kadar çok yeni hat var?
Kritixi Lithos,

4
@KritixiLithos Program her çalışma için bir daha az satır ile kendini yeniden tanımlıyor.
00’dan

7

Perl, 37 36 bayt

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

İlk değer, =~operatörün üzerine yazdığı gibi (0 basmış) -1 değerine ulaştığında kilitlenir .

Kullanmak sysopenyerine bir bayt kaydedildi open. Bu , önce atanmış STDOUTolan dosya modu ( 1, aka O_WRONLY) olarak dönüş değerini kullanarak yazdırmamı sağlar $~.

Örnek Kullanım

$ 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 bayt

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

Sonra yeni satır karakteri gerekiyor =finish.

dieile değiştirilebilir 1/0.

Açıklama:

Bundan sonra =finish( $=finish.lines) 10öğesinin çıkarılmasından sonra satırların bir listesini alır ve sonuç 0yazdırmıyorsa, aksi halde dies.

Yaptığı son şey ekleme modunda kendini açmak ve sonuna başka bir satır ekleyin.


Kalıcı olanlar için Perl 6. olmayanlar
Dennis

Tek bildiğim kadarıyla güncel Ideone neler olduğu olmadığına En azından @Dennis (run say $*PERL.compiler.version)
Brad Gilbert b2gills

1
2014.7 ... vay! 2016.11, 2016.7'den çok farklı mı? Eğer öyleyse, kaynaktan yapabilirim.
Dennis,

@Dennis Perl 6'nın resmi sürümü 2015-12-25'tir. 2015'in sonlarında The Great List Refactor (GLR) adlı büyük bir değişiklik oldu, bu yüzden 2014.7'de çalışmak için kod almak neredeyse imkansız. 2016'da olanların çoğu, performansla ilgili, ancak çok sayıda kesin koşul düzeltmesi yapılmış olmasına rağmen. Buradaki golf kodunun çoğu Rakudo'nun 2015.12 sürümünden sonra herhangi bir şey üzerinde çalışmalıdır. Yani v2016.07 iyi olduğunu düşünüyorum.
Brad Gilbert,

6

Python 2, 65 bayt

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

L3viathan'ın cevabından ilham aldı .

Eğer dosyayı gibi tek karakter ismi seçebilir eğer 60 bayt indirgenebilir xve daha sonra değiştirmek __file__ile 'x'. Bu durumda, yerine 75birlikte 70.


@ Flp.Tkc evet, fakat bu aynı bayt sayısı değil mi?
Alex Hall

oh, bu doğru: P
FlipTack

4

Jolf, 20 bayt

γ-@▲lqΈ?␡γ?γaγ0₯I₯C1

Burada dene! 0Yazdırıldığında oluşan hatalar . Kodu değiştirir. Gelecek açıklama.


Jolf'a pek aşina değilim, ama hemen çevrimiçi tercüman olarak işe görünmüyor.
Esolanging Fruit

1
@ Challenger5 Dil genellikle yalnızca firefox'ta çalışır.
Conor O'Brien,

4

Applesoft BASIC, 21 bayt (belirtilmiş)

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

Değiştirin <CTRL-F>ve <CTRL-H>değişmez sürümleri ile. Bunun sadece programı hafızada değiştirdiğini unutmayın; diskten yeniden yüklemek geri sayımı sıfırlar.


Örnek çalışma

]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

açıklama

PRINT 9 + 1ne istersen yapar. CALL 20666502 makine dili yordamını, peşinde olduğu 2066 numaralı hafıza konumunda arar END :. ENDprogramı durdurur, böylece makine dili yordamı (Applesoft tercümanına göre çöp) çalıştırılmaz.

Makine dili rutin basitçe azaltır 9in PRINT 9 + 1. demontaj:

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

Sayaç 0 değerine ulaştıktan sonra “azalır” /; Programı çalıştırmayı denemek sonra bir sözdizimi hatasına neden olur.


4

*> <> , 20 18 bayt

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

Bu aslında Linux üzerinde çalışıyor (ve \nsanırım adlandırılmış dosyaları destekleyen her neyse ). \nİlk çalıştırmada ve çıktılarda adlı bir dosya oluşturur 10. Bunun 0yerine çöktüğü yerler haricinde, her bir sonraki çalıştırmada bir daha az sayı çıkarmaya devam eder .

açıklama

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
Uygun olan *> <> IO ekler
Alfie Goodacre

4

PHP 57 bayt

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

gerçekten çarpmaz, ancak çarptığında (saymadan) çıkar 0. Bu yeterli mi?

İle koş -r.


4

C #, 156 bayt

@ TheLethalCoder'ın cevabını bir süreliğine cevapladım ve ifadeleri yeniden düzenleyerek ve int.parse () işlevini kaldırarak 3 bayt tasarruf ettim. Hala gelişim için oda, eminim.

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

Ungolfed:

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

Meta-soru: TheLethalCoder'ın çalışmasını cevabım için bir başlangıç ​​noktası olarak ele almak hack-y olabilir. Bunu cevabına yorum olarak eklemek daha iyi olur mu (temsilcisi olduğunda)? Onlarla rekabet etmeye çalışmıyorum, karşılıklı düzenlemede golf oynamak istiyorum.


İnsanlar genellikle diğerlerinin altında yorum yapılmasına yol açan yorumlarda
bulunurlar

Genellikle bunlar başkasının cevabı yorumuna iyileştirmeler ise gitmek ama farklı yeterince onlarınkine ise sonra kendi yanıt sonrası
TheLethalCoder

3

Powershell V2.0, 49 bayt

(İlk önce golf kodu, bayt hesaplamasıyla ilgili kuralları bulamadım. Bayt hesap makinesine çevrimiçi bir String kullandım)

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

Koşu:

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'ye Hoşgeldiniz! Bayt hesaplama kuralları, dilin kullandığı karakter kodlamasına bağlıdır. Powershell muhtemelen ASCII veya UTF-8 kodlamasını kullanır ve bu nedenle, burada olduğu gibi, yalnızca ASCII kodlarını içeren bir komut dosyası için her karakter 1 bayt alır
Luis Mendo

PPCG'ye Hoşgeldiniz! Mücadele yazarı başına, tüm bildirimler tam bir program olmalıdır, ki bu böyle değildir - aslında, aslında PowerShell'in bir REPL eşdeğerinde çalıştırılması gerekir.
AdmBorkBork,

Bunu bir .ps1 içine yazdıysam ve örneğin 10 defa crash-off.ps1 i çalıştırdıysam, bu tam bir program olarak sayılıyor mu?
Kieron Davies

@KieronDavies Evet, her seferinde kabuğu kapatıp tekrar açtıysanız, hala aynı sonucu elde etmeniz şartıyla. Öğelerin yürütme arasındaki kabukta "bellekte" tutulması, PowerShell'in "REPL ortamını" "tam program" ortamından tanımlayan şeydir.
AdmBorkBork

3

Java, 343 bayt

İlk golf denemem

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

ungolfed

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.*Tam nitelikli yapıcı adlarını kullanarak içe aktarıp kaçınarak 300 bayta indirebilir ve "print" in argümanlarını otomatik olarak dizileyeceği gerçeğini kullanarak 8 tane daha kesebilirsiniz: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,

Dosyaya "10" yazarak değil, sadece ?okuduğunuzda dosyanın varlığına göre işleci kullanarak 237 bayta indirebilirsin 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

Yapabileceğim en optimize: 220 bayt. İşte canavar: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

önerileriniz için
teşekkürler

3

SQLite, 142 137

Bu muhtemelen çok daha akıllıca yapılabilir. 141 Kod için 136 karakter:

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

Artı dosya için 1 xde sqlite3 x '…'.


1
Güzel! Daha önce böyle kullanılan SQLite görmemiştim. Sen "11 select" ile "değeri (11)" değiştirerek birkaç byte sıkmak ve "t seçin dk (n)" ile "t sınırı 1 den n seçmek" olabilir
Bence Joful

3

JavaScript, 74 bayt

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, (yorumlarda) tam bir programın gerekli olduğunu açıkladı.
Dennis,

1
@Dennis Gözden geçirilmiş gönderim tam program olarak niteleniyor mu?
Oliver

Ben yok biliyorum , ama ben öyle düşünmüyorum. Bir çağrı alertveya benzeri olmadan , sadece bir REPL parçacığı olduğunu söyleyebilirim .
Dennis,

2
Bana iyi görünüyor. (Telefonumdan test edemiyorum.)
Dennis,

3

Ruby, 94 87 84 61 59 bayt

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

Lütfen aşağıdaki önerileri bırakın.

Fikirler için @ ConorO'Brien @ teşekkürler (bazıları utanmadan onun cevabını kopardı).


puts i=>p i
Conor O'Brien,

Kullanım newve sizeyerine openve length.
Lee W,

2

Ruby, 52 + 1 = 53 bayt

Dosyanın adlandırıldığını varsayar a(+1 bayt).

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

Koşu

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>'

... isimleri varsayabilirsin?
dkudriavtsev

Son satırda 'echo >> # $ 0' yerine ($ backticks ile) $ 0 kullanabilirsiniz.
GB

@TR Hala varsayıldığından daha fazla bayt a(sadece +1).
wizzwizz4

a, 2 bayttır, $ 0 ise 2 bayttır, ancak whitepaces gerekmez.
GB

2

Python 2, 89 bayt

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

Açma fikrini beğendim, __file__bu yüzden cevabımda bunu kullandım.
Alex Hall,

@AlexHall Harika bir fikirlen
L3viathan

@ Flp.Tkc Onunla hiçbir karakter kaydetmeyeceğim. Hala değişkeni kullanmam gerekiyor s, çünkü okumalı, sonra aramalı, sonra yazmalıyım. Bu print x/x*xişe yarar, ancak bayt sayısını artırmaz.
L3viathan

2

TI-BASIC (TI-84 Plus) (15 bayt)

If not(Ans
11
Ans-1
AnsAns/Ans

Ans, ilk çalıştırmadan önce 0 (varsayılan değer) değerine eşit olmalıdır.

Yana AnsAns/Ansprogramının son hattıdır Ans 0 olmadıkça, 0 hata ile bir bölme meydana geldiği durumda, bu sistem çıkış olarak ve saklanır.


2

JavaScript, 41

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


@Mego Evet açıkçası, bunun nasıl olacağını bilemiyorum ... Bunu yazdığım azamanın yerine bir yerim vardı lve düşünmeden değiştirdim, çünkü daha eğlenceli göründüğünü düşündüm ... çok geç oldu ve otlak oldu , belirttiğiniz için teşekkürler.
C5H8NNaO4

1

GNU Smalltalk, 70, 68 bayt

"-S" bayrağı için 66 bayt kodu +2 bayt

DÜZENLEMELER

  • Gereksiz parantezler kaldırıldı, -2 bayt

golfed

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

Ölçek

>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)

Önemli

Varsayılan görüntüyü değiştirebilmek için gst komutunu root olarak çalıştırmanız veya -I ile kendi resminizi belirtmeniz gerekir .


1

PHP, 45 bayt

Dürüst olmak gerekirse, bu sayılır mı emin değilim.

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

Bir örneğe bağlantı gönderirdim, ancak bildiğim tüm çevrimiçi test ediciler session_start()kullanılmasına izin vermiyor .

Bu, diekomut çalıştırıldığında sayfayı 0'a kadar her yenilediğinizde saymaya devam edecektir .


0

QBIC , 70 bayt

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|

Dosyayı açar a.b(veya ilk çalıştırmada bulunmadığında oluşturur), kayıt 1'i okur e. Bu kayıt bulunamazsa, 10, yoksa 1 alt varsayalım e==0. Yaz geri eiçin a.b.

Dosya erişimi QBIC'e yerleşik değildir, bu temel olarak temel QBasic'e dayanır.


0

Toplu iş, 72 bayt

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

Uzantı dahil tam dosya adı kullanılarak çağrılması gerekiyor. Son satırda izleyen bir satırsonu olmamalıdır. -1Son satırın sonuna kadar yazarak çalışır, böylece her seferinde 1 daha az olarak değerlendirilir. goto gHata yok çünkü etiket yok :g.


0

R, 52 bayt

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

Temel olarak, ls()genel olarak depolanan tüm nesnelerin adlarını listelemek için kullanır . Global ortamın boş olduğunu ve "x"henüz mevcut olmadığını varsayarsak x=10, başka bir şey x!=0çıkarırsa 1hata döndüren eksik bir argüman çağırırsak oluşturun .


Sen kaldırarak bir bayt kaydedebilir !ve daha sonra ve başka argümanlar sırasını ve değiştirerek başka iki anahtarlama x>0için x. (Ayrıca, bayt sayısında eşit olmasına rağmen, exists("x")biraz daha "x"%in%ls()
düzgündür

Ah, şartnamedeki yorumları tekrar okuduğumda, tam bir program gerekli gibi görünüyor, bu da koşular arasında nesne kalıcılığına güvenemeyeceğiniz anlamına geliyor.
rturnbull

@rturnbull Bunun açıkça belirtildiği yeri bulamıyorum. Beni işaret edebilirsen cevabı sileceğim.
Billywob

Spesifikasyonda düzenlenmemiş olmasına rağmen burada bahsedilmiştir .
rturnbull

0

Windows Toplu İş, 61 bayt

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

0

JavaScript, 44 bayt

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)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.