プログラミング練習問題をPHPで解いてみた
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
プログラミングのアルゴリズムを考えるのは、けっこう楽しいものですが、数学的な論理が必要となると、割と簡単なものでも、それをプログラミング言語で表現するのは難しい。
紙面では簡単に解ける二次方程式でも、それをプログラミング言語上で関数やメソッドで表すには、それなりの訓練が必要です。
スポンサーリンク
と、前振りはここまで。
10分でコーディング|プログラミングに自信があるやつこい!!と題した問題があったので、解いてみました。
・・・10分じゃできませんでした。
細かいとこまで入れると、30分くらいかかった。
PHPで解いたのですけど、私が書いたコードは以下。
0 divide(ゼロ除算)へのエラー対応も念のため。
<?php
function card_deal($player_nums, $cards) {
if ($player_nums == 0) {
exit("プレイヤーが0人です");
}
$cards_ary = str_split($cards);
$length = count($cards_ary);
$cards = array(); // return値
if ($player_nums > $length) {
for ($j = 0; $j < $player_nums; $j++) {
$cards[$j] = "";
}
} else {
$length = $length - ($length % $player_nums);
// n人目のカードを求める
for ($n = 0; $n < $player_nums; $n++) {
for ($i = 0; $i < $length; $i++) {
if (($i % $player_nums) == $n) {
$cards[$n] .= $cards_ary[$i];
}
}
}
}
return $cards;
}
var_dump(card_deal(3, "123123123"));
var_dump(card_deal(4, "123123123"));
var_dump(card_deal(6, "01234"));
var_dump(card_deal(0, "123456789"));
?>
実行結果。→http://codepad.org/iFbZAOhl
array(3) {
[0]=>
string(3) "111"
[1]=>
string(3) "222"
[2]=>
string(3) "333"
}
array(4) {
[0]=>
string(2) "12"
[1]=>
string(2) "23"
[2]=>
string(2) "31"
[3]=>
string(2) "12"
}
array(6) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(0) ""
[3]=>
string(0) ""
[4]=>
string(0) ""
[5]=>
string(0) ""
}
プレイヤーが0人です
どっかおかしかったらご指摘ください。
引用元の解答はJavaですが、あー、なるほどなぁ。
私の書いたのより、はるかにスマートだ。
1.最初にプレイヤーの数の分、カードの配列を、空の文字列で初期化。
2.カードの並びをforで回しながら、処理する。
3.forの中で、cards[index++]で、プレイヤーにカード割り当て。
4.index がプレイヤー数と同じの場合・・・残りの枚数がプレイヤー数より少なくなったら、break。
5.じゃなかったら、index を 0 に巻き戻し。
というアルゴリズムで解いてありました。
スポンサーリンク
>> 次の記事 : PHPでvar_dump()を使ったお手軽デバッグコード
<< 前の記事 : CakePHPはMVCかつフルスタックのフレームワーク
- - 関連記事 -
- strpos() や strcmp() など間違えやすいif文での判定
- htmlentities() と htmlspecialchars() の違い
- PHPの内部エンコードと出力文字コード、スクリプト文字コード
- PHPのデバッグ・xdebugをxamppで有効にする
- CakePHPの日本語対応、国際化
- コマンドラインでPHPが起動できない
- 直接ファイルが実行されたときだけ起動するスクリプト
- ディレクトリを探索してリンク一覧表示
- PHPとRubyのコードの書き方を比較
- コメントアウトの使い分けと、/*** ~ ***/とか// — を単語登録
- PHPでvar_dump()を使ったお手軽デバッグコード
- CakePHPはMVCかつフルスタックのフレームワーク
- PHP5のクラス定義とオブジェクトのおさらい
- フレームワークCakePHPにチャレンジ
- sort・asort・ksort 配列を並べ替える関数
- foreach構文
- PHPの配列
- strcmp関数
- strcasecmp関数
- PHPヒアドキュメント
スポンサーリンク