Last active
December 30, 2020 07:40
-
-
Save jiro4989/90cac3e7001686d62341b8314dfd122f to your computer and use it in GitHub Desktop.
tiny ascii art scripts on Nim language.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import strutils, sequtils, algorithm | |
proc corner(text: string): seq[string] = | |
for i, v in text.pairs: | |
result.add(text[0..i] & " ".repeat(text.len-i)) | |
proc diamond(text: string): seq[string] = | |
let rightTop = corner(text) | |
let leftTop = rightTop.mapIt(it.reversed.join) | |
let rightBottom = rightTop.reversed | |
let leftBottom = leftTop.reversed | |
for i, v in rightTop: | |
result.add(leftTop[i] & v) | |
for i, v in rightBottom: | |
result.add(leftBottom[i] & v) | |
for line in diamond("hello world"): | |
echo line | |
# $ nim c -r ascii_dia.nim | |
# | |
# result: | |
#[ | |
hh | |
ehhe | |
lehhel | |
llehhell | |
ollehhello | |
ollehhello | |
w ollehhello w | |
ow ollehhello wo | |
row ollehhello wor | |
lrow ollehhello worl | |
dlrow ollehhello world | |
dlrow ollehhello world | |
lrow ollehhello worl | |
row ollehhello wor | |
ow ollehhello wo | |
w ollehhello w | |
ollehhello | |
ollehhello | |
llehhell | |
lehhel | |
ehhe | |
hh | |
]# |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unicode | |
proc flow(text: string, limit: int): seq[string] = | |
var tmp = text.toRunes | |
for i in 0..limit: | |
tmp = tmp[^1] & tmp[0..^2] | |
let line = $tmp | |
result.add(line) | |
for line in flow("新年あけましておめでとうございます!今年もよろしくお願いします", 20): | |
echo line | |
# $ nim c -r ascii_flow.nim | |
# | |
# output: | |
#[ | |
す新年あけましておめでとうございます!今年もよろしくお願いしま | |
ます新年あけましておめでとうございます!今年もよろしくお願いし | |
します新年あけましておめでとうございます!今年もよろしくお願い | |
いします新年あけましておめでとうございます!今年もよろしくお願 | |
願いします新年あけましておめでとうございます!今年もよろしくお | |
お願いします新年あけましておめでとうございます!今年もよろしく | |
くお願いします新年あけましておめでとうございます!今年もよろし | |
しくお願いします新年あけましておめでとうございます!今年もよろ | |
ろしくお願いします新年あけましておめでとうございます!今年もよ | |
よろしくお願いします新年あけましておめでとうございます!今年も | |
もよろしくお願いします新年あけましておめでとうございます!今年 | |
年もよろしくお願いします新年あけましておめでとうございます!今 | |
今年もよろしくお願いします新年あけましておめでとうございます! | |
!今年もよろしくお願いします新年あけましておめでとうございます | |
す!今年もよろしくお願いします新年あけましておめでとうございま | |
ます!今年もよろしくお願いします新年あけましておめでとうござい | |
います!今年もよろしくお願いします新年あけましておめでとうござ | |
ざいます!今年もよろしくお願いします新年あけましておめでとうご | |
ございます!今年もよろしくお願いします新年あけましておめでとう | |
うございます!今年もよろしくお願いします新年あけましておめでと | |
とうございます!今年もよろしくお願いします新年あけましておめで | |
#]# |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unicode, strutils, algorithm, sequtils | |
iterator corner(text: string): string = | |
var tmp = text.toRunes | |
for i in 0..tmp.len: | |
var line = $tmp[0..^(i+1)] & " " | |
if i != 0: | |
let ch = tmp[^i..^i][0] | |
for i in 0..<i: | |
line.add ch | |
yield line | |
iterator square(text: string): string = | |
for line in corner(text): | |
echo line & line.toRunes.reversed.join | |
for line in toSeq(corner(text)).reversed: | |
echo line & line.toRunes.reversed.join | |
for line in square("こんにちは"): | |
echo line | |
# $ nim c -r ascii_square.nim | |
# | |
# output: | |
#[ | |
こんにちは はちにんこ | |
こんにち はは ちにんこ | |
こんに ちちちち にんこ | |
こん にににににに んこ | |
こ んんんんんんんん こ | |
ここここここここここ | |
ここここここここここ | |
こ んんんんんんんん こ | |
こん にににににに んこ | |
こんに ちちちち にんこ | |
こんにち はは ちにんこ | |
こんにちは はちにんこ | |
]# |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unicode, sequtils, algorithm, strutils | |
func corner(text: string): seq[string] = | |
var tmp = text.toRunes | |
for i in 1..tmp.len: | |
result.add $tmp[0..<i] | |
func maxLen(lines: seq[string]): int = | |
let lens = lines.mapIt(it.toRunes.len) | |
let zipped = zip(lens, lines) | |
let max = zipped.sortedByIt(it[0])[^1][0] | |
return max | |
func middle(lines: seq[string]): seq[string] = | |
let max = lines.maxLen | |
for line in lines: | |
let padLen = (max - line.toRunes.len) div 2 | |
let pad = " ".repeat(padLen).join | |
result.add pad & line | |
func right(lines: seq[string]): seq[string] = | |
let max = lines.maxLen | |
for line in lines: | |
let padLen = (max - line.toRunes.len) | |
let pad = " ".repeat(padLen).join | |
result.add pad & line | |
const text = "新年あけましておめでとうございます" | |
for line in corner(text): | |
echo line | |
for line in corner(text).middle: | |
echo line | |
for line in corner(text).right: | |
echo line | |
# $ nim c -r ascii_triangle.nim | |
# | |
# output: | |
#[ | |
新 | |
新年 | |
新年あ | |
新年あけ | |
新年あけま | |
新年あけまし | |
新年あけまして | |
新年あけましてお | |
新年あけましておめ | |
新年あけましておめで | |
新年あけましておめでと | |
新年あけましておめでとう | |
新年あけましておめでとうご | |
新年あけましておめでとうござ | |
新年あけましておめでとうござい | |
新年あけましておめでとうございま | |
新年あけましておめでとうございます | |
新 | |
新年 | |
新年あ | |
新年あけ | |
新年あけま | |
新年あけまし | |
新年あけまして | |
新年あけましてお | |
新年あけましておめ | |
新年あけましておめで | |
新年あけましておめでと | |
新年あけましておめでとう | |
新年あけましておめでとうご | |
新年あけましておめでとうござ | |
新年あけましておめでとうござい | |
新年あけましておめでとうございま | |
新年あけましておめでとうございます | |
新 | |
新年 | |
新年あ | |
新年あけ | |
新年あけま | |
新年あけまし | |
新年あけまして | |
新年あけましてお | |
新年あけましておめ | |
新年あけましておめで | |
新年あけましておめでと | |
新年あけましておめでとう | |
新年あけましておめでとうご | |
新年あけましておめでとうござ | |
新年あけましておめでとうござい | |
新年あけましておめでとうございま | |
新年あけましておめでとうございます | |
]# |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment