Skip to main content
added 18 characters in body
Source Link
Marin Nagy
  • 265
  • 2
  • 14
O| |O    X| |      | |O
 | |O    X| |O    O|X|     ->    treasure
O|X|      |X|O     | | 
cipher = Cipher()

# Encode a message into boards
boards = cipher.encode('TREASURE')

# Show the boards
for b in boards:
    b.print_board()

# Decode the boards
message = cipher.decode(boards)
print(message)
O| |O
 | |O
O|X| 

X| | 
X| |O
 |X|O

 | |O
O|X| 
 | | 

treasure
cipher = Cipher()

# Encode a message into boards
boards = cipher.encode('TREASURE')

# Show the boards
for b in boards:
    b.print_board()

# Decode the boards
message = cipher.decode(boards)
print(message)
O| |O
 | |O
O|X| 

X| | 
X| |O
 |X|O

 | |O
O|X| 
 | | 

treasure
O| |O    X| |      | |O
 | |O    X| |O    O|X|     ->    treasure
O|X|      |X|O     | | 
cipher = Cipher()

# Encode a message into boards
boards = cipher.encode('TREASURE')

# Show the boards
for b in boards:
    b.print_board()

# Decode the boards
message = cipher.decode(boards)
print(message)
added 94 characters in body; deleted 23 characters in body
Source Link
Marin Nagy
  • 265
  • 2
  • 14
class TicTacToe:

    def __init__(self) -> None:
        self.board = self.__init_board()

    def __init_board(self) -> list:
        # Create an empty boar
        board = [ [" "] * 3 for _ in range(3) ]
        return board
    
    def write_input(self, value:str, row=0, column=0) -> None:
        # Write a value to a specific case on the board    
        self.board[row][column] = value

    def clear_boar(self) -> None:
        # Clear the board
        self.board = self.__init_board()

    def print_board(self) -> None:
        print('\n')
        for row in self.board:
            print('|'.join(row))
class Cipher:


    def __init__(self) -> None:
        self.base3_values = [' ', 'X', 'O']


    def __encode_char(self, char:str) -> list[str]:
        
        # Encode a char in a list of 3 base-3 values

        char = char.lower()
        position = ord(char) - ord('a') + 1 # +1 cause blank row (or 000) is reserved for stop sequence
        base3 = []

        while position > 0:
            index = position % 3
            base3_component = self.base3_values[index]
            base3.append(base3_component)
            position //= 3

        return base3
    

    def __decode_char(self, base3:list[str]) -> str:

        # Decode a list of 3 base-3 values into char

        position = 0
        for power, symbol in enumerate(base3):
            digit = self.base3_values.index(symbol)
            position += digit * (3 ** power)

        # Check for stop sequence
        if position == 0:
            return None

        char = chr(position + ord('a') - 1) # undo the +1 that was applied during encoding

        return char


    def encode(self, message:str) -> list[TicTacToe]:

        # Encode a string into sets of board states

        message = list(message)
        boards = []

        while message:

            board = TicTacToe()

            loop_count = min(3, len(message))
            for row_index in range(loop_count):
                char = message.pop(0)
                row = self.__encode_char(char)

                for col_index, char in enumerate(row):
                    board.write_input(char, row_index, col_index)

            boards.append(board)

        return boards
    

    def decode(self, boards:list[TicTacToe]) -> str:

        # Decode board states into a string

        message = ""

        for board in boards:

            for row in board.board:

                char = self.__decode_char(row)
                if not char:
                    return message
                
                message += char

        return message
cipher = Cipher()

# Encode a message into boards
boards = cipher.encode('TREASURE') 

# Show the boards
for b in boards:
    b.print_board() # show the boards

# Decode the boards
message = cipher.decode(boards)
print(message)
O| |O
 | |O
O|X|  

X| | 
X| |O
 |X|O

 | |O
O|X| 
 | | 

treasure
X| | 
X| |O
 |X|O
 | |O
O|X| 
 | | 
treasure
class TicTacToe:

    def __init__(self):
        self.board = self.__init_board()

    def __init_board(self):
        # Create an empty boar
        board = [ [" "] * 3 for _ in range(3) ]
        return board
    
    def write_input(self, value:str, row=0, column=0):
        # Write a value to a specific case on the board    
        self.board[row][column] = value

    def clear_boar(self):
        # Clear the board
        self.board = self.__init_board()

    def print_board(self):
        print('\n')
        for row in self.board:
            print('|'.join(row))
class Cipher:


    def __init__(self):
        self.base3_values = [' ', 'X', 'O']


    def __encode_char(self, char:str):
        
        # Encode a char in a list of 3 base-3 values

        char = char.lower()
        position = ord(char) - ord('a') + 1 # +1 cause blank row (or 000) is reserved for stop sequence
        base3 = []

        while position > 0:
            index = position % 3
            base3_component = self.base3_values[index]
            base3.append(base3_component)
            position //= 3

        return base3
    

    def __decode_char(self, base3:list[str]):

        # Decode a list of 3 base-3 values into char

        position = 0
        for power, symbol in enumerate(base3):
            digit = self.base3_values.index(symbol)
            position += digit * (3 ** power)

        # Check for stop sequence
        if position == 0:
            return None

        char = chr(position + ord('a') - 1) # undo the +1 that was applied during encoding

        return char


    def encode(self, message:str):

        # Encode a string into sets of board states

        message = list(message)
        boards = []

        while message:

            board = TicTacToe()

            loop_count = min(3, len(message))
            for row_index in range(loop_count):
                char = message.pop(0)
                row = self.__encode_char(char)

                for col_index, char in enumerate(row):
                    board.write_input(char, row_index, col_index)

            boards.append(board)

        return boards
    

    def decode(self, boards:list[TicTacToe]):

        # Decode board states into a string

        message = ""

        for board in boards:

            for row in board.board:

                char = self.__decode_char(row)
                if not char:
                    return message
                
                message += char

        return message
