01/10/2018, 16:12

Challenge: Tìm các chữ số

Challenge này rất đơn giản. Hãy tìm tất cả các chữ số a, b,… I thoả mãn

# dưới đây là các số có 2, 3, 4 chữ số

abcb - defc = gafb = dhdg + iei
defc + ab = debb = dhdg - gge
gge * dh = abcb
ab * dh = iei

Nguồn: https://news.zing.vn/neu-la-nguoi-thong-minh-hay-thu-tim-gia-tri-cua-a-b-c-d-e-f-g-post851846.html


Yêu cầu

  • Viết ít vòng lặp nhất có thể.

  • Hãy viết code có nội dung. Nếu viết thẳng đáp số, hãy giải thích tại sao.

Trần Hoàn viết 18:27 ngày 01/10/2018


HK boy viết 18:25 ngày 01/10/2018

Anh cứ gán kết quả vào biến đi, sao phải khổ d*m thế

Aragami1408 viết 18:17 ngày 01/10/2018

ab * dh = iei

Nguồn: https://news

Lười giải lắm nhưng khả năng là ab và fh là 11. Chỉ biết lsf vậy hoi

Nguyễn Đình Anh viết 18:23 ngày 01/10/2018

a = b = c = d = e = f = g = h = i = 0
Giải thích: Vì khi ta sắp xếp các chữ số này theo thứ tự nào cũng sẽ được một số = 0
Mà:

  • 0 = 0
  • 0 + 0 = 0
  • 0 - 0 = 0
  • 0 * 0 = 0
HK boy viết 18:27 ngày 01/10/2018

Ai lại cho các chữ số = 0 hết bao giờ :v Các số này đều là các số có 2, 3, 4 chữ số có nghĩa, tức là chữ số đầu tiên không thể bằng 0 được rồi.

viết 18:13 ngày 01/10/2018

code ko nhanh nhưng mà đẹp

from itertools import permutations

def concat(p, pattern):
    '''
    concat((0, 1, 2), 'ABCB') -> -1
    concat((1, 0, 2), 'ABCB') -> 1020
    '''
    n = p[ord(pattern[0].lower()) - ord('a')]
    if n == 0: return 0 if len(pattern) == 1 else -1
    for ch in pattern[1:]:
        n = 10*n + p[ord(ch.lower()) - ord('a')]
    return n

def satisfy(p, x, y, z, op):
    '''
    Check if X op Y == Z
      where X = concat(p, x),
            Y = concat(p, y),
            Z = concat(p, z),
            and op in '+-*/'
    '''
    X, Y, Z = concat(p, x), concat(p, y), concat(p, z)
    if X < 0 or Y < 0 or Z < 0: return False
    if op == '+': return X + Y == Z
    if op == '-': return X - Y == Z
    if op == '*': return X * Y == Z
    if op == '/': return X / Y == Z and X % Y == 0
    return False

def satisfy_condition(p, cond):
    '''
    Check if `p` satisfies condition `cond`
    '''
    x, op, y, eq, z = cond.split()
    return satisfy(p, x, y, z, op)

def satisfy_conditions(p, conditions):
    '''
    Check if `p` satisfies all `conditions`
    '''
    return all(satisfy_condition(p, cond) for cond in conditions)

if __name__ == '__main__':
    conditions = (
        'ABCB - DEFC = GAFB',
        'DH * AB = IEI',
        'GGE + DEBB = DHDG',
        'ABCB / DH = GGE',
        'DEFC + AB = DEBB',
        'GAFB - IEI = DHDG'
    )
    for p in permutations(range(9)):
        if satisfy_conditions(p, conditions):
            print(p)
    
Bài liên quan
0