def hash_algorithm(step):
    """Calculate HASH value for a given step."""
    current_value = 0
    for char in step:
        current_value += ord(char)  # Convert char to ASCII and add to current value
        current_value *= 17  # Multiply by 17
        current_value %= 256  # Modulo 256
    return current_value


def process_file(file_path):
    """Process each step in the file and return the sum of HASH values."""
    try:
        with open(file_path, "r") as file:
            data = file.read().replace("\n", "")  # Remove newline characters
            steps = data.split(",")  # Split steps by comma
            print(f"Processing {len(steps)} steps from {file_path}")

            total_sum = 0
            for step in steps:
                hash_result = hash_algorithm(step)
                total_sum += hash_result
                print(f"Step: {step}, HASH: {hash_result}")

            return total_sum
    except FileNotFoundError:
        print(f"Error: File not found - {file_path}")
    except Exception as e:
        print(f"Unexpected error occurred: {e}")


def test_algorithm():
    """Test the algorithm with the test file."""
    test_result = process_file("../test.txt")
    print(f"Test Result: {test_result}")
    assert test_result == 1320, "Test failed. Expected result is 1320."


def main():
    """Main function to run the HASH algorithm on the input file."""
    try:
        # Run test first
        test_algorithm()
        print("Test passed. Proceeding with main input file.")

        # Process main input file
        final_result = process_file("../input.txt")
        print(f"Final Result: {final_result}")
    except AssertionError as ae:
        print(ae)
    except Exception as e:
        print(f"An error occurred in main: {e}")


if __name__ == "__main__":
    main()
