Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
71
Task/Maze-generation/Huginn/maze-generation.huginn
Normal file
71
Task/Maze-generation/Huginn/maze-generation.huginn
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
import Algorithms as algo;
|
||||
import Mathematics as math;
|
||||
import Terminal as term;
|
||||
|
||||
class Maze {
|
||||
_rows = none;
|
||||
_cols = none;
|
||||
_data = none;
|
||||
constructor( rows_, cols_ ) {
|
||||
_rows = ( rows_ / 2 ) * 2 - 1;
|
||||
_cols = ( cols_ / 2 ) * 2 - 1;
|
||||
_data = [].resize( _rows + 2, [].resize( _cols + 2, false ) );
|
||||
x = 0;
|
||||
y = 0;
|
||||
path = [];
|
||||
rng = math.Randomizer( math.Randomizer.DISTRIBUTION.DISCRETE, 0, integer( $2 ^ $63 - $1 ) );
|
||||
for ( _ : algo.range( _rows * _cols / 3 ) ) {
|
||||
_data[y + 1][x + 1] = true;
|
||||
while ( true ) {
|
||||
n = neighbours( y, x );
|
||||
ns = size( n );
|
||||
if ( ns == 0 ) {
|
||||
if ( size( path ) == 0 ) {
|
||||
break;
|
||||
}
|
||||
y, x = path[-1];
|
||||
path.pop();
|
||||
continue;
|
||||
}
|
||||
oy, ox = ( y, x );
|
||||
y, x = n[rng.next() % ns];
|
||||
_data[(y + oy) / 2 + 1][(x + ox) / 2 + 1] = true;
|
||||
path.push( ( y, x ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
_data[0][1] = true;
|
||||
_data[-1][-2] = true;
|
||||
}
|
||||
neighbours( y_, x_ ) {
|
||||
n = [];
|
||||
if ( ( x_ > 1 ) && ! _data[y_ + 1][x_ - 1] ) {
|
||||
n.push( ( y_, x_ - 2 ) );
|
||||
}
|
||||
if ( ( y_ > 1 ) && ! _data[y_ - 1][x_ + 1] ) {
|
||||
n.push( ( y_ - 2, x_ ) );
|
||||
}
|
||||
if ( ( x_ < ( _cols - 2 ) ) && ! _data[y_ + 1][x_ + 3] ) {
|
||||
n.push( ( y_, x_ + 2 ) );
|
||||
}
|
||||
if ( ( y_ < ( _rows - 2 ) ) && ! _data[y_ + 3][x_ + 1] ) {
|
||||
n.push( ( y_ + 2, x_ ) );
|
||||
}
|
||||
return ( n );
|
||||
}
|
||||
to_string() {
|
||||
s = "";
|
||||
for ( r : _data ) {
|
||||
s += ∑( algo.map( r, @( b ) { b ? " " : "#"; } ) );
|
||||
s += "\n";
|
||||
}
|
||||
return ( s );
|
||||
}
|
||||
}
|
||||
|
||||
main() {
|
||||
rows = term.lines() - 2;
|
||||
cols = term.columns() - 1;
|
||||
maze = Maze( rows, cols );
|
||||
print( "{}".format( maze ) );
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue