code: 
  
  
  
  import hashlib
  import importlib.util
  import json
  import os
  import pathlib
  from types import ModuleType
  
  import pytest
  import requests
  
  __lowerCamelCase  				=					pathlib.Path.cwd().joinpath("""project_euler""")
  __lowerCamelCase  				=					pathlib.Path.cwd().joinpath(
      """scripts""", """project_euler_answers.json"""
  )
  
  with open(PROJECT_EULER_ANSWERS_PATH) as file_handle:
      __lowerCamelCase  				=					json.load(file_handle)
  
  
  
  
  def     UpperCAmelCase__ (							__snake_case							)   -> ModuleType:
    _A           =    importlib.util.spec_from_file_location(file_path.name						,				str(__snake_case							)							)
    _A           =    importlib.util.module_from_spec(__snake_case							)  # type: ignore
    spec.loader.exec_module(__snake_case							)  # type: ignore
    return module
  
  
  
  
  def     UpperCAmelCase__ (							)   -> list[pathlib.Path]:
    _A           =    []
    for problem_dir_path in PROJECT_EULER_DIR_PATH.iterdir():
      if problem_dir_path.is_file() or problem_dir_path.name.startswith('''_'''							):
        continue
      for file_path in problem_dir_path.iterdir():
        if file_path.suffix != ".py" or file_path.name.startswith(('''_''', '''test''')							):
          continue
        solution_file_paths.append(__snake_case							)
    return solution_file_paths
  
  
  
  
  def     UpperCAmelCase__ (							)   -> str:
    with open(os.environ['''GITHUB_EVENT_PATH''']							) as file:
      _A           =    json.load(__snake_case							)
    return event["pull_request"]["url"] + "/files"
  
  
  
  
  def     UpperCAmelCase__ (							)   -> list[pathlib.Path]:
    _A           =    []
    _A           =    {
        '''Accept''': '''application/vnd.github.v3+json''',
        '''Authorization''': '''token ''' + os.environ['''GITHUB_TOKEN'''],
    }
    _A           =    requests.get(get_files_url()						,				headers=__snake_case							).json()
    for file in files:
      _A           =    pathlib.Path.cwd().joinpath(file['''filename''']							)
      if (
          filepath.suffix != ".py"
          or filepath.name.startswith(('''_''', '''test''')							)
          or not filepath.name.startswith('''sol'''							)
      ):
        continue
      solution_file_paths.append(__snake_case							)
    return solution_file_paths
  
  
  
  
  def     UpperCAmelCase__ (							)   -> list[pathlib.Path]:
    if os.environ.get('''CI'''							) and os.environ.get('''GITHUB_EVENT_NAME'''							) == "pull_request":
      # Return only if there are any, otherwise default to all solutions
      if filepaths := added_solution_file_path():
        return filepaths
    return all_solution_file_paths()
  
  
  
  
  @pytest.mark.parametrize(
      '''solution_path'''						,				collect_solution_file_paths()						,				ids=lambda __snake_case							: F'''{path.parent.name}/{path.name}'''						,				)
  def     UpperCAmelCase__ (							__snake_case							)   -> None:
    _A           =    solution_path.parent.name[8:].zfill(3							)
    _A           =    PROBLEM_ANSWERS[problem_number]
    _A           =    convert_path_to_module(__snake_case							)
    _A           =    str(solution_module.solution()							)  # type: ignore
    _A           =    hashlib.shaaaa(answer.encode()							).hexdigest()
    assert (
        answer == expected
    ), F'''Expected solution to {problem_number} to have hash {expected}, got {answer}'''
style_context: 
  
  
  
  def     UpperCAmelCase__ (							__snake_case						,				__snake_case						,				__snake_case						,				__snake_case						,				__snake_case							)   -> None:
    if target == 0:
      answer.append(path.copy()							)
    else:
      for index in range(__snake_case						,				len(__snake_case							)							):
        if target >= candidates[index]:
          path.append(candidates[index]							)
          backtrack(__snake_case						,				__snake_case						,				__snake_case						,				target - candidates[index]						,				__snake_case							)
          path.pop(len(__snake_case							) - 1							)
  
  
  
  
  def     UpperCAmelCase__ (							__snake_case						,				__snake_case							)   -> list:
    _A           =    []  # type: list[int]
    _A           =    []  # type: list[int]
    backtrack(__snake_case						,				__snake_case						,				__snake_case						,				__snake_case						,				0							)
    return answer
  
  
  
  
  def     UpperCAmelCase__ (							)   -> None:
    print(combination_sum([-8, 2.3, 0]						,				1							)							)
  
  
  if __name__ == "__main__":
      import doctest
  
      doctest.testmod()
      main()