This is a simple combination lock keypad to provide certain employees differing vault access.
Mouse 'pressing' the buttons turns on the lights in the display.
"R" initialises the display to the download position.
Each button (1-12) will activate at least one light cell but it may illuminate more.
Note also that, while two switches may engage an individual bulb and so light it, any more will extinguish it.
A switch is 'ON' when its indicator changes from [O] to [ I ].
Determine the number of levels of security, the button combinations and provide a rationale for all solutions when the display is fully lit with no bulb activated by multiple buttons, otherwise a combination is void.
[Consider each button and its light(s) as a unique event which are not shared by another event in the solutions].
Incidentally, every button will feature at least once in the solutions, and if all buttons are on then no bulbs are lit!
Experiment (pressing each button twice, to turn its bulbs on and off) shows that the following buttons control the shown bulbs:
button bulbs
1: 8
2: 5
3: 4,8
4: 4,6,8
5: 4,6,7
6: 3
7: 2,7
8: 2,6
9: 2,5
10: 1,5,6
11: 1,3
12: 1,3,7
There are 337 sets of switches that will light all the bulbs, but only 5 of those light each bulb only singly rather than doubly.
Presumably it is the 5 sets that only singly light all the bulbs that serve as the levels of security.
The five sets that only singly turn on all the lights are:
1 5 9 11
2 3 8 12
2 4 7 11
3 6 7 10
4 9 12
BTW, there are three sets that would light all 8 bulbs doubly:
1 2 3 5 8 9 11 12
1 3 5 6 7 9 10 11
3 4 6 7 9 10 12
DECLARE SUB addin (wh!)
DATA 8,5,48,468,467,3,27,26,25,156,13,137
DIM SHARED s$(12), incl(12), bulbs$, bct(8), sCt, solCt
FOR i = 1 TO 12: READ s$(i): NEXT
CLS
addin 1
PRINT sCt, solCt
SUB addin (wh)
IF wh = 1 THEN st = 1: ELSE st = incl(wh - 1) + 1
FOR nxt = st TO 12
incl(wh) = nxt
bulbs$ = bulbs$ + s$(nxt)
good = 1
FOR i = 1 TO LEN(s$(nxt))
bct(VAL(MID$(s$(nxt), i, 1))) = bct(VAL(MID$(s$(nxt), i, 1))) + 1
IF bct(VAL(MID$(s$(nxt), i, 1))) > 2 THEN good = 0
NEXT
IF good THEN
SELECT CASE LEN(bulbs$)
CASE IS >= 8
FOR i = 1 TO 8
ch$ = MID$("12345678", i, 1)
IF INSTR(bulbs$, ch$) = 0 THEN good = 0: EXIT FOR
NEXT i
IF good THEN
col = 40 * (sCt \ 30) + 1: row = sCt MOD 30 + 1
IF LEN(bulbs$) = 8 THEN
PRINT "*"; : solCt = solCt + 1
ELSE
PRINT " ";
END IF
FOR i = 1 TO wh
PRINT incl(i);
NEXT
PRINT TAB(30);
FOR i = 1 TO 8
IF bct(i) > 1 THEN PRINT i;
NEXT
PRINT
sCt = sCt + 1
ELSE
addin wh + 1
END IF
CASE ELSE
addin wh + 1
END SELECT
END IF
FOR i = 1 TO LEN(s$(nxt))
bct(VAL(MID$(s$(nxt), i, 1))) = bct(VAL(MID$(s$(nxt), i, 1))) - 1
NEXT
bulbs$ = LEFT$(bulbs$, LEN(bulbs$) - LEN(s$(nxt)))
NEXT nxt
END SUB
|
Posted by Charlie
on 2009-04-21 17:42:53 |