From 1a50974b834227190f7de3939db5689bb0702a34 Mon Sep 17 00:00:00 2001 From: A404M Date: Sun, 11 May 2025 08:23:55 +0330 Subject: fix typo some clean up --- code/basic.felan | 98 ++++++++++++++++++++--------------------- code/main.felan | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 178 insertions(+), 51 deletions(-) (limited to 'code') diff --git a/code/basic.felan b/code/basic.felan index a5d5f39..b248493 100644 --- a/code/basic.felan +++ b/code/basic.felan @@ -46,51 +46,51 @@ __minus__ :: (value:i64) -> i64 { return @neg(value); }; -__add__ :: (left:u8,right:u8) -> u8 { +__sum__ :: (left:u8,right:u8) -> u8 { return @add(left,right); }; -__add__ :: (left:i8,right:i8) -> i8 { +__sum__ :: (left:i8,right:i8) -> i8 { return @add(left,right); }; -__add__ :: (left:u16,right:u16) -> u16 { +__sum__ :: (left:u16,right:u16) -> u16 { return @add(left,right); }; -__add__ :: (left:i16,right:i16) -> i16 { +__sum__ :: (left:i16,right:i16) -> i16 { return @add(left,right); }; -__add__ :: (left:u32,right:u32) -> u32 { +__sum__ :: (left:u32,right:u32) -> u32 { return @add(left,right); }; -__add__ :: (left:i32,right:i32) -> i32 { +__sum__ :: (left:i32,right:i32) -> i32 { return @add(left,right); }; -__add__ :: (left:u64,right:u64) -> u64 { +__sum__ :: (left:u64,right:u64) -> u64 { return @add(left,right); }; -__add__ :: (left:i64,right:i64) -> i64 { +__sum__ :: (left:i64,right:i64) -> i64 { return @add(left,right); }; -__add__ :: (left:f16,right:f16) -> f16 { +__sum__ :: (left:f16,right:f16) -> f16 { return @add(left,right); }; -__add__ :: (left:f32,right:f32) -> f32 { +__sum__ :: (left:f32,right:f32) -> f32 { return @add(left,right); }; -__add__ :: (left:f64,right:f64) -> f64 { +__sum__ :: (left:f64,right:f64) -> f64 { return @add(left,right); }; -__add__ :: (left:f128,right:f128) -> f128 { +__sum__ :: (left:f128,right:f128) -> f128 { return @add(left,right); }; @@ -366,99 +366,99 @@ __smaller__ :: (left:f128,right:f128) -> bool { return @smaller(left,right); }; -__greaterOrEqual__ :: (left:u8,right:u8) -> bool { +__greater_or_equal__ :: (left:u8,right:u8) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:i8,right:i8) -> bool { +__greater_or_equal__ :: (left:i8,right:i8) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:u16,right:u16) -> bool { +__greater_or_equal__ :: (left:u16,right:u16) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:i16,right:i16) -> bool { +__greater_or_equal__ :: (left:i16,right:i16) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:u32,right:u32) -> bool { +__greater_or_equal__ :: (left:u32,right:u32) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:i32,right:i32) -> bool { +__greater_or_equal__ :: (left:i32,right:i32) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:u64,right:u64) -> bool { +__greater_or_equal__ :: (left:u64,right:u64) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:i64,right:i64) -> bool { +__greater_or_equal__ :: (left:i64,right:i64) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:f16,right:f16) -> bool { +__greater_or_equal__ :: (left:f16,right:f16) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:f32,right:f32) -> bool { +__greater_or_equal__ :: (left:f32,right:f32) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:f64,right:f64) -> bool { +__greater_or_equal__ :: (left:f64,right:f64) -> bool { return @greaterOrEqual(left,right); }; -__greaterOrEqual__ :: (left:f128,right:f128) -> bool { +__greater_or_equal__ :: (left:f128,right:f128) -> bool { return @greaterOrEqual(left,right); }; -__smallerOrEqual__ :: (left:u8,right:u8) -> bool { +__smaller_or_equal__ :: (left:u8,right:u8) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:i8,right:i8) -> bool { +__smaller_or_equal__ :: (left:i8,right:i8) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:u16,right:u16) -> bool { +__smaller_or_equal__ :: (left:u16,right:u16) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:i16,right:i16) -> bool { +__smaller_or_equal__ :: (left:i16,right:i16) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:u32,right:u32) -> bool { +__smaller_or_equal__ :: (left:u32,right:u32) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:i32,right:i32) -> bool { +__smaller_or_equal__ :: (left:i32,right:i32) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:u64,right:u64) -> bool { +__smaller_or_equal__ :: (left:u64,right:u64) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:i64,right:i64) -> bool { +__smaller_or_equal__ :: (left:i64,right:i64) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:f16,right:f16) -> bool { +__smaller_or_equal__ :: (left:f16,right:f16) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:f32,right:f32) -> bool { +__smaller_or_equal__ :: (left:f32,right:f32) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:f64,right:f64) -> bool { +__smaller_or_equal__ :: (left:f64,right:f64) -> bool { return @smallerOrEqual(left,right); }; -__smallerOrEqual__ :: (left:f128,right:f128) -> bool { +__smaller_or_equal__ :: (left:f128,right:f128) -> bool { return @smallerOrEqual(left,right); }; @@ -514,55 +514,55 @@ __equal__ :: (left:bool,right:bool) -> bool { return @equal(left,right); }; -__notEqual__ :: (left:u8,right:u8) -> bool { +__not_equal__ :: (left:u8,right:u8) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:i8,right:i8) -> bool { +__not_equal__ :: (left:i8,right:i8) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:u16,right:u16) -> bool { +__not_equal__ :: (left:u16,right:u16) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:i16,right:i16) -> bool { +__not_equal__ :: (left:i16,right:i16) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:u32,right:u32) -> bool { +__not_equal__ :: (left:u32,right:u32) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:i32,right:i32) -> bool { +__not_equal__ :: (left:i32,right:i32) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:u64,right:u64) -> bool { +__not_equal__ :: (left:u64,right:u64) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:i64,right:i64) -> bool { +__not_equal__ :: (left:i64,right:i64) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:f16,right:f16) -> bool { +__not_equal__ :: (left:f16,right:f16) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:f32,right:f32) -> bool { +__not_equal__ :: (left:f32,right:f32) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:f64,right:f64) -> bool { +__not_equal__ :: (left:f64,right:f64) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:f128,right:f128) -> bool { +__not_equal__ :: (left:f128,right:f128) -> bool { return @notEqual(left,right); }; -__notEqual__ :: (left:bool,right:bool) -> bool { +__not_equal__ :: (left:bool,right:bool) -> bool { return @notEqual(left,right); }; diff --git a/code/main.felan b/code/main.felan index 5d321ed..715c8db 100644 --- a/code/main.felan +++ b/code/main.felan @@ -1,6 +1,133 @@ +/* @import("basic.felan"); -file :: @import("file.felan"); + +print :: (value:[]u8)->void{ + i :u64 = 0; + while i < value.length { + putc value[i]; + i += @cast(1,u64); + } +}; + +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 { - file.test(); + 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; +}; + + + -- cgit v1.2.3