luogu#P12093. [NERC2024] BitBitJump
[NERC2024] BitBitJump
题目描述
BitBitJump is a one instruction set computer. Thus, it has only one instruction: , which copies an -th bit of memory to the -th bit of memory and then jumps to address .
Let's consider a 16-bit BitBitJump computer. It has bits of memory organized in 16-bit words. Words are counted from 0, and bits in a word are counted from the least significant (0-th) bit to the most significant (15-th) bit.
This computer has a single instruction pointer register , and execution starts with . If the current , the computer stops. Otherwise, it uses the -th word as~, the -th word as~, the -th word as , and performs the \texttt{bbj a, b, c} instruction: copies the -th bit of the -th word to the -th bit of the -th word, and sets . Here, represents bitwise AND, and represents bitwise shift right operation. Notice that the value of is read from memory after the bit copy, so if the instruction modified its own , the new value will be used for .
For example, the instruction placed at the memory start will be executed as follows:
- and are read from the memory.
- The 0-th bit of the 2-nd word (its value is ) will be copied to the 3-rd bit of the same word, so the 2-nd word will have the value of .
- Then is read from memory, and is set to 13.
Let's call the -th word (-th bits of memory) an . An is a program which checks whether the value of the IO-word is equal to . It should stop after execution of no more than instructions, leaving the lowest bit of the IO-word equal to if the original value of the IO-word was equal to , and otherwise.
Write a program that generates an -comparator for the given value of .
输入格式
The input contains a single decimal integer () --- the value for which to build the -comparator.
输出格式
The output should contain the -comparator program dump. Dump consists of values for the first words of the memory (). All other words, except the IO-word, are filled with zeroes.
For each of the words, output its value as a four-character hexadecimal number. Values should be delimited by space or new line characters.
0
fff0 0026 0003 fff1 0056 0006 fff2 0086 0009 fff3 00b6 000c fff4 00e6 000f
fff5 0116 0012 fff6 0146 0015 fff7 0176 0018 fff8 01a6 001b fff9 01d6 001e
fffa 0206 0021 fffb 0236 0024 fffc 0266 0027 fffd 0296 002a fffe 02c6 002d
ffff 02f6 0030
0004 fff0 0fff
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff
0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff
0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff
0000 fff0 0fff
提示
A dump in the sample output contains a 0-comparator. It consists of the following blocks:
- 16 instructions: the -th of them, counting from 0, copies the -th bit of the input word to the 6-th bit of its own . If the copied bit is zero, it will proceed to the next instruction; otherwise, the next instruction number will be increased by 64.
- The following instruction copies the 4-th bit of the 0-th word (value 1) to the 0-th bit of the IO-word and jumps to the stop address.
- 16 unused words filled with 0.
- 16 equal instructions (starting from word 67). Each of them copies the 0-th bit of the 0-th word (value 0) to the 0-th bit of the IO-word and jumps to the stop address.