Skip to content

Instantly share code, notes, and snippets.

@jiro4989
Last active December 30, 2020 07:40
Show Gist options
  • Save jiro4989/90cac3e7001686d62341b8314dfd122f to your computer and use it in GitHub Desktop.
Save jiro4989/90cac3e7001686d62341b8314dfd122f to your computer and use it in GitHub Desktop.
tiny ascii art scripts on Nim language.
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
]#
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:
#[
す新年あけましておめでとうございます!今年もよろしくお願いしま
ます新年あけましておめでとうございます!今年もよろしくお願いし
します新年あけましておめでとうございます!今年もよろしくお願い
いします新年あけましておめでとうございます!今年もよろしくお願
願いします新年あけましておめでとうございます!今年もよろしくお
お願いします新年あけましておめでとうございます!今年もよろしく
くお願いします新年あけましておめでとうございます!今年もよろし
しくお願いします新年あけましておめでとうございます!今年もよろ
ろしくお願いします新年あけましておめでとうございます!今年もよ
よろしくお願いします新年あけましておめでとうございます!今年も
もよろしくお願いします新年あけましておめでとうございます!今年
年もよろしくお願いします新年あけましておめでとうございます!今
今年もよろしくお願いします新年あけましておめでとうございます!
!今年もよろしくお願いします新年あけましておめでとうございます
す!今年もよろしくお願いします新年あけましておめでとうございま
ます!今年もよろしくお願いします新年あけましておめでとうござい
います!今年もよろしくお願いします新年あけましておめでとうござ
ざいます!今年もよろしくお願いします新年あけましておめでとうご
ございます!今年もよろしくお願いします新年あけましておめでとう
うございます!今年もよろしくお願いします新年あけましておめでと
とうございます!今年もよろしくお願いします新年あけましておめで
#]#
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:
#[
こんにちは  はちにんこ
こんにち はは ちにんこ
こんに ちちちち にんこ
こん にににににに んこ
こ んんんんんんんん こ
 ここここここここここ 
 ここここここここここ 
こ んんんんんんんん こ
こん にににににに んこ
こんに ちちちち にんこ
こんにち はは ちにんこ
こんにちは  はちにんこ
]#
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