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

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

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

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

Q&A

解決済

2回答

263閲覧

Ruby 複数の引数

t.s_k

総合スコア61

Ruby

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

0グッド

0クリップ

投稿2018/10/07 23:09

編集2018/10/07 23:18

方角(S W N E)を2方向入力し、なす角180(度)、90(度)どちらかを返す処理をしたいのですが、
case分の複数受付がわからないです。
他の手段でも構わないので教えていただきたいです。

rb

1def s_to_i(d1,d2) 2 #分からない部分 3end 4 5tmp1 = gets.chomp 6tmp2 = gets.chomp 7puts s_to_i(tmp1,tmp2) 8

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

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

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

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

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

guest

回答2

0

0度のパターンを考えない場合に
楽そうな方法を3パターン

  1. 両辺をsortすることで単純比較できるので180度のパターン2つを比較するだけ
  2. 偶数+偶数=偶数
    奇数+奇数=偶数
    奇数+偶数=奇数
  3. 判定用のハッシュ作ってつっこむ

case分の複数受付

とはネストさせたいのか、配列作って渡せばいいのかどっちだろ

投稿2018/10/08 00:12

asm

総合スコア15147

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

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

0

ベストアンサー

[S, N], [S, S] などの組み合わせすべてで case をつくるのは大変です。
次のような方法はいかがでしょう。

ruby

1ANGLE = {'N' => 0, 'E' => 90, 'S' => 180, 'W' => 270} 2 3def s_to_i(d1, d2) 4 a1 = ANGLE[d1] 5 a2 = ANGLE[d2] 6 (a1 - a2).abs % 180 7end 8 9 10tmp1 = gets.chomp 11tmp2 = gets.chomp 12puts s_to_i(tmp1, tmp2) 13 14["N","E","W","S"].each do |d1| 15 ["N","E","W","S"].each do |d2| 16 puts("#{d1}, #{d2} -> #{s_to_i(d1, d2)}") 17 end 18end

実行例
イメージ説明

どうしても case で処理したいなら

case d1 + d2 when "NN" 0 when "NE" 90 ...

のようにするとよいかもしれません。(16通りをすべて列挙する必要があります)

追記:
実際に case 文をかいてみました。 (d1, d2 をソートすることで、 16 通りでなく 10 ,通りにまでは減らせます)

ruby

1def s_to_i_c(d1, d2) 2 d = [d1, d2].sort 3 case d 4 when ['E', 'E'], ['N', 'N'], ['S', 'S'], ['W', 'W'], ['E', 'W'], ['N', 'S'] 5 return 0 6 when ['E', 'N'], ['E', 'S'], ['S', 'W'], ['N', 'W'] 7 return 90 8 else 9 return -1 # エラー (d1, d1 の値が不正) 10 end 11end

でも E,N,S,W の4 方向から NE などを加えた 8 方向やもっと多くの方向をあつかえるようにしようとした際に
case で書いてあると変更が大変です。

投稿2018/10/08 00:03

編集2018/10/08 08:11
katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問