コード例 #1
0
ファイル: map.py プロジェクト: Tweety-7/npuzz
def parse_int(s):
    n = 0
    try:
        n = int(s)
    except ValueError:
        s_value = s.strip() if s.strip() else '{empty value}'
        Printer.print_error_exit(
            f"map error: string {s_value} is not an integer")
    return n
コード例 #2
0
def draw_digit(digit, font):
    W = 500
    H = 500
    img = Image.new('RGB', (W, H), (250, 250, 250))
    if digit == '0':
        return img
    msg = str(int(digit))
    draw = ImageDraw.Draw(img)
    w, h = draw.textsize(msg, font=font)
    diff = 0
    while w >= W / 2 or h >= H / 2:
        diff += 5
        if diff >= FONT_SIZE:
            Printer.print_error_exit("Invalid digit tile size")
        font = ImageFont.truetype(FONT_FILEPATH, FONT_SIZE - diff)
        w, h = draw.textsize(msg, font=font)
    draw.text(((W - w) / 2, (H - h) / 2), msg, fill="black", font=font)
    return img
コード例 #3
0
def can_i_do_it(b, n):
    EMPTY_TILE = '0'

    list_b = b.split('/')
    str_must = must_be(n)
    list_must = str_must.split('/')
    inv = count_inv(list_b, list_must)

    puzzle_zero_row = int(list_b.index(EMPTY_TILE)) // n
    puzzle_zero_column = int(list_b.index(EMPTY_TILE)) % n
    solved_zero_row = int(list_must.index(EMPTY_TILE)) // n
    solved_zero_column = int(list_must.index(EMPTY_TILE)) % n
    manhattan = abs(puzzle_zero_row -
                    solved_zero_row) + abs(puzzle_zero_column -
                                           solved_zero_column)
    if manhattan % 2 == 0 and inv % 2 == 0:
        return
    if manhattan % 2 == 1 and inv % 2 == 1:
        return
    Printer.print_error_exit("This map is unsovable")
コード例 #4
0
ファイル: map.py プロジェクト: Tweety-7/npuzz
def parse_map(file_name):
    try:
        f = open(file_name)
    except FileNotFoundError:
        Printer.print_error_exit(f"there is no file {file_name}")

    with open(file_name, "r") as file:
        bb = ''
        line = file.readline()
        l_p = line.partition('#')[0]
        while not l_p:
            line = file.readline()
            l_p = line.partition("#")[0]

        size_matr = parse_int(l_p)
        line = file.readline()
        n_str = 1
        while line:
            line = line.partition('#')[0]
            while not line:
                line = file.readline()
                line = line.partition("#")[0]
            plus = '/'.join(line.split())
            bb += '/'.join(line.split())
            bb += '/'  # где конец строки нечего заменять =(
            line = file.readline()
            if (len(plus.split('/'))) != size_matr:
                Printer.print_error_exit(
                    f"invalid map: invalid values number at row {n_str}")
                exit(0)
            n_str += 1
    bb = bb[0:-1]
    if (n_str - 1) != size_matr:
        Printer.print_error_exit(
            f'invalid map: invalid rows number = {n_str - 1}')
    return bb