Tôi không chắc là tôi hiểu chính xác phần thưởng đầu tiên nên tôi không giải quyết nó.
Điều này rõ ràng là không cạnh tranh vì ngôn ngữ gần đây hơn nhiều so với thử thách, tuy nhiên vì không có câu trả lời nào khác nên tôi không chắc vấn đề này có rất nhiều vấn đề
Vị ngữ chính:
@n Split the input on line breaks
:1a:"-"x Transform into a list of lists, each sublist contains a line's values
:7fF Transform so that cells are [Value:X:Y]
:3a All values on lines must be different
$\:3a All values on columns must be different (by transposition)
@3:4a, All 3*3 block values must be different
Fc~bCh[0:0:0]gO, Append a fake cell [0:0:0]
Co~c[V:O:T] Sort the board, the blank cells V will be those before O ([0:0:0])
h:F:6f Find all subsets of blank cells with specific values for which
the board has only one solution
:10ao Sort the subsets by lengths
:ba Discard the lengths
(
h:11a Print the first subset = an answer
; Or (board is already fully determined)
! Terminate
)
; Or (Some values don't respect the constraints)
"!!"w! Print "!!" and terminate
Vị ngữ 1: Xóa tất cả " |
" trên các dòng, chuyển đổi ---+---+---
thành -
loại bỏ chúng sau
h"-". If the first char is "-", then Output is "-"
| Or
:"|"x Remove all occurences of "|" from the input
:2f. Output is the result of all outputs of predicate 2 on the filtered string
Vị ngữ 2: Chuyển đổi một char thành một số nguyên hoặc nếu để trống thành một biến trong khoảng từ 1 đến 9.
e Take a char of the input string
(
~m["0123456789":.] Output is the index of the char in "0123456789"
` Discard the choice point caused by the ;
; Or
0<.<=9 Output is an integer between 1 and 9
)
Vị ngữ 3: Giả sử rằng tất cả các giá trị của danh sách đầu vào của các ô phải khác biệt
:ha Retrieve the head of each cell (i.e. the value) in the input
#d. Apply a constraint of distinctness to those values
Vị ngữ 4: Áp dụng ràng buộc phân biệt cho các giá trị trong các khối 3 * 3
:@3a Split 3 lines of the board in 3 parts
z Zip them together
:ca:5a. Concatenate each element of the zip, apply predicate 5 to that
Vị ngữ 5:
:3a. Apply predicate 3 to each element of the input
Dự đoán 6: Gán các giá trị thỏa mãn các ràng buộc cho một tập hợp con của các ô trống, sau đó với các giá trị đó chỉ có một giải pháp cho bảng.
hs. Output is a subset of the blank cells
:=a, Assign values to those cells
?t:9ac Concatenate the values of all cells of the board
:=f Find all solved boards
l1 There is only 1 such solved board
Dự đoán 7: Biến đổi bảng sao cho mỗi ô bây giờ [V:X:Y]
thay vì chỉ V
(giá trị).
:Im Take the Ith line of the board
:8f Transform all elements of the line using predicate 8
:[[I]]z Zip the result with [I]
:ca. Concatenate each element of the zip
Vị ngữ 8: Biến đổi một dòng sao cho mỗi ô hiện tại [V:X]
.
:Jm Take the Jth element of the line
:J. Output is [That element:J]
Vị ngữ 9: Lấy các giá trị của các ô
:ha. Take the head of each element of the input
Vị ngữ 10: Nối chiều dài của tập hợp con vào đầu của nó
lg Put the length of the input in a list
:?c. Concatenate it with the input
Vị ngữ 11: In một ô
b:+a[X:Y], Increment coordinates by 1 to get X and Y
?h:Y:Xr: Build the list [X:Y:Value]
"(~d,~d):~d\n"w Format that list as "('X','Y'):'Value'\n" to STDOUT