Bir program tarafından kendisinden daha kısa (karakter olarak) yazdırılabilen en küçük pozitif taban 10 tamsayısı nedir?


179

Bence yukarıdaki soru açık, ama tam olarak:

  • İsteğe bağlı olarak tek bir yeni satır izleyen pozitif bir 10 tabanlı tam sayı yazdıran tam bir program (sadece bir işlev değil) yazın .

  • Nitelikli programlar, çıktısı programın kaynak kodundan daha uzun ( bayt cinsinden ), bayt cinsinden (program kaynak kodu için ASCII veya UTF-8 kodlaması varsayarak) ölçülen programlar olacaktır .

    Yani kod, sonuçtaki sayıdaki rakamlardan daha kısa olmalıdır.

  • Her koşulda önde gelen sıfırlara izin verilmez. Önde gelen sıfırları saymak sorunu önemsiz kılar; Baştaki sıfırları görmezden gelmek gereksiz yere soruyu zorlaştırıyor.

  • Kazanan program, tamsayıyı en küçük boyutta basan eleme programı olacak.

Afiş snippet'i


64
Hot Network Sorularında 1 Numara . İlk soru için fena değil ...
trichoplax

6
@Kslkgh Kesinlikle daha az, aksi halde soru, son değerlerini dolaylı olarak basan programlar için önemsizdir.
Arandur

6
1.0bir tamsayı?
Histocrat

23
UTF-8'e getirilen kısıtlama saçma ve zararlı. Bayt, kodlamadan bağımsız olarak bayttır. Şu anda karakter tabanlı olmayan (örneğin Minecraft, Piet, Klasörler) dilleri yasaklayan veya "gerçek" lerden daha uzun UTF-8 bayt sayımlarına sahip oldukları için kuralları değiştirmenizi şiddetle tavsiye ediyorum ( bu soruya göre geçerli ) bayt sayısı (örneğin APL, TI-BASIC, Cidden, Jöle).
lirtosiast

7
@ZachGates HNQ listesinin çalışma şekli bu değil. ;)
Martin Ender

Yanıtlar:


193

Retina , skor 1


Boş program girişteki boş regex'in eşleşme sayısını sayar (boş dizedir). Bu tam olarak 1 maç, bu yüzden yazdırır 1.

Çevrimiçi deneyin.


39
... KAZANANIZ VAR.
Arandur

9
Sadece btw, maç sayısının sonsuz olduğunu söyleyebilirim. Boş dize sınırsız sayıda tekrarlayabilir ve sonsuz şekilde eşleştirilebilir.
nicael,

50
@nicael Neyse ki, regex böyle değil. ;)
Martin Ender

8
@ MartinBüttner, regex motorunuza bağlıdır. Ben kesinlikle boş dizgiyi eşleştirmeye çalışırsan işe yarayacak sistemlerle karşılaştım.
Sparr

19
@LorenPechtel, bu kuralın, sadece boş programın çoğu dilde önemsiz bir çözüm olduğu sıradaki zorluklara uygulanır. Bence burası adil bir oyun, çünkü bu boş program aslında önemsiz bir anlambilimine sahip ve Retina, bu gibi zorluklardan dolayı bu davranışa sahip değil, ancak tüm tek satırlı programlar için davranışlarının tek tutarlı genellemesi.
Martin Ender

73

Pyth , 10

T

Pyth kullanmaya ilk girişimi. Soruyu netleştirdikten sonra, en küçük sayı 10 olacak gibi görünüyor. Pyth'te T harfi 10 rakamıyla başlar, bu nedenle 10kaynak kodun uzunluğundan daha büyük olan basılır . Sen edebilirsiniz burada deneyin .


97
Pyth'i

8
Eh, diye düşündüm bu bir süre görürdük en okunabilir Pyth programı olacaktır, ama bu etkileyici anlamak kolaydır.
Deusovi

2
Bu bir polgot, bu da 05AB1E'de çalışıyor. 05ab1e.tryitonline.net/#code=VA
Magic Octopus Urn

60

bc, 10

A

Neyse ki, bcson ifadenin sonucunu varsayılan olarak yazdırır. Aonaltılık basamak olarak yorumlanır, bu nedenle sonuçlanır 10.


1
Ancak, çözüm de dahil olmak üzere zaten en az 5 benzer cevap var A, çünkü birçok golf dili A'yı 10 olarak tanımlamaktadır.
nicael

45
@nicael Evet, bu doğru. Bu cevabın farklı olduğunu iddia ediyorum çünkü bcbir golf dili değil. Aslında bulabileceğiniz herhangi bir standart * nix sistemde varsayılan olarak bulunan Posix tanımlı bir dildir .
Dijital Travma,

