Steven Smith revised this gist . Go to revision
1 file changed, 78 insertions
lightcycle.py(file created)
| @@ -0,0 +1,78 @@ | |||
| 1 | + | from string import ascii_uppercase, digits | |
| 2 | + | ||
| 3 | + | matrix = [ | |
| 4 | + | ['5/B', 'B/R', 'M/G', 'Y/5', '4/1', 'R/W', '6/4', '1/6', '2/3', '3/M', 'G/Y', 'W/2'], #A | |
| 5 | + | ['2/R', '6/M', '4/3', '5/B', 'R/5', 'Y/2', '1/G', 'M/Y', 'W/6', '3/4', 'B/W', 'G/1'], #B | |
| 6 | + | ['M/Y', '2/4', 'Y/R', '3/5', 'W/2', 'G/B', '1/W', 'R/3', '5/G', '4/6', 'B/M', '6/1'], #C | |
| 7 | + | ['5/6', '6/3', '1/4', 'M/2', 'R/Y', '2/M', 'W/R', 'B/G', 'Y/W', '3/B', 'G/1', '4/5'], #D | |
| 8 | + | ['B/R', 'W/2', '2/3', '1/4', 'M/B', '5/6', 'Y/W', 'R/M', 'G/Y', '6/G', '3/5', '4/1'], #E | |
| 9 | + | ['R/Y', '2/G', '1/M', 'Y/5', '5/R', 'W/B', '6/3', 'B/1', 'M/4', 'G/6', '3/2', '4/W'], #F | |
| 10 | + | ['Y/1', '5/4', '2/W', 'R/Y', '1/R', 'B/3', '6/G', 'G/6', 'M/B', 'W/5', '4/2', '3/M'], #G | |
| 11 | + | ['3/5', 'W/Y', 'G/2', '2/B', '5/G', 'M/R', 'B/3', '1/4', '4/6', 'Y/M', '6/W', 'R/1'], #H | |
| 12 | + | ['R/M', '4/5', '5/W', 'B/1', 'M/6', '3/2', 'W/B', 'G/Y', 'Y/R', '1/4', '6/G', '2/3'], #I | |
| 13 | + | ['W/B', 'R/6', '5/Y', '4/1', '2/5', 'Y/3', 'M/W', '3/2', 'B/G', 'G/M', '1/R', '6/4'], #J | |
| 14 | + | ['6/4', 'B/2', 'W/G', 'R/5', 'G/1', '2/Y', 'Y/R', 'M/B', '1/6', '3/W', '5/3', '4/M'], #K | |
| 15 | + | ['6/4', 'B/5', 'W/6', '1/G', 'R/2', '4/R', 'G/W', '3/M', '2/B', 'Y/3', '5/Y', 'M/1'], #L | |
| 16 | + | ['W/3', '3/G', '2/4', 'Y/M', 'M/2', 'R/5', '6/R', 'B/6', 'G/Y', '5/B', '1/W', '4/1'], #M | |
| 17 | + | ['1/Y', '6/M', '2/1', 'G/R', '3/G', '5/B', 'R/4', '4/3', 'W/2', 'Y/W', 'B/5', 'M/6'], #N | |
| 18 | + | ['R/5', '3/G', '2/3', 'W/4', 'B/2', '1/M', '5/6', 'M/1', '4/Y', 'G/B', '6/R', 'Y/W'], #O | |
| 19 | + | ['1/4', '4/B', '6/2', '3/W', 'M/R', 'Y/6', 'B/Y', '2/G', '5/M', 'G/5', 'R/3', 'W/1'], #P | |
| 20 | + | ['5/G', 'M/B', '4/W', 'Y/2', 'R/M', 'W/4', '6/1', '3/6', 'B/Y', '1/5', 'G/R', '2/3'], #Q | |
| 21 | + | ['M/G', '5/6', 'G/M', 'W/5', 'Y/2', 'R/4', 'B/1', '1/B', '2/R', '4/3', '6/W', '3/Y'], #R | |
| 22 | + | ['R/Y', '6/5', '5/G', 'G/B', 'W/M', '4/3', '1/W', 'B/1', '3/6', '2/4', 'Y/2', 'M/R'], #S | |
| 23 | + | ['G/3', 'B/2', '6/W', 'M/B', '1/5', 'Y/4', '5/M', 'W/R', '4/6', '3/Y', '2/G', 'R/1'], #T | |
| 24 | + | ['5/1', 'W/3', '4/5', '3/4', 'Y/W', '1/Y', 'B/G', '6/2', 'M/6', 'G/R', '2/M', 'R/B'], #U | |
| 25 | + | ['M/6', '6/B', '1/G', '3/5', 'W/R', 'B/4', 'G/M', 'R/1', '2/W', '5/2', '4/Y', 'Y/3'], #V | |
| 26 | + | ['Y/M', 'B/1', '5/3', '2/G', '3/2', 'R/5', '1/4', 'W/6', '4/W', 'G/R', 'M/Y', '6/B'], #W | |
| 27 | + | ['4/2', 'R/B', 'W/5', 'Y/M', '2/Y', '5/1', 'B/R', 'G/3', 'M/G', '3/6', '6/W', '1/4'], #X | |
| 28 | + | ['G/Y', '1/R', '5/4', '4/G', '3/B', 'M/6', '2/5', 'Y/2', 'R/1', 'W/3', 'B/W', '6/M'], #Y | |
| 29 | + | ['G/B', 'B/G', '1/5', 'M/1', '3/M', 'R/3', 'Y/W', '6/Y', '5/2', '4/6', 'W/R', '2/4'], #Z | |
| 30 | + | ['2/R', 'R/B', '5/G', 'W/2', 'Y/1', '4/Y', '3/5', '1/M', 'B/W', 'G/6', '6/4', 'M/3'], #0 | |
| 31 | + | ['R/4', 'W/6', '3/2', '2/W', '4/Y', '6/5', 'B/R', '5/G', 'Y/B', 'G/M', 'M/1', '1/3'], #1 | |
| 32 | + | ['4/B', 'B/3', '6/4', 'W/1', 'M/Y', 'R/6', 'G/5', 'Y/W', '5/2', '2/R', '3/G', '1/M'], #2 | |
| 33 | + | ['B/6', 'M/3', '4/B', '1/4', '2/5', 'Y/1', 'G/Y', 'R/W', 'W/G', '5/2', '6/M', '3/R'], #3 | |
| 34 | + | ['M/R', '2/B', 'W/5', '6/Y', 'B/3', '4/2', 'G/1', 'Y/6', '5/G', '3/M', 'R/W', '1/4'], #4 | |
| 35 | + | ['Y/1', '5/6', '1/W', 'W/4', 'B/G', 'G/5', '4/M', '2/B', '3/R', '6/3', 'M/2', 'R/Y'], #5 | |
| 36 | + | ['3/4', 'W/B', 'Y/G', '5/M', 'R/1', 'G/W', '1/2', '6/Y', 'B/R', 'M/6', '4/3', '2/5'], #6 | |
| 37 | + | ['4/G', '6/5', 'Y/4', 'G/B', '3/1', 'M/Y', '5/3', '1/M', '2/R', 'R/2', 'B/W', 'W/6'], #7 | |
| 38 | + | ['Y/B', 'R/2', 'W/R', '5/3', '1/W', '3/5', 'B/M', 'G/4', '6/Y', '4/G', '2/1', 'M/6'], #8 | |
| 39 | + | ['G/Y', '3/1', '5/M', 'R/2', '6/W', 'M/B', 'Y/6', '2/4', '4/G', 'B/5', '1/R', 'W/3'] #9 | |
| 40 | + | ] | |
| 41 | + | ||
| 42 | + | class LightCycle: | |
| 43 | + | serial = "" | |
| 44 | + | colors = "" | |
| 45 | + | combinations = [] | |
| 46 | + | def __init__(this, serial, colors): | |
| 47 | + | """ serial: bomb serial number (string) | |
| 48 | + | colors: light cycle colors, separated by spaces if desired """ | |
| 49 | + | this.serial = serial.upper() | |
| 50 | + | this.colors = colors.upper().split() if " " in colors else list(colors.upper()) | |
| 51 | + | this.apply_changes() | |
| 52 | + | print(" ".join(this.colors)) | |
| 53 | + | ||
| 54 | + | def produce_combinations(this): | |
| 55 | + | out = zip(this.serial, this.serial[::-1]) | |
| 56 | + | return ("".join(i) for i in out) | |
| 57 | + | ||
| 58 | + | def get_changes(this): | |
| 59 | + | for combo in this.produce_combinations(): | |
| 60 | + | col,row = map((ascii_uppercase+digits).index, combo) | |
| 61 | + | yield matrix[col][row//3] | |
| 62 | + | ||
| 63 | + | def apply_changes(this): | |
| 64 | + | def parse(i): | |
| 65 | + | if i.isalpha(): | |
| 66 | + | return this.colors.index(i) | |
| 67 | + | else: | |
| 68 | + | return int(i)-1 | |
| 69 | + | for change in this.get_changes(): | |
| 70 | + | one,two = map(parse,change.split("/")) | |
| 71 | + | tmp = this.colors[one] | |
| 72 | + | this.colors[one] = this.colors[two] | |
| 73 | + | this.colors[two] = tmp | |
| 74 | + | ||
| 75 | + | if __name__ == "__main__": | |
| 76 | + | serial = input("Serial: ") | |
| 77 | + | colors = input("Colors: ") | |
| 78 | + | lc = LightCycle(serial, colors) | |
Newer
Older