Created
October 19, 2021 08:57
-
-
Save curegit/166a7f96a7b8f83f9ca2a84cc3b1ca00 to your computer and use it in GitHub Desktop.
組合せゲーム Forklift の定義 (CGSuite)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Forklift extends Game | |
var boxes; | |
method Forklift(List boxes) | |
end | |
method MakeLeftOptions(Number left, Number left2, List right) | |
if left == 0 then | |
return Forklift([left2, right].Flatten); | |
else | |
return Forklift([left, left2, right].Flatten); | |
end; | |
end | |
method MakeRightOptions(List left, Number right2, Number right) | |
if right == 0 then | |
return Forklift([left, right2].Flatten); | |
else | |
return Forklift([left, right2, right].Flatten); | |
end; | |
end | |
override method Options(Player player) | |
n := boxes.Length; | |
if n <= 1 then | |
return { }; | |
else | |
if player == Player.Left then | |
ops := setof(k for k from 1 to boxes[1] where boxes[1] - k < boxes[2]); | |
return setof(MakeLeftOptions(boxes[1] - k, boxes[2] + k, listof(boxes[i] for i from 3 to n)) for k in ops); | |
else | |
ops := setof(k for k from 1 to boxes[n] where boxes[n - 1] > boxes[n] - k); | |
return setof(MakeRightOptions(listof(boxes[i] for i from 1 to n - 2), boxes[n - 1] + k, boxes[n] - k) for k in ops); | |
end; | |
end; | |
end | |
override property ToString.get | |
return "Forklift(" + boxes.ToString + ")"; | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment