質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

2回答

5497閲覧

Rubyで配列の次の要素との差の合計を出したい

ffj

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

1グッド

2クリップ

投稿2018/02/27 02:38

ruby与えられた標準入力の差の合計を出したいと思っています。
配列に直して差を出せるかなと考えました。

(例)
n個の要素を持つ配列があります。

a ={2,5,3,..Xn}

このような配列が合った時、
|2-5|+|5-3|..+|(Xn-1)-Xn|
こういう処理をしたいと考えているのですが、

どう処理すれば差の合計が出せるでしょうか?

単純に配列の和のコードまでしかかけませんでした。

考え方のヒントだけでも教えていただけると幸いです。

入力は以下で与えられます。 n X1 X2 .. Xn

ruby

1n = gets.to_i 2 3a = readlines.map(&:to_i) 4sum = 0 5a.each{|i| sum = sum + i } 6puts sum
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

a = [2, 5, 3] # => |2-5| + |5-3| = 5 p a.each_cons(2).sum{|l,r| (l - r).abs} # => 5

投稿2018/02/27 03:17

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

ベストアンサー

こんにちは。
以下で、どうでしょう?

ruby

1ary = [2, 5, 3, 7, 9, 10] 2 3result = ary.each_cons(2).map {|e| e[0]-e[1] }.inject &:+ 4 5puts result # => (2-5) + (5-3) + (3-7) + (7-9) + (9-10) = -3+2-4-2-1 = -8

標準入力から、各行に数字が入ってくる場合は以下でいけるかと思います。

ruby

1ary = STDIN.read.each_line.map { |line| line.to_i } 2 3result = ary.each_cons(2).map { |e| e[0]-e[1] }.inject &:+ 4 5puts result

追記

失礼しました。
欲しいのは差の絶対値の総和ですね。
であれば、上記のコードで、

ruby

1e[0]-e[1]

としているところを

ruby

1(e[0]-e[1]).abs

とします。

投稿2018/02/27 03:00

編集2018/02/27 03:25
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ffj

2018/02/27 03:40

ありがとうございます。 .each_cons()メソッドを知りませんでした。 .map、.injectの使い方についてもう少し理解を深めたいと思います。 とても勉強になります。
jun68ykt

2018/02/27 03:47

こんにちは。 実は、each_cons というメソッドがあることを、 私もこの回答を書くことで初めて知りました! 「ruby ならきっと、配列の、となりあう2個ないしn個の要素ごとにまとめて、 それを要素にした配列を作ってくれる便利なメソッドがあるだろう」 と推測して 「ruby 配列 2個ずつ」 でググって、該当記事を読んで、each_cons にたどりつきました。 each_cons の cons は lisp のコンスセルから取ってきた名前ですかね〜 ということで私も勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問