import
sys
import
copy
import
itertools
import
hashlib
from
itertools
import
product
def
compute_md5(input_string):
m
=
hashlib.md5()
m.update(input_string.encode(
'utf-8'
))
return
m.hexdigest()
def
generate_numbers(n):
return
sorted
(('
'.join(p)) for p in product('
012
', repeat=n) if p != ('
0
','
0
','
0
','
0
') and p != ('
1
','
1
','
1
','
1
') and p != ('
2
','
2
','
2
','
2
'))
numbers
=
generate_numbers(
4
)
for
i
in
range
(
4
):
for
number
in
numbers:
print
(number[i], end
=
'')
print
()
a
=
[
'000000000000000000000000001111111111111111111111111122222222222222222222222222'
,
'000000001111111112222222220000000001111111122222222200000000011111111122222222'
,
'001112220001112220001112220001112220001122200011122200011122200011122200011122'
,
'120120120120120120120120120120120120120201201201201201201201201201201201201201'
,
]
reverse
=
{}
for
i
in
range
(
len
(numbers)):
x
=
(numbers[i]).replace(
'1'
,
'temp'
).replace(
'2'
,
'1'
).replace(
'temp'
,
'2'
)
if
(x)
in
numbers:
reverse[i]
=
numbers.index((x))
print
(
len
(reverse))
print
(reverse)
list_0
=
[index
for
index, char
in
enumerate
(a[
0
])
if
char
=
=
'0'
]
list_1
=
[index
for
index, char
in
enumerate
(a[
0
])
if
char
=
=
'1'
]
list_2
=
[index
for
index, char
in
enumerate
(a[
0
])
if
char
=
=
'2'
]
def
check(combo):
r
=
''
for
row
in
a:
s
=
[row[i]
for
i
in
combo]
if
s.count(
'1'
)
=
=
s.count(
'2'
)
=
=
13
:
r
+
=
''.join(s)
else
:
return
False
if
len
(r)
=
=
0x9C
:
if
compute_md5(r)
=
=
'aac82b7ad77ab00dcef90ac079c9490d'
:
print
(f
'flag: {r}'
)
return
True
else
:
return
False
def
check_combo(combo):
for
i
in
combo:
if
i
in
reverse
and
reverse[i]
in
combo:
return
False
return
True
for
combo0
in
itertools.combinations(list_0,
13
):
combo0
=
list
(combo0)
if
not
check_combo(combo0):
continue
for
combo1
in
itertools.combinations(list_1,
13
):
combo1
=
list
(combo1)
y
=
copy.deepcopy(list_2)
for
i
in
combo1:
if
i
in
reverse:
if
reverse[i]
in
y:
y.remove(reverse[i])
if
len
(y) <
13
:
continue
for
combo2
in
itertools.combinations(y,
13
):
combo2
=
list
(combo2)
if
check(
sorted
(combo0
+
combo1
+
combo2)):
sys.exit()