Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
61
Task/Knights-tour/Sidef/knights-tour.sidef
Normal file
61
Task/Knights-tour/Sidef/knights-tour.sidef
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
var board = []
|
||||
var I = 8
|
||||
var J = 8
|
||||
var F = (I*J > 99 ? '%3d' : '%2d')
|
||||
|
||||
var (i, j) = (I.irand, J.irand)
|
||||
|
||||
func from_algebraic(square) {
|
||||
if (var match = square.match(/^([a-z])([0-9])\z/)) {
|
||||
return(I - Num(match[1]), match[0].ord - 'a'.ord)
|
||||
}
|
||||
die "Invalid block square: #{square}"
|
||||
}
|
||||
|
||||
func possible_moves(i,j) {
|
||||
gather {
|
||||
for ni,nj in [
|
||||
[i-2,j-1], [i-2,j+1], [i-1,j-2], [i-1,j+2],
|
||||
[i+1,j-2], [i+1,j+2], [i+2,j-1], [i+2,j+1],
|
||||
] {
|
||||
if ((ni ~~ ^I) && (nj ~~ ^J) && !board[ni][nj]) {
|
||||
take([ni, nj])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func to_algebraic(i,j) {
|
||||
('a'.ord + j).chr + Str(I - i)
|
||||
}
|
||||
|
||||
if (ARGV[0]) {
|
||||
(i, j) = from_algebraic(ARGV[0])
|
||||
}
|
||||
|
||||
var moves = []
|
||||
for move in (1 .. I*J) {
|
||||
moves << to_algebraic(i, j)
|
||||
board[i][j] = move
|
||||
var min = [9]
|
||||
for target in possible_moves(i, j) {
|
||||
var (ni, nj) = target...
|
||||
var nxt = possible_moves(ni, nj).len
|
||||
if (nxt < min[0]) {
|
||||
min = [nxt, ni, nj]
|
||||
}
|
||||
}
|
||||
|
||||
(i, j) = min[1,2]
|
||||
}
|
||||
|
||||
say (moves/4 -> map { .join(', ') }.join("\n") + "\n")
|
||||
|
||||
for i in ^I {
|
||||
for j in ^J {
|
||||
(i%2 == j%2) && print "\e[7m"
|
||||
F.printf(board[i][j])
|
||||
print "\e[0m"
|
||||
}
|
||||
print "\n"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue