Số nguyên cơ bản 10 nhỏ nhất có thể được in bởi một chương trình ngắn hơn (bằng ký tự) so với chính nó là gì?


179

Tôi nghĩ rằng câu hỏi như trên là rõ ràng, nhưng chỉ trong trường hợp:

  • Viết một chương trình đầy đủ (không chỉ là một hàm) in ra một số nguyên 10 dương, tùy ý theo sau là một dòng mới.

  • Các chương trình đủ điều kiện sẽ là những chương trình có đầu ra dài hơn (tính bằng byte ) so với mã nguồn của chương trình, được đo bằng byte (giả sử mã hóa ASCII hoặc UTF-8 cho mã nguồn chương trình).

    Tức là mã phải ngắn hơn số chữ số trong số kết quả.

  • Số không hàng đầu không được phép trong mọi trường hợp. Đếm số 0 hàng đầu tầm thường hóa vấn đề; bỏ qua các số 0 hàng đầu không cần thiết làm phức tạp câu hỏi.

  • Chương trình chiến thắng sẽ là chương trình đủ điều kiện in số nguyên với cường độ nhỏ nhất.

Đoạn trích


64
Số 1 trong các câu hỏi về mạng nóng . Không tệ cho câu hỏi đầu tiên ...
trichoplax

6
@Kslkgh Hoàn toàn ít hơn, nếu không, câu hỏi là không quan trọng đối với các chương trình in ngầm giá trị cuối cùng của chúng.
Arandur

6
1.0một số nguyên?
lịch sử

23
Hạn chế đối với UTF-8 là vô lý và bất lợi. Byte là byte, không có vấn đề mã hóa. Tôi thực sự khuyên bạn nên thay đổi các quy tắc, vì hiện tại chúng không cho phép các ngôn ngữ không dựa trên ký tự (ví dụ Minecraft, Piet, Folders) hoặc có số byte UTF-8 dài hơn "thực" (hợp lệ theo câu hỏi này ) số byte (ví dụ: APL, TI-BASIC, Nghiêm túc, Jelly).
lirtosiast

7
@ZachGates đó không phải là cách danh sách HNQ hoạt động. ;)
Martin Ender

Câu trả lời:


193

Võng mạc , điểm 1


Chương trình trống đếm số lượng kết quả khớp của biểu thức chính trống trong đầu vào (là chuỗi trống). Đó chính xác là 1 trận đấu, vì vậy nó được in 1.

Hãy thử trực tuyến.


39
... CHÚNG TA CÓ MỘT NGƯỜI CHIẾN THẮNG.
Arandur

9
Chỉ cần btw, tôi muốn nói số lượng trận đấu là vô hạn. Chuỗi rỗng có thể lặp lại số lần không giới hạn và được khớp vô hạn.
nicael

50
@nicael May mắn thay, đó không phải là cách regex hoạt động. ;)
Martin Ender

8
@ MartinBüttner phụ thuộc vào công cụ regex của bạn. Tôi chắc chắn đã gặp phải các hệ thống sẽ tắt nếu bạn cố gắng khớp chuỗi trống.
Sparr

19
@LorenPechtel quy tắc đó chỉ áp dụng cho các thách thức trong đó chương trình trống là một giải pháp tầm thường trong hầu hết các ngôn ngữ. Tôi nghĩ đây là trò chơi công bằng ở đây, vì chương trình trống này thực sự có ngữ nghĩa không tầm thường và Retina không có hành vi này vì những thách thức như thế này nhưng vì đó là sự khái quát nhất quán duy nhất về hành vi của nó cho tất cả các chương trình một dòng.
Martin Ender

73

Bình thường , 10

T

Nỗ lực đầu tiên trong việc sử dụng Pyth. Có câu hỏi được làm rõ, có vẻ như 10 sẽ là con số nhỏ nhất. Trong Pyth, chữ T bắt đầu là số 10, do đó, chữ này chỉ đơn giản là in 10lớn hơn độ dài của mã nguồn. Bạn có thể thử nó ở đây .


