Vẽ một bảng sudoku bằng cách sử dụng các ký tự vẽ đường


20

Đây là mã golf. Đối với thử thách này, tôi sẽ chấp nhận một phương thức (bạn không cần một chương trình đầy đủ), nhưng chữ ký phương thức sẽ được tính vào số byte và tôi muốn xem chữ ký đầy đủ (không phải là lamdba). Đầu vào cho phương thức là một mảng số nguyên với 81 phần tử. Giá trị đầu ra / trả về từ phương thức là một chuỗi đại diện cho mảng dưới dạng bảng sudoku ascii.

Nếu bạn đang sử dụng ngôn ngữ bí truyền hoặc thứ gì đó hoàn toàn không có phương pháp, bạn có thể điều chỉnh, nhưng nếu ngôn ngữ đó hỗ trợ tất cả thì tôi muốn thấy một cái gì đó thực sự có thể được cắm vào một chương trình không có thực ", ngay cả khi Phương pháp cơ thể tự nó là một nỗi đau để làm việc với. Yêu cầu này không có nghĩa là chặn các ngôn ngữ như Jelly hoặc 05AB1E, nhưng để giúp các ngôn ngữ như Java dễ dàng hơn để xây dựng một thứ gì đó có ý nghĩa cho nền tảng đó.

Đối với đầu vào, các giá trị nguyên 1-9 phải có ý nghĩa rõ ràng. Số 0 phải luôn được hiểu là một ô trống. Bạn cũng có thể diễn giải bất cứ điều gì khác ngoài phạm vi 1-9 dưới dạng một ô trống, nhưng điều này là không bắt buộc. Định vị từ mảng đến câu đố bắt đầu ở phía trên bên trái và điền vào mỗi hàng từ trái sang phải trước khi chuyển sang hàng tiếp theo.

Đối với các hộp, tôi muốn các đường đôi xung quanh bên ngoài và giữa mỗi vùng 3x3 và các đường đơn giữa các ô khác. Chúng nên được vẽ bằng các ký tự vẽ đường thẳng (nếu định dạng I / O của bạn biểu thị các chuỗi dưới dạng một chuỗi byte chứ không phải là một chuỗi các ký tự, bạn nên thể hiện chúng trong một mã hóa nổi tiếng như UTF-8 hoặc codepage 347).

Đối với thử thách này, tôi KHÔNG yêu cầu bạn tạo ra câu đố sudoku. Đó là đầu vào cho chức năng. Tôi KHÔNG yêu cầu bạn giải câu đố. Tôi chỉ yêu cầu bạn tạo ra một chuỗi để "vẽ" những gì bạn đã cho (càng ít byte càng tốt).

Ví dụ đầu vào:

Giá trị cho mảng:

{ 8, 5, 0, 0, 0, 2, 4, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 2, 3, 0, 5, 0, 0, 0, 9, 0, 0 ,0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 7, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 4, 0}

Các giá trị có thể sử dụng bất kỳ cơ chế nào là tự nhiên cho ngôn ngữ của bạn: int [], ArrayList, chuỗi, tuple, chuỗi chữ số, bất cứ điều gì, miễn là bạn có một giá trị trong đầu vào cho mọi ô (không có bản đồ chỉ cho các ô được đặt vào các vị trí ). Hãy nhớ rằng đầu vào được cung cấp ... nó không phải là một phần của số byte của bạn. Nhưng đầu vào có thể đại diện cho bất kỳ câu đố sudoku nào và câu đố thậm chí có thể không có giải pháp hợp lệ . Bạn có cho rằng câu đố có thể in được. Bạn sẽ không nhận được một cái gì đó với 82 yếu tố, ví dụ.

Bạn cũng có thể giả sử một phông chữ có chiều rộng cố định hợp lý.

Đầu ra tương ứng:

╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗
8 │ 5 │ ║ │ 2 4 │
╟─
7 │ 2 │ ║ │ │ ║ │ 9
╟─
║ │ 4 ║ │ │ ║ │ │ ║
╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣
║ │ │ 1 │ 7 ║ │ 2
╟─
3 │ 5 ║ │ │ 9 │
╟─
║ │ 4 │ ║ │ │ ║ │ │ ║
╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣
│ │ 8 │ ║ 7 │
╟─
║ │ 1 │ 7 ║ │ │ ║ │ │
╟─
│ │ 3 │ 6 ║ 4 │
╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝

4
Bạn có chắc chắn về phần phương pháp? Điều đó không có ý nghĩa đối với nhiều ngôn ngữ (nghĩa là ngôn ngữ không có phương pháp).
Cyoce

1
Đối với các ngôn ngữ không có phương pháp, bạn có thể điều chỉnh. Nhưng nếu họ làm như vậy, tôi đang tìm kiếm thứ gì đó thực sự hữu ích để cắm vào chương trình "thực". Tôi sẽ thêm nó vào câu hỏi.
Joel Coehoorn

2
Lý do cho việc không cho phép lambdas là gì? Những thứ đó chắc chắn có thể được cắm vào một chương trình "thực" cũng như các chức năng / phương thức được đặt tên
Julian Wolf

