Solve a Hidato puzzle: Difference between revisions

m
no edit summary
mNo edit summary
 
(7 intermediate revisions by 6 users not shown)
Line 26:
* [[N-queens problem]]
* [[Solve a Holy Knight's tour]]
* [[Solve a Knight's tour]]
* [[Solve a Hopido puzzle]]
* [[Solve a Numbrix puzzle]]
Line 35:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">[[Int]] board
[Int] given
V start = (-1, -1)
Line 102:
solve(start[0], start[1], 1)
print()
print_board()</langsyntaxhighlight>
 
{{out}}
Line 126:
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">SolveHidato(Grid, Locked, Max, row, col, num:=1, R:="", C:=""){
if (R&&C) ; if neighbors (not first iteration)
{
Line 192:
}
return StrReplace(map, ">")
}</langsyntaxhighlight>
Examples:<langsyntaxhighlight AutoHotkeylang="autohotkey">;--------------------------------
Grid := [[ "Y" , 33 , 35 , "Y" , "Y"]
,[ "Y" , "Y" , 24 , 22 , "Y"]
Line 216:
;--------------------------------
MsgBox, 262144, ,% SolveHidato(Grid, Locked, Max, row, col)
return</langsyntaxhighlight>
Outputs:<pre>32 33 35 36 37
31 34 24 22 38
Line 228:
 
=={{header|Bracmat}}==
<langsyntaxhighlight lang="bracmat">(
( hidato
= Line solve lowest Ncells row column rpad
Line 340:
: ?board
& out$(hidato$!board)
);</langsyntaxhighlight>
Output:
<pre>
Line 364:
=={{header|C}}==
Depth-first graph, with simple connectivity check to reject some impossible situations early. The checks slow down simpler puzzles significantly, but can make some deep recursions backtrack much earilier.
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Line 530:
 
return 0;
}</langsyntaxhighlight>
{{out}}
<pre> Before:
Line 558:
If there are cells that require more characters, then a 2-dimensional array of ints must be used. Any number < 0 indicates a no-go.<br/>
The puzzle can be made circular (the end cell must connect to the start cell). In that case, no start cell needs to be given.
<langsyntaxhighlight lang="csharp">using System.Collections;
using System.Collections.Generic;
using static System.Console;
Line 685:
}
 
}</langsyntaxhighlight>
{{out}}
<pre>
Line 699:
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">
#include <iostream>
#include <sstream>
Line 852:
}
//--------------------------------------------------------------------------------------------------
</syntaxhighlight>
</lang>
Output:
<pre>
Line 878:
{{Works with|PAKCS}}
Probably not efficient.
<langsyntaxhighlight lang="curry">import CLPFD
import Constraint (andC, anyC)
import Findall (unpack)
Line 931:
] = success
 
main = unpack hidato</langsyntaxhighlight>
{{Output}}
<pre>Execution time: 1440 msec. / elapsed: 2270 msec.
Line 941:
This version retains some of the characteristics of the original C version. It uses global variables, it doesn't enforce immutability and purity. This style is faster to write for prototypes, short programs or less important code, but in larger programs you usually want more strictness to avoid some bugs and increase long-term maintainability.
{{trans|C}}
<langsyntaxhighlight lang="d">import std.stdio, std.array, std.conv, std.algorithm, std.string;
 
int[][] board;
Line 1,021:
solve(start[0], start[1], 1);
printBoard;
}</langsyntaxhighlight>
{{out}}
<pre> . . . . . . . . . .
Line 1,051:
 
With this coding style the changes in the code become less bug-prone, but also more laborious. This version is also faster, its total runtime is about 0.02 seconds or less.
<langsyntaxhighlight lang="d">import std.stdio, std.conv, std.ascii, std.array, std.string,
std.algorithm, std.exception, std.range, std.typetuple;
 
Line 1,265:
. . . _ _ . . _ _ . . _ _ . . _ _ . . _ _ . . _ _ . . _ _ . . _ _ . . _ _ . . _ _ . . _ _ . . _ _ ."
);
}</langsyntaxhighlight>
{{out}}
<pre>Problem:
Line 1,309:
=={{header|Elixir}}==
{{trans|Ruby}}
<langsyntaxhighlight lang="elixir"># Solve a Hidato Like Puzzle with Warnsdorff like logic applied
#
defmodule HLPsolver do
Line 1,386:
end)
end
end</langsyntaxhighlight>
 