97
Tôi thích cách mà nỗ lực đầu tiên của bạn khi sử dụng Pyth chỉ là chữ T.
djechlin

8
Chà, tôi nghĩ đây sẽ là chương trình Pyth dễ đọc nhất mà tôi từng thấy, nhưng điều này rất dễ hiểu.
Deusovi

2
Đây là một polygot, điều này cũng hoạt động trong 05AB1E. 05ab1e.tryitonline.net/#code=VA
Bạch tuộc ma thuật Urn

60

bc, 10

A

May mắn thay, bcin kết quả của biểu thức cuối cùng theo mặc định. Ađược hiểu là một chữ số hex, do đó, kết quả là 10.


1
Nhưng có đã là (ít nhất) 5 câu trả lời tương tự, trong đó có giải pháp với A, bởi vì nhiều ngôn ngữ chơi golf được xác định A như 10
nicael

45
@nicael Vâng, đó là sự thật. Tôi khẳng định câu trả lời này là khác nhau vì bckhông phải là ngôn ngữ chơi gôn. Trên thực tế, đây là ngôn ngữ được xác định theo Posix có sẵn trên bất kỳ hệ thống * nix tiêu chuẩn nào bạn có thể tìm thấy.
Chấn thương kỹ thuật số

47

Câu cá, điểm 7.958,661,109,946,400,884,391,936 1,208,925,819,614,629,174,706,176

Đây có phải là điểm số không tầm thường cao nhất từng có trong một thử thách giảm thiểu? (Mặc dù nó đã được đánh golf bằng 84,8%)

v+CCCCCCCCCC
  `32`nSSSSP

Giải trình

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

Số là 32^16và có 25 chữ số. Mã này dài 24 byte. Câu trả lời trước đó là 6^32.


2
Mang lại một giọt nước mắt cho tôi. Cảm ơn sự đóng góp của bạn.
Arandur

30
Nó có thể vẫn sẽ đánh bại Java ... Hy vọng.
Arcturus

3
Chà, nó đánh bại C # ...
LegionMammal978

Tại sao 6 mà không phải 9?
Immibis

@immibis Mục tiêu của thử thách là tối thiểu hóa điểm số, vì vậy nó không chỉ giảm thiểu byte; đặt 9 trước sẽ tăng điểm của tôi một cách không cần thiết.
Arcturus

36

MATLAB, 1.000.000.000 (10 9 )

Cũng hoạt động với Octave

disp(1e9)

Sẽ không bao giờ đánh bại các esolang, nhưng chỉ để cho vui, đây là MATLAB / Octave nhỏ nhất sẽ có thể làm được, vì vậy tôi nghĩ rằng tôi sẽ đăng nó.


18
Các câu trả lời esolang, trong khi hợp lệ, là hơi nhàm chán. Vui mừng khi thấy một trong đó không phải là!
Arandur

1
perl say 1e9ngắn hơn một chút, nếu bạn muốn cải thiện điểm số golf của bạn. (Mặc dù không có nơi nào gần số nguyên nhỏ hơn mà cách tiếp cận này hoạt động ...)
derobert

@derobert Đúng. 1e1 sẽ thỏa mãn tuyên bố vấn đề và cho điểm 10 (càng thấp, càng tốt) (Giả sử char là 1 byte)
dberm22

@ dberm22 10(2 ký tự) không dài hơn 1e1(3 ký tự)
SuperJedi224

@ SuperJedi224 Ahh, tôi đọc nó vì độ lớn của số in phải lớn hơn số byte, không phải số chữ số trong số được in. Cảm ơn bạn đã làm rõ.
dberm22

29

TI-84 CƠ BẢN, 120

5!

