DROPPEDBIT BLOG
The Missing Strip: Solution
Weekly Puzzle #04 of the Autumn 2026 season presented The Missing Strip, an array service sheet wrapped in an Aperture Science storage test. With Weekly Puzzle #05 now active, ranked submissions for Issue 04 have concluded.
Spoiler warning: This post contains the complete solution for Weekly Puzzle #04. If you have not reviewed the transmission yet, you can inspect the archived puzzle record.
1. The Challenge Artifact
The transmission interface presented an array maintenance sheet from an Aperture Science storage evaluation:
APERTURE SCIENCE / STORAGE TEST
Cake inventory: record unavailable.
Test results retained regardless.
LAYOUT: one byte from each strip per sector.
Every vertical bit across A, B, C and P
has an EVEN total number of ones.
Calibration sector:
A=01 B=02 C=04 P=07
Physical scan (hexadecimal bytes):
sector A B C P
12 40 ?? 2B 2E
31 19 ?? D0 8C
27 FE ?? 63 CF
08 A2 ?? 08 E7
44 37 ?? 91 E4
Label allocation: 31 -> 08 -> 44 -> 12 -> 27
Label source: strip B, ASCII
Label byte sum modulo 256: 6B (hex)
The service log presented five physical sectors across four data and parity strips (A, B, C, and P). Strip B was unreadable due to media failure. The goal was to recover the five missing bytes of Strip B, follow the allocation order, and reconstruct the archive label.
2. Reconstructing Strip B via Even Parity
The array employs vertical bit parity: for every vertical bit position across strips A, B, C, and P, the total count of set bits (1s) must be even.
In digital logic and information theory, an even-parity condition across four bits $A$, $B$, $C$, and $P$ is expressed with the XOR ($\oplus$) operator:
$$A \oplus B \oplus C \oplus P = 0$$
Because the XOR operation is commutative, associative, and its own inverse ($X \oplus X = 0$), we can isolate the unknown strip $B$ by XORing the remaining known values:
$$B = A \oplus C \oplus P$$
Verifying with the Calibration Sector
The calibration sector provided in the service sheet confirms the convention:
- $A = \mathtt{01}_{16} = \mathtt{00000001}_2$
- $B = \mathtt{02}_{16} = \mathtt{00000010}_2$
- $C = \mathtt{04}_{16} = \mathtt{00000100}_2$
- $P = \mathtt{07}_{16} = \mathtt{00000111}_2$
Calculating $A \oplus C \oplus P$:
$$\mathtt{01}{16} \oplus \mathtt{04}{16} \oplus \mathtt{07}{16} = \mathtt{05}{16} \oplus \mathtt{07}{16} = \mathtt{02}{16} = B$$
Every vertical column contains an even count of set bits (bits 0, 1, and 2 each have exactly two 1s).
Recovering the Physical Sectors
Applying $B = A \oplus C \oplus P$ to each row in the physical scan:
| Sector | A (hex) | C (hex) | P (hex) | Calculation ($A \oplus C \oplus P$) | B (hex) | ASCII |
|---|---|---|---|---|---|---|
12 |
40 |
2B |
2E |
0x40 ^ 0x2B ^ 0x2E |
45 |
E |
31 |
19 |
D0 |
8C |
0x19 ^ 0xD0 ^ 0x8C |
45 |
E |
27 |
FE |
63 |
CF |
0xFE ^ 0x63 ^ 0xCF |
52 |
R |
08 |
A2 |
08 |
E7 |
0xA2 ^ 0x08 ^ 0xE7 |
4D |
M |
44 |
37 |
91 |
E4 |
0x37 ^ 0x91 ^ 0xE4 |
42 |
B |
This can be verified in a few lines of Python:
scan = {
12: (0x40, 0x2B, 0x2E),
31: (0x19, 0xD0, 0x8C),
27: (0xFE, 0x63, 0xCF),
8: (0xA2, 0x08, 0xE7),
44: (0x37, 0x91, 0xE4),
}
for sector, (a, c, p) in scan.items():
b = a ^ c ^ p
print(f"Sector {sector:02d}: B = 0x{b:02X} ({chr(b)})")
The recovered physical bytes are:
- Sector 12: 45 (E)
- Sector 31: 45 (E)
- Sector 27: 52 (R)
- Sector 08: 4D (M)
- Sector 44: 42 (B)
3. Physical Sectors vs. Allocation Order
A common trap is reading the sectors in the order they were scanned off disk (12, 31, 27, 08, 44). Doing so yields E E R M B, which is not an English word.
Disk controllers and filesystems maintain a separation between physical storage geometry (how sectors are arranged on platters or solid-state blocks) and logical allocation chains (such as FAT clusters or inode extents).
The service sheet explicitly gave the logical allocation chain:
31 -> 08 -> 44 -> 12 -> 27
Mapping each allocated sector to its recovered byte from Strip B:
| Allocation Step | Sector | Recovered Hex | Decoded Character |
|---|---|---|---|
| 1 | 31 |
45 |
E |
| 2 | 08 |
4D |
M |
| 3 | 44 |
42 |
B |
| 4 | 12 |
45 |
E |
| 5 | 27 |
52 |
R |
Following the allocation chain spells:
EMBER
4. Validating with the Checksum
The service sheet provided an independent verification constraint:
Label byte sum modulo 256: 6B (hex)
Summing the recovered byte values:
$$\mathtt{45}{16} + \mathtt{4D}{16} + \mathtt{42}{16} + \mathtt{45}{16} + \mathtt{52}{16} = 69 + 77 + 66 + 69 + 82 = 363{10} = \mathtt{16B}_{16}$$
Taking the sum modulo 256 (the least significant byte):
$$\mathtt{16B}{16} \pmod{\mathtt{100}{16}} = \mathtt{6B}_{16}$$
The byte sum matches the expected checksum 6B exactly, confirming that both the parity recovery and the allocation order are correct.
Submitting EMBER completed the issue. Letter case and repeated whitespace are ignored by the answer checker.
5. Storage Architecture & Parity
The mechanics of The Missing Strip reflect fundamental storage engineering concepts used in RAID (Redundant Array of Independent Disks) architectures:
RAID 3, 4, and 5 Parity
In storage arrays with dedicated parity disks (RAID 3 and RAID 4) or distributed parity (RAID 5), data blocks are striped across multiple independent drives alongside a parity block calculated via bitwise XOR:
$$P = D_1 \oplus D_2 \oplus \dots \oplus D_n$$
When any single drive fails, the storage controller does not stop servicing read requests. Instead, it reconstructs missing sectors on the fly by XORing the surviving data disks with the parity disk. This allows storage systems to tolerate hardware failures without data loss or downtime.
Aperture Science Theming
The service sheet's framing—referencing Aperture Science, storage tests, and an unavailable "cake inventory"—draws inspiration from Valve's Portal. As with the Matrix operator console in Issue 03 and the Saavedra mainframe in Issue 02, the theme provides narrative texture, while the challenge itself rests on standard computer science and information theory principles.
More Weekly Puzzles
Want another technical puzzle? Explore the weekly puzzles →