Xuất điểm của bạn!


54

Thử thách:

Khái niệm này đủ đơn giản: viết một chương trình đầy đủ để đưa ra điểm số golf mã của riêng nó!

Đầu ra chỉ nên là số byte của chương trình của bạn và theo dõi bytes.

NHƯNG ĐỢI ..... có một hạn chế:

  • Mã nguồn của bạn không thể bao gồm bất kỳ chữ số nào từ số byte của bạn
  • Vì vậy, nếu điểm số của bạn là 186 bytes, chương trình của bạn không thể chứa các ký tự 1, 6hoặc8

Kết quả ví dụ:

315 bytes
27 Bytes
49 BYTES

Quy tắc bổ sung:

  • Các ký tự, khoảng trắng và dòng mới không cần thiết bị cấm trong mã nguồn, tuy nhiên dấu cách và dòng mới là hoàn toàn chấp nhận được ở đầu ra
  • Cần có một khoảng trống giữa số và bytesở đầu ra
  • Thư không phân biệt chữ hoa chữ thường
  • Không tự kiểm tra hoặc đọc mã nguồn
  • sơ hở tiêu chuẩn không được phép

  • đây là , vì vậy

Mã ngắn nhất trong byte thắng!


6
Điều này có cần thẻ quine , hoặc mã có thể tự kiểm tra?
Adám

3
@Dat, với định dạng của từ bytestôi nghi ngờ ý định là số đếm phải bao gồm các byte cần thiết để in văn bản:bytes
Jeff Schaller

2
Là không gian hàng đầu trong đầu ra có thể chấp nhận?
rafa11111

3
Nếu mã của tôi dài 1 byte, tôi nên xuất 1 byteshay 1 byte? (hãy nhớ rằng đã có 41 câu trả lời, mặc dù tôi không nghĩ có bất kỳ câu trả lời nào bị ảnh hưởng)
Erik the Outgolfer 29/03/18

1
@JoKing tốt Tôi đã không giải quyết các quy tắc, nhưng nếu bằng cách nào đó sử dụng chữ in hoa làm cho điểm của bạn thấp hơn, thì bằng mọi cách tôi rất muốn xem những gì bạn nghĩ ra. Tôi nói đi cho nó!
X1M4L

Câu trả lời:


41

JavaScript, 19 byte

Octal được phát minh để phục vụ hai mục đích:

  • thiết lập quyền truy cập tệp trong Linux
  • trả lời thử thách này

alert(023+' bytes')

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


Điều này có được tính là một chương trình đầy đủ không?
ericw31415

1
@ ericw31415 Đây là một chương trình trình duyệt , như được định nghĩa trong câu trả lời meta này .
Arnauld

5
+1 vì cuối cùng đã làm rõ cho tôi tại sao bát phân không hoàn toàn vô dụng!
sergiol

34

Perl 5 , 16 byte

Có nhiều cách khác để có được 16nhưng cách này là của tôi

say afpbytes^PPP

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


1
Cái này hoạt động ra sao?
caird coinheringaahing

9
@cairdcoinheringaahing Trong perl, bạn có thể bỏ qua các trích dẫn trên chuỗi nếu chúng trông giống như một nghĩa đen và không xung đột với một từ khóa (và rất phản đối nhưng chúng tôi không quan tâm đến golf), toán tử nhị phân & | ^~cũng có thể được áp dụng cho các chuỗi và hoạt động trên chúng như trên một danh sách các giá trị ASCII (nếu và chỉ khi cả hai bên là các chuỗi). Cho |^nó hoạt động như thể chuỗi shorte được mở rộng với \0. Sau đó là một bài tập đơn giản để tìm ra sự kết hợp của các chữ cái xor với đầu ra mong muốn,
TonMedel 30/03/18

25

7 , 23 ký tự, 9 byte

54340045141332401057403

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

Đây là một thử thách khá khó khăn trong một ngôn ngữ chỉ bao gồm các chữ số, nhưng tôi đã quản lý nó

