# Blinking LEDs from Daily Programmer, Challenge 290
# By: den510
def main(input_one, input_two, input_three, input_four):
output_binary, output_binary_two, output_binary_three, output_binary_four = generate_output(input_one), generate_output(input_two), generate_output(input_three), generate_output(input_four)
print("Challenge One:")
emulate_lights(output_binary)
print("\nChallenge Two:")
emulate_lights(output_binary_two)
print("\nChallenge Three:")
emulate_lights(output_binary_three)
print("\nChallenge Four:")
emulate_lights(output_binary_four)
def generate_output(data):
return_list, instructions, a, b = [], data.splitlines(), '', 0
for line in instructions:
if line and line[0] == line[1] == ' ':
if 'ld a' in line:
a = format(int(line.split(',')[1]), '08b')
elif 'ld b' in line:
b = int(line.split(',')[1])
elif 'out' in line:
return_list.append(a)
elif 'djnz' in line:
b -= 1
elif 'rrca' in line:
a = rca(a, 'r')
elif 'rlca' in line:
a = rca(a, 'l')
if line and line[0] != ' ':
trigger, triggered = line, False
while b > 0:
for second_line in instructions:
if second_line == trigger:
triggered = True
if triggered:
if 'ld a' in second_line:
a = format(int(second_line.split(',')[1]), '08b')
elif 'out' in second_line:
return_list.append(a)
elif 'djnz' in second_line:
b -= 1
triggered = False
elif 'rrca' in second_line:
a = rca(a, 'r')
elif 'rlca' in second_line:
a = rca(a, 'l')
break
return return_list
def emulate_lights(data):
for line in data:
print(line.replace('0', '.').replace('1', '*'))
def rca(binary, direction):
return_string = ''
for i in range(len(binary)):
if direction == 'r':
return_string += binary[i-1]
if direction == 'l':
return_string += binary[i-len(binary)+1]
return return_string if direction == 'l' or direction == 'r' else binary
challenge_one = """ ld a,14\n out (0),a\n ld a,12\n out (0),a\n ld a,8\n out (0),a\n
out (0),a\n ld a,12\n out (0),a\n ld a,14\n out (0),a"""
challenge_two = """ ld b,3
\ntriple:\n ld a,126\n out (0),a\n ld a,60\n out (0),a\n ld a,24\n out (0),a\n djnz triple"""
challenge_three = """ ld a,1\n ld b,9\n\nloop:\n out (0),a\n rlca\n djnz loop"""
challenge_four = """ ld a,2\n ld b,9\n\nloop:\n out (0),a\n rrca\n djnz loop"""
main(challenge_one, challenge_two, challenge_three, challenge_four)
raise SystemExit()
IyBCbGlua2luZyBMRURzIGZyb20gRGFpbHkgUHJvZ3JhbW1lciwgQ2hhbGxlbmdlIDI5MAojIEJ5OiBkZW41MTAKCgpkZWYgbWFpbihpbnB1dF9vbmUsIGlucHV0X3R3bywgaW5wdXRfdGhyZWUsIGlucHV0X2ZvdXIpOgogICAgb3V0cHV0X2JpbmFyeSwgb3V0cHV0X2JpbmFyeV90d28sIG91dHB1dF9iaW5hcnlfdGhyZWUsIG91dHB1dF9iaW5hcnlfZm91ciA9IGdlbmVyYXRlX291dHB1dChpbnB1dF9vbmUpLCBnZW5lcmF0ZV9vdXRwdXQoaW5wdXRfdHdvKSwgZ2VuZXJhdGVfb3V0cHV0KGlucHV0X3RocmVlKSwgZ2VuZXJhdGVfb3V0cHV0KGlucHV0X2ZvdXIpCiAgICBwcmludCgiQ2hhbGxlbmdlIE9uZToiKQogICAgZW11bGF0ZV9saWdodHMob3V0cHV0X2JpbmFyeSkKICAgIHByaW50KCJcbkNoYWxsZW5nZSBUd286IikKICAgIGVtdWxhdGVfbGlnaHRzKG91dHB1dF9iaW5hcnlfdHdvKQogICAgcHJpbnQoIlxuQ2hhbGxlbmdlIFRocmVlOiIpCiAgICBlbXVsYXRlX2xpZ2h0cyhvdXRwdXRfYmluYXJ5X3RocmVlKQogICAgcHJpbnQoIlxuQ2hhbGxlbmdlIEZvdXI6IikKICAgIGVtdWxhdGVfbGlnaHRzKG91dHB1dF9iaW5hcnlfZm91cikKCgpkZWYgZ2VuZXJhdGVfb3V0cHV0KGRhdGEpOgogICAgcmV0dXJuX2xpc3QsIGluc3RydWN0aW9ucywgYSwgYiA9IFtdLCBkYXRhLnNwbGl0bGluZXMoKSwgJycsIDAKICAgIGZvciBsaW5lIGluIGluc3RydWN0aW9uczoKICAgICAgICBpZiBsaW5lIGFuZCBsaW5lWzBdID09IGxpbmVbMV0gPT0gJyAnOgogICAgICAgICAgICBpZiAnbGQgYScgaW4gbGluZToKICAgICAgICAgICAgICAgIGEgPSBmb3JtYXQoaW50KGxpbmUuc3BsaXQoJywnKVsxXSksICcwOGInKQogICAgICAgICAgICBlbGlmICdsZCBiJyBpbiBsaW5lOgogICAgICAgICAgICAgICAgYiA9IGludChsaW5lLnNwbGl0KCcsJylbMV0pCiAgICAgICAgICAgIGVsaWYgJ291dCcgaW4gbGluZToKICAgICAgICAgICAgICAgIHJldHVybl9saXN0LmFwcGVuZChhKQogICAgICAgICAgICBlbGlmICdkam56JyBpbiBsaW5lOgogICAgICAgICAgICAgICAgYiAtPSAxCiAgICAgICAgICAgIGVsaWYgJ3JyY2EnIGluIGxpbmU6CiAgICAgICAgICAgICAgICBhID0gcmNhKGEsICdyJykKICAgICAgICAgICAgZWxpZiAncmxjYScgaW4gbGluZToKICAgICAgICAgICAgICAgIGEgPSByY2EoYSwgJ2wnKQogICAgICAgIGlmIGxpbmUgYW5kIGxpbmVbMF0gIT0gJyAnOgogICAgICAgICAgICB0cmlnZ2VyLCB0cmlnZ2VyZWQgPSBsaW5lLCBGYWxzZQogICAgICAgICAgICB3aGlsZSBiID4gMDoKICAgICAgICAgICAgICAgIGZvciBzZWNvbmRfbGluZSBpbiBpbnN0cnVjdGlvbnM6CiAgICAgICAgICAgICAgICAgICAgaWYgc2Vjb25kX2xpbmUgPT0gdHJpZ2dlcjoKICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgIGlmIHRyaWdnZXJlZDoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2xkIGEnIGluIHNlY29uZF9saW5lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGZvcm1hdChpbnQoc2Vjb25kX2xpbmUuc3BsaXQoJywnKVsxXSksICcwOGInKQogICAgICAgICAgICAgICAgICAgICAgICBlbGlmICdvdXQnIGluIHNlY29uZF9saW5lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2xpc3QuYXBwZW5kKGEpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgJ2RqbnonIGluIHNlY29uZF9saW5lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAtPSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgPSBGYWxzZQogICAgICAgICAgICAgICAgICAgICAgICBlbGlmICdycmNhJyBpbiBzZWNvbmRfbGluZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSByY2EoYSwgJ3InKQogICAgICAgICAgICAgICAgICAgICAgICBlbGlmICdybGNhJyBpbiBzZWNvbmRfbGluZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSByY2EoYSwgJ2wnKQogICAgICAgICAgICBicmVhawogICAgcmV0dXJuIHJldHVybl9saXN0CgoKZGVmIGVtdWxhdGVfbGlnaHRzKGRhdGEpOgogICAgZm9yIGxpbmUgaW4gZGF0YToKICAgICAgICBwcmludChsaW5lLnJlcGxhY2UoJzAnLCAnLicpLnJlcGxhY2UoJzEnLCAnKicpKQoKCmRlZiByY2EoYmluYXJ5LCBkaXJlY3Rpb24pOgogICAgcmV0dXJuX3N0cmluZyA9ICcnCiAgICBmb3IgaSBpbiByYW5nZShsZW4oYmluYXJ5KSk6CiAgICAgICAgaWYgZGlyZWN0aW9uID09ICdyJzoKICAgICAgICAgICAgcmV0dXJuX3N0cmluZyArPSBiaW5hcnlbaS0xXQogICAgICAgIGlmIGRpcmVjdGlvbiA9PSAnbCc6CiAgICAgICAgICAgIHJldHVybl9zdHJpbmcgKz0gYmluYXJ5W2ktbGVuKGJpbmFyeSkrMV0KICAgIHJldHVybiByZXR1cm5fc3RyaW5nIGlmIGRpcmVjdGlvbiA9PSAnbCcgb3IgZGlyZWN0aW9uID09ICdyJyBlbHNlIGJpbmFyeQoKCmNoYWxsZW5nZV9vbmUgPSAiIiIgIGxkIGEsMTRcbiAgb3V0ICgwKSxhXG4gIGxkIGEsMTJcbiAgb3V0ICgwKSxhXG4gIGxkIGEsOFxuICBvdXQgKDApLGFcbgogIG91dCAoMCksYVxuICBsZCBhLDEyXG4gIG91dCAoMCksYVxuICBsZCBhLDE0XG4gIG91dCAoMCksYSIiIgpjaGFsbGVuZ2VfdHdvID0gIiIiICBsZCBiLDMKXG50cmlwbGU6XG4gIGxkIGEsMTI2XG4gIG91dCAoMCksYVxuICBsZCBhLDYwXG4gIG91dCAoMCksYVxuICBsZCBhLDI0XG4gIG91dCAoMCksYVxuICBkam56IHRyaXBsZSIiIgpjaGFsbGVuZ2VfdGhyZWUgPSAiIiIgIGxkIGEsMVxuICBsZCBiLDlcblxubG9vcDpcbiAgb3V0ICgwKSxhXG4gIHJsY2FcbiAgZGpueiBsb29wIiIiCmNoYWxsZW5nZV9mb3VyID0gIiIiICBsZCBhLDJcbiAgbGQgYiw5XG5cbmxvb3A6XG4gIG91dCAoMCksYVxuICBycmNhXG4gIGRqbnogbG9vcCIiIgptYWluKGNoYWxsZW5nZV9vbmUsIGNoYWxsZW5nZV90d28sIGNoYWxsZW5nZV90aHJlZSwgY2hhbGxlbmdlX2ZvdXIpCnJhaXNlIFN5c3RlbUV4aXQoKQ==