fork download
  1. # Blinking LEDs from Daily Programmer, Challenge 290
  2. # By: den510
  3.  
  4.  
  5. def main(input_one, input_two, input_three, input_four):
  6. 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)
  7. print("Challenge One:")
  8. emulate_lights(output_binary)
  9. print("\nChallenge Two:")
  10. emulate_lights(output_binary_two)
  11. print("\nChallenge Three:")
  12. emulate_lights(output_binary_three)
  13. print("\nChallenge Four:")
  14. emulate_lights(output_binary_four)
  15.  
  16.  
  17. def generate_output(data):
  18. return_list, instructions, a, b = [], data.splitlines(), '', 0
  19. for line in instructions:
  20. if line and line[0] == line[1] == ' ':
  21. if 'ld a' in line:
  22. a = format(int(line.split(',')[1]), '08b')
  23. elif 'ld b' in line:
  24. b = int(line.split(',')[1])
  25. elif 'out' in line:
  26. return_list.append(a)
  27. elif 'djnz' in line:
  28. b -= 1
  29. elif 'rrca' in line:
  30. a = rca(a, 'r')
  31. elif 'rlca' in line:
  32. a = rca(a, 'l')
  33. if line and line[0] != ' ':
  34. trigger, triggered = line, False
  35. while b > 0:
  36. for second_line in instructions:
  37. if second_line == trigger:
  38. triggered = True
  39. if triggered:
  40. if 'ld a' in second_line:
  41. a = format(int(second_line.split(',')[1]), '08b')
  42. elif 'out' in second_line:
  43. return_list.append(a)
  44. elif 'djnz' in second_line:
  45. b -= 1
  46. triggered = False
  47. elif 'rrca' in second_line:
  48. a = rca(a, 'r')
  49. elif 'rlca' in second_line:
  50. a = rca(a, 'l')
  51. break
  52. return return_list
  53.  
  54.  
  55. def emulate_lights(data):
  56. for line in data:
  57. print(line.replace('0', '.').replace('1', '*'))
  58.  
  59.  
  60. def rca(binary, direction):
  61. return_string = ''
  62. for i in range(len(binary)):
  63. if direction == 'r':
  64. return_string += binary[i-1]
  65. if direction == 'l':
  66. return_string += binary[i-len(binary)+1]
  67. return return_string if direction == 'l' or direction == 'r' else binary
  68.  
  69.  
  70. 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
  71. out (0),a\n ld a,12\n out (0),a\n ld a,14\n out (0),a"""
  72. challenge_two = """ ld b,3
  73. \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"""
  74. challenge_three = """ ld a,1\n ld b,9\n\nloop:\n out (0),a\n rlca\n djnz loop"""
  75. challenge_four = """ ld a,2\n ld b,9\n\nloop:\n out (0),a\n rrca\n djnz loop"""
  76. main(challenge_one, challenge_two, challenge_three, challenge_four)
  77. raise SystemExit()
Success #stdin #stdout 0.01s 9992KB
stdin
Standard input is empty
stdout
Challenge One:
....***.
....**..
....*...
....*...
....**..
....***.

Challenge Two:
.******.
..****..
...**...
.******.
..****..
...**...
.******.
..****..
...**...

Challenge Three:
.......*
......*.
.....*..
....*...
...*....
..*.....
.*......
*.......
.......*

Challenge Four:
......*.
.......*
*.......
.*......
..*.....
...*....
....*...
.....*..
......*.