ガジェット通信 GetNews

見たことのないものを見に行こう
「ジャスティス・リーグ」特集サイト

【クリスマス問題】『サンタの持ち場を計算しよう』解答と解説

DATE:
  • ガジェット通信 GetNewsを≫

【クリスマス問題】サンタの持ち場を計算しよう

本問題は、クリスマスプレゼントが当たる、コーディング問題でした。

それでは以下、問題とその解答、解説を見ていきましょう。

問題

あなたはサンタさんです。

サンタさんは、プレゼントを配るべき家を割り当てられます。

配る家は複数あり、1~15の整数のX, Y座標で、位置が示されます。

全ての家を含む、X軸に平行な辺を持つ正方形(辺の長さは整数、家は線上でもよい)の面積を計算するプログラムを書いてください。

以下、入力の例です。

数字は標準入力から、カンマと改行で区切られた文字として渡されます。

改行で区切られた各行が家を表します。

カンマで区切られた値は順に、X座標、Y座標を表します。

6,3
2,5
4,7
8,6

以下、グラフによる図解と各種数値です。

【クリスマス問題】『サンタの持ち場を計算しよう』解答と解説

X最小値 : 2
Y最小値 : 3
正方形の辺の長さ : 6
正方形の面積 : 36
正方形の左下の座標 : (2, 3)
正方形の右上の座標 : (8, 9)

正方形の辺の長さは「6」なので、正方形の面積は「36」になります。

答えは、以下のように標準出力に出力してください。

入力と出力

入力1と出力1

// 入力1
6,3
2,5
4,7
8,6

// 出力1
36

図解は、以下の通りです。

【クリスマス問題】『サンタの持ち場を計算しよう』解答と解説

X最小値 : 2
Y最小値 : 3
正方形の辺の長さ : 6
正方形の面積 : 36
正方形の左下の座標 : (2, 3)
正方形の右上の座標 : (8, 9)

入力2と出力2

// 入力2
7,13
14,1
15,15
15,2
10,4
15,8
12,3
7,13
3,6
14,2

// 出力2
196

図解は、以下の通りです。

【クリスマス問題】『サンタの持ち場を計算しよう』解答と解説

X最小値 : 3
Y最小値 : 1
正方形の辺の長さ : 14
正方形の面積 : 196
正方形の左下の座標 : (3, 1)
正方形の右上の座標 : (17, 15)

入力3と出力3

// 入力3
8,1
15,2
12,13
12,10

// 出力3
144

図解は、以下の通りです。

【クリスマス問題】『サンタの持ち場を計算しよう』解答と解説

X最小値 : 8
Y最小値 : 1
正方形の辺の長さ : 12
正方形の面積 : 144
正方形の左下の座標 : (8, 1)
正方形の右上の座標 : (20, 13)

解説1

求める正方形は、以下の手順で得ることができます。

1. X座標の最大値から、X座標の最小値を引きます。

2. Y座標の最大値から、Y座標の最小値を引きます。

3. この2つの値の内、大きい方が正方形の辺の長さになります。

4. 正方形の辺を2乗すれば答えとなります。

この、X座標、Y座標の最大値、最小値は、それぞれの座標の最大値、最小値を求めてもよいですし、配列を作ってソートして求めてもよいです。求め方は、好きな方法を採用すればよいと思います。

サンプル1

以下、サンドボックス(言語は「JavaScript Rhino」)で、実行確認できるコードを示します。コード欄に、下記のコードをコピペして、INPUTに入力を入れ、RUNボタンを押してください。

// 参考コード

// 引数の取得
var _in_ = new java.util.Scanner(java.lang.System.in);
var srcX = [], srcY = [];
while (_in_.hasNext()) {
var arr = _in_.nextLine().split(‘,’);
srcX.push(arr[0] * 1); srcY.push(arr[1] * 1);
}

// x, yの最大値 – 最小値を求める
var x = Math.max.apply(null, srcX) – Math.min.apply(null, srcX);
var y = Math.max.apply(null, srcY) – Math.min.apply(null, srcY);

// 正方形の一辺を求める
var max = Math.max(x, y);

// 面積を出力
print(max * max);

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、12月の誕生日問題が出題中です。
ぜひ挑戦してみてくださいね!

カテゴリー : デジタル・IT タグ :
CodeIQ MAGAZINEの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。