'''Test:'''
<langsyntaxhighlight lang="elixir">adjacent = [{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}]
 
"""
Line 1,415:
. . 0 0 0 . 0 0 0 . 0 0 0 . 0 0 0 . 0 0 0 . 0 0 0 . 0
"""
|> HLPsolver.solve(adjacent)</langsyntaxhighlight>
 
{{out}}
Line 1,462:
=={{header|Erlang}}==
To simplify the code I start a new process for searching each potential path through the grid. This means that the default maximum number of processes had to be raised ("erl +P 50000" works for me). The task takes about 1-2 seconds on a low level Mac mini. If faster times are needed, or even less performing hardware is used, some optimisation should be done.
<syntaxhighlight lang="erlang">
<lang Erlang>
-module( solve_hidato_puzzle ).
 
Line 1,567:
 
store( {Key, Value}, Dict ) -> dict:store( Key, Value, Dict ).
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,595:
=={{header|Go}}==
{{trans|Java}}
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,712:
solve(start[0], start[1], 1, 0)
printBoard()
}</langsyntaxhighlight>
 
{{out}}
Line 1,741:
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">{-# LANGUAGE TupleSections #-}
{-# LANGUAGE Rank2Types #-}
 
Line 1,851:
, ". . . . 0 7 0 0"
, ". . . . . . 5 0"
]</langsyntaxhighlight>
{{Out}}
<pre> 0 33 35 0 0
Line 1,875:
 
This is an Unicon-specific solution but could easily be adjusted to work in Icon.
<langsyntaxhighlight lang="unicon">global nCells, cMap, best
record Pos(r,c)
 
Line 1,979:
QMouse(puzzle, goWest(), self, val)
QMouse(puzzle, goNW(), self, val)
end</langsyntaxhighlight>
 
Sample run:
Line 2,013:
{{trans|D}}
{{works with|Java|7}}
<langsyntaxhighlight lang="java">import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Line 2,117:
}
}
}</langsyntaxhighlight>
 
Output:
Line 2,146:
=={{header|Julia}}==
This solution utilizes a Hidato puzzle solver module which is also used for the Hopido and knight move tasks.
<langsyntaxhighlight lang="julia">module Hidato
 
export hidatosolve, printboard, hidatoconfigure
Line 2,202:
 
end # module
</langsyntaxhighlight><syntaxhighlight lang ="julia">using .Hidato
 
