On Fri, Jun 26, 2026 at 11:30:46PM -0400, funkymail via cypherpunks wrote: > > > > > > > > > > > > https://ar.anyone.tech/QkHIWrCSy3iXoP_fS-2snSKIdPYBqGHNmPDya89lWHE#QE8jBZoNzMY9kVYQG13A6oMuI7XhK_sR11WTxCAJ1FqzSRctyUo5iAX14G3o541X#1941075 > > > > > > > > > > > > https://ar.anyone.tech/ExicPTy-13WSydg1y-DHVOPtR8L6IMDMiMc7ZAGt2_Q > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > class Go: > > > > > https://ar.anyone.tech/TR4YX5YIB93wYCr6QEa8x8QTmR8OlexgIBDax4pSF88#1kZvnXfgdcSig3uBZIy_KBN6K3YSV5y_qKu5FPWNEnxR-xyl6gSnlaFdxwM_4r4t#1947193 > > > https://ar.anyone.tech/Bb-FKg6i6ow-CoAiXBpYFEApMYKKrXjBiPONm5sHJaQ > > > > Here is the current state of the simple gogame code: > > > > import numpy as np > > > > class Go: > > EMPTY = ' ' > > BLACK = 'X' > > WHITE = 'O' > > EDGE = '#' > > MARK = '\0' > > NEIGHBORS = np.array([[-1,0],[0,-1],[1,0],[0,1]]) > > def __init__(self, size=10): > > self.clear(size) > > @property > > def board(self): > > return self.edged_board[1:-1,1:-1] > > @property > > def size(self): > > return self.board.shape[0] > > def __repr__(self): > > return '\n'.join([' '.join(row) for row in > > self.edged_board.T[::-1]]) > > def clear(self, size = None): > > if size is not None: > > self.edged_board = np.full((size+2, size+2), Go.EDGE) > > col_axis_len = min(size, 27) > > row_axis_len = min(size, 9) > > self.edged_board[1:col_axis_len+1,0] = [chr(X) for X in > > np.arange(col_axis_len)+ord('A')] > > self.edged_board[0,1:row_axis_len+1] = [str(Y) for Y in > > np.arange(row_axis_len)+1] > > self.board[:] = Go.EMPTY > > self.turn = Go.BLACK > > self.passes = 0 > > self.captures = {Go.BLACK:0, Go.WHITE:0} > > def pass_(self, player): > > if player != self.turn: > > raise ValueError(f"It is {self.turn}'s turn, not {player}'s") > > self.turn = Go.BLACK if player == Go.WHITE else Go.WHITE > > self.passes += 1 > > def naive_score_needslock(self): > > unscored_territory = self.board == Go.EMPTY > > #while len > > @staticmethod > > def str2coord(coord : str): > > col = ord(coord[0].upper()) > > row = coord[1:] > > if col < ord('A') or col > ord('Z'): > > raise ValueError(f'Column "{col}" not A-Z') > > return np.array([col - ord('A'), int(row) - 1]) > > @staticmethod > > def coord2str(col, row = None): > > if row is None: > > col, row = col > > return chr(ord('A') + col) + str(1 + row) > > def move(self, col, row, player): > > if player != self.turn: > > raise ValueError(f"It is {self.turn}'s turn, not {player}'s") > > try: > > if row < 0 or col < 0: > > raise IndexError() > > if self.board[col, row] != Go.EMPTY: > > raise ValueError(f"{self.board[col, row]} has already moved > > there.") > > except IndexError: > > raise ValueError(f"{col}, {row} is off the board.") > > captures = [] > > self.board[col, row] = player > > self.turn = Go.BLACK if player == Go.WHITE else Go.WHITE > > try: > > for neighbor in Go.NEIGHBORS + 1: > > colrow = neighbor + [col, row] > > if self.edged_board[*colrow] == self.turn: > > members, liberties = self.liberties_needslock(*(colrow > > - 1)) > > if len(liberties) == 0: > > captures.extend(members) > > self.board[*members.T] = Go.EMPTY > > > > members, liberties = self.liberties_needslock(col, row) > > if len(liberties) == 0: > > raise ValueError(f"No liberties for {player}: > > {[self.coord2str(*coord) for coord in members]}.") > > except: > > self.board[col, row] = Go.EMPTY > > self.board[*np.array(captures).T] = self.turn > > self.turn = player > > raise > > self.captures[player] += len(captures) > > self.passes = 0 > > def play(self): > > while self.passes < 2: > > self.play1() > > def play1(self): > > print(self) > > move = input(f'{self.turn}: ') > > if move: > > try: > > self.move(*self.str2coord(move), self.turn) > > except Exception as e: > > print(type(e),e) > > else: > > self.pass_(self.turn) > > def liberties_needslock(self, col, row): > > colrow = np.array([col, row]) > > player = self.board[*colrow] > > members = [colrow] > > liberties = [] > > next_index = 0 > > try: > > while next_index < len(members): > > colrow = members[next_index] > > next_index += 1 > > self.board[*colrow] = Go.MARK > > neighbor_colrows = Go.NEIGHBORS + colrow[None] > > neighbors = self.edged_board[*(neighbor_colrows.T + 1)] > > if player != Go.EMPTY: > > liberties.extend(neighbor_colrows[neighbors == > > Go.EMPTY]) > > else: > > liberties.extend(neighbor_colrows[neighbors == Go.BLACK > > or neighbors == Go.WHITE]) > > new_members = neighbor_colrows[neighbors == player] > > members.extend(new_members) > > self.board[*new_members.T] = Go.MARK > > finally: > > self.board[*np.array(members).T] = player > > assert (self.edged_board != Go.MARK).all() > > return np.array(members), np.array(liberties) > > def atari_needslock(self, col, row): > > members, liberties = self.liberties_needslock(col, row) > > return len(liberties) == 1 > > > > if __name__ == '__main__': > > def main(): > > go = Go(5) > > go.move(0,0,go.turn) > > go.pass_(go.turn) > > assert(go.board[0,0] == go.turn) > > go.pass_(go.turn) > > go.move(1,0,go.turn) > > go.move(1,1,go.turn) > > go.move(0,1,go.turn) > > assert(go.board[0,0] == Go.EMPTY) > > go.pass_(go.turn) > > go.move(0,0,go.turn) > > go.pass_(go.turn) > > assert(go.board[0,0] == go.turn) > > go.clear() > > go.move(0,0,go.turn) > > go.move(1,1,go.turn) > > go.move(0,1,go.turn) > > go.pass_(go.turn) > > assert(go.board[0,1] == go.turn) > > go.clear() > > import traceback > > while True: > > try: > > go.move(np.random.randint(go.size), > > np.random.randint(go.size), > > go.turn) > > except Exception as e: > > if "has already moved" in str(e): > > continue > > traceback.print_exc() > > #print(type(e), e, repr(e.__traceback__)) > > go.play1() > > continue > > print(go) > > go.play() > > > > main() > > > > > > https://ar.anyone.tech/avN9UKjg-MuEP6JkPV3-jZ_giKvpalfrMPGg5ejzOmc#solCOXHasYsThT2R-MCJK-qXhMs1n8GfMjKKRUn1f0AlD6Tq1o6PRNJC72TOJ5FC#1947222 > > https://ar.anyone.tech/mVPpGtZd5jBVzUc44l6MtY48kfQJdMq6o6OCubaR2eU > > 7 dimensional checkers. older star trek had "tri-dimensional chess". i > played once this game. there are floating board partitions and rules for > moving the pieces between the board partitions -- more like 2.5d > uncertain > > ahmmmmm > > https://ar.anyone.tech/trIB7Z9WE4t7Nf8mXgK6RG2PQoZbzaf6dj3qHmYKKNI#NUmAYW_ulyg0QQu8tMCIYKKTAj5GrngiKK-2VkP5DjZ4k_ZW5Ck3fIRTkY18WTsh#1947263 > https://ar.anyone.tech/GqtLDIu6YDgzmW84K4NsdPlgAUx7z4vRL2WQDpXq794
i got stressed today and came online again and talked to chatgpt i am trying to try out https://github.com/t8/memoryport which is purportedly an AI LLM frontrnd that purportedly provides infinite memory using arweave and vectordb (vectordb r--). it takes a l-ng time to build on termux and i ran into a build error which chatgpt fixed since i am new to rust. this is my change to this project: diff --git a/Cargo.toml b/Cargo.toml index bcef5fe..49ca171 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,3 +77,6 @@ metrics-exporter-prometheus = "0.16" uc-arweave = { path = "crates/uc-arweave" } uc-embeddings = { path = "crates/uc-embeddings" } uc-core = { path = "crates/uc-core" } + +[patch.crates-io] +lance-core = { path = "../rust-lance-termux/rust/lance-core" } and then i cloned https://github.com/lance-format/lance into ../rust-lance-termux with --branch=v0.22.0 and --filter=blob:none and did git cherry-pick d74bdb21ce8e6429314c14f40b595fbcc23b2683 to add android support to that old;version it's still building i also asked chatgpt about making tendon wire arms with coin motors and it didn't like it and we argued badly. i also learned that there are different japanese/chinese go rules and komi is 6.5-7.5 points and it sounds like it can be estimated by playing out the game and measuring the best play score, but it feeds back changing play if changed, and it's genetally bigger for smaller boards so often people just keep it the same value (it's only agreed on for 19x19 boards) ... https://ar.anyone.tech/hYkVZAUtqnbOK_6MT0-REDRqQrNtH9ST1incyKbxrAk#_3vzlk8gEdNDAwmN5B4HB38DlPI5jHGxZtyobdjVTKrNDa0s7PnhT8xA6Yr3LbaV#1950499 https://ar.anyone.tech/6P20Y47zLvlY70B7iqN_mXz3vgVbzob2jbxT2KbHwCQ I am not affiliated with https://ar.anyone.tech .
