package main
import (
“os”
“errors”
“strings”
)
func LoadBanner(filename string) (map[rune][]string, error) {
font := make(map[rune][]string)
data, err := os.ReadFile(filename)
if err != nil {
return nil, err
}
if len(data) == 0 {
return font, errors.New(“empty file”)
}
lines := strings.Split(string(data), “\n”)
if len(lines) < 856 {
return font, errors.New(“invalid file”)
}
for ch := ‘ ‘; ch <= ‘~’; ch++ {
start := (int(ch)-32) *9
font[ch] = lines[start+1 : start+9]
}
return font, nil
}
package main
import (
“strings”
)
func GenerateArt(text string, banner map[rune][]string) string {
var result strings.Builder
word := SplitInput(text)
for i, words := range word {
if words == “” {
if i != len(word)-1 {
result.WriteString(“\n”)
}
continue
}
for row := 0; row < 8; row++ {
for _, ch := range words {
result.WriteString(banner[ch][row])
}
result.WriteString(“\n”)
}
}
return result.String()
}
package main
func RenderLine(text string, banner map[rune][]string) []string {
final := make([]string, 8)
if text == “” {
return final
}
for _, ch := range text {
for row := 0; row < 8; row++ {
final[row] += banner[ch][row]
}
}
return final
}
package main
import “strings”
func SplitInput(input string) []string {
word := strings.Split(input, “\n”)
return word
}
package main
import “fmt”
func validateInput(input string) (rune, error) {
for _, i := range input {
if i < ‘ ‘ || i > ‘~’ {
return i, fmt.Errorf(“invalid character: %v”, i)
}
}
return 0, nil
}
// func main() {
// fmt.Println(validateInput(“david”))
// fmt.Println(validateInput(“😊”))
// }


