使用Ruby创建棋盘并且“\ n”不会消失

时间:2016-03-04 06:17:47

标签: ruby unicode

我觉得好像接近一个解决方案,并且已经在一段时间内将其作为一个新手来修补。出于某种原因,为什么我的"\n"在输出“下一行”并且输出不需要空格时没有消失?

任务:编写一个函数,该函数采用一个表示方格板尺寸的参数。电路板将始终为方形,因此5意味着您将需要一个5x5电路板。

黑色方块将由unicode白色方块表示,而浅色方块将由unicode黑色方块表示(相反的颜色确保在代码大战的黑暗背景下板不会反转)。它应该返回一个字符串,每个方格之间有一个空格,并考虑新的线条。

偶数应返回以黑色方块开头的板。一个奇数应该返回一个以浅色方块开头的板。

输入应该是一个至少为2的整数,否则返回false(Haskell中没有任何内容)。

我很接近,这是我到目前为止所做的:

def checkered_board(dimension)


  black = "\u25A1 "
  white = "\u25A0 "
  checkboard = nil
  checker_array = []
  if dimension < 2 or dimension.is_a? String
    return false
  else 
    count = dimension

    while count <= dimension && count > 0
      if count % 2 == 0
        checkboard = ("\u25A1 \u25A0" + "\n")
        checker_array << checkboard
        count -= 1
      else
        checkboard = ("\u25A0 \u25A1" + "\n")
        checker_array << checkboard
        count -= 1
      end
    end        
  end

  checkboard = checker_array.join(" ")
  p checkboard
end

这是TDD规范:

Test.assert_equals(checkered_board(0), false)
Test.assert_equals(checkered_board(2), "\u25A1 \u25A0\n\u25A0      \u25A1")

注意:如果false不是整数,隐藏的规范会证明它应该以{{1​​}}响应。 dimension.is_a? String也不适合我。

输出如此显示,甚至不显示:

.is_a? Integer

感谢您提供的所有帮助:)。

2 个答案:

答案 0 :(得分:1)

尝试更改:

if dimension < 2 or dimension.is_a? String

if !dimension.is_a?(Integer) || dimension < 2  

最左边的测试将首先完成。目前,如果dimensionString,则首先将其与2进行比较 - 这将引发错误 - 然后才会对其是String进行测试。在将对象与另一个对象进行比较之前,需要检查对象的类型。

此外,我认为检查应该是dimensionInteger还是String,而不是Array。例如,在原始代码中,如果维度为rate会发生什么?

答案 1 :(得分:1)

join方法将连接元素并在它们之间插入空格字符。所以来自该计划的这一行:

checkboard = checker_array.join(" ")

将生成此字符串:

"\u25A1 \u25A0\n \u25A0 \u25A1"

将参数省略到join应产生预期的输出,即:

checkboard = checker_array.join

请参阅the Array join method上的文档。