简体   繁体   中英

Ruby Print two integers in one line without using string interpolations

I am solving this problem on hacker rank https://www.hackerrank.com/challenges/mini-max-sum/problem

Its asking: Print two space-separated long integers denoting the respective minimum and maximum values that can be calculated by summing exactly four of the five integers. (The output can be greater than 32 bit integer.)

If I am doing string interpolations as in my code below, its giving me an error: Your code did not pass this test case. I know I can't use multiple variables in a single puts/p line.

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)

My question is how can I print multiple integers in one line separated by one space. I want to print 10 14 and not "10 14"

在此处输入图片说明

Your problem is not in the string interpolation but in the method you use to print out the result to stdout. You should use print or puts instead of p since print and puts call to_s which simply converts to string, while p calls inspect which shows you more information (like the quotes to indicate that it is a string and in other cases stuff like hidden characters) and is more useful for debugging.

As for the difference between print and puts - puts simply inserts a newline at the end while print does not and prints exactly what you give it.

The issue is the difference between p and print :

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

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

use print and your problem should be solved

Given

str = "21 4 8 13 11"

compute

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

Change print to puts in the last line if a carriage return is to be printed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM