幼児が数分で解けるのに大人が解けない算数(?)の問題をPHPで解きました。
元ネタ : https://matome.naver.jp/odai/2133393856936222101
正解は数字に開いている穴の数の合計が方程式のルール(0や4は1、2や3は0、8だけは2)ってやつ。
PHPのコードはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
<?php $sourceStr = <<<EOT 8809 3333 7111 5555 2172 8193 6666 8096 1111 1012 3213 7777 7662 9999 9313 7756 0000 6855 2222 9881 3333 5531 5555 2581 EOT; $lines = explode("\n", $sourceStr); foreach($lines as $line){ $dataOfLine = explode(" ", $line); $a[] = $dataOfLine[0]; $a[] = $dataOfLine[1]; } for($i=0; $i<count($a); $i++){ $n = $a[$i]; dispAns($n); if($i%2!==0){ echo "\n"; }else{ echo "\t"; } } // ライブラリ // 数値について回答を出力 function dispAns(String $str){ $ans = multiDigitIntStr2cnt($str); printf("%04d = %d", $str, $ans); } // 複数桁整数文字列をカウントに変換 function multiDigitIntStr2cnt(string $s){ $encoding = "UTF-8"; $textLength = mb_strlen($s, $encoding); $total = 0; for($i = 0; $i < $textLength; $i++) { $ch = mb_substr($s, $i, 1, $encoding); $num = intval($ch); $total += singleDigitInt2cnt($num); } return $total; } // 複数桁整数をカウントに変換 // 0000に対応できないため不採用 function multiDigitInt2cnt(int $n){ $total = 0; do { $num = $n%10; $total += singleDigitInt2cnt($num); $n = (int)($n/10); }while(0<$n); return $total; } // 1桁整数をカウントに変換 function singleDigitInt2cnt(int $n) : int { switch($n){ case 0: return 1; case 1: return 0; case 2: return 0; case 3: return 0; case 4: return 1; case 5: return 0; case 6: return 1; case 7: return 0; case 8: return 2; case 9: return 1; default: return 1000000; } } |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 |
8809 = 6 3333 = 0 7111 = 0 5555 = 0 2172 = 0 8193 = 3 6666 = 4 8096 = 5 1111 = 0 1012 = 1 3213 = 0 7777 = 0 7662 = 2 9999 = 4 9313 = 1 7756 = 1 0000 = 4 6855 = 3 2222 = 0 9881 = 5 3333 = 0 5531 = 0 5555 = 0 2581 = 2 |
ここで実行できます。