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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
* Count the number of coin combinations
TERM EQU 19 Terminal uses 14 words or 70 char
VAL EQU 4:5 The value of a coin
AMT EQU 1:3 The current amount of those coins
* Start of the program.
ORIG 1000
PROG OUT PRMPT(TERM)
* Get the value we want combos for
IN INPT1(TERM)
LDA INPT1 THE NUMBER IS PROBABLY IN THIS WORD
LDX INPT2 WE LOAD 10 CHARS OF INPUT
JAP 1F MAKE SURE THEY ENTERED SOMETHING
JXZ PROG MAYBE THEY HAD SPACES FIRST?
1H CMPX PRMPT(5:5) IS THE LAST CHAR A SPACE
JNE 3F IF NOT THEN WE CAN MOVE ON
SRAX 1 IF IT IS, SHIFT RIGHT 1 SPOT AND
JMP 1B LOOP BACK TO MAKE SURE
3H NUM
CMPA MAX
JG PROG
STZ MAX
STA WANTED
* Get a current value of the coins we have
CURRVAL LD6 TYPES How many kinds of coins
LDA COINS,6(AMT) Load current amount of first coin
2H DEC6 1 Move to next coin
ADD COINS,6(AMT) Add the amount of the next coin
J6NZ 2B Keep going for all combos
* If less than goal, add a coin
CMPA WANTED Compare the current value to wanted value
JGE 1F If it's < wanted
LDA COINS(AMT) {
ADD COINS(VAL) add another of the first coin
STA COINS(AMT) and go back to CURRVAL
JMP CURRVAL }
1H JG 3F If it's = wanted
* It was equal, print, and the fall through
LDX MAX
INCX 1 We use this for counting the hits
LD6 TYPES We iterate through the types
ENT5 0 This points to the word in PBUFF
STX MAX
LDA MAX
CHAR
STX PBUF,5 Print the current number of hits
1H INC5 2 Move to the next column
ENTA 0
LDX COINS,6(AMT) Get the number of coins by dividing the amount
DIV COINS,6(VAL) by the value of 1 coin
6H CHAR
STX PBUF,5(3:5) Print the current amount
DEC6 1 Go to the next coin type
J6NN 1B If we go negative, we're done with coins
OUT PBUF(TERM) Output the line to the console
* Equal or Greater, find first non-zero spot, add one to the next
* spot up, and then zero it out.
3H ENT5 0
5H LDA COINS,5(AMT) Load current coin value
INC5 1 Go to next type of coin
CMP5 TYPES Compare to number of coin types
JG DONE If greater, we're out of coins
JAZ 5B If current coin value is 0, go to next coin
LDA COINS,5(AMT) Load next coin up
ADD COINS,5(VAL) Add it's value to the amount
STA COINS,5(AMT) Save it
DEC5 1 Go back to previous type
STZ COINS,5(AMT) Zero it out
JMP CURRVAL Go back to the main loop
DONE HLT
* Tables to keep the values and counts
* The below can be used to test for 1000 (1:2), 100 (3:4), and 10 (5:5)
MAX CON 499 MAX AMOUNT OF CENTS BEFORE COUNTER RESETS IS 221
WANTED CON 62 THE COMBINATION WE WANT
TYPES CON 5 NUMBER OF TYPES - 1
COINS CON 1 PENNIES
CON 5 NICKLES
CON 10 DIMES
CON 25 QUARTERS
CON 50 HALF-DOLLARS
CON 100 DOLLARS
PRMPT ALF "WHAT "
ALF "AMOUN"
ALF "T <IN"
ALF " CENT"
ALF "S> DO"
ALF " YOU "
ALF "WANT "
ALF "MAX 2"
ALF "20: "
ORIG PRMPT+14
INPT1 CON 0
INPT2 CON 0
* This will be our printline
ORIG PRMPT+28
PBUF CON 0 COUNT
ALF " DLR"
ALF ": "
ALF " HLF"
ALF ": "
ALF " QTR"
ALF ": "
ALF " DMS"
ALF ": "
ALF " NCKL"
ALF ": "
ALF " PNY"
ALF ": "
END PROG
|