Practice Problems in LOLGraphics/Solution to Problem II
Code
editHAI 3.4 0 1
IM IN UR CODE EXECUTIN UR KOMANDZ
I HAS A TWO BYTE DAT IZ CALLED X
DIS IZ MY LABEL! IT IZ KALLED START
PLZ ASK TEH USR 2 GIMME A TWO BYTE X
PLZ PRINT TWO BYTE X
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>8999
IF CEILIN KAT IZ NODDING PLZ RUN 9000
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>7999
IF CEILIN KAT IZ NODDING PLZ RUN 8000
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>6999
IF CEILIN KAT IZ NODDING PLZ RUN 7000
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>5999
IF CEILIN KAT IZ NODDING PLZ RUN 6000
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>4999
IF CEILIN KAT IZ NODDING PLZ RUN 5000
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>3999
IF CEILIN KAT IZ NODDING PLZ RUN 4000
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>2999
IF CEILIN KAT IZ NODDING PLZ RUN 3000
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>1999
IF CEILIN KAT IZ NODDING PLZ RUN 2000
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]/nowiki>>999
IF CEILIN KAT IZ NODDING PLZ RUN 1000
PLZ ASK CEILIN KAT 2 CHEK IZ <nowiki>[[X]]>899
IF CEILIN KAT IZ NODDING PLZ RUN 900
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>799
IF CEILIN KAT IZ NODDING PLZ RUN 800
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>699
IF CEILIN KAT IZ NODDING PLZ RUN 700
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>599
IF CEILIN KAT IZ NODDING PLZ RUN 600
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>499
IF CEILIN KAT IZ NODDING PLZ RUN 500
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>399
IF CEILIN KAT IZ NODDING PLZ RUN 400
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>299
IF CEILIN KAT IZ NODDING PLZ RUN 300
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>199
IF CEILIN KAT IZ NODDING PLZ RUN 200
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>99
IF CEILIN KAT IZ NODDING PLZ RUN 100
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>89
IF CEILIN KAT IZ NODDING PLZ RUN 90
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>79
IF CEILIN KAT IZ NODDING PLZ RUN 80
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>69
IF CEILIN KAT IZ NODDING PLZ RUN 70
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>59
IF CEILIN KAT IZ NODDING PLZ RUN 60
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>49
IF CEILIN KAT IZ NODDING PLZ RUN 50
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>39
IF CEILIN KAT IZ NODDING PLZ RUN 40
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>29
IF CEILIN KAT IZ NODDING PLZ RUN 30
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>19
IF CEILIN KAT IZ NODDING PLZ RUN 20
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>9
IF CEILIN KAT IZ NODDING PLZ RUN 10
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>8
IF CEILIN KAT IZ NODDING PLZ RUN 9
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>7
IF CEILIN KAT IZ NODDING PLZ RUN 8
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>6
IF CEILIN KAT IZ NODDING PLZ RUN 7
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>5
IF CEILIN KAT IZ NODDING PLZ RUN 6
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>4
IF CEILIN KAT IZ NODDING PLZ RUN 5
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>3
IF CEILIN KAT IZ NODDING PLZ RUN 4
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>2
IF CEILIN KAT IZ NODDING PLZ RUN 3
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>1
IF CEILIN KAT IZ NODDING PLZ RUN 2
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>0
IF CEILIN KAT IZ NODDING PLZ RUN 1
PLZ PRINT TEXT
PLZ PRINT TEXT ========
PLZ GOTO LABEL START
IM OUTTA UR CODE
IM IN UR SUBPROGRAM DAT IZ KALLED 9000
PLZ TYPE TEXT ,Θ
PLZ SET TWO BYTE X X-9000
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 8000
PLZ TYPE TEXT ,Η
PLZ SET TWO BYTE X X-8000
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 7000
PLZ TYPE TEXT ,Ζ
PLZ SET TWO BYTE X X-7000
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 6000
PLZ TYPE TEXT ,Ϛ
PLZ SET TWO BYTE X X-6000
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 5000
PLZ TYPE TEXT ,Ε
PLZ SET TWO BYTE X X-5000
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 4000
PLZ TYPE TEXT ,Δ
PLZ SET TWO BYTE X X-4000
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 3000
PLZ TYPE TEXT ,Γ
PLZ SET TWO BYTE X X-3000
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 2000
PLZ TYPE TEXT ,Β
PLZ SET TWO BYTE X X-2000
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 1000
PLZ TYPE TEXT ,Α
PLZ SET TWO BYTE X X-1000
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 900
PLZ TYPE TEXT Ϡʹ
PLZ SET TWO BYTE X X-900
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 800
PLZ TYPE TEXT Ωʹ
PLZ SET TWO BYTE X X-800
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 700
PLZ TYPE TEXT Ψʹ
PLZ SET TWO BYTE X X-700
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 600
PLZ TYPE TEXT Χʹ
PLZ SET TWO BYTE X X-600
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 500
PLZ TYPE TEXT Φʹ
PLZ SET TWO BYTE X X-500
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 400
PLZ TYPE TEXT Υʹ
PLZ SET TWO BYTE X X-400
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 300
PLZ TYPE TEXT Τʹ
PLZ SET TWO BYTE X X-300
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 200
PLZ TYPE TEXT Σʹ
PLZ SET TWO BYTE X X-200
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 100
PLZ TYPE TEXT Ρʹ
PLZ SET TWO BYTE X X-100
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 90
PLZ TYPE TEXT Ϟʹ
PLZ SET TWO BYTE X X-90
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 80
PLZ TYPE TEXT Πʹ
PLZ SET TWO BYTE X X-80
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 70
PLZ TYPE TEXT Οʹ
PLZ SET TWO BYTE X X-70
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 60
PLZ TYPE TEXT Ξʹ
PLZ SET TWO BYTE X X-60
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 50
PLZ TYPE TEXT Νʹ
PLZ SET TWO BYTE X X-50
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 40
PLZ TYPE TEXT Μʹ
PLZ SET TWO BYTE X X-40
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 30
PLZ TYPE TEXT Λʹ
PLZ SET TWO BYTE X X-30
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 20
PLZ TYPE TEXT Κʹ
PLZ SET TWO BYTE X X-20
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 10
PLZ TYPE TEXT Ιʹ
PLZ SET TWO BYTE X X-10
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 9
PLZ TYPE TEXT Θʹ
PLZ SET TWO BYTE X X-9
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 8
PLZ TYPE TEXT Ηʹ
PLZ SET TWO BYTE X X-8
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 7
PLZ TYPE TEXT Ζʹ
PLZ SET TWO BYTE X X-7
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 6
PLZ TYPE TEXT Ϛʹ
PLZ SET TWO BYTE X X-6
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 5
PLZ TYPE TEXT Εʹ
PLZ SET TWO BYTE X X-5
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 4
PLZ TYPE TEXT Δʹ
PLZ SET TWO BYTE X X-4
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 3
PLZ TYPE TEXT Γʹ
PLZ SET TWO BYTE X X-3
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 2
PLZ TYPE TEXT Βʹ
PLZ SET TWO BYTE X X-2
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED 1
PLZ TYPE TEXT Αʹ
PLZ SET TWO BYTE X X-1
IM OUTTA UR SUBPROGRAM
Explanation
editThis code is pretty easy to understand. First it check is the number more than 8999 (which is the same as more than or equal to 9000 since LOLGraphics only supports integer numbers). If it is, it types “,Θ” to the screen since this is the Greek numeral for 9000 then subtracts 9000 from the number. Then it repeats the process for 8000, 7000, ..., 2000, 1000, 900, 800, ..., 200, 100, 90, 80, ..., 20, 10, 9, 8, ..., 2, 1. Notice that when it gets to 1, the code checks is the number greater than 0.
One more important thing to put attention on is the delay between two commands. The default is 100 milliseconds (0.1 sec) but since there are many checks, it was reduced to 1 millisecond (0.001 sec).
Alternative ways
editThere is another more complex way to write the same code. First divide the number by 1000, then check if it’s a digit 1-9 (not 0), print the relevant character. Then divide the number by 100, but notice that then you will have to subtract 10 from the number until you get a number smaller than 10 which makes this way extremely inefficient. Notice though that since LOLGrapics only supports integer numbers the result of 9999/1000 will be 9 not 9.999 or 10 like you would expect. Readers familiar with programming will recall that other programming languages also take only the integer part when dividing integer variables.