智力測驗題常遇到類似的邏輯題,給幾個容量不等的杯子,讓你倒出多少的水。
安卓上有一款專門玩這個題的遊戲叫做Water Logic.
我安裝這個遊戲把幾十個關卡通了一遍,感覺這個遊戲的關卡設計很不好,關卡的難度並不是遞增的,有很多後面的關卡相當的弱智,並且缺乏高難度的關卡。
做為程式設計師的我們,玩這類題目應該都沒問題,10步以內的都可以輕鬆搞定,10步以上的也可以搞定但未必能夠輕鬆達到最少步數。
有3顆星強迫症的玩家兼程式設計師,寫出這麼個自動求解的小程序,以後這個問題再也不是問題了。
演算法基本邏輯:
每個杯子有倒滿、倒空、倒入其它杯子的操作,所以總共是: 杯子數*(杯子數-1 2)
對於3隻杯子的情況,每一步可選的操作有12種. 如果2個杯子則每步可選操作有6種。
遍歷每一種操作,記錄作業完成後各個杯子內的水量,以水量計算出一個key來建立map.
遍歷各種倒水操作的過程中,如果key已經存在且當前步數大於先前記錄的步數則捨棄該操作。
這個小程式只能解決2個杯子或3個杯子的倒水問題,並沒有寫成N個杯子通用的,代碼有很多hard code。