Ruby在一行中打印两个整数而不使用字符串插值

时间:2017-12-29 21:49:10

标签: ruby algorithm printing puts

我在黑客等级https://www.hackerrank.com/challenges/mini-max-sum/problem

上解决了这个问题

它的要求:打印两个空格分隔的长整数,表示各自的最小值和最大值,可以通过对五个整数中的四个进行求和来计算。 (输出可以大于32位整数。)

如果我在下面的代码中进行字符串插值,它会给我一个错误:你的代码没有通过这个测试用例。我知道我不能在一个put / p行中使用多个变量。

array = gets.split(" ")

def get_max_and_min_sum(input_array)
    return "0 0" if input_array.size < 1

    input_array = input_array.map{|i| i.to_i}

    input_array = input_array.sort

    return "#{sum(input_array[0..3])} #{sum(input_array[1..4])}"



end

def sum(array)
    return array.inject(0){|sum,i| sum+=i}
end

p get_max_and_min_sum(array)

我的问题是如何在由一个空格分隔的一行中打印多个整数。 我想打印10 14而不是“10 14”

enter image description here

3 个答案:

答案 0 :(得分:3)

您的问题不在字符串插值中,而是在用于将结果打印到stdout的方法中。您应该使用printputs代替p,因为printputs调用to_s只会转换为字符串,而{{1} } p调用显示更多信息(比如引号表示它是一个字符串,在其他情况下表示隐藏字符之类的东西),对调试更有用。

至于inspectprint之间的区别 - puts只是在结尾处插入换行符,而puts则没有,并准确打印您提供的内容。

答案 1 :(得分:1)

问题在于pprint

之间的区别
irb(main):003:0> p "1 2"
"1 2"

irb(main):005:0> print "1 2"
1 2

使用打印,你的问题应该解决

答案 2 :(得分:1)

鉴于

str = "21 4 8 13 11"

计算

arr = str.split.map(&:to_i)
  #=> [21, 4, 8, 13, 11]
smallest, largest = arr.minmax
  #=> [4, 21]
tot = arr.sum
  #=> 57
print "%d %d" % [tot-largest, tot-smallest]
36 53

如果要打印回车符,请在最后一行将print更改为puts