İlk bonusu doğru anladığımdan emin değilim, bu yüzden hitap etmiyorum.
Bu açıkça rekabet etmiyor, çünkü dil meydan okumadan çok daha yeni, ancak başka cevap olmadığı için bunun çok önemli olduğundan emin değilim…
Ana yüklem:
@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
Yüklem 1: Tüm "Kaldır |
" hatlarında, dönüşümü ---+---+---
içine -
sonra bunları kaldırmak için
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
Tahmin 2: Bir karakter bir tamsayıya veya boşsa 1 ile 9 arasındaki bir değişkene dönüştürülür.
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
)
Tahmin 3: Hücre giriş listesindeki tüm değerlerin farklı olması gerektiğini kabul edin
:ha Retrieve the head of each cell (i.e. the value) in the input
#d. Apply a constraint of distinctness to those values
Tahmin 4: 3 * 3 bloktaki değerlere farklılık kısıtlaması uygulayın
:@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
Tahmin 5:
:3a. Apply predicate 3 to each element of the input
Tahmin 6: Boş hücrelerin bir alt kümesine kısıtlamaları karşılayan değerler atayın, daha sonra bu değerlerle panoya yalnızca bir çözüm vardır.
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
Tahmin 7: Tahtayı, her bir hücrenin şimdi [V:X:Y]
sadece V
(değer) yerine olacak şekilde dönüştürür .
: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
Tahmin 8: Her hücre şimdi olacak şekilde bir çizgiyi dönüştürür [V:X]
.
:Jm Take the Jth element of the line
:J. Output is [That element:J]
Tahmin 9: Hücre değerlerini alma
:ha. Take the head of each element of the input
Tahmin 10: Bir alt kümenin uzunluğunu başına ekle
lg Put the length of the input in a list
:?c. Concatenate it with the input
Tahmin 11: Bir hücre yazdır
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