裏 RjpWiki

文字通り,RjpWiki の裏を行きます
R プログラム コンピュータ・サイエンス 統計学

金山発掘(馬鹿馬鹿し)

2016年11月01日 | ブログラミング

締め切りが 11/01 12:00 AM なので,その 1 分後に登録されるように予約する

問題

あなたは誕生日プレゼントとして、土地をもらえることになりました。
もらえる土地は、5×5マスの正方形の土地です。
世界は10×10のマスでできており、いくつかのマスには金山があります。金山の数が最大になる5×5マスは、1つしかありません。
最も多くの金山をゲットできるように、もらえる土地を探索するプログラムを書いてください。



以下、入力の例です。左上を {"x":0,"y":0} として、右下を {"x":9,"y":9} とします。「x」はx座標、「y」はy座標です。通常の土地は「w」の文字、金山のある土地は「G」の文字です。
これらは標準入力から、改行で区切られた文字として渡されます。

wwGwwwwwGG
Gwwwwwwwww
wwwwwwwwww
Gwwwwwwwww
wwwwGwwGww
wGwwwwwwww
wwwGGwwwww
wwwwwwGwww
wwwwGGwwww
GwwwGGwGwG

以下、出力の例です。最も多くの金山が得られる土地の左上の座標を、「{"x":3,"y":5,"g":8}」のように答えます。「x」はx座標、「y」はy座標、「g」は5×5マスの土地に含まれる金山の数です。
答えは、以下のように標準出力に出力してください。
{"x":3,"y":5,"g":8}

==========


プログラム自体は馬鹿馬鹿しいほど簡単なので,文字数を少なくするプログラムを目標にすると,以下のようなプログラムになった。

func = function(s) {
    x = matrix(unlist(strsplit(s, "")) == "G", byrow=TRUE, ncol=10)
    y = sapply(0:35, function(i) sum(x[i%%6+1:5, i%/%6+1:5]))
    i = which.max(y)-1
    cat(sprintf('{"x":%s,"y":%s,"g":%s}', i%/%6, i%%6, y[i+1]))
}
func("wwGwwwwwGGGwwwwwwwwwwwwwwwwwwwGwwwwwwwwwwwwwGwwGwwwGwwwwwwwwwwwGGwwwwwwwwwwwGwwwwwwwGGwwwwGwwwGGwGwG")

> func(s)
{"x":3,"y":5,"g":8}

ジャンル:
ウェブログ
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
« 投影図から想像する立体 | トップ | 「デジタル・ルート」問題 »
最近の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む