aboutsummaryrefslogtreecommitdiff
path: root/challenge-120/paulo-custodio/pascal/ch-1.pas
blob: 7e4aa8695ba36f61ac7dd7c30760b35283583384 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(*
Challenge 120

TASK #1 - Swap Odd/Even bits
Submitted by: Mohammad S Anwar
You are given a positive integer $N less than or equal to 255.

Write a script to swap the odd positioned bit with even positioned bit and
print the decimal equivalent of the new binary representation.

Example
Input: $N = 101
Output: 154

Binary representation of the given number is 01 10 01 01.
The new binary representation after the odd/even swap is 10 01 10 10.
The decimal equivalent of 10011010 is 154.

Input: $N = 18
Output: 33

Binary representation of the given number is 00 01 00 10.
The new binary representation after the odd/even swap is 00 10 00 01.
The decimal equivalent of 100001 is 33.
*)

program ch1(input, output);
uses sysutils;
function swapBits(n: Integer): Integer;
    var
        result, shift: Integer;
    begin
        result := 0;
        shift := 1;
        while n > 0 do begin
            if (n mod 2) <> 0 then result := result + 2*shift;
            n := n div 2;
            if (n mod 2) <> 0 then result := result + 1*shift;
            n := n div 2;
            shift := shift*4;
        end;
        swapBits := result;
    end;
var
    n: Integer;
begin
    n := StrToInt(paramStr(1));
    n := swapBits(n);
    WriteLn(n);
end.