47

Balık tutma, skor 7,958,661,109,946,400,884,391,936 1.208.925.819.614.629.174.706.176

Bu, en aza indirgeme mücadelesinde şimdiye kadarki en önemsiz görünen en yüksek puan mı? (% 84,8 oranında golf oynadığı halde)

v+CCCCCCCCCC
  `32`nSSSSP

açıklama

v              Sets the casting direction to down
 +             Increments the casting distance by 1
  CCCCCCCCCC   Casts the rod

`32`         Pushes a string "32" to the stack
    n        Converts the stack from a string to an integer
     SSSS    Repeated squaring of the stack
         P   Prints the stack

Numara 32^1625 basamaktan oluşur. Kod 24 bayttır. Önceki cevap oldu 6^32.


2
Gözüme bir yaş getirdim. Katkınız için teşekkürler.
Arandur

30
Muhtemelen hala Java yenecek ... Umarım.
Arcturus,

3
Şey, C # ...
LegionMammal978

Neden 6 ve 9 değil?
immibis

@ immibis Mücadelenin amacı puanı en aza indirmektir, bu yüzden sadece baytları minimize etmek değildir; 9'u koymak, gereksiz yere puanımı arttırırdı.
Arcturus

36

MATLAB, 1.000.000.000 (10 9 )

Ayrıca Octave ile çalışır

disp(1e9)

Asla eşanlamlıları yenmeyeceksin, ama sadece eğlence için, bu en küçük MATLAB / Octave'un yapabileceği, bu yüzden yine de göndereceğimi düşündüm.


18
Esolang cevapları geçerli olsa da, biraz sıkıcı. Öyle olmadığını görmekten memnun oldum!
Arandur

1
say 1e9Golf puanınızı arttırmak istiyorsanız perl biraz daha kısa. (Bu yaklaşımın çalıştığı küçük tamsayının yakınında olmamasına rağmen ...)
derobert

@derobert Doğru. 1e1, problemin ifadesini yerine getirir ve 10 puan verir (en düşük, daha iyi) (Bir karakterin 1 bayt olduğu varsayılır)
dberm22,

@ dberm22 10(2 karakter) 1e1(3 karakterden uzun) değil
SuperJedi224

@ SuperJedi224 Ahh, yazdırılan sayının büyüklüğünün, yazdırılan sayının basamağı sayısından değil, bayt sayısından büyük olması gerektiğinden okudum. Açıklama için teşekkürler.
dberm22,

29

TI-84 TEMEL, 120

5!

ᴇ2Aptal UTF-8 gereksinimi olmasaydı daha iyi puan olurdu. (Hesap makinesinin yerel kodlanmış kodlamasında yalnızca iki bayt, ancak UTF-8'de 4 ...)


Belki bir şeyleri özlüyorum, ancak "E2" dizesi UTF-8’de yalnızca iki bayt…
jbg

11
@ JasperBryant-Greene ve Eaynı karakter değildir. TI-BASIC'te bilimsel gösterimdir ve Edeğişkendir.
SuperJedi224

4
Teşekkürler :) Karakterin incelikle
küçüklükten

Daha 3!iyi skor olmaz mıydı ?
dberm22

1
@HiçbirisiNada Bu sefer soru, bir nedenden ötürü UTF8'de özellikle puan verdiğini söyledi.
SuperJedi224

26

C #, puan 10 ^ 72 10 ^ 70 10 ^ 64 10 ^ 63

class A{static void Main(){System.Console.Write($"1{0:D63}");}}

Bu 1.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000. Galiba denedim ...


1
Gerçekten çok etkileyici.
Arandur

4
Daha Write(new string('1',70))iyi olmaz mıydı ?
Lynn,

1
Bir dize yerine çift olarak yazabilirsiniz, 10 ^ 56'ya kadar kısaltır:class A{static void Main(){System.Console.Write(1e56);}}
goric

@ Goric Bu sadece çıktılar 1E+56.
LegionMammal978

23

Altıgen , 100100 puanı

Kod:

d!!@

Daha okunabilir bir biçimde:

  d !
 ! @ .
  . .

Char değeri d100'dür. Bu, char değerini iki kez basar ve sonra sona erer.

Çevrimiçi deneyin!


Şirin! Katkınız için teşekkürler.
Arandur

18
Daha okunabilir form? Gerçekten mi? xD
RK.

17

JavaScript, puan 100.000.000.000 (veya 1 * 10 11 )

alert(1e11)

Bu alarm kullanıyorsa olur. Konsol kullanıyorsanız 100 000 000 kat daha düşük puan alabilmenize rağmen:

1e3

