Ugh finally got it after who knows how many tries!
Unfortunately my code seems rather ugly and I'm sure there must have been a better way to do this.
| Turing: |
setscreen ("text")
var total : int := 0
var nums : array 0 .. 30, 0 .. 1 of string
nums (0, 0) := ""
nums (1, 0) := "one"
nums (2, 0) := "two"
nums (3, 0) := "three"
nums (4, 0) := "four"
nums (5, 0) := "five"
nums (6, 0) := "six"
nums (7, 0) := "seven"
nums (8, 0) := "eight"
nums (9, 0) := "nine"
nums (10, 0) := "ten"
nums (11, 0) := "eleven"
nums (12, 0) := "twelve"
nums (13, 0) := "thirteen"
nums (14, 0) := "fourteen"
nums (15, 0) := "fifteen"
nums (16, 0) := "sixteen"
nums (17, 0) := "seventeen"
nums (18, 0) := "eighteen"
nums (19, 0) := "nineteen"
nums (20, 0) := "twenty"
nums (21, 0) := "thirty"
nums (22, 0) := "forty"
nums (23, 0) := "fifty"
nums (24, 0) := "sixty"
nums (25, 0) := "seventy"
nums (26, 0) := "eighty"
nums (27, 0) := "ninety"
nums (28, 0) := "hundred"
nums (29, 0) := "thousand"
nums (30, 0) := "and"
for i : 0 .. 30
nums (i, 1) := intstr (length (nums (i, 0))) %lengths of the numbers
end for
for i : 1 .. 20
total + = strint (nums (i, 1))
put nums (i, 0)
end for
View.Set ("text")
for i : 21 .. 999
if length (intstr (i )) = 2 then
total + = strint (nums ((i div 10) + 18, 1)) + strint (nums (i mod 10, 1)) % tens column then ones column
put nums ((i div 10) + 18, 0), " ", nums (i mod 10, 0)
elsif length (intstr (i )) = 3 & i mod 10 ~ = 0 then
total + = strint (nums (i div 100, 1)) %first number
total + = strint (nums (28, 1)) %hundred
total + = strint (nums (30, 1)) %and
put nums (i div 100, 0), " ", nums (28, 0), " ", nums (30, 0), " " ..
if i mod 100 div 10 = 0 then
total + = strint (nums (i mod 10, 1)) % ones
put nums (i mod 10, 0)
elsif i mod 100 div 10 = 1 then
total + = strint (nums ((i mod 10) + 10, 1)) % teens
put nums ((i mod 10) + 10, 0)
else
total + = strint (nums ((i mod 100 div 10) + 18, 1)) + strint (nums (i mod 10, 1)) % twenty+
put nums ((i mod 100 div 10) + 18, 0), " ", nums (i mod 10, 0)
end if
elsif length (intstr (i )) = 3 & i mod 10 = 0 then %if the number is divisible by ten ie. ends in a zero
if i mod 100 = 0 then % for the hundreds
total + = strint (nums (i div 100, 1))
total + = strint (nums (28, 1)) %hundred
put nums (i div 100, 0), " ", nums (28, 0) %tens
elsif intstr (i ) (2 .. 3) = "10" then
total + = strint (nums (i div 100, 1))
total + = strint (nums (28, 1)) %hundred
total + = strint (nums (30, 1)) %and
total + = strint (nums (10, 1))
put nums (i div 100, 0), " ", nums (28, 0), " ", nums (30, 0), " ", nums (10, 0)
else
total + = strint (nums (i div 100, 1))
total + = strint (nums (28, 1)) %hundred
total + = strint (nums (30, 1)) %and
total + = strint (nums ((i mod 100 div 10) + 18, 1))
put nums (i div 100, 0), " ", nums (28, 0), " ", nums (30, 0), " ", nums ((i mod 100 div 10) + 18, 0)
end if
end if
end for
total + = strint (nums (1, 1)) + strint (nums (29, 1))
put nums (1, 0), " ", nums (29, 0)
put total
|
|