teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2021/12/24 06:07

投稿

KazuhiroHatano
KazuhiroHatano

スコア7834

answer CHANGED
@@ -57,4 +57,10 @@
57
57
  'diagnose_2'=>'no',
58
58
  'diagnose_3'=>'yes',
59
59
  ])];//?色
60
- ```
60
+ ```
61
+
62
+ 頭の中で二進数を数えられるなら
63
+ ``$resultMap``の``0b111=>``みたいなキーの部分を省け
64
+ かつ組み合わせの抜け漏れを防げますが
65
+ そうするとどれがどれかわからなくなるので
66
+ とりあえず``$resultMap``はこのぐらいが妥協点

2

修正

2021/12/24 06:07

投稿

KazuhiroHatano
KazuhiroHatano

スコア7834

answer CHANGED
@@ -36,7 +36,7 @@
36
36
  $rtn=0;
37
37
  foreach(range(1,3) as $i){
38
38
  if($answers['diagnose_'.$i]==='yes'){
39
- $rtn|=1<<($i-1);
39
+ $rtn|=1<<(3-$i);
40
40
  }
41
41
  }
42
42
  return $rtn;
@@ -56,5 +56,5 @@
56
56
  'diagnose_1'=>'no',
57
57
  'diagnose_2'=>'no',
58
58
  'diagnose_3'=>'yes',
59
- ])];//
59
+ ])];//
60
60
  ```

1

追記

2021/12/24 05:53

投稿

KazuhiroHatano
KazuhiroHatano

スコア7834

answer CHANGED
@@ -12,4 +12,49 @@
12
12
 
13
13
  結果のIDから結果の出力を取得する際には
14
14
  フラグの集合も渡す仕様にしておけば
15
- 動的な出力にも対応しやすくなると思います
15
+ 動的な出力にも対応しやすくなると思います
16
+
17
+ ---
18
+
19
+ 仕様変更とか内容変更に強いわけじゃなく
20
+ 誰にでもわかりやすいコードというわけでもないですが
21
+ こういうやり方もあるよという参考程度に
22
+
23
+ ```php
24
+ <?php
25
+ $resultMap=[
26
+ 0b111=>'赤色',
27
+ 0b110=>'黄色',
28
+ 0b101=>'白色',
29
+ 0b100=>'緑色',
30
+ 0b011=>'紫色',
31
+ 0b010=>'?色',
32
+ 0b001=>'?色',
33
+ 0b000=>'青色',
34
+ ];
35
+ function getResutID(array $answers):int{
36
+ $rtn=0;
37
+ foreach(range(1,3) as $i){
38
+ if($answers['diagnose_'.$i]==='yes'){
39
+ $rtn|=1<<($i-1);
40
+ }
41
+ }
42
+ return $rtn;
43
+ }
44
+
45
+ echo $resultMap[getResutID([
46
+ 'diagnose_1'=>'yes',
47
+ 'diagnose_2'=>'yes',
48
+ 'diagnose_3'=>'yes',
49
+ ])];//赤色
50
+ echo $resultMap[getResutID([
51
+ 'diagnose_1'=>'yes',
52
+ 'diagnose_2'=>'no',
53
+ 'diagnose_3'=>'yes',
54
+ ])];//白色
55
+ echo $resultMap[getResutID([
56
+ 'diagnose_1'=>'no',
57
+ 'diagnose_2'=>'no',
58
+ 'diagnose_3'=>'yes',
59
+ ])];//緑色
60
+ ```