Untuk tantangan lain yang saya tulis, saya perlu memverifikasi bahwa kasus uji dapat diselesaikan dengan bilangan bulat terbatas. Secara khusus, saya perlu memverifikasi yang berikut ini, untuk array integer yang tidak kosong Adan lebar bit integer n:
- Semua bilangan bulat
adiAmemuaskan-2**(n-1) <= a < 2**(n-1)(representable dengann-bit dua ini bilangan bulat pelengkap). - Panjangnya
Akurang dari2**n. - Jumlah
Akepuasan-2**(n-1) <= sum(A) < 2**(n-1). - Semua kombinasi elemen
Amemenuhi semua kondisi di atas.
Secara alami, saya telah memutuskan untuk mengalihdayakan masalah ini kepada Anda!
Diberikan array bilangan bulat Adan lebar bit bilangan bulat positif n, verifikasi yang Amemenuhi kondisi di atas.
Uji Kasus
[0, 0, 0], 2: True
[0, 0, 0, 0], 2: False (violates #2)
[1, 2, 3, 4, 5], 8: True
[1, 2, 3, 4, 5], 2: False (violates all conditions)
[1, 2, 3, 4, 5], 5: True
[-3, 4, 1], 4: True
[10, 0, -10], 4: False (violates #1 and #4)
[27, -59, 20, 6, 10, 53, -21, 16], 8: False (violates #4)
[-34, 56, 41, -4, -14, -54, 30, 38], 16: True
[-38, -1, -11, 127, -35, -47, 28, 89, -8, -12, 77, 55, 75, 75, -80, -22], 7: False (violates #4)
[-123, -85, 6, 121, -5, 12, 52, 31, 64, 0, 6, 101, 128, -72, -123, 12], 12: True
Implementasi Referensi (Python 3)
#!/usr/bin/env python3
from itertools import combinations
from ast import literal_eval
def check_sum(L, n):
return -2**(n-1) <= sum(L) < 2**(n-1)
def check_len(L, n):
return len(L) < 2**n
def check_elems(L, n):
return all(-2**(n-1) <= a < 2**(n-1) for a in L)
A = literal_eval(input())
n = int(input())
OUTPUT_STR = "{}, {}: {}".format(A, n, "{}")
if not (check_elems(A, n) and check_len(A, n) and check_sum(A, n)):
print(OUTPUT_STR.format(False))
exit()
for k in range(1, len(A)):
for b in combinations(A, k):
if not check_sum(b, n):
print(OUTPUT_STR.format(False))
exit()
print(OUTPUT_STR.format(True))