Đây chỉ là 9 byte trong mã hóa của 7. (Nói đúng ra, đó là 8⅜ byte (23 × - vì hai bit cuối cùng 1 bit có thể bị bỏ qua), nhưng lần đầu tiên, yêu cầu của PPCG phải làm tròn đến toàn bộ số byte thực sự là một lợi thế bởi vì điều đó có nghĩa là thêm 1 bit trailing là cần thiết và do đó không bị cấm bởi câu hỏi.) Kết xuất hex có thể đảo ngược:

00000000: b1c0 2530 b6a0 22f8 1f                   ..%0.."..

Thách thức chính của việc viết chương trình này trong 7 là đánh gôn dưới 10 byte (như viết 7 mà không sử dụng 0hoặc 1khá khó.) Điều này sử dụng cấu trúc tương tự như chương trình "Hello world" tiêu chuẩn:

5434004514133240105 7 403
5434004514133240105 lệnh 0-5 nối thêm chữ vào không gian dữ liệu
                   7      bắt đầu một phần mới của không gian dữ liệu
                    403 một nghĩa đen khác được thêm vào không gian dữ liệu
                         {ẩn: eval phần cuối cùng dưới dạng lệnh}
                    4     hoán đổi phần 1 và phần 2 với phần trống giữa
                      6    tái tạo lại các lệnh sẽ tạo đầu ra phần 1
                       3   (+ một số hiệu ứng khác mà chúng tôi không quan tâm)

Nói cách khác, chúng tôi bắt đầu bằng cách tạo hai phần của không gian dữ liệu; chúng tôi có hai chữ, mỗi chữ đẩy một chuỗi lệnh ở đó. Phần thứ hai (chúng được đẩy theo kiểu ngăn xếp nên lần đầu tiên đẩy = pop cuối cùng) là một chuỗi lệnh khá tùy ý nhưng được đẩy bằng chuỗi lệnh 5434004514133240105(do đó tạo ra chuỗi dữ liệu 5434664574733246765; khi thảo luận 7 trong văn bản, tôi thường sử dụng phông chữ bình thường cho một lệnh đẩy một chữ và in đậm cho chữ kết quả tương ứng). Phần đầu tiên được đẩy bằng cách sử dụng chuỗi lệnh 403, sản xuất 463. Sau đó, phần đầu tiên được sao chép trở lại chương trình (một hành vi ngầm của 7).

Các 463hiện nay bao gồm các lệnh (đậm) mà làm điều gì đó ngay lập tức, chứ không phải là (không đậm) lệnh mà chỉ đẩy literals. 4sắp xếp lại các phần để có được "chuỗi ký tự" của chúng tôi vào phần đầu tiên. Sau đó, 0thao tác mà 7 được biết đến nhiều nhất là: lấy một phần của không gian dữ liệu và xây dựng lại chuỗi lệnh có khả năng đã tạo ra nó. Trong trường hợp chuỗi lệnh ban đầu là tất cả 0- 5, điều này chính xác 100% (không có gì đáng ngạc nhiên, vì các lệnh đó hoàn toàn đẩy dữ liệu và do đó để lại bằng chứng rõ ràng về những gì chúng đã làm), và vì vậy chúng tôi lấy 5434004514133240105lại trình tự ban đầu . Cuối cùng, 3in nó.

Vì vậy, điều còn lại để xem xét ở đây là mã hóa của chuỗi. Điều này có ngôn ngữ dành riêng cho tên miền của nó:

5434004514133240105
5                    change encoding: 6 bits per character
 43                  select character set: digits and common symbols
   40                '9'
     04              space
       51            select character set: uppercase letters
         4133240105  'B' 'Y' 'T' 'E' 'S'

(Không có "bộ ký tự chọn: chữ cái viết thường" trong bộ ký tự "chữ số và ký hiệu chung" - trước tiên bạn phải đi qua một bộ ký tự khác - vì vậy tôi cần sử dụng chữ hoa để chơi golf đủ ngắn để phù hợp với số 10 có hiệu lực giới hạn -tất cả.)





