【问题标题】:Ruby Print two integers in one line without using string interpolationsRuby 在一行中打印两个整数而不使用字符串插值
【发布时间】:2018-06-10 06:15:39
【问题描述】:

我正在以黑客等级https://www.hackerrank.com/challenges/mini-max-sum/problem解决这个问题

它的要求:打印两个以空格分隔的长整数,分别表示可以通过将五个整数中的四个恰好相加来计算的最小值和最大值。 (输出可以大于 32 位整数。)

如果我在下面的代码中进行字符串插值,它会给我一个错误:您的代码没有通过这个测试用例。我知道我不能在单个 puts/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”

【问题讨论】:

  • sum(input_array[0..3]).to_s + " " + sum(input_array[1..4]).to_s怎么样
  • 使用p打印结果的调试表示而不是仅仅打印结果的目的是什么?
  • @maxpleaner 同样的错误打印“10 14”如上图所示
  • 是的,但为什么要打印调试表示而不是正常表示?
  • 为什么要急于选择答案?快速选择可能会阻止其他答案,并且不允许很快会有更好的答案出现。不用着急。这里的许多人至少要等几个小时——更长一些——来奖励绿党。这不是对所选答案(我赞成)的批评,也不是暗示您应该选择我的答案的反手方式。我的回答甚至没有直接解决你的问题。我省略了解释,因为其他人已经提供了。

标签: ruby algorithm printing puts


【解决方案1】:

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

至于 printputs 之间的区别 - puts 只是在末尾插入一个换行符,而 print 没有,并准确地打印你给它的内容。

【讨论】:

    【解决方案2】:

    问题在于pprint 之间的区别:

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

    使用打印,您的问题应该得到解决

    【讨论】:

    • 为什么不puts
    【解决方案3】:

    给定

    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

    【讨论】:

      最近更新 更多