Mã golf dành cho người lười biếng


10

Mục tiêu của bạn trong môn đánh gôn này là lấy hai chuỗi languagecode (nếu mã số golf bạn viết cho nó là multiline, thì biến này sẽ là multiline.) , Và một số nguyên , bytes. Chúng đại diện cho các biến cho một ngôn ngữ lập trình, số byte cần thiết và chính mã.

Sau đó, bạn sẽ định dạng nó giống như một golfer mã làm điều đó.

Biến đầu ra là một chuỗi nhiều dòng được gọi là answer.

Bạn có thể sử dụng chuỗi multiline trên:

Nếu bạn tìm kiếm Stack Overflow , bạn sẽ có thể tìm thấy nhiều ngôn ngữ lập trình hỗ trợ nó.

Đây là một mẫu của đánh dấu đầu ra. Các codebiến là trong một khối mã, và có một tiêu đề cấp hai.

## {language}, {bytes} bytes

     {code}

Đây là kết quả đầu ra trông như thế nào khi dán vào trình phân tích cú pháp Markdown.

{ngôn ngữ}, {byte} byte

    {code}

Các biến được coi là đã được điền vào như ngôn ngữ bạn đã mã hóa mục nhập mã golf của bạn, số byte cần thiết và mã thực tế cho nó.

Đây là một ví dụ khác về đầu ra dưới dạng mã, lần này với các biến được điền:

## JavaScript, 1337 bytes

document.getElementById("foo").innerHTML = bar;

Đây là phiên bản dưới dạng blockquote:

JavaScript, 1337 byte

    document.getElementById("foo").innerHTML = bar;

Byte có thể được lấy ra khỏi mã của bạn nếu bạn sử dụng một cách để đặt văn bản của một <p>phần tử trong HTML theo id result, như mã JavaScript sau:

document.getElementById("result").innerHTML = answer;

Đảm bảo cũng bao gồm <p id="result"></p>phần HTML trong JSFiddle để làm việc này.

Chấm điểm

Giống như tất cả các câu hỏi về , mã sử dụng ít byte nhất là tốt nhất.


3
Bao {code}giờ sẽ là một mã đa dòng?
Ad Nam

8
"Các biến sẽ được điền vào như ngôn ngữ bạn đã mã hóa mục nhập mã golf của bạn, số byte cần thiết và mã thực tế cho nó." Tôi có phải là người duy nhất diễn giải điều này như một biến thể quine không?
Primo

2
Vì các câu trả lời đang giải quyết hai vấn đề hoàn toàn khác nhau, nên tôi đặt vấn đề này là không rõ ràng. Vui lòng làm rõ xem language, bytescodelà đầu vào hay liệu đây có phải là một biến thể quine trong đó những thứ đó phải phù hợp với chính mã giải quyết. (Và nếu vậy, cho dù trực tiếp hay gián tiếp đọc mã nguồn đó đều được cho phép và liệu có cho phép tích hợp sẵn hay không.)
Martin Ender

2
Bạn cũng có thể làm rõ câu hỏi của Adnan xem liệu đầu vào codecó thể chứa nguồn cấp không?
Martin Ender

2
@Peanut Tôi bối rối. Chúng ta có thể cho rằng codesẽ không phải là đa dòng, hay chúng ta không thể? Vui lòng cho biết rằng trong văn bản thách thức
Luis Mendo

Câu trả lời:



8

Java, 70 byte

