aboutsummaryrefslogtreecommitdiff
path: root/code
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-05-11 08:23:55 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-05-11 08:23:55 +0330
commit1a50974b834227190f7de3939db5689bb0702a34 (patch)
tree393c0df350977d3c9e0adf5820682fcce66daf4f /code
parentf5dfb8ca90a014a6b7667e5ded62e0bae1d60367 (diff)
fix typo
some clean up
Diffstat (limited to 'code')
-rw-r--r--code/basic.felan98
-rw-r--r--code/main.felan131
2 files changed, 178 insertions, 51 deletions
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;
+};
+
+
+