Apa bilangan bulat basis 10 terkecil terkecil yang dapat dicetak oleh program yang lebih pendek (dalam karakter)?


179

Saya pikir pertanyaan seperti di atas sudah jelas, tetapi untuk berjaga-jaga:

  • Tulis program lengkap (bukan hanya fungsi) yang mencetak bilangan bulat basis 10 positif, secara opsional diikuti oleh satu baris baru.

  • Program yang memenuhi syarat adalah mereka yang outputnya lebih lama ( dalam byte ) daripada kode sumber program, diukur dalam byte (dengan asumsi pengkodean ASCII atau UTF-8 untuk kode sumber program).

    Yaitu kode harus lebih pendek dari jumlah digit dalam jumlah yang dihasilkan.

  • Nol utama tidak diizinkan dalam semua situasi. Menghitung angka nol di atas akan mengurangi masalah; mengabaikan nol di awal tidak perlu mempersulit pertanyaan.

  • Program yang menang akan menjadi program kualifikasi yang mencetak bilangan bulat dengan besaran terkecil.

Cuplikan papan peringkat


64
Nomor 1 pada Pertanyaan Jaringan Panas . Lumayan untuk pertanyaan pertama ...
trichoplax

6
@ Kslkgh Sangat kurang dari, jika tidak, pertanyaannya sepele untuk program yang secara implisit mencetak nilai terakhir mereka.
Arandur

6
Apakah 1.0bilangan bulat?
histokrat

23
Pembatasan terhadap UTF-8 adalah konyol dan merugikan. Bytes adalah byte, tidak masalah pengkodean. Saya sangat menyarankan Anda mengubah aturan, karena saat ini mereka melarang bahasa yang tidak berbasis karakter (misalnya Minecraft, Piet, Folder) atau memiliki jumlah byte UTF-8 byte yang lebih panjang daripada "asli" mereka (valid sesuai dengan pertanyaan ini ) jumlah byte (mis. APL, TI-BASIC, Seriously, Jelly).
lirtosiast

7
@ZachGates bukan itu cara kerja daftar HNQ. ;)
Martin Ender

Jawaban:


193

Retina , skor 1


Program kosong menghitung jumlah kecocokan regex kosong di input (yang merupakan string kosong). Persis sama dengan 1 pertandingan, jadi ia mencetak 1.

Cobalah online.


39
... KAMI MEMILIKI PEMENANG.
Arandur

9
Btw, saya akan mengatakan jumlah pertandingan tidak terbatas. String kosong dapat mengulangi jumlah kali yang tidak terbatas dan dicocokkan secara tak terbatas.
nicael

50
@nicael Untungnya, itu bukan cara regex bekerja. ;)
Martin Ender

8
@ MartinBüttner itu tergantung pada mesin regex Anda. Saya pasti menemukan sistem yang akan gagal jika Anda pernah mencoba mencocokkan string kosong.
Sparr

19
@LorenPechtel yang aturannya hanya berlaku untuk quine tantangan di mana program kosong sepele solusi di sebagian besar bahasa. Saya pikir ini permainan yang adil di sini, karena program kosong ini sebenarnya memiliki semantik non-sepele dan Retina tidak memiliki perilaku ini karena tantangan seperti ini tetapi karena itu satu-satunya generalisasi yang konsisten dari perilakunya untuk semua program lini tunggal.
Martin Ender

73

Pyth , 10

T

Upaya pertama menggunakan Pyth. Setelah pertanyaan diklarifikasi, tampaknya 10 akan menjadi angka terkecil. Dalam Pyth huruf T dimulai sebagai angka 10, jadi ini hanya mencetak 10yang lebih besar dari panjang kode sumber. Anda bisa mencobanya di sini .


97
Saya suka bagaimana upaya pertama Anda menggunakan Pyth hanyalah huruf T.
djechlin

8
Yah, saya pikir ini akan menjadi program Pyth yang paling mudah dibaca yang saya lihat untuk sementara waktu, tetapi ini mengesankan mudah dimengerti.
Deusovi

2
Ini adalah polygot, ini bekerja di 05AB1E juga. 05ab1e.tryitonline.net/#code=VA
Magic Octopus Mm

60

bc, 10

A

Untungnya, bcmencetak hasil dari ekspresi terakhir secara default. Aditafsirkan sebagai digit hex, sehingga menghasilkan 10.


1
Tapi sudah ada (setidaknya) 5 jawaban yang sama, termasuk solusinya A, karena banyak bahasa golf mendefinisikan A sebagai 10.
nicael

