aboutsummaryrefslogtreecommitdiff
path: root/challenge-119/paulo-custodio/pascal/ch-2.pas
blob: 5207425ad947df615c6c81a7897198ff30d9d358 (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
51
52
53
54
55
56
57
58
59
60
(*
Challenge 119

TASK #2 - Sequence without 1-on-1
Submitted by: Cheok-Yin Fung
Write a script to generate sequence starting at 1. Consider the increasing
sequence of integers which contain only 1's, 2's and 3's, and do not have any
doublets of 1's like below. Please accept a positive integer $N and print the
$Nth term in the generated sequence.

1, 2, 3, 12, 13, 21, 22, 23, 31, 32, 33, 121, 122, 123, 131, ...

Example
Input: $N = 5
Output: 13

Input: $N = 10
Output: 32

Input: $N = 60
Output: 2223
*)

program ch2(input, output);
uses sysutils;
function nextSeq(n: Integer): Integer;
    function numOk(n: Integer): Boolean;
        var
            lastDigit, digit: Integer;
        begin
            if n <= 0 then
                numOk := False
            else begin
                numOk := True;
                digit := 0;
                while n > 0 do begin
                    lastDigit := digit;
                    digit := n mod 10;
                    n := n div 10;
                    if (digit < 1) or (digit > 3)
                    or ((digit = 1) and (lastDigit = 1)) then
                        numOk := False;
                end;
            end;
        end;
    begin
        repeat
            n := n + 1;
        until numOk(n);
        nextSeq := n;
    end;
var
    num, i, n: Integer;
begin
    num := StrToInt(paramStr(1));
    n := 0;
    for i := 1 to num do
        n := nextSeq(n);
    WriteLn(n);
end.