hidat = """
Line 2,220:
hidatosolve(board, maxmoves, kingmoves, fixed, starts[1][1], starts[1][2], 1)
printboard(board)
</langsyntaxhighlight>{{output}}<pre>
__ 33 35 __ __
__ __ 24 22 __
Line 2,242:
=={{header|Kotlin}}==
{{trans|Java}}
<langsyntaxhighlight lang="scala">// version 1.2.0
 
lateinit var board: List<IntArray>
Line 2,316:
solve(start[0], start[1], 1, 0)
printBoard()
}</langsyntaxhighlight>
 
{{out}}
Line 2,345:
 
=={{header|Mathprog}}==
<langsyntaxhighlight lang="mathprog">/*Hidato.mathprog, part of KuKu by Nigel Galloway
 
Find a solution to a Hidato problem
Line 2,408:
;
end;</langsyntaxhighlight>
Using the data in the model produces the following:
{{out}}
Line 2,654:
=={{header|Mathematica}}/{{header|Wolfram Language}}==
This implements a solver that works based on various techniques, i.e. not brute-forcing:
<langsyntaxhighlight Mathematicalang="mathematica">ClearAll[NeighbourQ, CellDistance, VisualizeHidato, HiddenSingle, \
NakedN, HiddenN, ChainSearch, HidatoSolve, Cornering, ValidPuzzle, \
GapSearch, ReachDelete, GrowNeighbours]
Line 3,000:
VisualizeHidato[cells, candidates]
out = HidatoSolve[cells, candidates];
VisualizeHidato[cells, out]</langsyntaxhighlight>
{{out}}
Outputs a graphical version of the solved hidato.
 
=={{header|MiniScript}}==
<syntaxhighlight lang="miniscript">
string.splitBySpaces = function
s = self.split
while s.indexOf("") != null
s.remove(s.indexOf(""))
end while
return s
end function
 
Hidato = {"board": [], "given": [], "start": [], "maxNum": 0}
Hidato.__emptyBoard = function(nRows, nCols)
self.board = []
emptyRow = []
for c in range(1,nCols + 2)
emptyRow.push(-1)
end for
for r in range(1,nRows + 2)
self.board.push(emptyRow[:])
end for
end function
 
Hidato.setup = function(s)
lines = s.split(char(13))
cols = lines[0].splitBySpaces.len
rows = lines.len
// create empty board with room
// for the wall at the edge
self.__emptyBoard(rows,cols)
board = self.board
// fill board with start puzzle
for r in range(0, rows - 1)
for c in range(0, cols - 1)
cell = (lines[r].splitBySpaces)[c]
if cell == "__" then
board[r+1][c+1] = 0 // unknown
else if cell == "." then
continue // -1 for blocked
else
num = cell.val
board[r+1][c+1] = num
self.given.push(num)
if num == 1 then
self.start = [r+1,c+1]
end if
if num > self.maxNum then self.maxNum = num
end if
end for
end for
self.given.sort
end function
 
Hidato.solve = function(n, pos = null, next = 0)
if n > self.given[-1] then return true
if pos == null then pos = self.start
r = pos[0]
c = pos[1]
board = self.board
if board[r][c] and board[r][c] != n then return false
if board[r][c] == 0 and self.given[next] == n then return false
back = 0
if board[r][c] == n then
next += 1
back = n
end if
board[r][c] = n
for i in range(-1, 1)
for j in range(-1,1)
if self.solve(n + 1, [r + i, c + j], next) then return true
end for
end for
board[r][c] = back
return false
end function
 
Hidato.print = function
board = self.board
maxLen = str(self.maxNum).len + 1
padding = " " * maxLen
for row in board[1:-1]
s = ""
for cell in row[1:-1]
c = padding + "__" * (cell == 0) + str(cell) * (cell > 0)
s += c[-maxLen:]
end for
print s
end for
end function
 
puzzle = "__ 33 35 __ __ . . ." + char(13)
puzzle += "__ __ 24 22 __ . . ." + char(13)
puzzle += "__ __ __ 21 __ __ . ." + char(13)
puzzle += "__ 26 __ 13 40 11 . ." + char(13)
puzzle += "27 __ __ __ 9 __ 1 ." + char(13)
puzzle += " . . __ __ 18 __ __ ." + char(13)
puzzle += " . . . . __ 7 __ __" + char(13)
puzzle += " . . . . . . 5 __"
 
Hidato.setup(puzzle)
print "The initial puzzle board:"
Hidato.print
print
Hidato.solve(1)
print "The puzzle solved:"
Hidato.print</syntaxhighlight>
{{out}}
<pre>
The initial puzzle board:
__ 33 35 __ __
__ __ 24 22 __
__ __ __ 21 __ __
__ 26 __ 13 40 11
27 __ __ __ 9 __ 1
__ __ 18 __ __
__ 7 __ __
5 __
 
The puzzle solved:
32 33 35 36 37
31 34 24 22 38
30 25 23 21 12 39
29 26 20 13 40 11
27 28 14 19 9 10 1
15 16 18 8 2
17 7 6 3
5 4</pre>
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">import strutils, algorithm, sequtils, strformat
 
type Hidato = object
Line 3,083 ⟶ 3,214:
echo("Found:")
discard hidato.solve(hidato.start[0], hidato.start[1], 1)
hidato.print()</langsyntaxhighlight>
{{out}}
<pre> . . . . . . . . . .
Line 3,109 ⟶ 3,240:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">use strict;
use List::Util 'max';
 
Line 3,192 ⟶ 3,323:
 
print "\033[2J";
try_fill(1, $known[1]);</langsyntaxhighlight>{{out}}
32 33 35 36 37
31 34 24 22 38
Line 3,203 ⟶ 3,334:
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">board</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">warnsdorffs</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">knownx</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">knowny</span>
Line 3,379 ⟶ 3,510:
__ __ __ .. .. __ __ __ .. .. __ __ __ .. .. __ __ __ .. .. __ __ __ .. .. __ __ __ .. .. __ __ __ .. .. __ __ __ .. .. __ __ __ .. .. .."""</span>
<span style="color: #000000;">Hidato</span><span style="color: #0000FF;">(</span><span style="color: #000000;">board6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">46</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">82</span><span style="color: #0000FF;">)</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre style="font-size: 8px">
Line 3,427 ⟶ 3,558:
 
