Add linify script
This commit is contained in:
parent
dcd8307c54
commit
8b6ae1804e
1 changed files with 73 additions and 0 deletions
73
bin/linify
Executable file
73
bin/linify
Executable file
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env lua
|
||||
|
||||
-- Ajdacent characters numbering:
|
||||
-- 1
|
||||
-- 2 + 3
|
||||
-- 4
|
||||
-- '+' = it's another plus
|
||||
-- '.' = it's something else
|
||||
|
||||
local adjacency_char_map = {
|
||||
["...."] = "┼";
|
||||
["...+"] = "│";
|
||||
["..+."] = "─";
|
||||
["..++"] = "┌";
|
||||
[".+.."] = "─";
|
||||
[".+.+"] = "┐";
|
||||
[".++."] = "─";
|
||||
[".+++"] = "┬";
|
||||
["+..."] = "│";
|
||||
["+..+"] = "│";
|
||||
["+.+."] = "└";
|
||||
["+.++"] = "├";
|
||||
["++.."] = "┘";
|
||||
["++.+"] = "┤";
|
||||
["+++."] = "┴";
|
||||
["++++"] = "┼";
|
||||
}
|
||||
|
||||
local input do
|
||||
input = setmetatable({}, {__index = function(self, key)
|
||||
if type(key) == "number" then
|
||||
return {}
|
||||
end
|
||||
end})
|
||||
|
||||
for line in io.stdin:lines() do
|
||||
local buf = {}
|
||||
for char in line:gmatch(".") do
|
||||
table.insert(buf, char)
|
||||
end
|
||||
table.insert(input, buf)
|
||||
end
|
||||
end
|
||||
|
||||
local function rawipairs(tab)
|
||||
return function(tab, i)
|
||||
i = i + 1
|
||||
if rawget(tab, i) then
|
||||
return i, rawget(tab, i)
|
||||
end
|
||||
end, tab, 0
|
||||
end
|
||||
|
||||
local output = {}
|
||||
for lnum, line in rawipairs(input) do
|
||||
output[lnum] = {}
|
||||
for cnum, char in rawipairs(line) do
|
||||
if char == "+" then
|
||||
local adjacency =
|
||||
(input[lnum-1][cnum] == "+" and "+" or ".")
|
||||
..(line[cnum-1] == "+" and "+" or ".")
|
||||
..(line[cnum+1] == "+" and "+" or ".")
|
||||
..(input[lnum+1][cnum] == "+" and "+" or ".")
|
||||
output[lnum][cnum] = adjacency_char_map[adjacency]
|
||||
else
|
||||
output[lnum][cnum] = char
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for _, line in ipairs(output) do
|
||||
print(table.concat(line))
|
||||
end
|
Loading…
Reference in a new issue