45
@nicael Ya, itu benar. Saya mengklaim jawaban ini berbeda karena bcbukan bahasa golf. Ini sebenarnya adalah bahasa yang didefinisikan dengan Posix yang tersedia secara default pada hampir semua sistem * nix standar yang dapat Anda temukan.
Trauma Digital

47

Memancing, skor 7.958.661.109.946.400.884.391.936 1.208.925.819.614.629.174.706.176

Apakah ini skor non-sepele tertinggi yang pernah ada dalam tantangan minimisasi? (Meskipun telah golf sebesar 84,8%)

v+CCCCCCCCCC
  `32`nSSSSP

Penjelasan

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

Jumlahnya 32^16dan memiliki 25 digit. Panjang kode 24 byte. Jawaban sebelumnya adalah 6^32.


2
Membawa air mata ke mataku. Terima kasih atas kontribusi anda.
Arandur

30
Mungkin masih akan mengalahkan Java ... Semoga.
Arcturus

3
Yah, itu mengalahkan C # ...
LegionMammal978

Kenapa 6 dan bukan 9?
immibis

@immibis Tujuan dari tantangan ini adalah untuk meminimalkan skor, jadi bukan hanya meminimalkan byte; menempatkan 9 sebelum akan meningkatkan skor saya tidak perlu.
Arcturus

36

MATLAB, 1.000.000.000 (10 9 )

Juga bekerja dengan Oktaf

disp(1e9)

Tidak akan pernah mengalahkan esolang, tetapi hanya untuk bersenang-senang, ini adalah MATLAB / Oktaf terkecil yang dapat dilakukan, jadi saya pikir saya akan mempostingnya.


18
Jawaban esolang, meskipun valid, agak membosankan. Senang melihat yang tidak!
Arandur

1
perl say 1e9sedikit lebih pendek, jika Anda ingin meningkatkan skor golf Anda. (Meskipun itu jauh dari bilangan bulat kecil tempat pendekatan ini bekerja ...)
derobert

@derobert Benar. 1e1 akan memenuhi pernyataan masalah dan memberikan skor 10 (semakin rendah, semakin baik) (Dengan asumsi char adalah 1 byte)
dberm22

@ dberm22 10(2 karakter) tidak lebih dari 1e1(3 karakter)
SuperJedi224

@ SuperJedi224 Ahh, saya membacanya karena besarnya nomor yang dicetak harus lebih besar dari bytecount, bukan jumlah digit pada nomor yang dicetak. Terimakasih atas klarifikasinya.
dberm22

29

TI-84 BASIC, 120

5!

ᴇ2akan skor lebih baik jika bukan karena persyaratan UTF-8 konyol. (Ini hanya dua byte dalam pengkodean tokenized asli kalkulator, tetapi 4 byte di UTF-8 ...)


Mungkin saya kehilangan sesuatu, tetapi string "E2" hanya dua byte di UTF-8 ...
jbg

11
@ JasperBryant-Greene dan Ebukan karakter yang sama. Dalam TI-BASIC, adalah notasi ilmiah dan Emerupakan variabel.
SuperJedi224

4
Terima kasih :) Saya seharusnya memperhatikan bahwa karakternya lebih kecil dari rata-rata ...
jbg

Bukankah 3!skor akan lebih baik?
dberm22

1
@NobodyNada Kali ini pertanyaannya secara khusus mengatakan untuk skor di UTF8, untuk beberapa alasan.
SuperJedi224

26

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

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

Itu 1.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000. Saya kira saya mencoba ...


1
Sangat menakjubkan.
Arandur

4
Tidak Write(new string('1',70))akan lebih baik?
Lynn

1
Anda dapat menuliskannya sebagai dobel daripada dawai, yang lebih pendek menjadi 10 ^ 56:class A{static void Main(){System.Console.Write(1e56);}}
goric

@icic Itu baru keluaran 1E+56.
LegionMammal978

23

Hexagony , skor 100100

Kode:

d!!@

Dalam bentuk yang lebih mudah dibaca:

  d !
 ! @ .
  . .

Nilai char dadalah 100. Ini hanya akan mencetak nilai char dua kali dan berakhir setelahnya.

Cobalah online!


Imut! Terima kasih atas kontribusi anda.
Arandur

18
Bentuk yang lebih mudah dibaca? Benarkah? xD
RK.

17

JavaScript, skor 100.000.000.000 (atau 1 * 10 11 )

alert(1e11)