=={{header|Picat}}==
<langsyntaxhighlight Picatlang="picat">import sat.
 
main =>
M = {{0, 0_, 033, 0, 035, 0_, 0_, 0, 0, 0},
{0 _, _,3324,3522, _, _, 0, 0, 0, 0},
{0 _, _, _,24,2221, _, 0, 0_, 0, 0},
{0, _, _26, _,2113, _40, _, 011, 0, 0},
{027, _,26 _, _,13,40,11 9, 0_, 01, 0},
{ 0,27, _0, _, _, 918, _, 1, 0_, 0},
{ 0, 0, 0, _0, _,18 7, _, _, 0, 0},
{ 0, 0, 0, 0, 0, _0, 75, _, _, 0}},
{0, 0, 0, 0, 0, 0, 0, 5, _, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
MaxR = len(M),
MaxC = len(M[1]),
Line 3,474 ⟶ 3,603:
R1 >= 1, R1 =< MaxR, C1 >= 1, C1 =< MaxC,
(R1,C1) != (R,C), M[R1,C1] !== 0].
</syntaxhighlight>
</lang>
{{out}}
<pre>
32 . 33 .35 36 . . . . .37 . . .
31 . 34 32 24 33 22 35 36 37 .38 . . .
30 . 25 31 23 34 21 24 12 22 38 . .39 . .
29 . 26 30 20 25 13 23 40 21 12 39 .11 . .
27 . 28 29 14 26 19 20 139 4010 11 . .1 .
. 27 . 28 15 14 16 19 18 9 8 10 1 .2 .
. . . 15 . 16 17 18 7 8 6 2 . .3
. . . . . 17 . 7 5 6 3 .4
. . . . . . . 5 4 .
. . . . . . . . . .
</pre>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(load "@lib/simul.l")
 
(de hidato (Lst)
Line 3,534 ⟶ 3,661:
(disp Grid 0
'((This)
(if (: val) (align 3 @) " ") ) ) ) )</langsyntaxhighlight>
Test:
<langsyntaxhighlight PicoLisplang="picolisp">(hidato
(quote
(T 33 35 T T)
Line 3,545 ⟶ 3,672:
(NIL NIL T T 18 T T)
(NIL NIL NIL NIL T 7 T T)
(NIL NIL NIL NIL NIL NIL 5 T) ) )</langsyntaxhighlight>
Output:
<pre> +---+---+---+---+---+---+---+---+
Line 3,569 ⟶ 3,696:
Works with SWI-Prolog and library(clpfd) written by '''Markus Triska'''.<br>
Puzzle solved is from the Wilkipedia page : http://en.wikipedia.org/wiki/Hidato
<langsyntaxhighlight Prologlang="prolog">:- use_module(library(clpfd)).
 
hidato :-
Line 3,668 ⟶ 3,795:
 
my_write_1(X) :-
writef('%3r', [X]).</langsyntaxhighlight>
{{out}}
<pre>?- hidato.
Line 3,682 ⟶ 3,809:
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">board = []
given = []
start = None
Line 3,750 ⟶ 3,877:
solve(start[0], start[1], 1)
print
print_board()</langsyntaxhighlight>
{{out}}
<pre> __ 33 35 __ __
Line 3,776 ⟶ 3,903:
immediately when tested with custom 2d vector library.
 