String A(String[]b){return"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];}

Giả sử b[0]là tên ngôn ngữ, b[1]là số byte và b[2]là mã.

Làm cho nó có thể biên dịch được chi phí 9 byte, dẫn đến một chương trình không độc lập 79 byte:

class a{String A(String[]b){return"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];}}

Chương trình nguyên khối tương đương dài 103 byte:

interface a{static void main(String[]A){System.out.print("## "+A[0]+", "+A[1]+" bytes\n\n    "+A[2]);}}

Công cụ nguyên khối hoạt động với các đối số dòng lệnh, giả sử chúng giống như chương trình không độc lập:

  • Đối số đầu tiên là tên ngôn ngữ
  • Đối số thứ hai là số byte
  • Đối số thứ ba là mã

Java (biểu thức lambda), 56 48 byte

(b)->"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];

Đây là một java.util.function.Function<String[], String>.


Không có chương trình / chức năng nào xử lý các chuỗi đa dòng. Để làm như vậy, chỉ cần thay thế b[2]A[2]bằng b[2].replace("\n","\n ")A[2].replace("\n","\n ")- làm như vậy thêm 23 byte.


Tôi không ở gần máy tính ngay bây giờ để xác nhận nó, nhưng bạn không thể sử dụng \thoặc một cái gì đó để thay thế 4 khoảng trắng sau hai dòng mới?
R. Kap

@ R.Kap Đôi khi sử dụng các tab thay vì dấu cách sẽ tạo ra một mớ hỗn độn trên SE.
dùng8397947

Ah tôi thấy. Vì vậy, số byte có được xem xét \tvà không phải là 4 không gian?
R. Kap

3
Mất các parens trên lambda; bạn có thể lưu hai byte chỉ với b->.
Brian McCutchon

2
Điều gì xảy ra nếu có nhiều hơn một dòng mã?
Neil

5

V , 24 byte

Lưu ý rằng có một khoảng trống ở cuối.

Chương trình này đưa ra giả định {code}sẽ không có trên nhiều dòng.

Op đã làm rõ, "mã" có thể là một chuỗi nhiều dòng. Phiên bản 24 byte này hoạt động:

2é#á $á,JA bytes
vGî4é 

Vì phần này chứa một ký tự không thể in được, đây là phiên bản có thể đọc được:

2é#á $á,JA bytes
<esc>vGî4é<space>

Đâu <esc>là nhân vật thoát nghĩa đen, vd 0x1B.


1
Nó luôn luôn giống như một cuộc đấu tranh không ngừng giữa Jolf và V ...: 3
Conor O'Brien

4

Python 3.5, 40 33 byte:

( -7 byte nhờ một số làm rõ từ Mego )

lambda*f:'## %s, %s bytes\n\n\t%s'%f

Hàm lambda ẩn danh lấy các đầu vào làm đối số vị trí theo định dạng <function name>(String, Number, String)và xuất ra một chuỗi nhiều dòng.

Dùng thử trực tuyến! (Ý)


2
Bạn có thể tắt một vài byte nếu bạn tạo danh sách tham số *fvà bỏ tuplecuộc gọi.
Mego

@Mego Thật không may, điều đó không hiệu quả, vì tôi nhận được TypeError: not enough arguments for format stringbất cứ khi nào tôi chạy nó như thế.
R. Kap

Hoạt động tốt khi tôi thử nó - bạn phải lấy các đối số vị trí thay vì một đối số danh sách. Ngoài ra, bạn có thể thả khoảng trống giữa #%.
Mego

@Mego Wow, điều đó thật kỳ lạ, bởi vì khi tôi thử nó trong PyCharm với Python 3.5.1, tôi gặp lỗi. Điều đó làm tôi bối rối rất nhiều. Ngoài ra, không gian giữa #lambda là cần thiết, hoặc tôi nghĩ vậy.
R. Kap

@Mego Nó được cập nhật.
R. Kap

4

JavaScript (ES6), 56 byte

(l,b,c)=>`## ${l}, ${b} bytes

`+c.replace(/^/gm,`    `)

Ngoài ra, để cười, đây là một câu trả lời tự định dạng cho tôi:

JavaScript (ES6), 68 byte

f=_=>`## JavaScript (ES6), ${`${f}`.length+3} bytes\n\n    f=${f};`;

In kết quả của f().


@PatrickRoberts Rất tiếc, tôi không thực sự kiểm tra độ dài, tôi chỉ sao chép và dán nó, sau đó thêm 6 byte cho (ES6). (Tại sao Cᴏɴᴏʀ O'Bʀɪᴇɴ chỉ bận tâm thay đổi độ dài?)
Neil

4

C #, 40 38 byte

(a,b,c)=>$"## {a}, {b} bytes\n\n\t"+c;

C # lambda trong đó đầu vào và đầu ra là chuỗi.


C #, 59 byte

(a,b,c)=>$"## {a}, {b} bytes\n\n\t"+c.Replace("\n","\n\t");

Với việc xử lý một câu trả lời đa dòng.


C #, 71 byte

Giải pháp 38 byte tự in

()=>$"## C#, 38 bytes\n\n\t"+@"(a,b,c)=>$""## {a}, {b} bytes

\t""+c;";

Hãy thử chúng trực tuyến


3

Toán học, 40 byte

Print["## ",#,", ",#2,"bytes

    ",#3]&

Chức năng ẩn danh. Lấy ngôn ngữ, số byte và chương trình làm đầu vào và in phần thân thành STDOUT.


2

Jolf, 24 22 byte

"## ¦i, ¦j Ξ/u3

    ¦

Không có nhiều để giải thích ở đây. ¦có nghĩa là đầu vào nội suy.

Hãy thử nó ở đây! Đầu ra cho đầu vào trong liên kết là:

## Jolf, 24 bytes

    some filler code I think

Đầu vào là:

name

number

"code"

1

MATL , 28 27 byte

Lưu 1 byte nhờ đề xuất của @ NinjaBearMoneky

35tOj', 'j' bytes'10t4Z"j&h

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

Khối mã phải nằm trên một dòng duy nhất.

Giải trình

35t           % Push 35 (ASCII for '#') twice
0             % Push 0. When converted to char, it will be displayed as a space
j             % Input string (language name)
', '          % Push this string
j             % Input string (byte count)
' bytes'      % Push this string
10t           % Push 10 (ASCII for linefeed) twice
4Z"           % Push string containing four spaces
j             % Input string (code)
&h            % Concatenate everything into a string. Implicitly display

0

Lisp thông thường, 57 byte

(lambda(L b c)(format()"## ~A, ~A bytes~%~%    ~A"L b c))

Ngoài ra, để giải trí, dưới đây là một đoạn mã in tiêu đề cho chính nó.

Lisp thông thường, 146 byte

#1=(PROGN
(SETF *PRINT-CIRCLE* T)
(LET ((S (FORMAT NIL "~S" '#1#)))
  (FORMAT NIL "## Common Lisp, ~A bytes~%~%    ~A" (LENGTH S) S)))


0

hashmap , 29 byte.

"## "i", "h" bytes.\n\n    "i

(Tôi đã viết bài đăng đó cùng với chương trình, nhưng tôi phải thoát \ n vào \ n)
Giải thích:

"## "                         Push string
     i", "                    Push input and string
          h" bytes.\n\n    "i Push input as number and string, then the input.

0

CJam , 26 23 byte

Cảm ơn @NinjaBearMonkey vì đã xóa 3 byte!

'#_Sl',Sl" bytes"N_S4*l

Khối mã phải nằm trên một dòng duy nhất.

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

Giải trình

'#_S       e# Push character "#" twice, then a space
l          e# Read line from input
',S        e# Push a comma, then a space
l          e# Read line from input
" bytes"   e# Push this string
N_S4*      e# Push newline twice, then four spaces
l          e# Read line from input. Implicitly display 

23 byte:'#_Sl',Sl" bytes"N_S4*l
NinjaBearMonkey

@NinjaBearMonkey Cảm ơn! Đã chỉnh sửa. Ý tưởng này cũng tiết kiệm một byte cho câu trả lời khác của tôi
Luis Mendo

0

Pyke, 25 byte

"##"Q", "z" bytes"skd4*z+

Hãy thử nó ở đây!

Hoặc là

Pyke, 0 byte

Hãy thử nó ở đây! - nhấp vào nút trả lời sao chép;)

EDIT - Đây chỉ là một tính năng của trang web, nó gian lận (hoặc ít nhất là tôi sẽ coi nó như vậy) bởi vì nó không bao giờ phân tích AST và chương trình web có thể không được coi là một phần của ngôn ngữ do nó không tương tác với ngôn ngữ nhiều (mặc dù nó đang chạy trình thông dịch Pyke)


Điều gì làm cho phiên bản 0 byte hoạt động?
haykam

Bạn có thể thêm nó vào câu trả lời? Tôi không tính điều đó nhưng bạn vẫn có thể giữ nó ở đó.
haykam

Này @muddyfish, bạn có thể tách chúng thành hai câu trả lời không?
haykam

@haykam nếu điều này là vì mục đích chấp nhận câu trả lời, thì tôi không nghĩ rằng giải pháp 0 byte được tính là thực sự sử dụng Pyke và cảm thấy quá tức giận
Blue

Tôi sẽ không chấp nhận câu trả lời đó.
haykam

0

Perl 5, 35 byte

Một chương trình đầy đủ, cái này lấy đầu vào làm đối số dòng lệnh theo thứ tự ngược lại. Nó đòi hỏi -M5.01, đó là miễn phí.

say pop.', '.pop.' bytes

    '.pop

0

Emacs Lisp, 97 byte

(lambda(l c)(format"## %s, %s bytes\n\n%s"l(string-bytes c)(replace-regexp-in-string"^""    "c)))

Ngoài ra, vì đôi khi có thể khó thoát khỏi dấu ngoặc kép và điều gì không, một ví dụ sử dụng sao chép chuỗi vào bảng tạm. (Đánh dấu vùng và sử dụngM-: )

Emacs Lisp, 184 byte

(kill-new ((lambda(l c)(format"## %s, %s bytes\n\n%s"l(string-bytes c)(replace-regexp-in-string"^""    "c)))"Emacs Lisp"(buffer-substring-no-properties(region-beginning)(region-end))))
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.