2
Nitpicky nhưng quan trọng: Không có thứ gọi là "nhân vật vẽ hộp ASCII". ASCII bao gồm các mã từ 0 đến 127, không có mã nào trong số đó là các ký tự vẽ hộp. Trong thời gian gần đây, Unicode là tiêu chuẩn, nhưng nó có một số mã hóa khác nhau: UTF-8, UTF-16, v.v., tất cả đều sử dụng nhiều hơn 1 byte cho mỗi ký tự rút tiền. Các bảng mã cũ hơn như Codepage 437 hỗ trợ các ký tự vẽ hộp đơn byte. Khi bạn sử dụng các ký tự ngoài phạm vi ASCII, bạn nên chỉ định mã hóa nào là hợp lệ. vi.wikipedia.org/wiki/Box-drawing_character en.wikipedia.org/wiki/Unicode
Cấp sông St

2
"Phương thức" có lẽ phải là "hàm được đặt tên" để có được phương thức gần nhất có thể tương đương với một phương thức trong các ngôn ngữ không hướng đối tượng. (Ví dụ: C, một ngôn ngữ được sử dụng rộng rãi, không có phương thức nhưng có chức năng được đặt tên.) Trong hầu hết các ngôn ngữ tôi biết có phương thức nào, chúng là ngôn ngữ tương đương với chức năng được đặt tên. (Ngoại lệ được biết đến nhiều nhất mà tôi biết là C ++, trong đó việc sử dụng hàm được đặt tên sẽ hợp lý hơn cho nhiệm vụ này so với sử dụng một phương thức, vì nó thực sự không rõ loại đối tượng mà bạn liên kết phương thức với .)

Câu trả lời:


9

Python 3 , 232 byte

Cảm ơn những người đã giúp chơi golf này.

Mã hóa trong mã hóa ...

q=lambda x,y:x+y+x+y+x
r=lambda a,b,c,d,e:a+q(q(b*3,c),d)+e+"\n"
print(((r(*"╔═╤╦╗")+q(q("║ %d │ %d │ %d "*3+"║\n",r(*"╟─┼╫╢")),r(*"╠═╪╬╣"))+r(*"╚═╧╩╝"))%eval(input())).replace(*"0 "))

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

Được chơi golf.


Làm thế nào tôi không nhận thấy rằng ... đó giống như toàn bộ lý do tại sao tôi sử dụng Python 2, nhưng cảm ơn.
Rò rỉ Nun

1
Trên thực tế, bạn nên sử dụng Python 3 tốt hơn kể từ đó, bạn sẽ không cần dòng đầu tiên.
Erik the Outgolfer

1
Bạn có thể xóa nhiều parens hơn ở dòng cuối cùng: tio
Conor O'Brien

Xóa định nghĩa của f và định nghĩa i là i=["╔"+(g+"╦")*2+g+"╗"]+d+2*(["╠"+(e+"╬")*2+e+"╣"]+d)+["╚"+(h+"╩")*2+h+"╝"]lưu 4 byte
chính thức

7

C (gcc) , 398 395 291 byte

Đã lưu 3 byte bằng cách làm việc thông qua chuỗi đảo ngược và 104 (!) Byte nhờ Leaky Nun.

#include<locale.h>
#define q(x,y) x y x y x
#define D L"╝"q(q("═══","╧"),"╩")"╚"q(q("\n║"q(q(" & ","│"),"║")"║","\n╢"q(q("───","┼"),"╫")"╟"),"\n╣"q(q("═══","╪"),"╬")"╠")"\n╗"q(q("═══","╤"),"╦")"╔"
i;f(int*t){setlocale(LC_ALL,"");for(i=721;i--;)wprintf(L"%lc",D[i]%19?D[i]:*t++?48+t[-1]:32);}

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

C (gcc) , 395 byte

Tôi sẽ giữ điều này ở đây để nó rõ ràng hơn về cách chương trình hoạt động.

#include<locale.h>
#define A L"\n╢───┼───┼───╫───┼───┼───╫───┼───┼───╟"
#define B L"\n║ & │ & │ & ║ & │ & │ & ║ & │ & │ & ║"
#define C L"\n╣═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╠"
#define E B A B A B
#define D L"╝═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╚"E C E C E L"\n╗═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╔"
i;f(int*t){setlocale(LC_ALL,"");for(i=721;i--;)wprintf(L"%lc",D[i]%19?D[i]:*t++?48+t[-1]:32);}

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

Làm việc với unicode trong C là ... tốn ​​kém. Đưa đầu vào như một int*hiển thị trong liên kết và trong đặc tả.

Tôi sẽ xem liệu tôi có thể lưu byte bằng một số phép thuật thay vì mã hóa chuỗi không.



@LeakyNun Huh, cảm ơn! Đó là 291 byte theo TIO
Conor O'Brien

TIO đang đếm bằng SBCS .
Rò rỉ Nun

6

PHP , 297 byte

<?for(;$l<19;$l++)echo$l&1?strtr(vsprintf(str_pad("",67,"║ %d │ %d │ %d "),array_slice($_GET,9*($l/2^0)-9,9)),0," "):str_pad([╔,╟,╠,╚][$b=$l?$l<18?$l%6<1?2:1:3:0],108,strtr("11101110111".[╦,╫,╬,╩][$b],[[╤,═],[┼,─],[╪,═],[╧,═]][$b])).[╗,╢,╣,╝][$b],"
";

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

Mở rộng

