教師: 生徒A,B,C,D,Eがテストをしました。
5人のテストの点数の合計はです。
最上位と最下位の点数の差はでした。
A: 私の点数はCより点高いです。
B: 上位3名の合計は、下位3名の合計はだったよ。
C: わたし、たった点しかとれませんでしたわ。
D: 俺はEより点高いぞ。Bとは点差だったな。
E: わいとAの点数を足せばで無敵やwww
生徒の中に嘘つきが1人います。
彼らの台詞から 嘘をついている生徒 の 点数 を当ててください。

ヒント:簡易計算機

view source

JavaScript

document.title = '論理パズル 嘘つきはだれだ? 数字の脳トレゲーム ';

document.oncontextmenu = function () {return false;}

var clearCount  = 0;

a = Math.floor(Math.random()*4)*3+80;
b = a - Math.floor(Math.random()*4+1)*4;
c = a - Math.floor(Math.random()*3+2)*10;
e = 10 + Math.floor(Math.random()*9+1)*5;
d = e + Math.floor(Math.random()*4+1)*3;
rr = Math.floor(Math.random()*9);
if(rr>6){
  e = c + Math.floor(Math.random()*2+1)*9;
  d = e + Math.floor(Math.random()*5+1);
}

f = e - Math.floor(Math.random()*5-2)*3;
g = b + Math.floor(Math.random()*5-2)*5;
h = b + Math.floor(Math.random()*5-2)*7;
k = b + 1;
m = b + 2;
x = a - Math.floor(Math.random()*2+2)*5;
y = a - Math.floor(Math.random()*3-1)*3;
z = a - Math.floor(Math.random()*3-2);

//console.log([a,b,c,d,e]);

//console.log('a,b,c,d,e');
//console.log(a+b+c+d+e);

//console.log('a-e');
//console.log(a-e);

//console.log('d-e');
//console.log(d-e);


//console.log('a+b+c');
//console.log(a+b+c);
answerAry = [a,b,c,d,e];

foolIndex = Math.floor(Math.random()*answerAry.length);
answer = answerAry[foolIndex];

ary = [a,b,c,d,e,f,g,h,x,y,z];

sortAry =  _.sortBy(_.clone(answerAry));


abcAry = _.clone(sortAry).slice(0, 3);
cdeAry = _.clone(sortAry).slice(2, 5);
//console.log(sortAry);
//console.log(abcAry);
//console.log(cdeAry);
let cde = abcAry.reduce((a, b) => {
	return a + b;
});
let abc = cdeAry.reduce((a, b) => {
	return a + b;
});
//console.log(cde);
//console.log(abc);
$(function(){
  //console.log([a,b,c,d,e]);

  $('sum').text(a+b+c+d+e);
  $('dif').text(a-e);
  $('max').text(a);
  $('point.a').text(a);
  $('point.a-c').text(a-c);
  $('point.abc').text(abc);
  $('point.cde').text(cde);
  $('point.d-e').text((d-e));
  $('point.b-d').text((b-d));
  $('point.c').text(c);
  $('point.e').text(e);
  $('point.ae').text((a+e));

  answerAry.forEach(function(v, i){
    $('truth').eq(i).text(v);
  });
  $('.chat-a').each(function(i){
   var isFool = false;
    if(i===foolIndex){
      isFool = true;
      $(this).addClass('fool');
    }
  
    $(this).find('point').each(function(j){
      if(isFool){
        var v = Number($(this).text());
        foolNum = v + Math.floor(Math.random()*13+11);
        $(this).text(foolNum);
      }
    });
  });

  ary = _.uniq(ary);
  allAry = _.sortBy(ary);

  $buttons = $('.buttons');
  $buttons.addClass('confirm');
  setTimeout(function(){
    $buttons.removeClass('confirm');
  }, 9*999);

  allAry.forEach(function(v){
    $btn = $('<button>').text(v);
    $buttons.append($btn);
    if(v===answer){
      $btn.addClass('answer');
    }
    $btn.on('click',function(){

      if($('#target').hasClass('result')){return;}
      if($buttons.hasClass('confirm')){
        if(!window.confirm('計算した?')){return;}
      }

      if(v===answer){
        clearCount++;
        $(this).addClass('ok');
        //$('.serif').text('さすがやでw');
        let key = getURLKEY();
        if(key && clearCount === 1){
           key = decodeURI(key);
           $key = $('<p>',{id:'keyCrypto'}).text(key);
           $key.on('dblclick',function(){$(this).remove();});
           $('#demo').append($key);
         }
      } else {
        $(this).addClass('ng');
        $('.serif').text('ハズレ!');
      }
      $('#target').addClass('result');

      $next = $('<button>').text('次の問題へ').addClass('next');
      $buttons.after($next);
      $next.on('click',function(){
        location.reload();
      });
    });

  });
});
$(function(){
  $('input[type="number"]').val(0);
  $inputs = $('input[class="member"]');
  $inputs.attr({min:0,max:100});
  $inputs.on('change', function(){
    inputAry = [];
    $inputs.each(function(){
      v = Number($(this).val());
      inputAry.push(v);
    });
    var inputSortAry =  _.sortBy(inputAry);
    var sum =  inputSortAry.reduce((a, b) => {return a + b;});
    var max =  inputSortAry[4];
    var min =  inputSortAry[0];
    var dif = max-min;
    $('[name="sum"]').val(sum);
    $('[name="dif"]').val(dif);
  });
  $('[name="n1"],[name="n2"],[name="n3"]').on('change', function(){
    var n0 = Number($('[name="n1"]').val())
         + Number($('[name="n2"]').val())
         + Number($('[name="n3"]').val());
    $('[name="n0"]').val(n0);
  });
  $('[name="m1"],[name="m2"],[name="m3"]').on('change', function(){
    var m0 = Number($('[name="m1"]').val())
         - Number($('[name="m2"]').val())
         - Number($('[name="m3"]').val());
    $('[name="m0"]').val(m0);
  });

});

