パスカルの三角形のプログラムを実装します。
その際に、参考サイトを発見したのですが、
仕組みがいまいちわからない点があるため質問させていただきます。
ここで行なっていることがいまいちわかりません。
御教授がいます。
// $rowsがnullかどうか判断し、nullであれば[]を表示 $previousRow = $rows[$i - 1] ?? []; $previousSize = count($previousRow);
$rows = []; for ($i = 0; $i < $hoge; $i++) { $row = [1]; $previousRow = $rows[$i - 1] ?? []; $previousSize = count($previousRow); for ($j = 1; $j <= $previousSize; $j++) { if ($j === $previousSize) { $row[] = 1; continue; } $row[] = ($previousRow[$j - 1] + $previousRow[$j]); } $rows[] = $row; } return $rows;
参考サイト:https://exercism.io/tracks/php/exercises/pascals-triangle/solutions/a2d37bbedcc745a897d892dca86a3c34
その参考サイトとは?
ご自身はどこまで調べて理解されてるのでしょうか。
なにかこう、どこが分からないのか見えづらい書き方になってます。
ご指摘ありがとうございます、参考サイト追記いたしました。
?? [];
この部分の仕組みがわからなかったので、調べたところNullかどうか確認できるnull合体演算子であることがわかりました。
しかし以降の仕組みがわからないので質問しました
null合体演算子により何が得られるかは質問者さんは分かってそうに感じたのですが、いかがでしょうか。
[] は空の配列なので、count()しても0でその場合は次のforは処理されず、あたりの話ですか?
この場合は [ ] を得るという考えであっていますか?
詳細不足ですみませんm(__)m
$rows[$i - 1]
この部分の仕組みがわからない状況です。
質問は編集できます。追記してください。
まずは機能から。
https://www.php.net/manual/ja/language.operators.comparison.php#language.operators.comparison.coalesce
で、自分でコード作って確かめると良いです。
この部分は…と言っても
そのままで、$iから1を引いた値を$rowsの添字とする
です。
実際に動かしてみて、変数の値をデバッグで追えば分かることとも思います。
ご丁寧にURLまでありがとうございます!
$previousRow = $rows[$i - 1] ?? [];
$previousSize = count($previousRow);
つまりここでは、$previousRowをカウントした値を$previousSize
としているのですよね?
すみません何だか全体的に何をしているのかわからなくなってきてしまいましたm(__)m
全体的に説明いただきたいです。
このように書いた意図は作った人にしか分かりませんし、先に書いたように手元で動かして一行ずつ追っていくしかありません。デバッグを覚えてください。
ここで赤の他人が書いたコードを赤の他人が解読しても質問者さんからすると更に第三者感が強くなるので「理解したい」という本質問の目的は達成できないと思います。
使いたい/コードを参考にして何かしたい のはあくまで質問者さんですから。
回答2件
あなたの回答
tips
プレビュー