Gördüğünüz gibi 1000 puan edin, ama konsolu kullanmanın sayıldığından emin değilim.


Neden saymayacağını bilmiyorum!
Arandur

6
@Arandur, “Önemli olduğunu sanmıyorum” olduğunu tahmin ediyorum, 1000'in daha düşük puanına işaret ediyor, çünkü bu, tam bir program olmak yerine konsolu bir REPL olarak kullanmayı gerektiriyor.
trichoplax,

@tri tam olarak, bir açıklama yaptı.
nicael,

11
Uyarı için +1, otomatik konsol çıkışına izin
vermem

17

PlatyPar , 59

#

#sayısal bir üs-60 kelimesini başlatır ve basamak bulunamadığından, olarak biter 59. Bu mutlu bir kaza olarak başladı, ancak [ab] bu hatayı başka bir cevapta kullandığım için , bunu sakladım.

Çevrimiçi deneyin !

İşte başka bir yaklaşım, herkesin ve büyükannelerinin bu meydan okuma için kullandıkları sıkıcı yoldan geçiyorum.

PlatyPar , 100000000 (9 basamak)

'18Md0+;

açıklama

'1        ## push "1" (a string) to the stack
  8Md  ;  ## repeat 8 times
     0+    ## add a 0
          ## [implicitly] print the result

Çevrimiçi deneyin !


16

Brainf ** k , 111111111111111111111111111111111111111 (~ 1e34)

Ve başka bir azaltma:

+++++++[>+++++++>+<<-]>>[<.....>-]

Bu ardışık 35'i 1 veya yaklaşık olarak 1e34 ​​verir.


Hala biraz daha küçük

++++++++[>++++++>+<<-]>+>+[<....>-]

1e35'ten yaklaşık% 11 daha büyük bir sayı olan 361'i verir.


Bu kodu kullanarak toplam çıktısını 100 kat azaltan bir kaç karakter attığı için @Martin Büttner'e teşekkürler (sonuç 1e36):

++++++[>++++++++>++<<-]>+.->[<...>-]

Eski kodum (1 + e38 verir):

++++++++[>++++++>++<<-]>+.->+++[<..>-]

Ben sıkıntıdan esolangs ile deneme yapıyordum. BF'de yapabileceğimin en iyisi bu. Acaba daha küçük yapmak mümkün mü?

Burada çevrimiçi deneyebilirsiniz .


Sıfırdan kısa bir cevap yazdım: link
Lynn

@Mauris etkileyici!
Tom Carpenter

16

C, 1000000000000000000000000000 (28 basamak)

main(){printf("1%027d",0);}

Benim C ++ cevabına benzer şekilde, #include <stdio.h> ( Olmadan yapılan eksik bildirim hakkındaki uyarıyı printfdikkate almayın.

Newline, format kullanarak 2 bayt daha ister 1%029d\n


14

Japt , 10 puan

A

Puanı gösterdiği gibi, 10 yazdırır.


Bu kod golf değildir; amaç en küçük sayı yazdırmak olduğunu puanınız 10'dur
pppery

@ppp "Sayı programdan daha uzun byte olmalı - kodun karakterlerinden daha fazla hanesi olmalı" - OP'ler yeni düzenlendi.
nicael

2
Yanlış anlamadın; Japt programı A10 yazdırırsa, o zaman bu 10 puan ile geçerli bir programdır.
Arandur

3
Woohoo, dilim <s> ilk </s> ikinci sırada! Retina glares
ETHproductions

4
Aşağı oy için herhangi bir sebep var mı?
nicael,



9

Labirent , 10.000.000 puan

1!!!!>@

Bunu bir büyüklük sırasına düşürmek mümkün olabilir, ancak şu anda hiçbir şey bulamıyorum.

İlk 1!!!!baskılar 1000. Ardından >kaynak kodunu

@1!!!!>

erken sonlandırmayı engeller. Sonra IP bir çıkmaz isabet eder ve geri döner. Şimdi !!!!dört tane daha sıfır yazdırır ve @programı sonlandırır.

Çevrimiçi deneyin.


9

Samau , 42

A

AYığın Yaşam Sorusu, Evren ve Her Şeye Cevabı yığına itiyor. Ardından yığının üst kısmı otomatik olarak yazdırılır.


Sanırım taahhüt mesajlarında bir sorun var: P
Doorknob

3
@Doorknob commit Nasıl taahhüt mesajları yazacağımı bilmiyorum, bu yüzden sadece rastgele emojiyi kullanıyorum.
alephalpha

5
Tamam, işte asıl soru: ne Qitiyor?
Cyoce

9

Brainfuck, 333333333333333333333333333 (25 üçler)

