カメヲラボ

主にプログラミングとお勉強全般について書いてます

CodeIQ過去問集39:てんびんビーン

本稿はCodeIQで出題予定だったものの事情があって出題できなかった 【実力判定:Aランク】てんびんビーン という問題です。 Aランクとありますがだいぶヌルいです。

てんびんビーン

【問題】

てんびんと、重さの異なるマメがいくつかあります。
すべてのマメを使って、てんびんが釣り合う乗せ方があるかどうかを判定してください。

たとえば{110mg, 120mg, 230mg}の3つのマメがある場合、
{110mg, 120mg} と {230mg}に分ければてんびんは釣り合いますが、
{110mg, 120mg, 200mg}の3つのマメの場合はどのように分けても釣り合いません。

【入力】

標準入力から、次の値が与えらえます。
1行目には、マメの個数N(20以下の正の整数)、
2行目はN個の整数値(10000より小さい正の整数)が半角スペースで区切られています。

【出力】

同じ重さに分けることができる場合は「yes」、できない場合は「no」と(いずれの場合も小文字で)出力してください。

【入出力サンプル】

Input

3
110 120 230

Output

yes

【解答方法】

tenbin_bean.zipをダウンロードし、展開してください。中には以下のフォルダが含まれています。

  • input: テストデータです
  • output: 解答データです

テストデータを入力として、解答データと一致する出力になるようなプログラムを書いてください。

[【解答例】]

CodeIQ過去問集38:パインスイーパ

本稿はCodeIQで出題された 【実力判定:Bランク】パインスイーパ という問題を再編集したものです。 ※出題時と記述が一部異なる場合がありますがご了承ください。

パインスイーパ

【注意】

どう見てもマインスイーパです。本当にありがとうございました。

【問題】

正方形のマス目があります。

マス目のいくつかにはパイナップルが置かれています。 このとき、パイナップルが置かれているマス目以外のすべてのマス目について、周囲にあるパイナップルの数を数えてください。

f:id:Ozy:20180502174344j:plain

たとえばこのような配置の場合、空いているマス目ごとに周囲8マスのパイナップルの数を数えると、

f:id:Ozy:20180502174402j:plain

のようになります。

【入力】

標準入力から、次の値が与えらえます。 1行目には、正方形の一辺のサイズN(20以下の正の整数)、2行目以降のN行分は長さNの文字列で、空白を表す「.」かパイナップルを表す「P」のいずれかになっています。

【出力】

力文字列の「.」の部分をパイナップル数に置き換えた文字列を出力してください。

【入出力サンプル】

Input

4
.P.P
....
..P.
....

Output

1P2P
1232
01P1
0111

【解答方法】

pinesweeper.zipをダウンロードし、展開してください。中には以下のフォルダが含まれています。

  • input: テストデータです
  • output: 解答データです

テストデータを入力として、解答データと一致する出力になるようなプログラムを書いてください。

[【解答例】]

CodeIQ過去問集37:ぴったりビット

本稿はCodeIQで出題された 【実力判定:Cランク】ぴったりビット という問題を再編集したものです。 ※出題時と記述が一部異なる場合がありますがご了承ください。

ぴったりビット

【問題】

2進表現で

10011101
01100010

のように、各桁に対して片方のビットが1のとき、もう片方のビットが0になっている場合、「ぴったりビット」であるとします。 2つの非負整数が10進数として与えられたとき、2数がぴったりビットである場合は"yes"、そうでない場合は"no"と出力してください。

【入力】

標準入力から、整数値が与えられます。 1行目は整数値N(Nは20以下の非負整数)、2行目以降のN行は2つの整数値(いずれも255以下の非負整数)の組が半角スペースで区切られています。

【出力】

各組に対して、ぴったりビットである場合は"yes"、そうでない場合は"no"と、標準出力に出力してください。

【入出力サンプル】

Input

2
157 98
28 98

Output

yes
no

【解答方法】

pittari_bit.zipをダウンロードし、展開してください。中には以下のフォルダが含まれています。

  • input: テストデータです
  • output: 解答データです

テストデータを入力として、解答データと一致する出力になるようなプログラムを書いてください。

[【解答例】]

CodeIQ過去問集48:ハリセンボンアタック

本稿はCodeIQで出題された 第2回プロコン:ハリセンボンアタック という問題を再編集したものです。 ※出題時と記述が一部異なる場合がありますがご了承ください。

第4問:ハリセンボンアタック

【ストーリー】

「乙姫様…なんでこんなことを…。」カメがつぶやきました。
「浦島さん、竜宮城へ戻りましょう!!」

浦島太郎はカメと共に、再び竜宮城へ向かいました。

「お前たちが戻ってくるとは…。奴らめしくじりおったな!」
乙姫様に変装していた怪物が正体を現し、今にも襲い掛からんと浦島たちを睨み付けています。

浦島はカメに言いました。
「今度はどんな武器あるの?」

カメ「え?もうありませんよ…。」

絶望的な状況の中、周囲に転がっているハリセンボンに目が留まりました。

「これだ!!」

f:id:Ozy:20180501102805j:plain

【問題】

カメと協力して怪物と戦います。 攻撃手段はハリセンボンを捕まえて怪物に投げつけます。ただし、ハリセンボンを捕まえるときに浦島・カメ共にいくらかのダメージを受けます。自分たちが生き残る最低限の体力は残しつつ、怪物にできるだけ大きなダメージを与えてください。

【問題詳細】

浦島太郎・カメの体力をそれぞれ100と数値化します。 ハリセンボンは何匹かいますが、怪物に与えるダメージ・浦島太郎が受けるダメージ・カメが受けるダメージは異なっており、それらはハリセンボン1匹ごとに数値化されたデータセットとして与えられます。

