こんばんは、ハイ&ロー番号(ルビー)
私はCodewars上の問題を解決しようとしている:あなたは、スペースで区切られた数字の文字列を与えられているこの小さな割り当てで
を、最高と最低の番号を返す必要があります。
例:
high_and_low("1 2 3 4 5") # return "5 1"
high_and_low("1 2 -3 4 5") # return "5 -3"
high_and_low("1 9 3 4 -5") # return "9 -5"
注:
すべての数字が有効なのInt32、それらを検証する必要はありませんです。 入力文字列には常に1つ以上の数字があります。 出力文字列は、1つのスペースで区切られた2つの数字でなければなりません。
私は以下の解決策を考え出しましたが、なぜメソッドが「-214 542」ではなく「542」しか返さないのか分かりません。私は#at、#shift、#popを使って同じ結果を試してみました。
紛失しているものがありますか?誰かが私を正しい方向に向けることを願っています。私はなぜこれが起こっているのか理解したいと思います。
def high_and_low(numbers)
numberArray = numbers.split(/\s/).map(&:to_i).sort
numberArray[-1]
numberArray[0]
end
high_and_low("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")
EDIT
また、私はこれを試み、失敗したテスト "無記号" を受信:ソートを使用して
def high_and_low(numbers)
numberArray = numbers.split(/\s/).map(&:to_i).sort
puts "#{numberArray[-1]}" + " " + "#{numberArray[0]}"
end
ありがとうございました!私はその質問を編集した。宜しくお願いします。 –
あなたが指定したフォームに結果を入れるには、@ Yuの提案の2番目のものに 'join( '')'をつけるだけです: 'numbers.split.minmax_by(&:to_i).join( '')# => "-214 542"、私はそれを配列として残しておくほうがおそらくもっと便利だと思います。 –