CSS


#demo{
  text-align:center;
}

#target{
  margin:0 auto;
  max-width:780px;
  text-align:left;

}
b{
  font-weight:bold;
}

.chat{
  padding: 1rem;
  border: 0 solid #d9d9e3;
  border-color: rgba(0,0,0,.1);
  border-bottom-width: 1px;
  font-family: Söhne,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,Helvetica Neue,Arial,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;
  color:#374151;
}
.chat-in{
  padding:16px 0;
  margin:0 auto;
  max-width: 42rem;
  gap: 1rem;
  font-size: 1rem;
  line-height: 1.5rem;
  display: flex;
}
.chat-a{
  background-color: rgba(247,247,248)
}

.color-light,
.chat-a.light{
  background-color:#F7F7F7;
}
.color-dark,
.chat-a.dark{
  background-color:#444654;
  color:#ccc;
}
.chat-q.dark{
  background-color:#343440;
  color:#ccc;
}


.icon{
  display:inline-block;
  width:30px;
  height:30px;
  background-color: rgb(255, 255, 255);
}
.chat-q .icon{
  background-color: rgba(0, 0, 0, 0.3);
}

.chat-a.dark .icon{
  background-color: rgb(0, 0, 0);
}

.icon img{
  width:30px;
  height:30px;
}
form i{
  display:inline-block;
  width:32px;
  height:32px;
}
text{
  width: calc(100% - 115px);
  gap: 0.75rem;
}
text > *{
  display:inline-block;
  font-weight:bold;
  padding:0 8px;
}

b{
  font-weight:bold;
}

.result .fool{
  color:#f00;
}

truth{
  color:transparent;
  user-select:none;
}
.result truth{
  color:#3a3;
}
.ok{
  background-color:#afa;
}
.ng{
  background-color:#faa;
}
.result .answer{
  background-color:#6f6;
}

.buttons{
  padding:8px 16px;
  text-align:center;
}
.buttons button{
  padding:8px 16px;
  margin:0 4px;
}

.next{
  width:100%;
  font-size:32px;
  text-align:center;
  margin:16px 0;
}

#hint{
  padding:12px;
  margin-bottom:40px;
}

input[type="number"]{
  margin:8px 0;
  width:40px;
}
input[readonly]{
  background-color:#eee;
}
label b{
  display:inline-block;
  width:40px;
}
#code{
  display:none;
}

HTML

ページのソースを表示 : Ctrl+U , DevTools : F12

view-source:https://hi0a.com/demo/-js/js-game-logic-puzzle/

ABOUT

hi0a.com 「ひまアプリ」は無料で遊べるミニゲームや便利ツールを公開しています。

プログラミング言語の動作デモやWEBデザイン、ソースコード、フロントエンド等の開発者のための技術を公開しています。

必要な機能の関数をコピペ利用したり勉強に活用できます。

プログラムの動作サンプル結果は画面上部に出力表示されています。

環境:最新のブラウザ GoogleChrome / Windows / Android / iPhone 等の端末で動作確認しています。

画像素材や音素材は半分自作でフリー素材配布サイトも利用しています。LINK参照。

動く便利なものが好きなだけで技術自体に興味はないのでコードは汚いです。

途中放置や実験状態、仕様変更、API廃止等で動かないページもあります。