cipher = Cipher()

# Encode a message into boards
boards = cipher.encode('TREASURE')
for b in boards:
    b.print_board() # show the boards

# Decode the boards
message = cipher.decode(boards)
print(message)
O| |O
 | |O
O|X| 
X| | 
X| |O
 |X|O
 | |O
O|X| 
 | | 
treasure
class TicTacToe:

    def __init__(self) -> None:
        self.board = self.__init_board()

    def __init_board(self) -> list:
        # Create an empty boar
        board = [ [" "] * 3 for _ in range(3) ]
        return board
    
    def write_input(self, value:str, row=0, column=0) -> None:
        # Write a value to a specific case on the board    
        self.board[row][column] = value

    def clear_boar(self) -> None:
        # Clear the board
        self.board = self.__init_board()

    def print_board(self) -> None:
        print('\n')
        for row in self.board:
            print('|'.join(row))
class Cipher:


    def __init__(self) -> None:
        self.base3_values = [' ', 'X', 'O']


    def __encode_char(self, char:str) -> list[str]:
        
        # Encode a char in a list of 3 base-3 values

        char = char.lower()
        position = ord(char) - ord('a') + 1 # +1 cause blank row (or 000) is reserved for stop sequence
        base3 = []

        while position > 0:
            index = position % 3
            base3_component = self.base3_values[index]
            base3.append(base3_component)
            position //= 3

        return base3
    

    def __decode_char(self, base3:list[str]) -> str:

        # Decode a list of 3 base-3 values into char

        position = 0
        for power, symbol in enumerate(base3):
            digit = self.base3_values.index(symbol)
            position += digit * (3 ** power)

        # Check for stop sequence
        if position == 0:
            return None

        char = chr(position + ord('a') - 1) # undo the +1 that was applied during encoding

        return char


    def encode(self, message:str) -> list[TicTacToe]:

        # Encode a string into sets of board states

        message = list(message)
        boards = []

        while message:

            board = TicTacToe()

            loop_count = min(3, len(message))
            for row_index in range(loop_count):
                char = message.pop(0)
                row = self.__encode_char(char)

                for col_index, char in enumerate(row):
                    board.write_input(char, row_index, col_index)

            boards.append(board)

        return boards
    

    def decode(self, boards:list[TicTacToe]) -> str:

        # Decode board states into a string

        message = ""

        for board in boards:

            for row in board.board:

                char = self.__decode_char(row)
                if not char:
                    return message
                
                message += char

        return message
cipher = Cipher()

# Encode a message into boards
boards = cipher.encode('TREASURE') 

# Show the boards
for b in boards:
    b.print_board()

# Decode the boards
message = cipher.decode(boards)
print(message)
O| |O
 | |O
O|X|  

X| | 
X| |O
 |X|O

 | |O
O|X| 
 | | 

treasure
added 146 characters in body
Source Link
Marin Nagy
  • 265
  • 2
  • 14
class TicTacToe:

    def __init__(self):
        self.board = self.__init_board()

    def __init_board(self):
        # Create an empty boar
        board = [ [" "] * 3 for _ in range(3) ]
        return board
    
    def write_input(self, value:str, row=0, column=0):
        # Write a value to a specific case on the board    
        self.board[row][column] = value

    def clear_boar(self):
        # Clear the board
        self.board = self.__init_board()

    def print_board(self):
        print('\n')
        for row in self.board:
            print('\n' + '|'.join(row))
O| |O
 | |O
O|X| 
X| | 
X| |O
 |X|O
 | |O
O|X| 
 | | 
treasure

This method has some limitations. Although the message isn't limited in length, it cannot store spaces, numbers, punctuation, or other symbols. Case are also not sensitive

class TicTacToe:

    def __init__(self):
        self.board = self.__init_board()

    def __init_board(self):
        # Create an empty boar
        board = [ [" "] * 3 for _ in range(3) ]
        return board
    
    def write_input(self, value:str, row=0, column=0):
        # Write a value to a specific case on the board    
        self.board[row][column] = value

    def clear_boar(self):
        # Clear the board
        self.board = self.__init_board()

    def print_board(self):
        for row in self.board:
            print('\n' + '|'.join(row))

This method has some limitations. Although the message isn't limited in length, it cannot store spaces, numbers, punctuation, or other symbols.

class TicTacToe:

    def __init__(self):
        self.board = self.__init_board()

    def __init_board(self):
        # Create an empty boar
        board = [ [" "] * 3 for _ in range(3) ]
        return board
    
    def write_input(self, value:str, row=0, column=0):
        # Write a value to a specific case on the board    
        self.board[row][column] = value

    def clear_boar(self):
        # Clear the board
        self.board = self.__init_board()

    def print_board(self):
        print('\n')
        for row in self.board:
            print('|'.join(row))
O| |O
 | |O
O|X| 
X| | 
X| |O
 |X|O
 | |O
O|X| 
 | | 
treasure

This method has some limitations. Although the message isn't limited in length, it cannot store spaces, numbers, punctuation, or other symbols. Case are also not sensitive

Source Link
Marin Nagy
  • 265
  • 2
  • 14
Loading