今回実装したアルゴリズムの備忘録として!!
お題
ウィンドウのサイズを変更すると文章表示部分の大きさも同様に変更され、文章表示部分の幅に合わせて自然に改行されるという機能を現在の文章表示部分の高さと幅、及び変更後の幅を元に、新しく表示される文章を表示するプログラムを作成してください。
入力例の場合、以下の図のように高さが 6 行、幅が 8 文字の文章が与えられています。
入力/出力例
//入力例
6 8 6
My#name#
is#AVIOT
.#I#love
# program
ming#ver
y#much.#
//出力例
My#nam
e#is#A
VIOT.#
I#love
# progr
amming
# very#
much.#
実際に記述したコード
info = gets.chomp.split.map(&:to_i)
str = info[0].times.map{gets.chomp.split.map(&:to_s)}
array = str.flatten.join
ans = array.chars.each_slice(info[2]).map(&:join)
puts ans
解説付き
info = gets.chomp.split.map(&:to_i) #最初の3つの数字を受け取り空白を取る
str = info[0].times.map{gets.chomp.split.map(&:to_s)}#[0]の回数分配列を受け取る
array = str.flatten.join #二次元配列を1つに繋げる
ans = array.chars.each_slice(info[2]).map(&:join) #お題の文字数[2]に併せてeach_sliceする
puts ans
今回学んだメソッド
・each_slice(n) 引数nの指定した数の要素を取り出し配列にしてくれる
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/each_slice.html
・flatten 多次元配列を1次元配列にしてくれる
https://docs.ruby-lang.org/ja/latest/method/Array/i/flatten.html