david_Yakhin_312 Fat12 9143
Алмаз Сейтхазин (КФ МГУ, кафедра НДС) Fat12 9286
t1import syst1import sys
22
3def main():3def main():
4    data = sys.stdin.buffer.read()4    data = sys.stdin.buffer.read()
5    reserved_sectors = 15    reserved_sectors = 1
6    num_fat = 26    num_fat = 2
7    sectors_per_fat = 97    sectors_per_fat = 9
8    root_entries = 2248    root_entries = 224
9    sector_size = 5129    sector_size = 512
10    fat_start = reserved_sectors * sector_size10    fat_start = reserved_sectors * sector_size
11    root_start = fat_start + num_fat * sectors_per_fat * sector_size11    root_start = fat_start + num_fat * sectors_per_fat * sector_size
12    entry_size = 3212    entry_size = 32
13    entries = []13    entries = []
14    for i in range(root_entries):14    for i in range(root_entries):
15        start = root_start + i * entry_size15        start = root_start + i * entry_size
16        if start + entry_size > len(data):16        if start + entry_size > len(data):
17            break17            break
18        entry = data[start:start + entry_size]18        entry = data[start:start + entry_size]
19        first_byte = entry[0]19        first_byte = entry[0]
20        if first_byte in (0, 229):20        if first_byte in (0, 229):
21            continue21            continue
22        attr = entry[11]22        attr = entry[11]
23        if attr & 8:23        if attr & 8:
24            continue24            continue
25        name_bytes = entry[0:8].rstrip(b' ')25        name_bytes = entry[0:8].rstrip(b' ')
26        ext_bytes = entry[8:11].rstrip(b' ')26        ext_bytes = entry[8:11].rstrip(b' ')
27        name = name_bytes.decode('cp866')27        name = name_bytes.decode('cp866')
28        ext = ext_bytes.decode('cp866')28        ext = ext_bytes.decode('cp866')
29        if ext:29        if ext:
30            full_name = f'{name}.{ext}'30            full_name = f'{name}.{ext}'
31        else:31        else:
32            full_name = name32            full_name = name
33        if attr & 16:33        if attr & 16:
34            size_str = 'dir'34            size_str = 'dir'
35        else:35        else:
36            size_bytes = entry[28:32]36            size_bytes = entry[28:32]
37            size = int.from_bytes(size_bytes, 'little')37            size = int.from_bytes(size_bytes, 'little')
38            size_str = str(size)38            size_str = str(size)
39        entries.append((full_name, size_str))39        entries.append((full_name, size_str))
40    entries.sort(key=lambda x: x[0])40    entries.sort(key=lambda x: x[0])
41    for name, size in entries:41    for name, size in entries:
42        print(f'{name:12} {size}')42        print(f'{name:12} {size}')
43if __name__ == '__main__':43if __name__ == '__main__':
44    main()44    main()
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op