def print_architect(input)
disp_hash = {}
('a'..'j').to_a.each_with_index {|x,ix| disp_hash[x] = '++--***...'[0..ix].reverse } #make a hash of the strings for each letter
string_ary = []
max_len = 0 #stores the maximum length string, so we can add leading whitespace -- makes it simpler
trailing_whitespaces = 0 #stores the number of spaces to add at the end, if we get a digit
input.each_char do |x|
str = disp_hash[x] #if it's a letter, get the string
if str
str = str + (' ' * trailing_whitespaces)
string_ary.push str
max_len = str.length if str.length > max_len
trailing_whitespaces = 0
else #it's a number
trailing_whitespaces = x.to_i
end
end
string_ary.map! {|str| (' ' * (max_len - str.length)) + str } #make all nodes uniform length, with leading whitespaces
max_len.times do |ix|
string_ary.each {|str| print str[ix]}
puts
end
end
bridge = 'j3f3e3e3d3d3c3cee3c3c3d3d3e3e3f3fjij3f3f3e3e3d3d3c3cee3c3c3d3d3e3e3fj' #bridge
mountains = 'abcdefghijihgfghihgfedcdefg' #mountains
arrow = 'f1f2f3f4f5f6f5f4f3f2f1ff' #arrow
frozen = 'f2cccdehj5jjhedcc2cf' #frozen castle
[bridge, mountains, arrow, frozen].each do |input|
print_architect input
puts
puts '--------------------'
puts
end
ZGVmIHByaW50X2FyY2hpdGVjdChpbnB1dCkKCWRpc3BfaGFzaCA9IHt9CgkoJ2EnLi4naicpLnRvX2EuZWFjaF93aXRoX2luZGV4IHt8eCxpeHwgZGlzcF9oYXNoW3hdID0gJysrLS0qKiouLi4nWzAuLml4XS5yZXZlcnNlIH0gI21ha2UgYSBoYXNoIG9mIHRoZSBzdHJpbmdzIGZvciBlYWNoIGxldHRlcgoJc3RyaW5nX2FyeSA9IFtdCgltYXhfbGVuID0gMCAjc3RvcmVzIHRoZSBtYXhpbXVtIGxlbmd0aCBzdHJpbmcsIHNvIHdlIGNhbiBhZGQgbGVhZGluZyB3aGl0ZXNwYWNlIC0tIG1ha2VzIGl0IHNpbXBsZXIKCXRyYWlsaW5nX3doaXRlc3BhY2VzID0gMCAjc3RvcmVzIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGFkZCBhdCB0aGUgZW5kLCBpZiB3ZSBnZXQgYSBkaWdpdAoJaW5wdXQuZWFjaF9jaGFyIGRvIHx4fAoJCXN0ciA9IGRpc3BfaGFzaFt4XSAjaWYgaXQncyBhIGxldHRlciwgZ2V0IHRoZSBzdHJpbmcKCQlpZiBzdHIKCQkJc3RyID0gc3RyICsgKCcgJyAqIHRyYWlsaW5nX3doaXRlc3BhY2VzKQoJCQlzdHJpbmdfYXJ5LnB1c2ggc3RyCgkJCW1heF9sZW4gPSBzdHIubGVuZ3RoIGlmIHN0ci5sZW5ndGggPiBtYXhfbGVuCgkJCXRyYWlsaW5nX3doaXRlc3BhY2VzID0gMAoJCWVsc2UgI2l0J3MgYSBudW1iZXIKCQkJdHJhaWxpbmdfd2hpdGVzcGFjZXMgPSB4LnRvX2kKCQllbmQKCWVuZAoJc3RyaW5nX2FyeS5tYXAhIHt8c3RyfCAoJyAnICogKG1heF9sZW4gLSBzdHIubGVuZ3RoKSkgKyBzdHIgfSAjbWFrZSBhbGwgbm9kZXMgdW5pZm9ybSBsZW5ndGgsIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlcwoJbWF4X2xlbi50aW1lcyBkbyB8aXh8IAoJCXN0cmluZ19hcnkuZWFjaCB7fHN0cnwgcHJpbnQgc3RyW2l4XX0KCQlwdXRzCgllbmQKZW5kCgpicmlkZ2UgPSAnajNmM2UzZTNkM2QzYzNjZWUzYzNjM2QzZDNlM2UzZjNmamlqM2YzZjNlM2UzZDNkM2MzY2VlM2MzYzNkM2QzZTNlM2ZqJyAjYnJpZGdlCm1vdW50YWlucyA9ICdhYmNkZWZnaGlqaWhnZmdoaWhnZmVkY2RlZmcnICNtb3VudGFpbnMKYXJyb3cgPSAnZjFmMmYzZjRmNWY2ZjVmNGYzZjJmMWZmJyAjYXJyb3cKZnJvemVuID0gJ2YyY2NjZGVoajVqamhlZGNjMmNmJyAjZnJvemVuIGNhc3RsZQpbYnJpZGdlLCBtb3VudGFpbnMsIGFycm93LCBmcm96ZW5dLmVhY2ggZG8gfGlucHV0fAoJcHJpbnRfYXJjaGl0ZWN0IGlucHV0CglwdXRzCglwdXRzICctLS0tLS0tLS0tLS0tLS0tLS0tLScKCXB1dHMKZW5k