LoginSignup
2
0

More than 3 years have passed since last update.

ずんだの波打つ進捗問題 Ruby 編

Last updated at Posted at 2020-07-31

任意の文字列を任意の幅で波打たせてください。

ルール

  1. 対象の文字列を1文字1行ずつ出力する
  2. 1行進むごとに左に全角スペースを1文字増やし、文字の表示位置をずらしてください
  3. 文字の位置が指定の幅まで到達したら、今度は1行進むごとに全角スペースを1文字減らしてください
  4. 全角スペースがなくなったら2の手順に戻ってください
  5. 対象の文字列をすべて出力し終わるまで 2-4 を繰り返してください

ちょっとわかりにくいかと思うので、サンプルをみてください。

サンプル

文字列「進捗どうですか?」、幅「3」

進
 捗
  ど
 う
で
 す
  か
 ?

文字列「進捗どうですか?」、幅「4」

進
 捗
  ど
   う
  で
 す
か
 ?

文字列「完全に理解した」、幅「4」

完
 全
  に
   理
  解
 し
た

プログラム

def get_spaces(range)
  pre = *(0..(range - 1))
  reversed = pre.reverse[1..-2]
  (pre + reversed).cycle
end

def wave_text(text, range)
  spaces = get_spaces(range).take(text.length)
  text.each_char.with_index(0) do |char, i|
    print "#{' '*spaces[i]}#{char}\n"
  end
end

wave_text("進捗どうですか?", 3)
wave_text("進捗どうですか?", 4)
wave_text("進捗どうですか?", 5)
wave_text("進捗どうですか?", 6)
wave_text("完全に理解した", 4)

出力

進
 捗
  ど
 う
で
 す
  か
 ?
進
 捗
  ど
   う
  で
 す
か
 ?
進
 捗
  ど
   う
    で
   す
  か
 ?
進
 捗
  ど
   う
    で
     す
    か
   ?
完
 全
  に
   理
  解
 し
た

プログラムを利用して出力した文字列によるツイート

関連情報

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0