Bu "sıfırdan" yazılmıştır, bu yüzden ayrı bir cevap göndermenin uygun olmadığını düşünüyorum:

-[>+>+<<-----]>-[-->.<]

23 bayt uzunluğunda


Bir bf çözümü düşünüyordum, yalnızca sayı olarak çıktı veren herhangi bir yorumcu var mı?
Rohan Jhunjhunwala

@RohanJhunjhunwala bu, "3"25 kez 51 (ASCII kodu ) verir.
Seviye River St

@LevelRiverSt demek istediğim, ascii olarak girmeyen ve sadece tamsayı çıktısı alan bir bf yorumlayıcısı olabileceği, yani (-.) 255 çıktısı olacağıdır.
Rohan Jhunjhunwala

9

DC , 10000

4 karakter programı:

I4^f

5 basamak çıkış:

$ dc<<<'I4^f'
10000

3
+1. Evet, DC'de optimal olduğunu düşünüyorum. Alışılmadık şekilde bc daha kısadır .
Dijital Travma,

İyi iş 6d^pçıkardığımı sanıyordum (46656 ile), ama sen o ritmi aldın - aferin!
Toby Speight


8

C, 111111111111111111111111111111111111111 (35 olanlar)

main(c){while(c++<36)putchar(49);}

Belki daha kısa bir yol vardır. C de büyük sayıları basmanın basit bir yolunun olmaması onu zorlaştırıyor.



7

Java, 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 (81 olanlar) tarafından

interface A{static void main(String[]a){for(A i:new A[81])System.out.print(1);}}
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Burada "değişken" olan kısmın altını çizdim; her şey çalışan bir Java programı için kesinlikle gereklidir.

Muhtemelen bu Java ile uğraşmaktan daha kısa BigInteger.


Muhtemelen ... - belki de System.out.print(BigInteger.TEN.pow(10));- bu bir karakter daha mı az? Üzgünüm - yeterince yakın hiçbir yerde - ve .pow(10).pow(10)daha uzun.
OldCurmudgeon

Sen yerini alabilir interfaceile class.
LegionMammal978

2
Ama sonra mainolması gerekirdi public.
Lynn

7
for döngüsü için bunu yaparak 2 karakteri tıraş edebilirsiniz: (A a: new A [81] için)
Jack Ammo

@OldCurmudgeon Nedense .pow(100)işe yaramaz mı?
ETHProductions

7

Cubix , 100100

@'dOu

Cubix, 2 boyutlu, yığın tabanlı bir esolang'dır. Cubix, kaynak kodunun bir küpün dışına sarıldığı diğer 2D şeritlerden farklıdır.

Çevrimiçi test edin!

açıklama

Tercümanın yaptığı ilk şey, kodun uyacağı en küçük küpü bulmaktır. Bu durumda, kenar uzunluğu 1'dir. Daha sonra kod, .altı tarafın tümü doluncaya kadar no-ops ile doldurulur. İşlemden önce boşluklar kaldırıldı, bu nedenle bu kod yukarıdakilerle aynı:

  @
' d O u
  .

Şimdi kod çalıştırıldı. IP (talimat işaretçisi) en sol tarafta, doğuya işaret ederek başlar.

IP'nin karşılaştığı ilk karakter, bir 'sonraki baytı yığına iten; bu bayt dveya 100. Bundan sonra, Oüst öğeyi (100) bir tamsayı olarak çıkaran.

Sonra uonu sağa çeviren IP vuruşları , ileri hareket ettirir, ardından tekrar döner. Kuzeyi gösteren alt yüze geçer, sonra doğuya döner. Bu, Otekrar 100'e gönderilir ve ardından @programı sonlandırır.


6

MATL , 1000

1e3

Not: derleyici çalışmalarının en son GitHub taahhüdü Octave ve Matlab'da çalışır.

Bu sayede bilimsel gösterimde sayılar yorumlanır ve dolaylı olarak yazdırılır, böylece çıktı elde edilir.

1000



6

Python 2, 107918163081

print 69**6

Sen arasındaki boşluğu kaldırabilirsiniz printve 2.
Bakuriu

1
@Bakuriu Hayır, hayır
Blue

69**6sadece 107918163081.
Neil

2
Interstingly, bu da Perl'de çalışır.
Grimy

6

C ++, 1e46

#include <stdio.h>
main(){printf("1%046d",0);}

Newline, "1% 048d \ n" biçimini kullanarak 2 ek bayt daha ister


C ++ 'nın dönüş türünü atlamanıza izin verdiğini sanmıyorum main(). OTOH, bu iyi bir C cevap olurdu ...
Toby Speight


5

05AB1E , skor 10

kod

T

Açıklama:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
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.