flatten_test.adl
1 2 program test.alpha { 3 struct Row { 4 e1: u8, 5 e2: u8, 6 e3: u8 7 } 8 9 struct Board { 10 r1: Row, 11 r2: Row, 12 r3: Row, 13 } 14 15 function win(b: Board, p: u8) -> bool { 16 return 17 (b.r1.e1 == p && b.r1.e2 == p && b.r1.e3 == p) || // row 1 18 (b.r2.e1 == p && b.r2.e2 == p && b.r2.e3 == p) || // row 2 19 (b.r3.e1 == p && b.r3.e3 == p && b.r3.e3 == p) || // row 3 20 (b.r1.e1 == p && b.r2.e1 == p && b.r3.e1 == p) || // column 1 21 (b.r1.e2 == p && b.r2.e3 == p && b.r3.e2 == p) || // column 2 22 (b.r1.e3 == p && b.r2.e3 == p && b.r3.e3 == p) || // column 3 23 (b.r1.e1 == p && b.r2.e2 == p && b.r3.e3 == p) || // diagonal 24 (b.r1.e3 == p && b.r2.e2 == p && b.r3.e1 == p); // other diagonal 25 } 26 27 transition main(public player: u8, row: u8, col: u8, board: Board) -> (Board, u8) { 28 let updated: Board = board; 29 if row == 1u8 && col == 1u8 && updated.r1.e1 == 0u8 { 30 updated = Board { 31 r1: Row { 32 e1: player, 33 e2: updated.r1.e2, 34 e3: updated.r1.e3 35 }, 36 r2: updated.r2, 37 r3: updated.r3 38 }; 39 } else if row == 1u8 && col == 2u8 && updated.r1.e2 == 0u8 { 40 updated = Board { 41 r1: Row { 42 e1: updated.r1.e1, 43 e2: player, 44 e3: updated.r1.e3 45 }, 46 r2: updated.r2, 47 r3: updated.r3 48 }; 49 } else if row == 1u8 && col == 3u8 && updated.r1.e3 == 0u8 { 50 updated = Board { 51 r1: Row { 52 e1: updated.r1.e1, 53 e2: updated.r1.e2, 54 e3: player 55 }, 56 r2: updated.r2, 57 r3: updated.r3 58 }; 59 } else if row == 2u8 && col == 1u8 && updated.r2.e1 == 0u8 { 60 updated = Board { 61 r1: updated.r1, 62 r2: Row { 63 e1: player, 64 e2: updated.r2.e2, 65 e3: updated.r2.e3 66 }, 67 r3: updated.r3 68 }; 69 } else if row == 2u8 && col == 2u8 && updated.r2.e2 == 0u8 { 70 updated = Board { 71 r1: updated.r1, 72 r2: Row { 73 e1: updated.r2.e1, 74 e2: player, 75 e3: updated.r2.e3 76 }, 77 r3: updated.r3 78 }; 79 } else if row == 2u8 && col == 3u8 && updated.r2.e3 == 0u8 { 80 updated = Board { 81 r1: updated.r1, 82 r2: Row { 83 e1: updated.r2.e1, 84 e2: updated.r2.e2, 85 e3: player 86 }, 87 r3: updated.r3 88 }; 89 } else if row == 3u8 && col == 1u8 && updated.r3.e1 == 0u8 { 90 updated = Board { 91 r1: updated.r1, 92 r2: updated.r2, 93 r3: Row { 94 e1: player, 95 e2: updated.r3.e2, 96 e3: updated.r3.e3 97 } 98 }; 99 } else if row == 3u8 && col == 2u8 && updated.r3.e2 == 0u8 { 100 updated = Board { 101 r1: updated.r1, 102 r2: updated.r2, 103 r3: Row { 104 e1: updated.r3.e1, 105 e2: player, 106 e3: updated.r3.e3 107 } 108 }; 109 } else if row == 3u8 && col == 3u8 && updated.r3.e3 == 0u8 { 110 updated = Board { 111 r1: updated.r1, 112 r2: updated.r2, 113 r3: Row { 114 e1: updated.r3.e1, 115 e2: updated.r3.e2, 116 e3: player 117 } 118 }; 119 } 120 if win(updated, 1u8) { 121 return (updated, 1u8); 122 } else if win(updated, 2u8) { 123 return (updated, 2u8); 124 } else { 125 return (updated, 0u8); 126 } 127 }}