8

PHP cũ hơn 7.2 , 13 byte

Giả sử cài đặt mặc định (cảnh báo E_NOTICE bị tắt) và phiên bản PHP cũ hơn 7.2.

Cần được giải mã với xxd -r

00000000: 3c3f 3d7e cecc df9d 868b 9a8c 3b         <?=~........;

Hoặc nếu bạn thích Base64

PD89fs7M352Gi5qMOw==

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


6

Stax , 5 byte

╗↑╞ô╝

Chạy và gỡ lỗi nó

Giải nén, nó trông như thế này. Chế độ nguồn đóng gói làm cho loại tầm thường và không thú vị này.

5p     print 5 with no line break
`5l@   print the compressed string " bytes"

Nếu bạn không muốn sử dụng chế độ nguồn đóng gói, 6^p`5l@hoạt động với 7 byte.


1
Tôi đã đánh giá thấp câu trả lời này, bởi vì tôi nghĩ rằng việc sử dụng chế độ đóng gói, trong khi một cách tiết kiệm byte thông minh, lại cảm thấy như gian lận (điều đó không phải) tồi tệ nhất, và không sáng tạo nhất. Thay vì sử dụng một loạt các câu trả lời nguồn bị hạn chế của Stax , tôi sẽ để phần này xuống để bao gồm tất cả các câu trả lời tương tự như vậy.
caird coinheringaahing

1
Tôi chắc chắn đồng ý rằng nó không sáng tạo. Nhưng tôi nghĩ lỗi nằm ở khái niệm restricted-sourcechứ không phải ngôn ngữ. Đây thực sự là cách sản xuất trực tiếp nhất "5 bytes"bằng Stax.
đệ quy

Tôi đồng ý rằng có một vấn đề với thử thách (do đó tại sao tôi lại đánh giá thấp nó ), nhưng tôi vẫn không thích câu trả lời này. Vui lòng không xóa nó mặc dù (chỉ cần thận trọng trước), không có gì sai với nó.
caird coinheringaahing

6

R , 16 byte

cat(4*4,"bytes")

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


Không phải là 17 vì thiếu không gian của bạn?
PmanAce 30/03/18

@PmanAce "Đầu ra chỉ nên là số byte của chương trình của bạn và theo dõi bytes". Chương trình là 16 byte.
Giuseppe

cattheo mặc định thêm một khoảng trắng giữa các đầu vào của nó.
Giuseppe

object.sizeđầu ra ở định dạng chính xác ( bytesbao gồm theo mặc định). Khó chịu, ngắn nhất tôi có thể tìm thấy là 17 : object.size(0)-39. TIO
Robin Ryder

1
Rõ ràng, trong phiên bản của Hadley, vectơ 1 độ dài có độ dài 48, do đó phải tồn tại phiên bản R trong đó mã 16 byte này hoạt động : object.size(0)/3.
Robin Ryder



5

Bash, 21 byte

"Đọc mã nguồn của riêng bạn" rõ ràng không phải là người chiến thắng ở đây, nhưng không ai khác gửi một cái, vậy thì có chuyện gì.

echo `wc -c<$0` bytes

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



5

PHP + HTML, 16 byte

&#49;&#54; bytes

Vâng, điều này đang trở nên khá gần với lạm dụng kẽ hở, nhưng tôi cảm thấy điều này cần phải được đăng. Và việc sử dụng PHP có nghĩa là câu trả lời này về mặt kỹ thuật được viết bằng ngôn ngữ lập trình hoàn chỉnh Turing. Tất nhiên, bất kỳ ngôn ngữ tạo khuôn mẫu HTML tương tự nào khác cũng sẽ hoạt động tốt.

Bản demo trực tiếp (không có PHP):

&#49;&#54; bytes


Đánh tôi đi! Và ; thường có thể được bỏ qua!
wedstrom

