如何将数字转换为多行数字
我试图解决将一组整数转换为一个大数字串的代码评估挑战。 我很难解析数字并分别打印每一行。
digits = { "0" => "-**-- *--*- *--*- *--*- -**-- -----", "1" => "--*-- -**-- --*-- --*-- -***- -----", "2" => "***-- ---*- -**-- *---- ****- -----" } x = 12 x = x.to_s.split('') digits[char].each_line.with_index do |line, index| print line.chomp, "\n" end
我想屈服:
--*--***-- -**-----*- --*---**-- --*--*---- -***-****- ----------
但我遇到了麻烦。 如何迭代并一次只打印一行? 谢谢你的帮助! 到目前为止,我可以让它返回并在新行上分别打印每个数字。
您需要打印第一个数字的第一行,然后是第二个数字的第一行,然后是第一个数字的下一行,然后是第二个数字的下一行。
digits['0'].each_line.with_index do |_, index| x.each do |char| print digits[char].split("\n")[index] end print "\n" end
这为您提供了一个外部循环,它遍历数字行(此处为“0”)。 这只是给你一个循环来遍历每一行。
然后用x.each
输入的每个数字。 然后你必须打印“当前”行,其数量由外部循环的index
给出。 因此,您可以从digits
获取相应的digits
,在换行符上拆分,索引到相应的行,然后print
出来。 puts
,因为下一个数字紧挨着这个数字。 在打印x
中所有数字的index
行后打印单个换行符。
"0" => "-**-- *--*- *--*- *--*- -**-- -----",
不是很实用。 该字符串有5行结尾,每次都必须删除。 arrays会更好。
然后使用map
创建这些数组的数组。 因此,“12”表示为[["--*--", "-**--", "--*--", "--*--", "-***-", "-----"], ["***--", "---*-", "-**--", "*----", "****-", "-----"]]
。 不是你想要的,但看看transpose
对该数组做了什么,以及join
对字符串数组的作用。
这是一种方式:
def prnt(h, x) puts h.values_at(*x.to_s.chars) .map { |c| c.lines.map(&:chomp) } .transpose.map { |a| a.join << "\n" } end
prnt(digits, 0) -**-- *--*- *--*- *--*- -**-- ----- prnt(digits, 2) ***-- ---*- -**-- *---- ****- ----- prnt(digits, 10) --*---**-- -**--*--*- --*--*--*- --*--*--*- -***--**-- ---------- prnt(digits, 22) ***--***-- ---*----*- -**---**-- *----*---- ****-****- ----------
prnt(digits, 102) --*---**--***-- -**--*--*----*- --*--*--*--**-- --*--*--*-*---- -***--**--****- --------------- prnt(digits, 202) ***---**--***-- ---*-*--*----*- -**--*--*--**-- *----*--*-*---- ****--**--****- --------------- prnt(digits, 000) -**-- *--*- *--*- *--*- -**-- -----
您可能会发现使用String#big_digits
更容易:
puts '201'.big_digits