谜题 IBM-132
五次运算实现可容忍双盘失效的编码
IBM Research · Ponder This · 2009 年 4 月
IBM Ponder This #132 · 2009 年 4 月
设计一个存储编码,把 24 个信息比特编码到八块磁盘中,每块存四个比特。依次取各盘的半字节,合成一个 32 位整数 f(x)。要求:
- f 只用五次运算即可计算。每次运算只能选自 +、-、*、/、%、&、|、~,分别表示加、减、乘、整数除法、取模、按位与、按位或、按位非;运算作用于可变长度整数。
- 任意两块盘损坏、导致对应两个半字节不可读后,仍能恢复原来的 24 个比特。读取时知道哪两块盘损坏。
官方提示:
- 4 月 6 日:可采用 f(x)=((((x*c1)&c2)*c3)&c4)%c5。
- 4 月 24 日更新:c1=(2^792-1)/(2^33-1),c2=(2^816-1)/(2^34-1),c4=(2^1088-1)/(2^34-1)。
找出满足要求的编码。
解答
认真尝试后再打开待补充。