J, 126 124 121 119 116 115 113 105 116 115 112 ký tự
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1[(s=:[,.~,.)9!:7'\=/<=>/=\|='
Lấy đầu vào từ bàn phím. Thí dụ:
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1[(s=:[,.~,.)9!:7'\=/<=>/=\|='
6302715408
|\==============================================================/|
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|| || (__) (__) (__) || (__) || (__) (__) || ||
|| || || || || || || || || || || ||
|| (__) || || || (__) || (__) || || (__) ||
|<==============================================================>|
|| (__) (__) || (__) (__) (__) || (__) || (__) ||
|| || (__) || (__) (__) || || (__) || (__) ||
|| || (__) || || || || || (__) || (__) ||
|| || || || || || || || (__) || || ||
|| || || || || || || || || || || ||
|| || || (__) || || || (__) || (__) || ||
|| (__) || (__) || || (__) (__) || (__) || ||
|| (__) || (__) (__) (__) (__) (__) || (__) || ||
|| (__) (__) (__) (__) (__) (__) (__) || (__) (__) ||
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|/==============================================================\|
Thủ thuật chính ở đây là lạm dụng quyền anh của J bằng cách xác định lại các nhân vật mà nó sử dụng. Nó sử dụng một tham số toàn cầu - 9!:7
- để làm điều này. Có thể có chỗ để chơi gôn hơn nữa, nhưng thành thật mà nói, tôi rất vui khi nhận được một cái gì đó hoạt động sẽ bù đắp cho nỗ lực cuối cùng của tôi trong câu hỏi này .
Phù hợp trong một tweet với đủ ký tự còn lại để nói 'Gaz đã thực hiện điều này' :-).
Chỉnh sửa: 3 ký tự tiết kiệm là do vay mượn 2 6$' || (__)'
từ Jesse Millikan câu trả lời.
Chỉnh sửa thêm: Mất 11 ký tự thêm khoảng trắng ở hai bên mà tôi không nhận thấy không có mặt.
Giải trình:
Mã này có ba phần chính:
1) Thiết lập
[(s=:[,.~,.)9!:7'\=/<=>/=\|='
Điều này là chính nó trong hai phần.
9!:7'\=/<=>/=\|='
xác định lại các ký tự mà J sẽ sử dụng để hiển thị các hộp. Quyền anh của J thường trông như thế này:
2 2$<"0[1 2 3 4
┌─┬─┐
│1│2│
├─┼─┤
│3│4│
└─┴─┘
nhưng sau khi xác định lại nó trông như thế này:
2 2$<"0[1 2 3 4
\===/
|1|2|
<===>
|3|4|
/===\
(s=:[,.~,.)
định nghĩa một động từ tôi sẽ sử dụng một vài lần sau đó. Đây hóa ra là nơi tốt nhất để tuyên bố nó. Nó lấy một ký tự bên trái và một mảng các ký tự bên phải và kẹp mảng giữa các ký tự. Ví dụ:
3 5$'abcdefghijklmno'
abcde
fghij
klmno
'-' s 3 5$'abcdefghijklmno'
-abcde-
-fghij-
-klmno-
Trận chung kết [
chỉ phục vụ để tách các thiết lập từ phần tiếp theo.
2) Đầu vào và đại diện
,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
".,.1!:1[1
lấy đầu vào từ bàn phím và tách nó thành các chữ số riêng lẻ:
".,.1!:1[1
314159
3 1 4 1 5 9
((i.5)</5|])
tạo ra một số không và đại diện cho phần dưới cùng của bàn tính:
((i.5)</5|]) 3 1 4 1 5 9
1 1 1 1 0 1
1 0 1 0 0 1
1 0 1 0 0 1
0 0 1 0 0 1
0 0 0 0 0 0
|:@(1,.<&5)
tạo ra một số không và đại diện cho phần trên cùng của bàn tính:
|:@(1,.<&5) 3 1 4 1 5 9
1 1 1 1 1 1
1 1 1 1 0 0
Hai phần này được đóng hộp với nhau bằng cách sử dụng ;
:
(|:@(1,.<&5);((i.5)</5|])) 3 1 4 1 5 9
\=======================/
|1 1 1 1 1 1|1 1 1 1 0 1|
|1 1 1 1 0 0|1 0 1 0 0 1|
| |1 0 1 0 0 1|
| |0 0 1 0 0 1|
| |0 0 0 0 0 0|
/=======================\
Sau đó, các hộp được đặt chồng lên nhau để tạo cơ sở cho bàn tính, đưa ra:
,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\===========/
|1 1 1 1 1 1|
|1 1 1 1 0 0|
<===========>
|1 1 1 1 0 1|
|1 0 1 0 0 1|
|1 0 1 0 0 1|
|0 0 1 0 0 1|
|0 0 0 0 0 0|
/===========\
3) Đầu ra
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>
&.>
có nghĩa là những gì tiếp theo sẽ lần lượt hoạt động trên cả hai hộp.
(,-.)
đây là một cái móc sẽ phủ nhận đầu vào và sau đó thêm nó vào cuối của bản gốc:
2 5$1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
(,-.) 2 5$1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
0 1 0 1 0
0 1 0 1 0
Đây thực sự là một phần của đại diện, nhưng đối với mục đích chơi gôn, tốt hơn là có nó trong phần này. Áp dụng cho đầu vào trước:
(,-.)&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\===========/
|1 1 1 1 1 1|
|1 1 1 1 0 0|
|0 0 0 0 0 0|
|0 0 0 0 1 1|
<===========>
|1 1 1 1 0 1|
|1 0 1 0 0 1|
|1 0 1 0 0 1|
|0 0 1 0 0 1|
|0 0 0 0 0 0|
|0 0 0 0 1 0|
|0 1 0 1 1 0|
|0 1 0 1 1 0|
|1 1 0 1 1 0|
|1 1 1 1 1 1|
/===========\
[:,.(_6[\' || (__)'){~
Các số 0 và số hiện được sử dụng để chọn một chuỗi để biểu thị chuỗi hạt hoặc không có chuỗi:
([:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\====================================/
| (__) (__) (__) (__) (__) (__) |
| (__) (__) (__) (__) || || |
| || || || || || || |
| || || || || (__) (__) |
<====================================>
| (__) (__) (__) (__) || (__) |
| (__) || (__) || || (__) |
| (__) || (__) || || (__) |
| || || (__) || || (__) |
| || || || || || || |
| || || || || (__) || |
| || (__) || (__) (__) || |
| || (__) || (__) (__) || |
| (__) (__) || (__) (__) || |
| (__) (__) (__) (__) (__) (__) |
/====================================\
Nhưng bây giờ, như Howard chỉ ra cho tôi, có một khoảng trống ở hai bên của chuỗi hạt. Vì vậy, chúng tôi sử dụng s
động từ được xác định trước để kẹp nội dung của mỗi hộp giữa hai cột khoảng trắng:
(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\======================================/
| (__) (__) (__) (__) (__) (__) |
| (__) (__) (__) (__) || || |
| || || || || || || |
| || || || || (__) (__) |
<======================================>
| (__) (__) (__) (__) || (__) |
| (__) || (__) || || (__) |
| (__) || (__) || || (__) |
| || || (__) || || (__) |
| || || || || || || |
| || || || || (__) || |
| || (__) || (__) (__) || |
| || (__) || (__) (__) || |
| (__) (__) || (__) (__) || |
| (__) (__) (__) (__) (__) (__) |
/======================================\
Đã làm điều đó, tất cả những gì còn lại là chuyển đổi chuỗi này thành một chuỗi bằng cách sử dụng ":
để chúng ta có thể kẹp nó giữa hai cột |
:
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
|\======================================/|
|| (__) (__) (__) (__) (__) (__) ||
|| (__) (__) (__) (__) || || ||
|| || || || || || || ||
|| || || || || (__) (__) ||
|<======================================>|
|| (__) (__) (__) (__) || (__) ||
|| (__) || (__) || || (__) ||
|| (__) || (__) || || (__) ||
|| || || (__) || || (__) ||
|| || || || || || || ||
|| || || || || (__) || ||
|| || (__) || (__) (__) || ||
|| || (__) || (__) (__) || ||
|| (__) (__) || (__) (__) || ||
|| (__) (__) (__) (__) (__) (__) ||
|/======================================\|