以下の内容はhttps://anton0825.hatenablog.com/entry/20110103/1293288294より取得しました。


プログラミングコンテストチャレンジブック演習「best cow line」

今回のお題はこちら。


本の回答例で先頭と末尾の文字のどちらをtに移すか判定するところをforループを使って処理していましたが、再帰を使って書いてみました。
こっちの方がすっきりしてていいですね。
あーでもInputの文字数が2000文字までだから、コールスタックが最大1000積まれることになりますね。オーバーフローしそう。。

s = "ACDBCB" #input
$t = ""

def isFirstCharToElim?(str)
  if str.length <= 1 then return true
  elsif str[0] < str[-1] then return true
  elsif str[0] > str[-1] then return false
  else isFirstCharToElim?(str[1..-2])
  end
end

s.length.times do |i|
  if isFirstCharToElim?(s)
    $t = $t + s[0].chr
    s = s[1..-1]
  else
    $t = $t + s[-1].chr
    s = s[0..-2]
  end
end

puts $t



以上の内容はhttps://anton0825.hatenablog.com/entry/20110103/1293288294より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14