如何将数字转换为多行数字

我试图解决将一组整数转换为一个大数字串的代码评估挑战。 我很难解析数字并分别打印每一行。

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 

201