質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1613閲覧

配列のポーカーアルゴリズムについて

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2022/08/19 14:22

前提

現在課題でポーカーのアルゴリズムに取り組んでいるのですが、どうしてもjokerを足した後の処理ができません。
4日ほど悩んでいるのですが、全く分からないため知識をお借りしたいです。

実現したいこと

・cards配列に格納したカードの役を判定し、結果表示してください。
・cards配列には計5枚、それぞれ絵柄(suit)、数字(numeber)を格納する
・絵柄はheart, spade, diamond, club、jokerのみ
・数字は1-13、jokerの数字は0とする。

・上記以外の絵柄や数字が存在した場合、または同一の絵柄、数字がcards配列に存在した場合、
・役の判定前に「手札が不正です」と表示
・役判定は関数に記述し、関数を呼び出して結果表示すること

分からない箇所

// 手札 $cards = [ ['suit'=>'heart', 'number'=>1], ['suit'=>'heart', 'number'=>10], ['suit'=>'heart', 'number'=>13], ['suit'=>'joker', 'number'=>12], ['suit'=>'joker', 'number'=>11], ]; function judge($cards) { // この関数内に処理を記述 foreach($cards as ['suit' => $suit,'number' => $number]){ //不正 if(!in_array($suit,['heart','spade','diamond','club','joker']) || $number < 0 || $number > 13 ){ return '不正'; } //ここが分からない=jokerの判定(jokerが二枚以上あれば、jokerの数字が0以上であれば) if(($suit['joker']) > 2){ return '不正'; } if(count(array_unique($cards,SORT_REGULAR)) <= 4){ return '不正'; } //$cardsから$numberを分ける $number_count = array_column($cards,'number'); $numbers_count = array_count_values($number_count); $numbers_list = array_count_values($numbers_count); //$cardsから$suitを分ける $suit_count = array_column($cards,'suit'); $suits_count = array_count_values($suit_count); $suits_list = array_count_values($suits_count); //$numberが連番かどうか $SerialNumber = $number_count[0]; $SerialNumber_list = range($SerialNumber, $SerialNumber + 4);

試したこと

ネットで検索し、in_arrayやarray_count_valuesなど、いろいろな関数を使ってみましたが上手くいきませんでした。

if(in_array(['joker'],$suit) >= 1)
if(isset($suit['joker']) >= 1)
if(array_search($cards,['joker']) >= 1)

等等…
変数を変えたり、鉤括弧を外したり、他に使えそうな関数を探したりしたのですが、どうにも上手くいきません。

jokerの数字が0以上の時の処理も同時に考えましたが同様に全然上手くいきません…

課題なので、答えを詳しくとは言いません。
自分で考えたいので「この関数を使えばできる。」とかのアドバイスで構わないので教えて欲しいです。

わがままかとは思いますが、皆さんの知恵をお借りできればと思っております。
よろしくお願いします。

arcxor👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arcxor

2022/08/19 17:08

> どうしてもjokerを足した後の処理ができません。 このプログラムのどの部分で困っているのかよく分かりません。何を質問したいのでしょうか?
AbeTakashi

2022/08/19 17:15

全体的に質問の意味が分からないですね・・・ 「数字は1-13、jokerの数字は0とする。」となってるのに、手札に['suit'=>'joker', 'number'=>11]があるってどういうことなんでしょうか? 実際のトランプでもジョーカーに数字は無いと思いますし、「試したこと」で何をしようとしているのかも分かりません。
m.ts10806

2022/08/19 20:18

仕様と設計を実装に近い形で図に起こした方が良いように思います。 文字だけでは自身も把握しきれない部分あるのではと。
guest

回答1

0

ベストアンサー

皆さんの言う通りコードに色々と不備があったようで申し訳ありません。

以降色々と検索やコードの見直しを行うことで自力にて解決することができました。
未熟者のため、今後もこちらのサイトを使用させていただく機会もあるかもしれませんが、今後はコードに不備の無いよう、そしてしっかりと試したことなどを記載するようにしたいと思います。ありがとうございました。

投稿2022/08/21 02:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問