<syntaxhighlight lang="racket">
<lang Racket>
#lang racket
(require math/array)
Line 3,846 ⟶ 3,973:
;main function
(define (hidato board) (put-path board (hidato-path board)))
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 3,867 ⟶ 3,994:
essentially the neighbourhood function.
 
<langsyntaxhighlight lang="racket">#lang racket
(require "hidato-family-solver.rkt")
 
Line 3,886 ⟶ 4,013:
#( _ _ _ _ 0 7 0 0)
#( _ _ _ _ _ _ 5 0)))))
</syntaxhighlight>
</lang>
 
{{out}}
Line 3,909 ⟶ 4,036:
* [[Solve the no connection puzzle#Raku|Solve the no connection puzzle]]
 
<syntaxhighlight lang="raku" perl6line>my @adjacent = [-1, -1], [-1, 0], [-1, 1],
[ 0, -1], [ 0, 1],
[ 1, -1], [ 1, 0], [ 1, 1];
Line 4,006 ⟶ 4,133:
say "$tries tries";
}</langsyntaxhighlight>
 
=={{header|REXX}}==
Line 4,015 ⟶ 4,142:
 
''Hidato'' &nbsp; and &nbsp; ''Numbrix'' &nbsp; are registered trademarks.
<langsyntaxhighlight lang="rexx">/*REXX program solves a Numbrix (R) puzzle, it also displays the puzzle and solution. */
maxR=0; maxC=0; maxX=0; minR=9e9; minC=9e9; minX=9e9; cells=0; @.=
parse arg xxx; PZ='Hidato puzzle' /*get the cell definitions from the CL.*/
Line 4,069 ⟶ 4,196:
say _
end /*r*/
say; return</langsyntaxhighlight>
'''output''' &nbsp; when using the following as input:
<br> <tt> 1 7 5 .\2 5 . 7 . .\3 3 . . 18 . .\4 1 27 . . . 9 . 1\5 1 . 26 . 13 40 11\6 1 . . . 21 . .\7 1 . . 24 22 .\8 1 . 33 35 . .</tt>
Line 4,098 ⟶ 4,225:
===Without Warnsdorff===
The following class provides functionality for solving a hidato problem:
<langsyntaxhighlight lang="ruby"># Solve a Hidato Puzzle
#
class Hidato
Line 4,152 ⟶ 4,279:
(msg ? [msg] : []) + str + [""]
end
end</langsyntaxhighlight>
 
'''Test:'''
<langsyntaxhighlight lang="ruby"># Which may be used as follows to solve Evil Case 1:
board1 = <<EOS
. 4
Line 4,184 ⟶ 4,311:
t0 = Time.now
Hidato.new(board3).solve
puts " #{Time.now - t0} sec"</langsyntaxhighlight>
 
{{out}}
Line 4,233 ⟶ 4,360:
===With Warnsdorff===
I modify method as follows to implement [[wp:Knight's_tour#Warnsdorff|Warnsdorff]] like
<langsyntaxhighlight lang="ruby"># Solve a Hidato Like Puzzle with Warnsdorff like logic applied
#
class HLPsolver
Line 4,300 ⟶ 4,427:
(msg ? [msg] : []) + str + [""]
end
end</langsyntaxhighlight>
Which may be used as follows to solve Hidato Puzzles:
<langsyntaxhighlight lang="ruby">require 'HLPsolver'
 
ADJACENT = [[-1, -1], [-1, 0], [-1, 1], [0, -1], [0, 1], [1, -1], [1, 0], [1, 1]]
Line 4,347 ⟶ 4,474:
t0 = Time.now
HLPsolver.new(board3).solve
puts " #{Time.now - t0} sec"</langsyntaxhighlight>
 
Which produces:
Line 4,417 ⟶ 4,544:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">
use std::cmp::{max, min};
use std::fmt;
Line 4,612 ⟶ 4,739:
}
 
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 4,635 ⟶ 4,762:
</pre>
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
 
var set of integer: given is {};
Line 4,734 ⟶ 4,861:
printBoard;
end if;
end func;</langsyntaxhighlight>
 
{{out}}
Line 4,764 ⟶ 4,891:
=={{header|Tailspin}}==
{{trans|Java}}
<langsyntaxhighlight lang="tailspin">
def input:
'__ 33 35 __ __ . . .
Line 4,774 ⟶ 4,901:
. . . . __ 7 __ __
. . . . . . 5 __';
 
templates hidato
composer setup
data givenInput <n´1:[<´{}´ ={}|{row: <row>, col: <col>}>*]> local
@: {row: 1, col: 1, givenInput:n´1:[]};
{ board: row´1:[ <line>+ ], given: $@.givenInput -> \[i](<~´{}´ ={}> { n: $i, $...} !\) }
rule line: col´1:[ <cell>+ ] (<'\n '>?) (..|@: {row: $@.row::raw + 1, col: 1};)
rule cell: <open|blocked|given> (<' '>?) (@.col: $@.col::raw + 1;)
rule open: <'__'> -> 0
rule blocked: <' \.'> -> -1
rule given: (<' '>?) (def given: <INT>;)
($given -> ..|@.givenInput: $@.givenInput::length+1..$::raw -> {};)
($given -> @.givenInput($): { row: $@.row, col: $@.col };)
$given
end setup
 
templates solve
when <~{row: <1..$@hidato.board::length>, col: <1..$@hidato.board(row´1)::length>}> do !VOID
when <{ n: <=$@hidato.given(last).n>, row: <=$@hidato.given(last).row>, col: <=$@hidato.given(last).col> }> do $@hidato.board !
when <?($@hidato.board($.row; $.col) <~=0|=$.n>)> do !VOID
when <?($@hidato.board($.row; $.col) <=0>)?($@hidato.given($.next) <{n: <=$.n>}>)> do !VOID
otherwise
def guess: $;
def back: $@hidato.board($.row; $.col);
def next: $ -> \(when <{n: <=$back>}> do n´($.next::raw + 1)! otherwise $.next!\);
@hidato.board($.row; $.col): $.n::raw;
0..8 -> { next: $next, n: $guess.n::raw + 1, row: $guess.row::raw + $ ~/ 3 - 1, col: $guess.col::raw + $ mod 3 - 1 } -> #
@hidato.board($.row; $.col): $back;
end solve
 
@: $ -> setup;
{ next: 1, $@.given(1first)... } -> solve !
end hidato
 
$input -> hidato -> '$... -> '$... -> ' $ -> \(when <=-1> do ' .' ! when <10..> do '$;' ! otherwise ' $;' !\);';
';
' ->!OUT::write
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 4,825 ⟶ 4,952:
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">proc init {initialConfiguration} {
global grid max filled
set max 1
Line 4,934 ⟶ 5,061:
puts ""
printgrid
}</langsyntaxhighlight>
Demonstrating (dots are “outside” the grid, and zeroes are the cells to be filled in):
<langsyntaxhighlight lang="tcl">solveHidato "
0 33 35 0 0 . . .
0 0 24 22 0 . . .
Line 4,945 ⟶ 5,072:
. . . . 0 7 0 0
. . . . . . 5 0
"</langsyntaxhighlight>
{{out}}
<pre>
Line 4,976 ⟶ 5,103:
{{libheader|Wren-sort}}
{{libheader|Wren-fmt}}
<langsyntaxhighlight ecmascriptlang="wren">import "./sort" for Sort
import "./fmt" for Fmt
 
var board = []
Line 5,054 ⟶ 5,181:
System.print("\nFound:")
solve.call(start[0], start[1], 1, 0)
printBoard.call()</langsyntaxhighlight>
 
{{out}}
Line 5,084 ⟶ 5,211:
=={{header|zkl}}==
{{trans|Python}}
<langsyntaxhighlight lang="zkl">hi:= // 0==empty cell, X==not a cell
#<<<
"0 33 35 0 0 X X X
Line 5,100 ⟶ 5,227:
solve(board,given, start.xplode(), 1);
println();
print_board(board);</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">fcn print_board(board){
d:=D(-1," ", 0,"__");
foreach r in (board[1,-1]){
Line 5,137 ⟶ 5,264:
board[r][c]=back;
False
}</langsyntaxhighlight>
{{out}}
<pre>
2,122

edits