Add tasks for all the new languages

This commit is contained in:
Tina Müller 2016-12-05 23:44:36 +01:00
parent 9dc3c2bb62
commit bba7bfd280
13208 changed files with 134745 additions and 0 deletions

View file

@ -0,0 +1,80 @@
import strutils, algorithm
var board: array[0..19, array[0..19, int]]
var given, start: seq[int] = @[]
var rows, cols: int = 0
proc setup(s: string) =
var lines = s.splitLines()
cols = lines[0].split().len()
rows = lines.len()
for i in 0 .. rows + 1:
for j in 0 .. cols + 1:
board[i][j] = -1
for r, row in pairs(lines):
for c, cell in pairs(row.split()):
case cell
of "__" :
board[r + 1][c + 1] = 0
continue
of "." : continue
else :
var val = parseInt(cell)
board[r + 1][c + 1] = val
given.add(val)
if (val == 1):
start.add(r + 1)
start.add(c + 1)
given.sort(cmp[int], Ascending)
proc solve(r, c, n: int, next: int = 0): bool =
if n > given[high(given)]:
return true
if board[r][c] < 0:
return false
if (board[r][c] > 0 and board[r][c] != n):
return false
if (board[r][c] == 0 and given[next] == n):
return false
var back = board[r][c]
board[r][c] = n
for i in -1 .. 1:
for j in -1 .. 1:
if back == n:
if (solve(r + i, c + j, n + 1, next + 1)): return true
else:
if (solve(r + i, c + j, n + 1, next)): return true
board[r][c] = back
result = false
proc printBoard() =
for r in 0 .. rows + 1:
for cellid,c in pairs(board[r]):
if cellid > cols + 1: break
if c == -1:
write(stdout, " . ")
elif c == 0:
write(stdout, "__ ")
else:
write(stdout, "$# " % align($c,2))
writeLine(stdout, "")
var hi: string = """__ 33 35 __ __ . . .
__ __ 24 22 __ . . .
__ __ __ 21 __ __ . .
__ 26 __ 13 40 11 . .
27 __ __ __ 9 __ 1 .
. . __ __ 18 __ __ .
. . . . __ 7 __ __
. . . . . . 5 __"""
setup(hi)
printBoard()
echo("")
echo("Found:")
discard solve(start[0], start[1], 1)
printBoard()