【入力】

標準入力の1行目に、ハリセンボンの数を表す整数値N(10≦N≦50)が与えられます。 2行目以降のN行に、怪物に与えるダメージ・浦島太郎が受けるダメージ・カメが受けるダメージを表す3つの整数値が半角スペース区切りで与えられます。

【出力】

浦島太郎・カメが共に生き残っている(それぞれ体力値が1以上残っている)状態で、怪物に与えうる最大ダメージを出力してください。

テストデータはこちらからどうぞ

CodeIQ過去問集47:復讐

本稿はCodeIQで出題された 第2回プロコン:復讐 という問題を再編集したものです。 ※出題時と記述が一部異なる場合がありますがご了承ください。

第3問:復讐

【ストーリー】

竜宮城から戻った浦島太郎は、乙姫様から賜った玉手箱を開けました。
漁師でありながらも勉強熱心であった浦島太郎は、「絶対開けないで」という言葉は「開けなさい」と同義であることをよくわかっていたからです。

玉手箱を開けると、中から仕留めたはずのいじめっ子たちが武器を構えて現れました。
「…やられる!!」
そう思った瞬間、カメは言いました。
「このサブマシンガンを使うんだ!」

浦島太郎は狙いを定めました。

f:id:Ozy:20180501102810j:plain

【問題】

いくつかの狙撃目標地点について、各地点間の移動コストが与えられます。 たとえば次のような4地点について、1→3→2→4または4→2→3→1と移動すると移動コストは7となり、他のどの移動方法よりも低コストになります。

【入力】

標準入力から、1行目に整数値N(4≦N≦9)が与えられます。 2行目以降に、N個の整数値が半角スペースによって区切られたN行のデータ、つまりN×N個の整数値が与えられます。 これはNつの点同士の、移動にかかる時間を行列の形式で表したものです。問題文の例にある4点であれば、

4
0 3 8 2
3 0 4 1
8 4 0 5
2 1 5 0

のようなデータが与えられます。 A→BとB→Aは同じ移動コストですので、左上から右下への対角線(0の部分)に対して必ず対称になっています。

【出力】

標準出力に、最小の移動コスト(整数値のみ)を出力してください。

テストデータはこちらからどうぞ

CodeIQ過去問集46:彼魚らの衣装の値段は?

本稿はCodeIQで出題された 第2回プロコン:彼魚らの衣装の値段は? という問題を再編集したものです。 ※出題時と記述が一部異なる場合がありますがご了承ください。

第2問:彼魚らの衣装の値段は?

【ストーリー】

助けた(助けられた?)カメに連れられて、浦島太郎は竜宮城へ行きました。
竜宮城では色々な意味で大変な歓迎を受けることになりました。

浦島太郎はタイやヒラメのような人たちの踊りを見ながら、彼魚らの衣装代が気になりました。個々の衣装には、立派な真珠で固有の番号が刺繍されていたからです。

f:id:Ozy:20180501102814j:plain

【問題】

タイやヒラメのような人たちの人数Nが与えられます。彼魚らの衣装には、固有の番号1~Nが刺繍されています。

衣装のベースは1着あたり10,000円で、真珠の刺繍に金額は番号によってことなります。

0 … 真珠24個
1 … 真珠9個
2 … 真珠21個
3 … 真珠21個
4 … 真珠17個
5 … 真珠21個
6 … 真珠24個
7 … 真珠13個
8 … 真珠27個
9 … 真珠24個

f:id:Ozy:20180501114501p:plain

真珠1個につき1,000円かかるものとします。

たとえば、「10」の番号がついている衣装なら、

ベース…10,000円 「1」…1,000円×9個=9,000円 「0」…1,000円×24個=24,000円

で、合計43,000円になります。

【入力】

標準入力から、整数値N(1≦N≦30000)が与えられます。

【出力】

標準出力に、衣装代の合計金額を出力してください。単位等数値以外は出力しないでください。

テストデータはこちらからどうぞ

CodeIQ過去問集45:ロックオン!

本稿はCodeIQで出題された 第2回プロコン:ロックオン! という問題を再編集したものです。 ※出題時と記述が一部異なる場合がありますがご了承ください。

第1問:ロックオン!

【背景】

本問はCodeIQ第2回プログラミングコンテストで出題された問題の1つです。第1回が講評だったようで、第2回も昔話風でということになりました。

【ストーリー】

砂浜を歩いていた浦島太郎は、カメをいじめようとしている人たちを目撃してしまいました。
逃げようと思いましたが、足がすくんで動くことができません。

浦島太郎の存在に気付いたカメは言いました。
「これで奴らの急所を打ち抜くんだ」
浦島太郎はカメから受け取ったハンドガンを手に、戦う決意をしました。

f:id:Ozy:20180501102818j:plain

【問題】

矩形の文字列データが与えられます。 その中に、急所を表す文字「*」の場所を見つけ、その座標を答えてください。 幅W、高さHの矩形について、左上を(1, 1)、右下を(W, H)とします。

【入力】

標準入力から、1行目に矩形文字列データの幅Wと高さHが、半角スペースで区切られた状態で与えられます。 2行目以降のH行には、幅Wの文字列が与えられます。文字列データの文字には「#」または「*」のみです。

【出力】

標準出力に、急所を表す「*」の座標を出力してください。 座標は横方向・縦方向の順に、半角スペースで区切り1行で出力してください。 ※1オリジンであることにご注意ください。

【入出力例】

5 4
#####
#####
###*#
#####

のような入力に対しては、

4 3

と出力してください。

テストデータはこちらからどうぞ