51 lines
1.0 KiB
Markdown
51 lines
1.0 KiB
Markdown
|
## Machine Fix
|
||
|
The main idea finding the flag is just understanding the algorithm.
|
||
|
|
||
|
#### Step-1:
|
||
|
|
||
|
After I downloaded `code.py`, I tried to understand the workflow here:
|
||
|
|
||
|
```python
|
||
|
def convert (n):
|
||
|
if n == 0:
|
||
|
return '0'
|
||
|
nums = []
|
||
|
while n:
|
||
|
n, r = divmod(n, 3)
|
||
|
nums.append(str(r))
|
||
|
return ''.join(reversed(nums))
|
||
|
|
||
|
count=0
|
||
|
n=1
|
||
|
while(n<=523693181734689806809285195318):
|
||
|
str1=convert(n)
|
||
|
str2=convert(n-1)
|
||
|
str2='0'*(len(str1)-len(str2))+str2
|
||
|
for i in range(len(str1)):
|
||
|
if(str1[i]!=str2[i]):
|
||
|
count+=1
|
||
|
n+=1
|
||
|
|
||
|
print(count)
|
||
|
```
|
||
|
|
||
|
#### Step-2:
|
||
|
For every number n, n and n - 1 are converted to base 3 & then, the program compare the digits, the number of differences is added to total.
|
||
|
|
||
|
So I wrote a simple `flag.py` script to get flag:
|
||
|
|
||
|
```python
|
||
|
def flag(n):
|
||
|
sum = 0
|
||
|
while (n > 0):
|
||
|
sum += n
|
||
|
n //= 3
|
||
|
return sum
|
||
|
|
||
|
print(flag(523693181734689806809285195318))
|
||
|
```
|
||
|
On running it by `python3 flag.py`
|
||
|
|
||
|
#### Step-3:
|
||
|
Finally the flag becomes:
|
||
|
`csictf{785539772602034710213927792950}`
|