import numpy as np
def line(x1, y1, x2, y2):
if x1 == x2:
if y1 > y2:
y1, y2 = y2, y1
return [(x1, y) for y in range(y1, y2 + 1)]
else:
if x1 > x2:
x1, x2 = x2, x1
return [(x, y1) for x in range(x1, x2 + 1)]
def naruto_line(length):
xs = np.int8([0,2,2] + [(1 if (i // 2) % 2 == 0 else -1) * (i // 4 + 1) * 2 for i in range(2, length)])
ys = np.int8([(-1 if (i // 2) % 2 == 0 else 1) * (i // 4 + 1) * 2 for i in range(0, length + 1)])
return np.int8([xs, ys])
def naruto(length):
lines = naruto_line(length)
mat = np.zeros((np.max(np.abs(lines)) * 2 + 1, np.max(np.abs(lines)) * 2 + 1), dtype=np.uint8)
for x1, y1, x2, y2 in zip(lines[0,:-1], lines[1,:-1], lines[0,1:], lines[1,1:]):
for p in line(x1, y1, x2, y2):
mat[p[1] + mat.shape[0] // 2, p[0] + mat.shape[0] // 2] = 1
return mat
print(naruto(5))
aW1wb3J0IG51bXB5IGFzIG5wCgpkZWYgbGluZSh4MSwgeTEsIHgyLCB5Mik6CiAgICBpZiB4MSA9PSB4MjoKICAgICAgICBpZiB5MSA+IHkyOgogICAgICAgICAgICB5MSwgeTIgPSB5MiwgeTEKICAgICAgICByZXR1cm4gWyh4MSwgeSkgZm9yIHkgaW4gcmFuZ2UoeTEsIHkyICsgMSldCiAgICAgICAgICAgIAogICAgZWxzZToKICAgICAgICBpZiB4MSA+IHgyOgogICAgICAgICAgICB4MSwgeDIgPSB4MiwgeDEKICAgICAgICByZXR1cm4gWyh4LCB5MSkgZm9yIHggaW4gcmFuZ2UoeDEsIHgyICsgMSldCgpkZWYgbmFydXRvX2xpbmUobGVuZ3RoKToKICAgIHhzID0gbnAuaW50OChbMCwyLDJdICsgWygxIGlmIChpIC8vIDIpICUgMiA9PSAwIGVsc2UgLTEpICogKGkgLy8gNCArIDEpICogMiBmb3IgaSBpbiByYW5nZSgyLCBsZW5ndGgpXSkKICAgIHlzID0gbnAuaW50OChbKC0xIGlmIChpIC8vIDIpICUgMiA9PSAwIGVsc2UgMSkgKiAoaSAvLyA0ICsgMSkgKiAyIGZvciBpIGluIHJhbmdlKDAsIGxlbmd0aCArIDEpXSkKICAgIHJldHVybiBucC5pbnQ4KFt4cywgeXNdKQoKZGVmIG5hcnV0byhsZW5ndGgpOgogICAgbGluZXMgPSBuYXJ1dG9fbGluZShsZW5ndGgpCiAgICBtYXQgPSBucC56ZXJvcygobnAubWF4KG5wLmFicyhsaW5lcykpICogMiArIDEsIG5wLm1heChucC5hYnMobGluZXMpKSAqIDIgKyAxKSwgZHR5cGU9bnAudWludDgpCiAgICBmb3IgeDEsIHkxLCB4MiwgeTIgaW4gemlwKGxpbmVzWzAsOi0xXSwgbGluZXNbMSw6LTFdLCBsaW5lc1swLDE6XSwgbGluZXNbMSwxOl0pOgogICAgICAgIGZvciBwIGluIGxpbmUoeDEsIHkxLCB4MiwgeTIpOgogICAgICAgICAgICBtYXRbcFsxXSArIG1hdC5zaGFwZVswXSAvLyAyLCBwWzBdICsgbWF0LnNoYXBlWzBdIC8vIDJdID0gMQogICAgICAgIAogICAgcmV0dXJuIG1hdAoKcHJpbnQobmFydXRvKDUpKQogICAgICAgIAog