0

サンプル入力: 「車 トラック 8 4 バス 6 1」

サンプル出力: 「バス 1 4 トラック 6 8」

文字列の n 番目の要素が整数の場合は整数のままである必要があり、単語の場合は単語のままである必要があります

これを行うためのよりエレガントで効率的な方法はありますか? 以下は私のルビーコードです。より効率的なコードを探しています(ルビーである必要はありません)。

puts "Enter Input:"
inp = gets

inp_ary=inp.split(" ")

a=inp_ary.group_by{|i| i=~ /\d/}

sort_words = a[nil].sort
sort_integer = a[0].sort

index_words=[]
index_integer=[]

inp_ary.each_with_index do |e,i|
  if e =~ /\d/
    index_integer << i
  else
    index_words << i
  end
end

final = []

sorted = sort_words + sort_integer

index_integer.each_with_index do |e,i|
  final[e] = sort_integer[i]
end

index_words.each_with_index do |e,i|
  final[e] = sort_words[i]
end

puts "Sorted Output: "
puts final.join(" ")
4

1 に答える 1

4
s = "car truck 8 4 bus 6 1"

tokens = s.split
numbers, words = tokens.partition{|t| t =~ /^\d+$/}
numbers.map!(&:to_i).sort!
words.sort!

result = tokens.map{|t| (t =~ /^\d+$/ ? numbers : words).shift}.join(' ')

p result
#=> "bus car 1 4 truck 6 8"
于 2012-04-30T11:51:09.747 に答える