新年早々、2016を作成する増田のクイズに回答した

新年早々、2016を作成する増田のクイズに回答した

ある条件で2016を作成するクイズ

20, 20, 96, 96 の 4 つの自然数をすべて使い, +, ー, ×, ÷, カッコを組み合わせて 2016 を作ってください. なお, それぞれの自然数は合体したりひっくり返したり等のトリッキーな扱い方はせず, そのまま使うものとします

http://b.hatena.ne.jp/entry/anond.hatelabo.jp/20160101205726

正月ぼけで頭がなまっていたので少し頭の体操をしてみた。

JavaScriptで答えを出す

4つの自然数、四則演算、カッコを組み合わせて2016を作成するのでJavaScriptで記述するとこのようになる。

var o = ["+", "-", "*", "/"];
var n = ["20", "20", "96", "96"];
var r = document.getElementById("result");
function check2016(n) {
  for (var j = 0; j < o.length; j++){
    for (var k = 0; k < o.length; k++){
      for (var l = 0; l < o.length; l++){
        for (var m = 0; m < o.length; m++){
          var val1 = '(' + n[0] + o[j] + n[1] + ')' + o[k] + n[2] + o[l] + n[3];
          var val2 = n[0] + o[j] + '(' + n[1] + o[k] + n[2] + ')' + o[l] + n[3];
          var val3 = n[0] + o[j] + n[1] + o[k] + '(' + n[2] + o[l] + n[3] + ')';
          var val4 = '(' + n[0] + o[j] + n[1] + o[k] + n[2] + ')' + o[l] + n[3];
          var val5 = n[0] + o[j] + '(' + n[1] + o[k] + n[2] + o[l] + n[3] + ')';
          if(eval(val1) === 2016) {
            r.innerHTML += (val1 + " = " + eval(val1)) + '<br>';
            break;
          }
          else if(eval(val2) === 2016) {
            r.innerHTML += (val2 + " = " + eval(val2)) + '<br>';
            break;
          }
          else if(eval(val3) === 2016) {
            r.innerHTML += (val3 + " = " + eval(val3)) + '<br>';
            break;
          }
          else if(eval(val4) === 2016) {
            r.innerHTML += (val4 + " = " + eval(val4)) + '<br>';
            break;
          }
          else if(eval(val5) === 2016) {
            r.innerHTML += (val5 + " = " + eval(val5)) + '<br>';
            break;
          }
        }
      }
    }
  }
}
for(var i = 0; i < 4; i++) {
  var tmp = n.shift();
  n.push(tmp);
  check2016(n);
}

新年早々、増田のクイズの正解は…

このような問題は決して手動で行ってはならない。