À nhưng sau đó sẽ là 14/15 byte
wedstrom


4

MATL , 13 byte

'57$f}xiw'4-c

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

Điều này đẩy chuỗi '57 $ f} xiw 'và trừ 4, để có được 13 bytes. Điều này được chuyển đổi thành các ký tự bằng cách sử dụng c.


6EV' bytes'hlà 12 (tôi vừa định đăng nó)
Giuseppe

1
mặc dù đó là cách tiếp cận nhàm chán tương tự: P
Giuseppe


4

Octave , 23 byte

printf('%i bytes',9+14)

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

Và cái này:

disp(['','67$f}xiw'-4])

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


Các câu trả lời đầu tiên có vẻ tốt, nhưng ... cách thứ hai hoạt động? oO
rafa11111

2
@ rafa11111 Trừ đi 4(mã ASCII của) '67$f}xiw'cung cấp mã ASCII của '23 bytes'. Sau đó, nối với chuỗi trống sẽ '' chuyển đổi mã ASCII thành ký tự
Luis Mendo

2
@Luis Mendo Khá thông minh! Cảm ơn đã làm rõ!
rafa11111

4

Máy tính Petit BASIC, 11 byte

?9+2,"bytes

Sử dụng dấu phẩy trong câu lệnh in sẽ di chuyển con trỏ sang bội số tiếp theo của kích thước tab hiện tại. Trong SmileBASIC, đó là 4 theo mặc định, do đó, điều này sẽ xuất ra 11 bytes(2 khoảng trắng) nhưng PTC BASIC đã sử dụng 3 thay thế, vì vậy đầu ra có khoảng cách chính xác.


4

APL (Dyalog Unicode) , 12 byte

Chương trình đầy đủ mà ngầm in ra STDOUT.

'bytes',⍨3×4

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

,⍨ sẽ nối chuỗi vào kết quả của phép nhân. Hiển thị dữ liệu kiểu hỗn hợp mặc định của APL đặt khoảng trắng giữa một số và văn bản tiếp theo.


Tôi có thể sai, nhưng bạn không có 2 trong số byte và chương trình? 3 * 4 sẽ ổn thôi
fyrepenguin

@fyrepenguin Heh, đúng rồi, dĩ nhiên rồi. Tôi thật ngốc nghếch.
Adám

4

Brain-Flak , 100 BYTES

((((((<>))))))(((()[[]]((((()()((((([][]){}){}())[()]))[[][]])()){})()[][]))[()()[]])[]){({}<>)<>}<>

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

Xuất ra bytesmột phần trong tất cả các mũ. Một người quen thuộc với Brain-Flak có thể thực sự bối rối với tất cả ((<>))ban đầu, nhưng hãy yên tâm, họ chỉ ở đó để lạm dụng chiều cao ngăn xếp nilad ( []) và không ai trong số 0họ sản xuất được in.



4

Khoảng trắng , 112 byte

Chỉ vì chưa ai làm điều đó:

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




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

In "BYTES" bằng chữ hoa, vì chữ in hoa có mã ASCII nhị phân ngắn hơn. Các lệnh trong chương trình, theo ký hiệu hiển thị của riêng tôi, là:

Push 112
PrintNum
Push 0
Push 0x53
Push 0x45
Push 0x54
Push 0x59
Push 0x42
Push 0x20
Label _
PrintChr
Dup
JumpZ S
Jump _
Label S
End

À, không nhận thấy đã có câu trả lời Whitespace .. Đây là câu trả lời ngắn hơn ( 104 byte ). . Sẽ xóa của tôi một lần nữa. Đây là tương tự với thêm nổi bật và giải thích.
Kevin Cruijssen 30/03/18

Ồ, hừm. Tôi đoán văn bản đủ ngắn để thực hiện vòng lặp thực sự gây tổn hại nhiều hơn là chỉ lặp lại PrintChar. (Và tôi biết, tôi luôn luôn có thể thả NNN cuối cùng, nhưng tôi thực sự thích không có lỗi.)
aschepler