ᴇ2sẽ ghi điểm tốt hơn nếu không yêu cầu UTF-8 ngớ ngẩn. (Chỉ có hai byte trong mã hóa mã thông báo gốc của máy tính, nhưng đó là 4 byte trong UTF-8 ...)


Có thể tôi đang thiếu một cái gì đó, nhưng chuỗi "E2" chỉ có hai byte trong UTF-8
99

11
@ JasperBryant-Greene Ekhông phải là cùng một nhân vật. Trong TI-BASIC, là ký hiệu khoa học và Elà một biến.
SuperJedi224

4
Cảm ơn :) Tôi đã nhận thấy rằng nhân vật này nhỏ hơn một chút so với chiều cao đầy đủ
jbg

Sẽ không 3!ghi điểm tốt hơn?
dberm22

1
@NobodyNada Lần này, câu hỏi được cho là đặc biệt ghi điểm trong UTF8, vì một số lý do.
SuperJedi224

26

C #, điểm 10 ^ 72 10 ^ 70 10 ^ 64 10 ^ 63

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

Đó là 1.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000. Tôi đoán rằng tôi đã cố gắng ...


1
Tuyệt vời, thực sự.
Arandur

4
Sẽ không Write(new string('1',70))tốt hơn sao?
Lynn

1
Bạn có thể viết nó thành một chuỗi thay vì một chuỗi, rút ​​ngắn nó xuống còn 10 ^ 56:class A{static void Main(){System.Console.Write(1e56);}}
goric

@goric Đó chỉ là đầu ra 1E+56.
LegionMammal978

23

Lục giác , điểm 100100

Mã số:

d!!@

Ở dạng dễ đọc hơn:

  d !
 ! @ .
  . .

Giá trị char dlà 100. Điều này chỉ đơn giản là in giá trị char hai lần và chấm dứt sau.

Hãy thử trực tuyến!


Dễ thương! Cảm ơn sự đóng góp của bạn.
Arandur

18
Hình thức dễ đọc hơn? Có thật không? xD
RK.

17

JavaScript, điểm 100.000.000 (hoặc 1 * 10 11 )

alert(1e11)

Đây là nếu sử dụng cảnh báo. Mặc dù bạn có thể nhận được số điểm ít hơn 100 000 000 lần nếu sử dụng bảng điều khiển:

1e3

Điểm 1000 như bạn có thể thấy, tôi không chắc chắn nó được tính bằng cách sử dụng bảng điều khiển.


Tôi không biết tại sao nó sẽ không được tính!
Arandur

6
@Arandur Tôi đoán "Tôi không chắc nó đếm" đề cập đến số điểm thấp hơn 1000, vì điều đó đòi hỏi phải sử dụng bảng điều khiển như một REPL, thay vì là một chương trình đầy đủ.
trichoplax

@tri chính xác, đã làm rõ.
nicael

11
+1 để cảnh báo, tôi sẽ không cho phép đầu ra giao diện điều khiển tự động
edc65

17

Thú mỏ vịt , 59

#

#bắt đầu một số cơ sở - 60 chữ và vì không tìm thấy chữ số nào, nên nó kết thúc là 59. Điều này bắt đầu như một tai nạn hạnh phúc, nhưng vì tôi đã [ab] sử dụng lỗi này trong một câu trả lời khác , tôi đã giữ nó.

Hãy thử trực tuyến !

Đây là một cách tiếp cận khác, tôi thực hiện theo cách nhàm chán mà mọi người và bà của họ đã sử dụng cho thử thách này.

PlatyPar , 100000000 (9 chữ số)

'18Md0+;

Giải trình

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

Hãy thử trực tuyến !


16

Brainf ** k , 111111111111111111111111111111111111 (~ 1e34)

Và giảm khác:

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

Cung cấp 35 liên tiếp 1, hoặc khoảng 1e34.


Vẫn nhỏ hơn một chút

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

Cung cấp 36 1 là một con số lớn hơn khoảng 11% so với 1e35.


