첫 번째 보너스를 올바르게 이해했는지 잘 모르겠으므로 해결하지 못합니다.
언어가 도전 과제보다 훨씬 더 최신이기 때문에 이것은 분명히 경쟁이되지 않습니다. 그러나 다른 답변이 없기 때문에 이것이 중요합니다.
주요 술어 :
@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
술부 1 : |
행에서 " "를 모두 제거하고 ---+---+---
로 변환하여-
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
술어 2 : 하나의 문자를 정수로 변환하거나 공백 인 경우 1에서 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
)
술어 3 : 셀 입력 목록의 모든 값이 고유해야한다고 가정하십시오.
:ha Retrieve the head of each cell (i.e. the value) in the input
#d. Apply a constraint of distinctness to those values
술어 4 : 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
술어 5 :
:3a. Apply predicate 3 to each element of the input
조건 자 6 : 빈 셀의 하위 집합에 제약 조건을 만족하는 값을 할당 한 다음 해당 값을 사용하면 보드에 대한 솔루션이 하나만 있습니다.
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
술어 7 : 각 셀이 이제 값이 [V:X:Y]
아닌 보드가되도록 보드를 변환합니다 V
.
: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
술어 8 : 각 셀이 지금 있도록 행을 변환합니다 [V:X]
.
:Jm Take the Jth element of the line
:J. Output is [That element:J]
술어 9 : 셀 값 검색
:ha. Take the head of each element of the input
술어 10 : 시작 부분에 서브 세트 길이 추가
lg Put the length of the input in a list
:?c. Concatenate it with the input
술어 11 : 하나의 셀 인쇄
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