miruzouqの日記

miruzouqの日記

ブログはお土産のつもりで書いてます。雑談の手土産にどうぞ。

yukicoderNo.716 距離解説

yukicoder.me

gets;a=gets.split.map(&:to_i);puts a.each_cons(2).map{|x,y|y-x}.min;puts a[-1]-a[0]

yukicoder.me

each_consメソッドは、引数nで指定した数の要素を繰り返し取り出して、ブロックを実行します。ブロック引数arrには、取り出した要素が配列で入ります。nの数が要素数より大きいときは、ブロックを1度も実行しません。

each_sliceメソッドとは違い、[要素1, 要素2, 要素3, ...]、[要素2, 要素3, 要素4, ...]、[要素3, 要素4, 要素5, ...]、...のように取り出します。

ref.xaio.jp

each_cons(2)なので[要素1,要素2],[要素2,要素3],[要素3,要素4]と取り出して,map{|x,y|y-x}で右から左の差を取り、その最小値を出している。最大値は左端-右端

最短

eval"N,A,*B="+gets(p).split*?,
x=A
p B.map{|c|-A+A=c}.min,B[-1]-x

yukicoder.me

文字列 expr を Ruby プログラムとして評価してその結果を返しま す。第2引数に Binding オブジェクトを与えた場合、 そのオブジェクトを生成したコンテキストで文字列を評価します。

expr の中のローカル変数の扱いはブロックの場合と同じです。すなわち、eval 実行前に補足されていた変数は eval 実行後にブロック外に持ち出せます。 docs.ruby-lang.org

gets(p) は 2行読み込める

質問しといてよかった

yukicoderNo.725 木は明らかに森である解説最短コードも解説

puts gets.gsub("treeone","forest")

yukicoder.me

最短

#!ruby -p
gsub'treeone','forest'

#! に続く 文字列が ruby という文字列を含む行を見つけたらその行以下を Ruby スク リプトとして実行します。

-p -nフラグとほぼ同じですが, 各ループの最後に変数 $_ の値を出力するようになります。

docs.ruby-lang.org

最後に Kernel.#gets または Kernel.#readline で読み込んだ文字列です。 docs.ruby-lang.org

rubyスクリプトとして実行し#getsで読み込んだ文字列を出している…よくわからん。