iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0

上一篇提到,原先使用2組[0~9]的陣列,分別去紀錄猜測數和目標答案每個數字出現的次數,用於判斷B的數量;最後還得掃完整個陣列才能判斷出B。

此處優化成只有針對目標計算數字數量,用於後續計算B。掃4次後(假設是4位數猜數字),當猜測值與目標相等,累計A的數量並扣掉目標數字數量(因為是A,就不會是B),A計算完成,其B最大值為4-A 。
接著當 (tar[i]!=guess[i]) && (guess[i]也沒有出現在目標數字裡),則B--,並把掃過的目標值對應到的出現次數-1(比對過,且B也減掉了)

細節:

let A = 0;
for (let i = 0; i<digits; i++)
{
    if (guess_n[i] === tar[i])
    {
        A += 1;
        tar_arr[Number(tar[i])] -= 1;
    }
}
let B = digits-A;
for (let i = 0; i<digits; i++)
{
    if (guess_n[i] !== tar[i])
    {
        if (tar_arr[Number(guess_n[i])] === 0)
        {
            B -= 1;
        }
        if (tar_arr[Number(guess_n[i])] > 0)
        {
            tar_arr[Number(guess_n[i])] -= 1;
        }
    }
}
ans = A + "A" + B + "B<br>";

上一篇
暖身遊戲 - 1A2B
下一篇
貪食蛇 - 前置作業
系列文
那些八年級生的經典迷你遊戲,前端JS自學之路20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言