for(;$l<19;$l++)  # loop thrpugh lines
  echo$l&1 # Output
    ?strtr(
        vsprintf(str_pad("",67,"║ %d │ %d │ %d ") # formated string for lines with numbers
        ,array_slice($_GET,9*($l/2^0)-9,9)) # nine items of the input array
      ,0," ") #replace zeros with space
    :str_pad([╔,╟,╠,╚][$b=$l?$l<18?$l%6<1?2:1:3:0] # start character non number lines and switch number four cases
      ,108 # fill too 108 bytes
      ,strtr("11101110111".[╦,╫,╬,╩][$b] # with string 
        ,[[╤,═],[┼,─],[╪,═],[╧,═]][$b]))  #replace ones and zero with the two character in array chosed 
    .[╗,╢,╣,╝][$b] # end row with chosen character
  ,"
    "; # end line with new line

chức năng được sử dụng cho cả hai phiên bản

vsprintf , strtr , str_pad , array_slice , array_chunk

PHP , 313 byte

<?$r=($s=str_pad)(╔,108,($t=strtr)(($p=11101110111).╦,[╤,═])).╗;foreach(array_chunk($_GET,9)as$v)$r.=$t(vsprintf($s("
",68,"║ %d │ %d │ %d "),$v),0," ").(++$k%9?$k%3?$s("
╟",109,$t($p.╫,[┼,─])).╢:$s("
╠",109,$t($p.╬,[╪,═])).╣:"");echo$r.$s("
╚",109,$t($p.╩,[╧,═])).╝;

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


Cái này hoạt động ra sao?
Cyoce

@Cyoce Tôi đã thêm một lời giải thích cho phiên bản mới của mình
Jörg Hülsermann

5

T-SQL, 445 437 byte (bằng 381 ký tự)

DECLARE @r INT=0,@ NVARCHAR(999)=N'╔=╤=╤=╦=╤=╤=╦=╤=╤=╗P'p:SELECT @+=FORMAT(CAST(SUBSTRING(a,@r*9+1,9)AS INT),N'║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║P')FROM t
SET @r+=1IF @r=9SET @+=N'╚=╧=╧=╩=╧=╧=╩=╧=╧=╝P'ELSE IF @r%3=0SET @+=N'╠=╪=╪=╬=╪=╪=╬=╪=╪=╣P'ELSE SET @+=N'╟-┼-┼-╫-┼-┼-╫-┼-┼-╢P'IF @r<9GOTO p
PRINT REPLACE(REPLACE(REPLACE(REPLACE(@,'=',N'═══'),'-',N'───'),'0',' '),'P',CHAR(13))

Đầu vào là thông qua một chuỗi các chữ số được lưu trữ trong cột a của bảng t có sẵn , theo các phương thức được phê duyệt .

Định dạng và giải thích :

DECLARE @r INT=0, @ NVARCHAR(999)= N'╔=╤=╤=╦=╤=╤=╦=╤=╤=╗P'
p:
    SELECT @+= FORMAT(CAST(SUBSTRING(a, @r*9+1, 9) AS INT),
        N'║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║P') FROM t
    SET @r+=1
    IF @r=9 SET @+= N'╚=╧=╧=╩=╧=╧=╩=╧=╧=╝P'
    ELSE IF @r%3=0 SET @+= N'╠=╪=╪=╬=╪=╪=╬=╪=╪=╣P'
    ELSE SET @+= N'╟-┼-┼-╫-┼-┼-╫-┼-┼-╢P'
IF @r<9 GOTO p
PRINT REPLACE(REPLACE(REPLACE(REPLACE(@, '=',N'═══'), '-',N'───'), '0',' '), 'P',CHAR(13))

Trong dòng trên cùng của vòng lặp, tôi nhận được 9 chữ số tiếp theo của chuỗi đầu vào từ cột a của bảng t có sẵn .

Tôi chuyển đổi chuỗi chữ số đó thành một số nguyên và sử dụng FORMAThàm .Net để hiển thị chúng bằng mẫu văn bản tùy chỉnh '║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║P'.

Sau đó, tôi chỉ nối thêm đường phân chia thích hợp và thực hiện một số thay thế tiết kiệm byte trước khi xuất.

Đầu ra được hiển thị trong khung kết quả:

╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗
║ 8 │ 5 │   ║   │   │ 2 ║ 4 │   │   ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║ 7 │ 2 │   ║   │   │   ║   │   │ 9 ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║   │   │ 4 ║   │   │   ║   │   │   ║
╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣
║   │   │   ║ 1 │   │ 7 ║   │   │ 2 ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║ 3 │   │ 5 ║   │   │   ║ 9 │   │   ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║   │ 4 │   ║   │   │   ║   │   │   ║
╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣
║   │   │   ║   │ 8 │   ║   │ 7 │   ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║   │ 1 │ 7 ║   │   │   ║   │   │   ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║   │   │   ║   │ 3 │ 6 ║   │ 4 │   ║
╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝

Trước đây tôi đã có một số thay thế bổ sung cho một số ký tự vẽ khác, nhưng cuối cùng chúng không tiết kiệm cho tôi byte.

EDIT 1 : Đã lưu 8 byte bằng cách bắt đầu từ @r0 thay vì 1 và xóa một số khoảng trắng không cần thiết.


4

Võng mạc , 196 167 byte

.{27}
¶N#=XZ#Q¶|$&
\d{9}\B
$&¶M#─┼Y#P¶|
\d{3}
 $& |
\B\d
 │ $&
^¶.*
B#=RT#E
$
¶H#=UW#K
+`#([^#¶]+)([^#¶])#
#$1#$2#$1#$2#$1#
#(.)#
$1$1$1
T`0=|#L` ═-╬

Hãy thử trực tuyến! Lấy đầu vào dưới dạng một chuỗi có độ dài 81. Giải thích: Bởi vì các ký tự vẽ hộp có giá ba byte, các điểm mã unicode ═-╬được biểu diễn trong mã bằng cách sử dụng =|#A-Z(không phải tất cả các ký tự được sử dụng nhưng việc bám vào phạm vi sẽ tiết kiệm byte). Ngoài ra, các hàng được nén bằng #các dấu hiệu: a#bcd#emở rộng đến abbbcbbbcbbbdbbbcbbbcbbbdbbbcbbbcbbbe.

.{27}
¶N#=XZ#Q¶|$&

Chèn ╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣cho mỗi hàng thứ ba, cộng với một bắt đầu của mỗi nhóm 27.

\d{9}\B
$&¶M#─┼Y#P¶|

Chèn ╟───┼───┼───╫───┼───┼───╫───┼───┼───╢giữa các hàng khác, cộng với s ở đầu các hàng đó.

\d{3}
 $& |

Chèn s sau mỗi ba chữ số. Tất cả các s đã được chèn vào.

\B\d
 │ $&

Chèn |s giữa tất cả các cặp chữ số còn lại. (Cái này là ký tự vẽ hộp thực tế chứ không phải là ống. Thật không may, các ký tự ─│┼có mã cách nhau quá xa và các ký tự hộp kép để làm cho nó có giá trị trong khi sử dụng trình giữ chỗ.)

^¶.*
B#=RT#E

Thay đổi hàng đầu tiên thành ╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗(điều này tiết kiệm 1 byte so với việc không thêm hàng đầu tiên ở vị trí đầu tiên).

$
¶H#=UW#K

Thêm ╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝sau hàng cuối cùng.

+`#([^#¶]+)([^#¶])#
#$1#$2#$1#$2#$1#

Mở rộng a#bcd#e, đầu tiên a#bc#d#bc#d#bc#e, sau đó đến a#b#c#b#c#b#d#b#c#b#c#b#d#b#c#b#c#b#e.

#(.)#
$1$1$1

Thay đổi #b#thành bbb. Điều này hoàn thành việc giải nén.

T`0=|#L` ═-╬

Xóa tất cả các mục nhập không và thay thế các phần giữ chỗ bằng các ký tự vẽ hộp.


Bạn quên thay thế 0bằng không gian.
Rò rỉ Nun

Cũng có các đường đôi xung quanh mỗi hàng, thay vì chỉ các đường viền và các vùng 3x3.
Joel Coehoorn

@JoelCoehoorn Đã sửa, xin lỗi.
Neil

@LeakyNun Cảm ơn, tôi đã bỏ qua điều đó. (Ngoài ra, tôi muốn tránh các dòng kết thúc bằng, hoặc đặc biệt chỉ chứa các khoảng trắng, đó là lý do tại sao tôi tìm kiếm một cách tiết kiệm 2 byte thay thế.)
Neil

3

SOGL V0.12 , 174 172 164 160 158 byte

«ž#>]Wž²6√±_ΕΨ╥╬]v←ē⅓ZΗ⌡z∫◄‽q   §↑╗∑Ολ[Μ↕z↓/∆Yn⁄:Ο║χ≥¾▓g*≈]═+π℮─6⁽SE/⁷,0+►Ƨ⌡u\^⁄-▼0cΦ“╤─┼╬│║═╔╗╚╝”Φ⅜nΡ¡ΞΨīŗ(`½│uģ“ ╬ζ─{ζ} 6Δ¹∑A'⁄─{IaW}¹∑#¶ŗ3 ¶ŗ ”+Ƨøp+!!┌d0@ŗčŗ

Giải thích quá dài:

...“                          push a big base-43 encoded number; will be used later. It's pushed here to save a byte on a quote
    ...”                      push "╤─┼╬│║═╔╗╚╝" - the chars in SOGLs encoding
        ...“                  push 679301851737965572513837476350078477
             ╬                push "╬"
              ζ               convert it to its codepoint (9580)
               ─              convert that number to an array of base-9580 numbers
                {ζ}           convert each number to a character (pushing each on the stack)
                    6Δ        push all ascii chars up to 6 (" !"#$%&'()*+,-./0123456")
                      ¹∑      join all the strings on the stack together ("╤─┼╬│║═╔╗╚╝╦╟╫╢╠╪╣╧╩ !"#$%&'()*+,-./0123456")
                        A     save on variable `A`. Now ontop of the stack is the 1st big number
                         '⁄─  onvert from base 43

{   }                           for each number do
 I                                increase
  aW                              get its position in the variable A
     ¹∑                         join all the strings ontop of the stack (the loop above pushed each char separately)
       #¶ŗ                      replace quote (") characters with newlines
          3 ¶ŗ                  replace 3s with "¶"
               ”+               append "”"
                 Ƨøp+           append "øp"
                     !!         execute the created code as SOGL
                       ┌        push "-"
                        d       push variable d - defaults to string input. In a full program could be set as an input
                         0@ŗ    replace zeroes with spaces
                            č   chop into an array
                             ŗ  replace ["-" with input chopped - so each iteratively]

Chương trình được thực hiện:

───!#
 - $
¶%&¶'(
)╪)╪)+
)╤)╤),
)╧)╧).
┼#
+╬+/
0!╫0!1
,╦,2
.╩.4
5│$║&
#0
═══)
$│$5
║&&%
╠/╬+╣6'*
╟1╫0!╢(
(6
╔2╦,╗6'**╚4╩.╝”øp

nơi tất cả nhưng dòng cuối cùng chỉ là in the entire program replace occurrences of the last char of this line with the rest of this line. Đây là lý do có thể tạo ra một nửa số ký tự chỉ là ascii ngẫu nhiên (nhưng để có được khoảng trắng, dấu gạch ngang và dấu ngoặc kép được sử dụng một cách hữu ích thì phải mất một thời gian để tìm ra)

...”    push the whole sudoku grid
    øp  print nothing (prevents bug that this code would already print and pop the result)

Hãy thử nó ở đây!
Mã trình thông dịch trực tuyến chính xác hơn vì các tab không hoạt động với SE

-8 byte: thay thế lực lượng vũ trang nén toàn bộ bảng, sau đó thay thế các ký tự nước ngoài (sang bảng mã) bằng các bảng mã của chúng. Làm điều này mất ít hơn một giờ so với chương trình cũ ...
-4 byte: nén chuỗi nén ...
-2 byte: sử dụng biến + chuỗi thay vì mảng


2

JavaScript (ES6), 246 byte / 198 ký tự

(n,r=(x,y)=>x+y+x+y+x,q=s=>([u,w,x,y,z]=[...s[0]],u+r(r(w+w+w,x),y)+z+`
`))=>q`╔═╤╦╗`+n.reduce((o,v,i)=>o+"║││"[i++%3]+` ${v||" "} `+(i%9?e:`║
`+(i-27&&i-54?i<81?q`╟─┼╫╢`:e:q`╠═╪╬╣`)),e="")+q`╚═╧╩╝`

Đầu vào là một mảng các số nguyên. Cuối cùng đã sử dụng hai hàm trợ giúp giống như câu trả lời Python của Leaky Nun , vì vậy tín dụng đến đó.

Nếu functionđược yêu cầu, 263 byte / 215 ký tự

function g(n,r=(x,y)=>x+y+x+y+x,q=s=>([u,w,x,y,z]=[...s[0]],u+r(r(w+w+w,x),y)+z+`
`)){return q`╔═╤╦╗`+n.reduce((o,v,i)=>o+"║││"[i++%3]+` ${v||" "} `+(i%9?e:`║
`+(i-27&&i-54?i<81?q`╟─┼╫╢`:e:q`╠═╪╬╣`)),e="")+q`╚═╧╩╝`}

Kiểm tra đoạn trích

Bất kỳ đầu vào nào của 81 số đều được hỗ trợ ( 1234, 1, 2, 3, 4. [1 2 3 4], V.v.). Xem tốt nhất là trang đầy đủ.

f=
(n,r=(x,y)=>x+y+x+y+x,q=s=>([u,w,x,y,z]=[...s[0]],u+r(r(w+w+w,x),y)+z+`
`))=>q`╔═╤╦╗`+n.reduce((o,v,i)=>o+"║││"[i++%3]+` ${v||" "} `+(i%9?e:`║
`+(i-27&&i-54?i<81?q`╟─┼╫╢`:e:q`╠═╪╬╣`)),e="")+q`╚═╧╩╝`

onload=I.oninput=_=>O.innerHTML=(m=I.value.match(/\d/g))&&m.length==81?f(m.map(x=>+x)):''
<textarea id=I rows=3 style="width:95%">8, 5, 0, 0, 0, 2, 4, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 2, 3, 0, 5, 0, 0, 0, 9, 0, 0 ,0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 7, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 4, 0</textarea>
<pre id=O>


2

Mẻ, 332 byte

@echo off
set/ps=
set s=%s:0= %
call:l É Í Ñ Ë »
set t="Ç Ä Å × ¶"
for %%i in (%t% %t% "Ì Í Ø Î ¹" %t% %t% "Ì Í Ø Î ¹" %t% %t% "È Í Ï Ê ¼")do call:c %%~i
exit/b
:c
set t=º
for %%j in (³ ³ º ³ ³ º ³ ³ º)do call set t=%%t%% %%s:~,1%% %%j&call set s=%%s:~1%%
echo %t%
:l
set t=%2%2%2%3%2%2%2%3%2%2%2
echo %1%t%%4%t%%4%t%%5

Cần giao diện điều khiển trong CP437. Nếu đó không phải là mặc định của bạn, thì bạn có thể thay đổi nó bằng CHCP 437lệnh nếu bảng điều khiển của bạn được đặt thành phông chữ TrueType. (Nó sẽ chỉ hoạt động với phông chữ raster nếu CP437 đã là trang mã mặc định của bạn.) Đây là mã trông giống như trong CP437:

@echo off
set/ps=
set s=%s:0= %
call:l ╔ ═ ╤ ╦ ╗
set t="╟ ─ ┼ ╫ ╢"
for %%i in (%t% %t% "╠ ═ ╪ ╬ ╣" %t% %t% "╠ ═ ╪ ╬ ╣" %t% %t% "╚ ═ ╧ ╩ ╝")do call:c %%~i
exit/b
:c
set t=║
for %%j in (│ │ ║ │ │ ║ │ │ ║)do call set t=%%t%% %%s:~,1%% %%j&call set s=%%s:~1%%
echo %t%
:l
set t=%2%2%2%3%2%2%2%3%2%2%2
echo %1%t%%4%t%%4%t%%5

2

Với những ý tưởng được thu hoạch từ các câu trả lời khác:

C # (.NET Core) , 401 byte, 349 Chars

string s(string x){Func<string,string,string>q=(m,n)=>m+n+m+n+m;var a="╔"+q(q("=","╤"),"╦")+"╗";for(var i=0;i<9;) {a+=int.Parse(x.Substring(i*9,9)).ToString("\n║"+q(q(" 0 ","│"),"║")+"║\n")+(i++<8?(i%3>0?"╟"+q(q("-","┼"),"╫")+"╢":"╠"+q(q("=","╪"),"╬")+"╣"):"╚"+q(q("=","╧"),"╩")+"╝");}return a.Replace("=","═══").Replace("-","───").Replace("0"," ");}

Ung dung:

static public string s(string x)
{
    Func<string,string,string>q=(m,n)=>m+n+m+n+m;
    var a="╔"+q(q("=","╤"),"╦")+"╗";
    for (var i=0;i<9;) //once per row
    {
        //parse that row to an int, then spit out a formatted string
        a += int.Parse(x.Substring(i*9,9)).ToString("\n║"+q(q(" 0 ","│"),"║")+"║\n") 
          // as well as a trailing row for the box
          + (i++<8?(i%3>0?"╟"+q(q("-","┼"),"╫")+"╢":"╠"+q(q("=","╪"),"╬")+"╣"):"╚"+q(q("=","╧"),"╩")+"╝");
    }
    //expand placeholder characters before returning
    return a.Replace("=","═══").Replace("-","───").Replace("0"," ");
}

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

Câu trả lời của tôi:

C # (.NET Core) , 509 430 418 byte, ký tự 328

string b(string x){var a="╔=╤=╤=╦=╤=╤=╦=╤=╤=╗\n║";for(int i=0,j=0,k,l,m;j<3;j++)for(k=0;k<3;k++){for(l=0;l<3;l++)for(m=0;m<3;)a+=" "+x[i++]+(m++<2?" │":" ║");a+=i<80?(k<2?"\n╟-┼-┼-╫-┼-┼-╫-┼-┼-╢\n║":"\n╠=╪=╪=╬=╪=╪=╬=╪=╪=╣\n║"):"\n╚=╧=╧=╩=╧=╧=╩=╧=╧=╝";}return a.Replace("=","═══").Replace("-","───").Replace("0"," ");}

Ung dung:

public string s(string x)
{
    var a = "╔=╤=╤=╦=╤=╤=╦=╤=╤=╗\n║";
    for (int i=0,j=0,k,l,m;j<3;j++)
    {
        for (k = 0; k < 3;k++)
        {
            for (l = 0; l < 3; l++)
            {
                for (m = 0; m < 3;)
                    a += " " + x[i++] + (m++ < 2 ? " │" : " ║");
            }
            a += i < 80 ? (k < 2 ? "\n╟-┼-┼-╫-┼-┼-╫-┼-┼-╢\n║": "\n╠=╪=╪=╬=╪=╪=╬=╪=╪=╣\n║") 
                        : "\n╚=╧=╧=╩=╧=╧=╩=╧=╧=╝";
        }
    }
    return a.Replace("=", "═══").Replace("-","───").Replace("0"," ");
}

I also looked at using a lambda for the `for` loops here, but it actually cost me one byte (saved 10 bytes per loop, with 41 bytes of overhead).

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


Bạn có cần tính mỗi ký tự vẽ là hai byte không?
BradC

Tôi đã làm, cố định bây giờ. Tôi đã có ý định giải quyết vấn đề đó và đếm các ký tự thay vì byte, vì các ký tự đó, nhưng tôi cho rằng bây giờ đã quá muộn.
Joel Coehoorn

Đúng, byte khó hơn, một số thay thế ascii lưu byte nhưng không tác động đến các ký tự (hoặc thậm chí làm tổn thương các ký tự). Tôi đang làm việc trên T-SQL và char vs nchar là một sự khác biệt khá lớn.
BradC

1

Chip , 3645 byte

... đó không phải là một lỗi đánh máy ...

ooooooZZ-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-).
|`xxxx-x--(x---x---x---x---x-v-x---x---x---x---x---x-.`K-)-K-)-K-)-K-).
|b|`xx-x--(x-v-x---x-v-x---x-x-x---x-v-x---x-v-x---x-x-x---x-v-x---x-.`K-).
|>xd`x-x(v-x-x-x-v-x-x-x-v-x-x-x-v-x-x-x-v-x-x-x-v-x-x-x-v-x-x-x-v-x-x-x-.|
||`--x-x-x(x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x/.
|`--z',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\','
`-. |,< >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.|
*-x-/xZ/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ'
Z~' |`'|`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`','`'
    `)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)'