Cảm ơn @Martin Büttner vì đã loại bỏ một vài ký tự làm giảm tổng sản lượng xuống 100 lần với mã này (mang lại 1e36):

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

Mã cũ của tôi (mang lại 1 + e38):

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

Tôi đã thử nghiệm với esolang vì chán. Đây là điều tốt nhất tôi có thể làm trong BF. Tôi tự hỏi nếu nó có thể làm cho nó nhỏ hơn?

Bạn có thể thử nó trực tuyến ở đây .


Tôi đã viết một câu trả lời ngắn hơn, từ đầu: link
Lynn

@Mauris ấn tượng!
Tom Carpenter

16

C, 1000000000000000000000000000 (28 chữ số)

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

Tương tự như câu trả lời C ++ của tôi, không có #include <stdio.h> (Bỏ qua cảnh báo về việc khai báo bị thiếu printf. Cảm ơn @Dennis)

Dòng mới sẽ yêu cầu thêm 2 byte, sử dụng định dạng 1%029d\n


14

Japt , điểm 10

A

Như cho thấy điểm số, in 10.


Đây không phải là mã golf, mục tiêu là in số nhỏ nhất, điểm của bạn là 10.
pppery

@ppp "Số phải dài hơn byte so với chương trình - có nhiều chữ số hơn mã có ký tự" - OP vừa được chỉnh sửa.
nicael

2
Bạn đã không hiểu lầm; nếu chương trình Japt Ain 10, thì đây là chương trình hợp lệ với số điểm 10.
Arandur

3
Woohoo, ngôn ngữ của tôi được gắn với vị trí thứ hai <s> thứ nhất </ s>! trừng mắt tại Retina
ETHproductions

4
Bất kỳ lý do cho downvote?
nicael


10

PHP, điểm 10.000.000

<?=1e7;

Điều này in 10000000 như có thể được nhìn thấy ở đó .


2
Vì OP yêu cầu số nguyên nhỏ nhất, tại sao bạn chọn số mũ là bảy? Nó có in mà không có dấu phẩy không?
WGroleau

@WGroleau nó không in mà không có dấu phẩy, justachat.freevar.com/test.php
nicael

9

Mê cung , điểm 10.000.000

1!!!!>@

Có thể giảm thứ này xuống một bậc, nhưng tôi không thể tìm thấy bất cứ thứ gì ngay bây giờ.

Những 1!!!!bản in đầu tiên 1000. Sau đó >chuyển mã nguồn sang

@1!!!!>

mà tránh chấm dứt sớm. Sau đó, IP rơi vào ngõ cụt và quay lại. Bây giờ !!!!in thêm bốn số không và @kết thúc chương trình.

Hãy thử trực tuyến.


9

Samau , 42

A

Ađẩy câu trả lời cho câu hỏi cuối cùng của cuộc sống, vũ trụ và mọi thứ lên chồng. Sau đó, đầu ngăn xếp được in tự động.


Tôi nghĩ có gì đó không đúng với các thông điệp cam kết của bạn: P
Doorknob

3
@Doorknob Tôi không biết cách viết thông điệp cam kết, vì vậy tôi chỉ sử dụng biểu tượng cảm xúc ngẫu nhiên.
alephalpha

5
Ok, đây là câu hỏi thực sự: Qđẩy cái gì?
Cyoce

9

Brainfuck, 3333333333333333333333333 (25 threes)

Điều này được viết "từ đầu" vì vậy tôi nghĩ sẽ ổn khi đăng một câu trả lời riêng:

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

Dài 23 byte.


Tôi đã xem xét một giải pháp bf, có bất kỳ thông dịch viên hiện tại chỉ xuất ra dưới dạng số?
Rohan Jhunjhunwala

@RohanJhunjhunwala điều này xuất ra 51 (mã ASCII cho "3") 25 lần.
Cấp sông St

