x.awk:
#!/usr/bin/awk -f
#
# tr '_.' ' #' < in.txt
BEGIN {
cmd = "echo $$"
cmd | getline
close(cmd)
srand($1)
cmd = "stty size"
cmd | getline
close(cmd)
row = $1
col = $2
for (i = 1; i < ARGC; i++) {
system("clear")
doit(ARGV[i], row, col)
system("sleep 2")
}
printf("\n")
}
function doit(FN, row, col, L, N, maxc, i, r, c, ncell, P)
{
while ((getline < FN) > 0) {
L[N++] = $0
if (length > maxc)
maxc = length
}
close(FN)
r = int((row - N) / 2)
for (i = 0; i < N; i++) {
c = int((col - maxc) / 2)
n = split(L[i], a, "")
for (j = 1; j <= n; j++) {
if (a[j] == ".")
P[ncell++] = sprintf("%d;%d", r+1, c+1)
c++
} r++
}
maxc = ncell
while (maxc > 0) {
i = int(rand() * ncell) % ncell
if (!P[i]) # already done
continue
cmd = sprintf("printf '\033[%sH#'", P[i])
system(cmd) # _run_ printf(1) to slow display down
delete P[i] # remove done
maxc--
}
}
1.txt:
.___._....._...___...___.___.
.._.._._____.__.__.__.__.___.
._._._...___...___...____....
.___._._____._.___._._______.
.___._....._.__.__.__.___....
.___._______.___.___.____....
_._.________.._..__._.__.
__.___....._._._._.___._.....
_._.________.___._....._____.
.___._______.___._.___._....
2.txt
__.___.___._....
_._.__..__._.___.
.___._._._._.___.
....._.__.._.___.
.___._.___._....
3.txt:
__.
_._.
.___.
.....
.___.
.___.___.___....__....__.___.
.___.__._.__.___._.___._.___.
....._.___._....__....___....
.___._....._._____._________.
.___._.___._._____.______....
.___._....._.___.
..__._._____.___.
._._._...___._._.
.__.._._____.._..____..__..__..
.___._....._.___.____..__..__..
_...__...__...__....___...__.__._.___._...__...._...
.____.___._.__._.______.__._.__._._._._.__._.____.__.
.____.___._...__.._____.__._.__._.___._...__..___.__.
_...__...__.__._....___...___..__.___._.____...._...
RUN:
$ ./x.awk [1-3].txt