diff options
Diffstat (limited to 'code/file.felan')
-rw-r--r-- | code/file.felan | 134 |
1 files changed, 2 insertions, 132 deletions
diff --git a/code/file.felan b/code/file.felan index 715c8db..64661b5 100644 --- a/code/file.felan +++ b/code/file.felan @@ -1,133 +1,3 @@ -/* -@import("basic.felan"); - -print :: (value:[]u8)->void{ - i :u64 = 0; - while i < value.length { - putc value[i]; - i += @cast(1,u64); - } +foo :: () -> void { + putc 'a'; }; - -print :: (value:i64)->void{ - value := value; - str : [20]u8 = undefined; - i :u64= 19; - while { - str[i] = @cast(value % 10,u8) + '0'; - i -= @cast(1,u64); - value /= 10; - value != 0; - } {} - - j :u64= i+@cast(1,u64); - while j < @cast(20,u64) { - putc str[j]; - j += @cast(1,u64); - } -}; - -println :: (value:i64)->void{ - print(value); - putc '\n'; -}; - -println :: ()->void{ - putc '\n'; -}; - -main :: () -> void { - stones := 6; - player := 1; - while stones != 0 { - c := choose_ai(stones); - print("player: "); - print(player); - print(" ---------\n"); - println(stones); - println(c); - - if (stones == 2 || stones == 1) && stones == c { - print("player: "); - print(player); - print(" won\n"); - } - - stones -= c; - - player = (if (player == 1) 2 else 1); - } -}; - -choose_ai :: (stones_left:i64) -> i64 { - return (if (stones_left % 3 == 0) 1 else stones_left % 3); -}; -*/ -@import("basic.felan"); - -main :: () -> void { - stones := 6; - player := 1; - while stones > 0 { - r :res =minimax(stones,true); - stones -= r.move; - putc @cast(stones,u8) + '0'; - putc '\n'; - putc 'p'; - putc @cast(player,u8) + '0'; - putc '\n'; - player = (if player == 2 1 else 2); - } -}; - -res :: struct { - move : i64; - score : i64; -}; - -minimax :: (currentStones:i64, isMaximizing:bool) -> res { - if currentStones <= 0 { - r : res = undefined; - r.move = 0; - r.score = (if isMaximizing {-1;} else {1;}); - return r; - } - - found := false; - bestMove : res = undefined; - score := (if isMaximizing {-1000000;} else {1000000;}); - move := 1; - - while move <= 2 { - if currentStones - move >= 0 { - found = true; - result := minimax(currentStones - move, !isMaximizing); - if isMaximizing { - if result.score > score { - bestMove.move = move; - bestMove.score = result.score; - score = result.score; - } - }else{ - if result.score < score { - bestMove.move = move; - bestMove.score = result.score; - score = result.score; - } - } - } - move += 1; - } - - if !found { - r : res = undefined; - r.move = 0; - r.score = (if isMaximizing {-1;} else {1;}); - return r; - } - - return bestMove; -}; - - - |