Ini jika menggunakan lansiran. Meskipun Anda bisa mendapatkan skor 100.000 kali lebih rendah jika menggunakan konsol:

1e3

Skor 1000 seperti yang Anda lihat, saya tidak yakin itu dihitung menggunakan konsol sekalipun.


Saya tidak tahu mengapa itu tidak masuk hitungan!
Arandur

6
@Arandur Saya menduga "Saya tidak yakin itu diperhitungkan" mengacu pada skor lebih rendah dari 1000, karena itu mengharuskan menggunakan konsol sebagai REPL, daripada menjadi program penuh.
trichoplax

@tri tepatnya, membuat klarifikasi.
nicael

11
+1 untuk lansiran, saya tidak akan mengizinkan keluaran konsol otomatis
edc65

17

PlatyPar , 59

#

#memulai basis numerik-60 literal, dan karena tidak ada digit ditemukan, akhirnya menjadi 59. Ini dimulai sebagai kecelakaan yang membahagiakan, tetapi karena saya sudah [ab] menggunakan bug ini di jawaban lain , saya menyimpannya.

Cobalah online !

Inilah pendekatan lain, saya mengambil cara membosankan yang digunakan semua orang dan nenek mereka untuk tantangan ini.

PlatyPar , 100000000 (9 digit)

'18Md0+;

Penjelasan

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

Cobalah online !


16

Brainf ** k , 11111111111111111111111111111111111 (~ 1e34)

Dan pengurangan lainnya:

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

Yang memberi 35 berturut-turut 1, atau sekitar 1e34.


Masih sedikit lebih kecil

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

Memberikan 36 1 yang merupakan angka sekitar 11% lebih besar dari 1e35.


Terima kasih kepada @Martin Büttner karena merobohkan beberapa karakter mengurangi total output dengan faktor 100 dengan kode ini (menghasilkan 1e36):

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

Kode lama saya (menghasilkan 1 + e38):

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

Saya telah bereksperimen dengan esolang karena bosan. Ini adalah yang terbaik yang bisa saya lakukan di BF. Saya bertanya-tanya apakah mungkin membuatnya lebih kecil?

Anda dapat mencobanya online di sini .


Saya menulis jawaban yang lebih pendek, dari awal: tautan
Lynn

@Mauris mengesankan!
Tom Carpenter

16

C, 1000000000000000000000000000 (28 digit)

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

Mirip dengan jawaban C ++ saya, tanpa #include <stdio.h> (Abaikan peringatan tentang hilangnya deklarasi printf. Terima kasih @Dennis)

Newline akan membutuhkan tambahan 2 byte, menggunakan format 1%029d\n


14

Japt , skor 10

A

Seperti yang menunjukkan skor, cetak 10.


Ini bukan kode golf, tujuannya adalah untuk mencetak angka terkecil, skor Anda adalah 10.
pppery

@ppp "Jumlahnya harus lebih panjang dalam byte daripada program - memiliki lebih banyak digit daripada kode yang memiliki karakter" - OP baru saja diedit.
nicael

2
Anda belum salah paham; jika program Japt Amencetak 10, maka ini adalah program yang valid dengan skor 10.
Arandur

3
Woohoo, bahasa saya terikat untuk <s> pertama </s> tempat kedua! melotot ke Retina
ETHproduk

4
Ada alasan untuk downvote?
nicael



9

Labyrinth , skor 10.000.000

1!!!!>@

Mungkin saja untuk menurunkan ini dengan satu urutan besarnya, tetapi saya tidak dapat menemukan apa pun sekarang.

1!!!!Cetakan pertama 1000. Kemudian >menggeser kode sumber ke

@1!!!!>

yang menghindari pemutusan dini. Kemudian IP menemui jalan buntu dan berbalik. Sekarang !!!!mencetak empat nol lagi dan @mengakhiri program.

Cobalah online.


9

Samau , 42

A

Amendorong Jawaban atas Pertanyaan Pokok Kehidupan, Semesta, dan Segalanya ke tumpukan. Kemudian bagian atas tumpukan dicetak secara otomatis.


Saya pikir ada sesuatu yang salah dengan pesan komit Anda: P
Doorknob

3
@Doorknob 冰 Saya tidak tahu cara menulis pesan komit, jadi saya hanya menggunakan emoji acak.
alephalpha

5
Ok, inilah pertanyaan sebenarnya: apa yang Qmendorong?
Cyoce

9

Brainfuck, 3333333333333333333333333 (25 bertiga)

Ini ditulis "dari awal" jadi saya pikir tidak apa-apa untuk mengirim jawaban yang terpisah:

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

Panjang 23 byte.


Saya sedang mempertimbangkan solusi bf, apakah ada penerjemah saat ini yang hanya menampilkan angka?
Rohan Jhunjhunwala

@RohanJhunjhunwala ini menghasilkan 51 (kode ASCII untuk "3") 25 kali.
Level River St

@LevelRiverSt apa yang saya katakan adalah bahwa mungkin ada penerjemah bf yang tidak memasukkan ascii dan hanya melakukan keluaran integer, dengan demikian (-.) Akan menampilkan 255.
Rohan Jhunjhunwala

9

DC , 10000

Program 4 karakter:

I4^f

Output 5 digit:

$ dc<<<'I4^f'
10000

3
+1. Yap, saya pikir itu optimal di dc. Biasanya bc lebih pendek .
Trauma Digital

Saya pikir saya melakukannya dengan baik 6d^p(menghasilkan 46656), tetapi Anda telah mengalahkan itu - bagus!
Toby Speight


8

C, 11111111111111111111111111111111111 (35 orang)

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

Mungkin ada cara yang lebih pendek. Kurangnya cara sederhana untuk mencetak angka besar dalam C membuatnya sulit.



7

Java, 111111111111111111111111111111111111111111111111111111111111111111111111111111111 (81 orang)

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

Saya telah menggarisbawahi bagian yang sebenarnya "variabel" di sini; semua yang lain mutlak diperlukan untuk program Java yang berfungsi.

Agaknya ini lebih pendek dari mucking sekitar dengan Jawa BigInteger.


Agaknya ... - mungkin System.out.print(BigInteger.TEN.pow(10));- apakah satu karakter itu kurang? Maaf - tidak ada yang mendekati cukup besar - dan .pow(10).pow(10)lebih panjang.
OldCurmudgeon

Anda bisa menggantinya interfacedengan class.
LegionMammal978

2
Tetapi kemudian mainperlu public.
Lynn

7
Anda dapat mengurangi 2 karakter dengan melakukan ini untuk for the loop: for (A a: new A [81])
Jack Ammo

@OldCurmudgeon Tidak akan .pow(100)bekerja karena suatu alasan?
ETHproduk

7

Cubix , 100100

@'dOu

Cubix adalah esolang 2 dimensi, berbasis tumpukan. Cubix berbeda dari langs 2D lain dalam hal kode sumber dililitkan di luar kubus.

Uji secara online!

Penjelasan

Hal pertama yang dilakukan penerjemah adalah menemukan kubus terkecil yang sesuai dengan kode tersebut. Dalam hal ini, panjang tepi adalah 1. Kemudian kode diisi dengan no-ops .hingga keenam sisi terisi. Spasi dihapus sebelum diproses, jadi kode ini identik dengan yang di atas:

  @
' d O u
  .

Sekarang kodenya dijalankan. IP (penunjuk instruksi) dimulai pada wajah paling kiri, menunjuk ke timur.

Karakter pertama yang ditemui IP adalah ', yang mendorong byte berikutnya ke stack; byte ini adalah d, atau 100. Berikutnya adalah O, yang menampilkan item teratas (100) sebagai integer.

Kemudian IP hits u, yang mengubahnya ke kanan, bergerak maju, lalu balikkan lagi. Beralih ke wajah bawah yang menunjuk ke utara, lalu berputar ke timur. Ini membungkusnya Olagi, menghasilkan 100, lalu sampai @yang mengakhiri program.


6

MATL , 1000

1e3

Catatan: Komit GitHub terbaru dari kompiler berfungsi pada Oktaf dan juga Matlab.

Ini menafsirkan angka dalam notasi ilmiah, dan secara implisit mencetaknya, sehingga menghasilkan output

1000



6

Python 2, 107918163081

print 69**6

Anda dapat menghapus ruang di antara printdan 2.
Bakuriu

1
@ Bakuriu Tidak, kamu tidak bisa
Biru

69**6hanya 107918163081.
Neil

2
Cukup menarik, ini juga bekerja di Perl.
Grimy

6

C ++, 1e46

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

Newline akan membutuhkan tambahan 2 byte, menggunakan format "1% 048d \ n"


Saya tidak berpikir C ++ memungkinkan Anda untuk menghilangkan jenis pengembalian main(). OTOH, ini akan menjadi jawaban C yang bagus ...
Toby Speight


5

05AB1E , skor 10

Kode

T

Penjelasan:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.