女子大生とペアプロするだけの簡単なお仕事です!応募期間:4月16日(水)から5月14日(水)まで paiza paiza

ペアプロ!?、、しょうがないなぁ。

あなたの部署に配属された女子大生インターンの木野さん。
インターンを締めくくる開発発表のプログラミングで苦戦しているようです。ペアプロしてより良いコードを指導してあげましょう。

【正解者3名様】シャーク、レッドブル、ロックスターのうちいずれか1ケースをプレゼント!

Share!

各解法ごとのアルゴリズム解説を公開しました!

POH2 解法を図解で解説!(2014/5/28)

応募受付期間終了しました。ブログにて結果発表中です!

POH2 結果発表【最速コード発表中!】(2014/5/21)

模範解答Vol.3(動的計画法)を公開しました。

模範解答を見る(会員登録が必要です)(2014/4/30)

開発したいプログラム

インターンを締めくくる開発発表として、あなたの会社の得意先であるcodomo社から受注したスマートフォン向けの新OS paizen(パイゼン)を開発中の木野さんは、今、ホーム画面へのウィジェット配置機能の実装を考えています。現在のホーム画面に対し、指定されたウィジェットが配置可能な場所をすべて求める機能を実装することにしましたが、どうやら苦戦中のようです。

ホーム画面の現在のウィジェット配置状態と複数のウィジェットが与えられるので、それぞれのウィジェットに対し 配置可能座標 ( 定義は問題文中段 )の数をすべて求めてください。

▼問題詳細を見る

名誉挽回、社会人エンジニアとしてのプログラミング力が試される!

あなたの部署に配属された女子大生インターンの木野さん。インターンを締めくくる開発発表のプログラミングで苦戦しているようです。木野さんは実はあなたの幼馴染。年齢は離れているものの、いつも木野さんには何かと「デスマってる駄目なお兄ちゃん」扱いされてきましたが、ペアプロで効率の良いコードを個人指導してあげられれば、デキる社会人として見直してもらえるチャンスです。