4

Java 5 hoặc 6, 44 byte (chương trình đầy đủ)

enum A{A;{System.out.print(0x2C+" bytes");}}

Không có liên kết TIO, vì Java 5/6 đã cũ .. Trong Java 5/6, có thể có một enum với mã thay vì bắt buộc main-method, làm cho nó ngắn hơn cho các thách thức chương trình đầy đủ.

Cũng có lỗi với java.lang.NoSuchMethodError: main\nException in thread "main"STDERR sau khi in thành STDOUT, điều này cũng ổn theo meta (nhưng nếu thử thách sẽ không cho phép thêm lỗi vào STDERR, System.exit(0);có thể được thêm vào (và phải cập nhật số bát phân) để tránh lỗi.

Được đề xuất bởi @ OlivierGrégoire (và mẹo Java có liên quan của anh ấy ).

Java 8+, 74 byte (chương trình đầy đủ)

interface M{static void main(String[]a){System.out.print(0112+" bytes");}}

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

Java 8+, 16 15 byte (hàm lambda)

v->0xF+" bytes"

-1 byte nhờ @ OliverGégoire .

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


2
Về mặt kỹ thuật không phải là một chương trình đầy đủ :)
OOBalance 29/03/18

@OOBalance Rất tiếc .. bằng cách nào đó đọc qua đó, cảm ơn vì đã sửa. Điểm số của tôi là .. XD
Kevin Cruijssen 29/03/18

1
37*2chứa một 7, vì vậy nó không hợp lệ. Giải pháp thay thế của bạn là tốt mặc dù.
OOBalance

1
v->0xE+"bytes"hoặc v->0xF+" bytes". Không thể kiểm tra nhưng dù sao cũng nên làm việc. Không có gì nói điểm và "byte" phải được tách ra.
Olivier Grégoire

1
@ OlivierGrégoire Tôi biết, tôi biết. ;) Khi tôi đăng toàn bộ chương trình, tôi đã nghi ngờ trả lời nó như enum nghĩ về câu trả lời của bạn . Bạn có biết trình biên dịch trực tuyến nào vẫn hỗ trợ không? Tôi thích có một liên kết với mã kiểm tra cho câu trả lời của mình ..
Kevin Cruijssen 30/03/18


4

Bản thảo, 15 byte

Vâng, tôi sẽ đến đó.

9+6&”bytes”

1
Nhưng ...Your source code can not include any of the digits from your byte count
nicael 29/03/18

@nicael Dang, bạn nói đúng. Một giây sau ...
DonielF

Sửa lỗi cho tôi nếu tôi sai, nhưng không phải là ký tự đa nhân (3 byte bằng Unicode nếu tôi nhớ chính xác), vậy đây có phải là hơn 11 byte không?
caird coinheringaahing

@cairdcoinheringaahing ... Bắn. Bạn nói đúng
Hồi

Điều này vẫn không in 11?
Lemon phá hủy



3

Hàng loạt, 32 byte

@@echo %COMSPEC:~-10,-010% bytes

COMSPECthường là %WINDIR%\system32\cmd.exedo đó tôi trích xuất chuỗi con từ 10 đến 8 ký tự từ cuối. Phiên bản tự giới thiệu 16 byte cũ:

@echo %~z0 bytes

May mắn là số byte không phải là bội số của 10.


@manatwork OK, tôi đã không thấy rằng, đây là một phiên bản mới.
Neil

3

JavaScript, 16 15 byte

x=>0xf+' bytes'

_=>5*3+' bytes'
Neil

@Neil Cả mã và số byte đều chứa một 5trong trường hợp đó ..
Kevin Cruijssen

@KevinCruijssen Bah, tôi không thể tin rằng tôi đã bỏ qua điều đó.
Neil

Đệ trình được yêu cầu phải là chương trình đầy đủ " viết một chương trình đầy đủ để đưa ra điểm số golf mã của riêng nó!"
Kritixi Lithos
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.