PROG0431 - Right rotation

no tags 

The integer $(19)_{10}$ (decimal representation) is represented as $(10011)_2$ in the binary numeral system. This allows us to define the rotation to the right of a natural number as the operation that places the last digit of the binary representation before the first one. If we thus rotate the binary number $(10011)_2$ to the right, we obtain the binary number $(11001)_2 = (25)_{10}$. A given natural number can also be rotated to the right $n$-fold. In this case $n$ successive rotations are executed on the binary representation of the number. As such, the 4-fold rotation to the right of 19 equals 7, as can be seen from the following series of rotations.

$19$ $\stackrel{\text{r}}{\longrightarrow}$ $25$ $\stackrel{\text{r}}{\longrightarrow}$ $28$ $\stackrel{\text{r}}{\longrightarrow}$ $14$ $\stackrel{\text{r}}{\longrightarrow}$ $7$
$10011$ $11001$ $11100$ $01110$ $00111$

If the binary representation of an integer has leading zeroes after a ($n$-fold) rotation to the right, the leading zeroes are deleted.

The inverted operation that places the first digit of the binary representation of an integer at the back, is logically called a rotation to the left of the integer. Analogous to a rotation to the right, an $n$-fold rotation to the left is defined as a repeated execution of a rotation to the left. Hence, the $4$-fold rotation to the left of the number 357 equals 91, as can be seen from the following series of rotations.

$357$ $\stackrel{\text{l}}{\longrightarrow}$ $203$ $\stackrel{\text{l}}{\longrightarrow}$ $406$ $\stackrel{\text{l}}{\longrightarrow}$ $301$ $\stackrel{\text{l}}{\longrightarrow}$ $91$
$101100101$ $011001011$ $110010110$ $100101101$ $001011011$

Input

The input exists of two lines, the first containing a number $g \in \mathbb{N}$, and the second a number $n \in \mathbb{N}$.

Output

Execute an $n$-fold rotation of the number $g$, and write out the result of all intermediate steps. Execute a rotation to the right if $n$ is positive, and a rotation to the left if $n$ is negative. The following intermediate results must be written out:

  • the decimal representation $g_{10}$ of the number $g$
  • the binary representation $g_{2}$ of the number $g$
  • the binary representation $g_{2}^n$ of the number $g$ after $n$ rotations, with leading zeroes removed
  • the decimal representation $g_{10}^n$ of the number $g$ after $n$ rotations

Tip: use the built-in Python functions bin and int to convert the decimal representation of an integer to its binary representation and vice versa.

Example

Input:

19
4

Output:

19
10011
111
7

Example

Input

357
-4

Output:

357
101100101
1011011
91

Het natuurlijk getal $(19)_{10}$ (decimale voorstelling) kan geschreven worden als $(10011)_2$ in het binair talstelsel. Dit laat ons toe om de rotatie naar rechts van een natuurlijk getal te definiëren als de bewerking waarbij het laatste cijfer vooraan geplaatst wordt in de binaire voorstelling van het getal. Als we op die manier het binair getal $(10011)_2$ naar rechts roteren, dan bekomen we het binair getal $(11001)_2 = (25)_{10}$. Een gegeven natuurlijk getal kan ook $n$-voudig naar rechts geroteerd worden. In dat geval worden $n$ opeenvolgende rotaties naar rechts uitgevoerd op de binaire voorstelling van het getal. De 4-voudige rechtse rotatie van het getal 19 is dan gelijk aan 7, zoals kan afgeleid worden uit de onderstaande rotatiereeks.

$19$ $\stackrel{\text{r}}{\longrightarrow}$ $25$ $\stackrel{\text{r}}{\longrightarrow}$ $28$ $\stackrel{\text{r}}{\longrightarrow}$ $14$ $\stackrel{\text{r}}{\longrightarrow}$ $7$
$10011$ $11001$ $11100$ $01110$ $00111$

Als na een ($n$-voudige) rotatie naar rechts een aantal nullen vooraan een binair getal komen te staan, dan mogen die weggelaten worden.

De omgekeerde bewerking, waarbij het eerste cijfer in de binaire voorstelling van een natuurlijk getal achteraan geplaatst wordt, wordt dan logischerwijs de rotatie naar links van het getal genoemd. Analoog als bij de rotatie naar rechts, wordt ook de $n$-voudige rotatie naar links gedefineerd als het herhaald uitvoeren van de rotatie naar links. De $4$-voudige linkse rotatie van het getal 357 is dan 91, zoals kan afgeleid worden uit de onderstaande rotatiereeks.

$357$ $\stackrel{\text{l}}{\longrightarrow}$ $203$ $\stackrel{\text{l}}{\longrightarrow}$ $406$ $\stackrel{\text{l}}{\longrightarrow}$ $301$ $\stackrel{\text{l}}{\longrightarrow}$ $91$
$101100101$ $011001011$ $110010110$ $100101101$ $001011011$

Invoer

De invoer bestaat uit twee regels, waarvan de eerste regel een getal $g \in \mathbb{N}$ bevat, en de tweede regel een getal $n \in \mathbb{N}$.

Uitvoer

Voer een $n$-voudige rotatie uit van het getal $g$, en schrijf alle tussenstappen uit. Indien $n$ positief is moet een rotatie naar rechts uitgevoerd worden, voor negatieve $n$ moet een rotatie naar links uitgevoerd worden. De tussenstappen die moeten uitgeschreven worden zijn:

  • de decimale voorstelling $g_{10}$ van het getal $g$
  • de binaire voorstelling $g_{2}$ van het getal $g$
  • de binaire voorstelling $g_{2}^n$ van het getal $g$ na $n$ rotaties, waarbij voorloopnullen worden weggelaten
  • de decimale voorstelling $g_{10}^n$ van het getal $g$ na $n$ rotaties

Tip: ga na hoe de ingebouwde Python functies bin en int kunnen gebruikt worden om de decimale voorstelling van een natuurlijk getal om te zetten naar zijn binaire voorstelling, en omgekeerd.

Voorbeeld

Invoer:

19
4

Uitvoer:

19
10011
111
7

Voorbeeld

Invoer:

357
-4

Uitvoer:

357
101100101
1011011
91


Added by:Peter Dawyndt
Date:2013-09-11
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None