@LevelRiverSt điều tôi đang nói là có thể tồn tại một trình thông dịch bf không nhập ascii và chỉ xuất ra số nguyên, do đó (-.) Sẽ xuất 255.
Rohan Jhunjhunwala



8

C, 111111111111111111111111111111111111 (35 cái)

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

Có lẽ có một cách ngắn hơn. Việc thiếu một cách đơn giản để in số lớn bằng C làm cho nó khó khăn.



7

Java, 111111111111111111111111111111111111111111111111111111111111111111111111111111111111 (81 cái)

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

Tôi đã nhấn mạnh phần thực sự là "biến" ở đây; mọi thứ khác là hoàn toàn cần thiết cho một chương trình Java đang hoạt động.

Có lẽ điều này ngắn hơn so với mucking xung quanh với Java BigInteger.


Có lẽ ... - có lẽ System.out.print(BigInteger.TEN.pow(10));- đó là một nhân vật ít hơn? Xin lỗi - không nơi nào đủ lớn - và .pow(10).pow(10)dài hơn.
OldCurmudgeon

Bạn có thể thay thế interfacebằng class.
LegionMammal978

2
Nhưng sau đó mainsẽ cần phải được public.
Lynn

7
bạn có thể tắt 2 ký tự bằng cách thực hiện điều này cho vòng lặp for: for (A a: new A [81])
Jack Ammo

@OldCurmudgeon .pow(100)Không hoạt động vì một số lý do?
ETHproductions

7

Đàn con , 100100

@'dOu

Cubix là một esolang 2 chiều, dựa trên ngăn xếp. Cubix khác với các lang 2D khác ở chỗ mã nguồn được bao bọc bên ngoài khối lập phương.

Kiểm tra nó trực tuyến!

Giải trình

Điều đầu tiên trình thông dịch làm là tìm ra khối lập phương nhỏ nhất mà mã sẽ phù hợp. Trong trường hợp này, độ dài cạnh là 1. Sau đó, mã được đệm bằng no-op .cho đến khi tất cả sáu mặt được lấp đầy. Khoảng trắng được xóa trước khi xử lý, vì vậy mã này giống hệt như trên:

  @
' d O u
  .

Bây giờ mã được chạy. IP (con trỏ lệnh) bắt đầu ở phía bên trái, chỉ về hướng đông.

Char đầu tiên mà IP gặp phải là ', đẩy byte tiếp theo lên ngăn xếp; byte này là d, hoặc 100. Tiếp theo là O, xuất ra mục hàng đầu (100) dưới dạng số nguyên.

Sau đó, các lần truy cập IP u, quay nó sang phải, di chuyển về phía trước, sau đó quay lại. Nó chuyển sang mặt dưới chỉ về hướng bắc, sau đó quay về hướng đông. Điều này kết thúc nó Omột lần nữa, xuất ra 100, sau @đó kết thúc chương trình.


6

MATL , 1000

1e3

Lưu ý: cam kết GitHub mới nhất của trình biên dịch hoạt động trên Octave cũng như trên Matlab.

Điều này diễn giải số trong ký hiệu khoa học và in ngầm nó, do đó tạo ra đầu ra

1000



6

Trăn 2, 107918163081

print 69**6

Bạn có thể loại bỏ khoảng trắng giữa print2.
Bakuriu

1
@Bakuriu Không bạn không thể
Blue

69**6chỉ là 107918163081.
Neil

2
Nhìn chung, điều này cũng hoạt động trong Perl.
Grimy

6

C ++, 1e46

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

Dòng mới sẽ yêu cầu thêm 2 byte, sử dụng định dạng "1% 048d \ n"


Tôi không nghĩ C ++ cho phép bạn bỏ qua kiểu trả về main(). OTOH, điều này sẽ làm cho một câu trả lời C tốt ...
Toby Speight


5

05AB1E , điểm 10

T

Giải trình:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.