=
oooooo).h
`)))--^M^Zh
=
oooooo
|    `(--------------------------------------------------------------------------------------------------------va
KZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^cg
)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx-xKZvvZ
xxxxxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxxx-Kxxxx}e
)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)x))xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)x))xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)x)b`feac
  c
=
oooooo
,'   `(--------------------------------------------------------------------------------------------------------.cba
KZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^x^^)v--.
xx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxxx-xK-'f e`.
)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx-x-K-+Z+Z}e
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxK^}b gac
xxxxxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxxx-K^d
=
oooooo
,-'
KZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZtabgfv------.
)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx-xK^^x-Zv-vZ}e
xxxxxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxxxK^---^}cade,]b
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)-K----^-^^~'
,v'
db
=
oooooo
,--' `(--------------------------------------------------------------------------------------------------------v-.,-v-ZZZZZZZZZZZZf
KZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'a{x.df
)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xxKx-xxv+Zc
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)x-KZx+bge
xx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxxx---K\--^c
 a^b
=
oooooo
,---'`(--------------------------------------------------.
KZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'gf
)xxxxx)xxxxx)xxxxx)xxxxx)xxxxx)xxxxx)xxxxx)xxxxx)xxxxx)xx-^KZc
)xxxxx)x)xxx)x)xxx)xxxxx)x)xxx)x)xxx)xxxxx)x)xxx)x)xxx)xxbahKZ\ZZZ
x))xxxxxxxxxxxxxxxx))xxxxxxxxxxxxxxxx))xxxxxxxxxxxxxxxx))-K-eh|fff
 ,--K-v-v-K--v-vK-v---K-----K-----K-----K-----K-----K `--Z-Z--'
A/ab/B/e/C/cd/D/-e/A
*}s

Hãy thử trực tuyến! , loại. Phiên bản TIO chứa khoảng một phần ba quãng đường ( tsau phần 4 oooooo), do đó, nó sẽ chấm dứt sau chưa đầy 60 giây. Phiên bản đầy đủ mất khoảng 1m25 trên máy của tôi và TIO dường như nhanh hơn một nửa. Điều này cũng có nghĩa là TIO chỉ hiển thị 7 dòng đầu ra đầu tiên.

Bản nháp đầu tiên của tôi nặng khoảng 19758 byte và mất khoảng 8m30 giây để chạy. Giải pháp cuối cùng, trước khi chơi golf, là 5980 byte, chỉ mất 2m07.

Vì vậy, làm thế nào nó hoạt động, sau đó?

Điều này có một chuỗi gồm 82 byte, 81 chữ số, theo sau là dấu kết thúc. \0hoặc \nthậm chí một số khác sẽ làm. (Việc triển khai này thực sự chỉ nhìn vào 81 đầu tiên, nhưng cần ít nhất một lần nữa, vì Chip sẽ chấm dứt nếu nó đã hết đầu vào. Nếu điều này không được chấp nhận, cờ -zcó thể được sử dụng, có hiệu quả nối thêm một số \0byte vô hạn vào kết thúc đầu vào.) Mã TIO rút ngắn không thực sự có được tất cả 81 byte, vì vậy điểm chính là ở đó.

Cách tôi đã thực hiện điều này, nó chỉ nhìn vào 4 bit đầu vào thấp, vì vậy, bất cứ thứ gì, thực sự, có thể là một 'câu đố' sudoku, từ dữ liệu nhị phân thô, đến các tác phẩm ít được biết đến của Shakespeare. Bất kỳ ký tự nào có 4 bit thấp đều bằng 0 sẽ xuất hiện dưới dạng khoảng trắng (trường hợp đặc biệt), tất cả các ký tự khác ánh xạ vào 123456789:;<=>?. (Vì vậy, một vài chữ số cuối cùng không phải là số, nhưng không phải là 10 số hợp lệ trong sudoku bình thường).

Đối với các ký tự vẽ hộp, nó tạo ra UTF-8, tương đương với 3 byte mỗi ký tự.

Còn việc thực hiện thì sao?

Chip là một ngôn ngữ 3D được lấy cảm hứng từ các mạch tích hợp. Nó có dây, cổng logic và các ô nhớ. Hầu hết mọi thứ được thực hiện trên các mặt phẳng 2D, nhưng các mặt phẳng này có thể được xếp chồng lên nhau. Đó là cách chương trình này được xây dựng.

Các dòng bắt đầu với =là dải phân cách. Sau đó, các lớp được xếp chồng lên nhau, với các cạnh trên và bên trái được căn chỉnh. Các o'đóng vai trò là chân, cho phép tín hiệu truyền từ lớp này sang lớp khác.

Mỗi lớp ở đây có một mục đích, bạn có thể nghĩ về chúng như các chức năng. Lớp đầu tiên kiểm soát mọi thứ; lần lượt nó gọi các lớp khác. Có một mô hình lặp lại từ trái sang phải ở đây. Mẫu đó theo dõi trong số 19 dòng đầu ra mà chúng tôi hiện đang in.

Lớp thứ hai khá nhỏ và nó có một công việc rất nhỏ. Nó đặt 0x80bit cho tất cả các dòng đầu ra ngoại trừ các dòng có chứa số. hlà phần tử Chip tương ứng với 0x80bit. (Đầu thấp của bảng chữ cái hthông qua axác định tất cả tám bit đầu ra.)

Lớp ba là nơi chúng ta thực sự đi vào thịt của in ấn. Lớp này phụ trách dòng một. Phiên bản không được chỉnh sửa có tám hàng x's và )', ánh xạ thành 0 và 1 cho mỗi tám bit của mỗi byte. Tuy nhiên, chúng ta có thể tận dụng các mẫu trong các bit để thực hiện cùng một nhiệm vụ trong ít hàng hơn.

Lớp bốn giống như lớp thứ ba. Nó xử lý các đường đôi ngang.

Lớp năm xử lý dòng cuối cùng. Lưu ý rằng nó thiếu dây dọc theo đỉnh mà các lớp khác có. Điều này là do chúng ta không cần phải trả lại quyền kiểm soát cho trình sắp xếp thứ tự. Thay vào đó, chúng ta chỉ có thể chấm dứt thực hiện ở đây với t.

Lớp sáu xử lý các đường đơn ngang.

Lớp bảy là nơi các số được in. Nó được gọi là 'cho mỗi chín dòng số. Nó tiêu thụ 9 byte đầu vào như là một phần của việc thực hiện.


1

JavaScript (ES6), 222 byte

Sử dụng cú pháp ngắn cho các hàm ES6 - 174 ký tự được mã hóa trong utf8, 222 byte ( https://otherseff.in/byte-corer ). Sử dụng function ...đòi hỏi thêm 16 byte.

F=v=>[1,...v].map((x,i)=>'│║│'[i%3]+` ${x||' '} `+(i%9?'':`║
${[h,r,s,u,t]=i%27?'─╟╫┼╢':i>80?'═╚╩╧╝':i?'═╠╬╪╣':'═╔╦╤╗',r+(s=(u=(h+=h+h)+u+h+u+h)+s)+s+u+t}
`)).join``.slice(6)

Ít chơi gôn

F=v=>{
   // horizontal lines are appended after each 9th element
   // so I need to prepend a dummy first element to draw the top horizontal line
   v = [1, ...v];
   return v.map( (x,i) => 
     '│║│'[i % 3] + ` ${x||' '} ` // left bar and cell value
     + ( i % 9 ? '' // add horizontal line after each 9th element
       // the line drawing characters are chosen according to the value of i
       : `║\n${ [h, r, s, u, t] = 
         i % 27 != 0
         ? '─╟╫┼╢'
         : i > 80 
           ? '═╚╩╧╝' // i==81, bottom row
           : i != 0
             ? '═╠╬╪╣'
             : '═╔╦╤╗', // i==0, top row
         r + (s = (u = (h += h + h) + u + h + u + h) + s) + s + u + t
         }\n`
       )
   ).join``
   .slice(6) // cut the first cell (the dummy element)
}

F=v=>[1,...v].map((x,i)=>'│║│'[i%3]+` ${x||' '} `+(i%9?'':`║
${[h,r,s,u,t]=i%27?'─╟╫┼╢':i>80?'═╚╩╧╝':i?'═╠╬╪╣':'═╔╦╤╗',r+(s=(u=(h+=h+h)+u+h+u+h)+s)+s+u+t}
`)).join``.slice(6)

function go() {
  var i=I.value
  i = i.match(/\d+/g).map(x => +x); // convert strings to numbers
  O.textContent = F(i)
}
#I { width: 90% }
<input id=I value='8 5 0 0 0 2 4 0 0 7 2 0 0 0 0 0 0 9 0 0 4 0 0 0 0 0 0 0 0 0 1 0 7 0 0 2 3 0 5 0 0 0 9 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 8 0 0 7 0 0 1 7 0 0 0 0 0 0 0 0 0 0 3 6 0 4 0'>
<button onclick='go()'>go</button>
<pre id=O></pre>


1

Java (OpenJDK 8) , 279 byte

String f(int[]a){String P="0121213121213121214",R[]={"╔═╤╦╗","║ │║║x","╟─┼╫╢","╠═╪╬╣","╚═╧╩╝"},r="";for(int X:P.getBytes()){for(int x:P.replace("1",R[X-=48].length()>5?"151":"111").getBytes())r+=R[X].charAt(x-48);r+="\n";}for(int i:a)r=r.replaceFirst("x",i>0?""+i:" ");return r;}

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

Đối với số byte, sử dụng CP-437, vốn được Java hỗ trợ như IBM437(các API gần đây) hoặc Cp437(API cũ hơn); Vì vậy, sử dụng một hệ thống có bộ ký tự này có bộ ký tự này làm bộ ký tự mặc định.

Mã này tương thích từ Java 5 trở đi, nhưng chỉ được thử nghiệm trên Java 8.

Giải trình

String f(int[]a){
  String P="0121213121213121214",                         // Both lines and rows are repeated according to this pattern.
         R[]={"╔═╤╦╗","║ │║║x","╟─┼╫╢","╠═╪╬╣","╚═╧╩╝"},  // Characters found on each line.
                                                          //   (note the 'x')
         r="";                                            // The string under construction
  for (int X: P.getBytes()) {                             // For each line,
    for (int x:                                           //  For each character in the pattern,
         P.replace("1",R[X-=48].length()>5?"151":"111")   //    *but* with a cell width of 3,
                                                          //    and with an optional character ('x')
         .getBytes())
      r+=R[X].charAt(x-48);                               //   append the real mapped character
    r+="\n";                                              //  then append a new line
  }
  for(int i:a)                                            // For each number in the input
    r = r.replaceFirst("x",i>0?""+i:" ");                 //  replace the first 'x' with that number.
                                                          //    (or space if zero)
  return r;                                               // Return the constructed string.
}

1

Tcl , 599 byte (295 ký tự)

Cách tiếp cận rất ngây thơ, nhưng tôi chỉ phải thực hiện nó ngay cả khi nó không phải là người chiến thắng bằng bất kỳ biện pháp nào:

puts ╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗
set r ║ 
lmap x $L {if !$x {set x \ }
set r $r\ $x\ [expr [incr i]%3?"│":"║"]
if ![expr $i%9] {puts $r\n[expr $i%27?"╟───┼───┼───╫───┼───┼───╫───┼───┼───╢":$i<72?"╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣":"╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝"]
set r ║}}

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


đó là 599 UTF-8 byte. Bạn nên cố gắng sử dụng lại các ký tự hộp chung để lưu byte
dzaima

@dzaima: Tôi biết, tôi có thể làm những gì tôi đã làm trên Bàn phím thật đến nỗi bạn gần như có thể
KIẾM

@dzaima: Đó là lý do tại sao tôi nói cách tiếp cận rất ngây thơ
sergiol
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.