本ページ下記の「ペアプロ内容詳細」に従い、お好きな言語 (Java、C、C++、C#、PHP、Ruby、Python、Perl) で、効率の良いコードを実装してください。提出コードは複数のテストケースを入力し、正答数と解答の提出までに要した時間を測定し得点が決まります。

  • 提出いただいたコードは複数回実行され、一度の実行では1つのテストケースのみ入力されます。
  • 公開問題なので制限時間はありません。
  • ひとり何回でもチャレンジできます。
  • 回答をブログ等に書いていただいても問題ありません。
得点次第で女子大生の反応が変わる!?/提出コードの得点も分かる!/高得点がでたら友達に自慢しよう!

女子大生とのペアプロの流れ

STEP1 コードを書く

STEP2 動作確認する

STEP3 木野さんとペアプロ(提出)

STEP4 その場で採点結果発表!

STEP5 模範解答公開(paizaへの登録が必要)

正解者の中から3名様にシャーク、レッドブル、ロックスターのうちいずれか1ケースをプレゼント!

  • 提出したコードは、結果発表時に匿名で他の挑戦者にも公開される場合がございます。

テストケース別通過率

あなたも参加して、全テストケースをクリアしよう!

テストケース番号

ケース通過率

通過数 / 受験数

TestCase: 1

83 %

5719 / 6851 提出

TestCase: 2

81 %

5585 / 6851 提出

TestCase: 3

71 %

4913 / 6851 提出

TestCase: 4

49 %

3387 / 6851 提出

TestCase: 5

42 %

2911 / 6851 提出

TestCase: 6

29 %

2006 / 6851 提出

TestCase: 7

25 %

1742 / 6851 提出

(2014/05/15更新)

各テストケース毎の通過率及び通過人数を表示しています。

言語別 最速・最遅実行時間 CASE4

テストケース4(中規模データ)の 最速・最遅実行時間です。

言語

最速実行時間

最遅実行時間

通過数 / 受験数

Java

0.04 秒

5.99 秒

656 / 1364 提出

PHP

0.01 秒

9.52 秒

448 / 922 提出

Ruby

0.02 秒

9.92 秒

364 / 754 提出

Python2

0.06 秒

9.99 秒

377 / 674 提出

Perl

0.01 秒

9.73 秒

96 / 162 提出

C

0.01 秒

2.98 秒

529 / 1100 提出

C++

0.01 秒

2.99 秒

566 / 1110 提出

C#

0.01 秒

5.96 秒

348 / 762 提出

(2014/05/15更新)

言語別 最速・最遅実行時間 CASE5

テストケース5(中規模データ)の 最速・最遅実行時間です。

言語

最速実行時間

最遅実行時間

通過数 / 受験数

Java

0.04 秒

5.98 秒

606 / 1364 提出

PHP

0.03 秒

9.78 秒

358 / 922 提出

Ruby

0.02 秒

9.98 秒

285 / 754 提出

Python2

0.08 秒

9.91 秒

277 / 674 提出

Perl

0.01 秒

9.90 秒

61 / 162 提出

C

0.01 秒

2.87 秒

492 / 1100 提出

C++

0.01 秒

2.98 秒

528 / 1110 提出

C#

0.01 秒

5.78 秒

301 / 762 提出

(2014/05/15更新)

言語別 最速・最遅実行時間 CASE6

テストケース6(大規模データ)の 最速・最遅実行時間です。

言語

最速実行時間

最遅実行時間

通過数 / 受験数

Java

0.04 秒

5.99 秒

415 / 1364 提出

PHP

0.08 秒

8.84 秒

257 / 922 提出

Ruby

0.04 秒

9.39 秒

178 / 754 提出

Python2

0.14 秒

9.84 秒

159 / 674 提出

Perl

0.04 秒

7.38 秒

41 / 162 提出

C

0.01 秒

2.87 秒

339 / 1100 提出

C++

0.01 秒

2.56 秒

402 / 1110 提出

C#

0.01 秒

5.32 秒

212 / 762 提出

(2014/05/15更新)

最遅実行時間はLimitTime内で最も遅い実行時間だったものを表示しています。
※ テストケース4〜7( Java,C,C++,C#のテストケースは実行速度差の関係でH,Wが約2.3倍のサイズとなっています )の実行時間です。実行する時間帯によっては実行時間が変わる可能性がございます。予めご了承ください。

言語別 最速・最遅実行時間 CASE7

テストケース7(大規模データ)の 最速・最遅実行時間です。

言語

最速実行時間

最遅実行時間

通過数 / 受験数

Java

0.04 秒

5.98 秒

327 / 1364 提出

PHP

0.09 秒

9.42 秒

245 / 922 提出

Ruby

0.05 秒

9.92 秒

127 / 754 提出

Python2

0.16 秒

8.43 秒

142 / 674 提出

Perl

0.04 秒

9.79 秒

40 / 162 提出

C

0.01 秒

2.78 秒

290 / 1100 提出

C++

0.01 秒

2.95 秒

375 / 1110 提出

C#

0.01 秒

5.99 秒

193 / 762 提出

(2014/05/15更新)

お仕事の期限、報酬(プレゼント)

スケジュール

応募期間
4月16日(水)~5月14日(水)

終了しました

審査期間
5月15日(木)~5月22日(水)
結果発表
5月23日(木)

報酬(プレゼント)

参加者で希望者の中から抽選で3名の方に、シャーク、レッドブル、ロックスターのうちいずれか1ケースをプレゼント!! プレゼントご希望の方は、メールアドレスをご記入ください。

イベント規約

  •  本キャンペーンでは、会員登録をしないで公開問題を受験していただくことができます。ただし、ご利用にあたっては、以下の注意事項にご了承いただくことが前提となります。
  • *注意事項*
  • (1) 会員登録は必要ありませんが、メールアドレスのご登録が必要になります。ただし当社は、いただいたメールアドレスを本キャンペーン関連のご連絡以外には使用しないものとします。
  • (2) 既存会員の方も本キャンペーンでの受験にご参加いただけますが、ご自身のスキルランクには影響しませんので、予めご了承ください。
  • (3) ご提出いただいたコードの著作権は受験者にその権利が帰属しますが、当社はそのコードを当社のサイトやSNS上で公開したりなど、自由に利用できるものとします。詳しくは 当社利用規約 第5条2項に準じるものとします。
  • (4) ご提出いただいたコードは当社システム上において完全に保存されない場合がありますので、受験者ご自身において必要に応じてバックアップを取るなど、適切なご対応をお願いいたします。

ペアプロの詳細(問題詳細)

Paizen OS ホーム画面に配置できる3つのウィジェット
本気出せば自分でも出来るんだけどね。

インターンを締めくくる開発発表として、あなたの会社の得意先であるcodomo社から受注したスマートフォン向けの新OS Paizen(パイゼン)を開発中の木野さんは、今、ホーム画面へのウィジェット配置機能の実装を考えています。 現在のホーム画面に対し、指定されたウィジェットが配置可能な場所をすべて求める機能を実装することにしました。

ホーム画面は大きさ縦H、横W の長方形で、1 x 1の正方形サイズでH x W個の区画に区切られています。ホーム画面左上の区画を(1, 1)、右下の区画を(W, H) で表します。 ウィジェットは縦S、横T の長方形で、同様に1 x 1 の正方形のサイズ(ホーム画面と1区画と同サイズ)で区切られています。ウィジェット左上のエリアを(1, 1)、右下のエリアを(T, S) で表します。

ウィジェットの配置とは、ホーム画面に対して、他の既に配置されているウィジェットに重ならないように、かつ、画面からはみ出ないようにウィジェットを置くことを言います。 このとき、ウィジェットを回転させたり、斜めにしたりして配置することはできません。また、ホーム画面の区画に対して、 ウィジェットがずれないようにぴったりとはまる形で配置する必要があります。(半区画ずらすような事は不可)

ウィジェットを配置したとき、そのウィジェット上のエリア(1, 1) が重なっているホーム画面上の区画(X, Y) をウィジェットの 配置可能座標 と呼ぶことにします。配置の仕方から、X, Y はともに整数で、1 ≦ X ≦ W, 1 ≦ Y ≦ H であることがわかります。

◆ウィジェットとは、ホーム画面上で、ひと目で情報を得られるように小型化されたアプリの事を言います。
ウィジェット例
↑ウィジェット例(天気情報ウィジェット)

さてウィジェットの配置機能実装の第一歩として、現在のホーム画面に対し、指定されたウィジェットが配置可能な場所をすべて求める機能を実装することにしました。そこでホーム画面の現在のウィジェット配置状態と複数のウィジェットが与えられるので、それぞれのウィジェットに対し 配置可能座標 (定義は問題文中段)の数をすべて求めてください。

※この物語はフィクションであり、実在の人物・団体とは一切関係ありません

他のプログラマに教えよう!

条件

PHP,Ruby,Python,Perlは全テストケースで以下の条件を満たします。
  • 1 ≦ H ≦ 130 ※ 画面縦の区画数
  • 1 ≦ W ≦ 130 ※ 画面横の区画数
  • 1 ≦ N ≦ HW ※ ウィジェットの個数
  • 1 ≦ S_i ≦ 300 (1 ≦ i ≦ N) ※ ウィジェット縦大きさ
  • 1 ≦ T_i ≦ 300 (1 ≦ i ≦ N) ※ ウィジェット横大きさ

Java,C,C++,C#は全テストケースで以下の条件を満たします。
  • 1 ≦ H ≦ 300 ※ 画面縦の区画数
  • 1 ≦ W ≦ 300 ※ 画面横の区画数
  • 1 ≦ N ≦ HW ※ ウィジェットの個数
  • 1 ≦ S_i ≦ 300 (1 ≦ i ≦ N) ※ ウィジェット縦大きさ
  • 1 ≦ T_i ≦ 300 (1 ≦ i ≦ N) ※ ウィジェット横大きさ

入力される値

入力は以下のフォーマットで与えられます。
H W// 与えられるホーム画面サイズ。Hはホーム画面縦の区画数、Wはホーム画面横の区画数
D_1// ホーム画面1行目、W個の区画の空き有無
D_2// ホーム画面2行目、W個の区画の空き有無
...
D_H// ホーム画面H行目、W個の区画の空き有無
N// 与えられるウィジェットの数
S_1 T_1// ウィジェット1の縦サイズ(S_1)、横サイズ(T_1)
S_2 T_2// ウィジェット2の縦サイズ(S_2)、横サイズ(T_2)
...
S_N T_N// ウィジェットNの縦サイズ(S_N)、横サイズ(T_N)
※ 上記[ // ]以降はコメントアウトの意。

Hはホーム画面縦の区画数、Wはホーム画面横の区画数です。
D_i(1 ≦ i ≦ H)は文字'1'と'0'の組み合わせからなる長さWの文字列で、'1'は既に配置済みの領域で、'0'は配置可能な領域を表します。
N(1 ≦ N ≦ HW)は与えられるウィジェットの個数を表します。
S_i(1 ≦ i ≦ N)はウィジェット縦のサイズ、T_i(1 ≦ i ≦ N)はウィジェット横のサイズです。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください

期待する出力

各ウィジェットごとに配置可能座標の数を一行づつ出力してください。
最後は改行し、余計な文字、空行を含んではいけません。
入力例1
7 4
1000
1101
1001
1111
1111
1111
1111
3
1 2
2 3
2 1
出力例1
3
0
2
入力例2
5 5
00000
00100
00010
10001
10000
3
2 2
1 1
3 2
出力例2
6
20
2

解答欄

上記の問題の解答コードを下記入力欄に記入し提出してください。
使用できる言語はJava,PHP,Ruby,Perl,Python,C,C#,C++,JavaScriptです。その他の言語(Beta)は、問題が解けない可能性があります。

標準入力の値の取得方法は下記ページのサンプルコードを参照ください。

Let’sチャレンジ!!得意な言語を選んでコードを書いてみよう

使用する言語(提出するコードの言語)

あなたの得意な言語を選択!

コード実行結果

応募期間終了いたしました。
コード実行は可能ですがプレゼント対象外、最速実行時間計測対象外に成ります。

ニックネーム (必須)
英数半角文字のみ。模範解答コード掲載時、プレゼント当選者発表時にサイトに掲載する事がございます。
メールアドレス (必須)
登録メールアドレスは、paiza オンラインハッカソン以外で利用する事はございません。
コードを提出頂くと解答結果ページをメールいたします。

Facebook

Twitter

過去開催イベント

POH Lite 天才火消しエンジニア霧島「もしPMおじさんが丸投げを覚えたら」

paizaオンラインハッカソンVol.1「新人女子の書いたコードを直すだけの簡単なお仕事です!」

もし女子大生プログラマに『アルゴリズム』を図解で教えるとしたら

【POH Vol.2結果発表】女子大生プログラマの心を鷲掴みにした最強のコード8選

模範解答(会員登録が必要です)

POH Lite模範解答ページ

POH Vol.2模範解答ページ

POH Vol.1模範解答ページ

ページの先頭へ戻る