Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Highstaker/09913478cdb10977272a115586d3ba2a to your computer and use it in GitHub Desktop.
Save Highstaker/09913478cdb10977272a115586d3ba2a to your computer and use it in GitHub Desktop.
# https://www.reddit.com/r/dailyprogrammer/comments/4m3ddb/20160601_challenge_269_intermediate_mirror/
import numpy as np
def decrypt(inp):
mirrors = np.array(list(map(list ,MIRRORS.split('\n'))))
TOP = [chr(i) for i in range(97,110)]
RIGHT = [chr(i) for i in range(110,123)]
LEFT = [chr(i) for i in range(65,78)]
BOTTOM = [chr(i) for i in range(78,91)]
result = ""
state = ""
def init_state(ch):
if ch in TOP:
return "down", [TOP.index(ch), -1]
elif ch in RIGHT:
return "left", [13 , RIGHT.index(ch) ]
elif ch in LEFT:
return "right", [-1, LEFT.index(ch)]
elif ch in BOTTOM:
return "up", [BOTTOM.index(ch) ,13]
for letter in inp:
state, coords = init_state(letter)
while True:
if state == "up":
for n, i in enumerate(mirrors.T[coords[0]][coords[1]-13-1::-1]):
if i == "\\":
state = "left"
coords[1] -= n + 1
break
elif i == "/":
state = "right"
coords[1] -= n + 1
break
else:
result += TOP[coords[0]]
break
elif state == "down":
for n, i in enumerate(mirrors.T[coords[0]][coords[1]+1:]):
if i == "\\":
state = "right"
coords[1] += n + 1
break
elif i == "/":
state = "left"
coords[1] += n + 1
break
else:
result += BOTTOM[coords[0]]
break
elif state == "left":
for n, i in enumerate(mirrors[coords[1]][coords[0]-13-1::-1]):
if i == "\\":
state = "up"
coords[0] -= n + 1
break
elif i == "/":
state = "down"
coords[0] -= n + 1
break
else:
result += LEFT[coords[1]]
break
elif state == "right":
for n, i in enumerate(mirrors[coords[1]][coords[0]+1:]):
if i == "\\":
state = "down"
coords[0] += n + 1
break
elif i == "/":
state = "up"
coords[0] += n + 1
break
else:
result += RIGHT[coords[1]]
break
return result
MIRRORS = r""" \\ /\
\
/
\ \
\
/ /
\ / \
\
\/
/
\
\/
/ / """
inp = "TpnQSjdmZdpoohd"
result = decrypt(inp)
print("inp ", inp)
print("result ", result)
assert decrypt("TpnQSjdmZdpoohd") == "DailyProgrammer"
#https://www.reddit.com/r/dailyprogrammer/comments/4nga90/20160610_challenge_270_hard_alien_invasion/
INPUTS = [
"""--X----X
-----X--
X--X----
--X-----
X--X----
XXXX----
--X-----
--X---X-"""
,
"""X--X-
-----
-----
-----
---X-"""
,
"""--X---------X----------------------X---XXX--------
-X----------X-------------------XX------XX--XX--X-
---------X---X--X-------XX----------------------X-
----------------------X----X---XX---X-------X----X
------------------X----------X--------X----------X
----XX---X----------------X---X-X-----------------
---X----------------------------------X-------X---
-X-------X--XX----------X----X--X--X----------X---
---------X---------------X----------------------X-
-------------X------------------------X-----------
-X---------------------------XX----------X--------
--X--------------------X-X--------------------X---
X---X-----------X-------------X------------X------
---X-----------------------X-------------------X--
-------X--------------X--X-----X------------------
--------X------X------X----------XXX----X--X---X-X
------------------X-------X----X--X---------------
----X----X----------------------------------X-----
-----------X-----X--------X--------X--------------
--X------X-------------X--------------------X-----
------X----X----------------------X---------XX----
----XX----------X-----------------X---------X-X---
-----X------X------X----X-------XXX-X-------------
---X-X--------------------------------------------
-----------------X----------------X---------------
----X-------------X----------------------X--X-----
------X---------XX--X---------X--------X----------
XX--------X-----------------X-------------X---X---
-----------X-X--------X---X--------X---X--------X-
-------------------X-------XXX---X----------------
-------X-----X-------------------------------X----
----X------X------X--X---------------X------------
--------X--------X--------------X-----------------
--------X------------------X-------X--------X---X-
X--X--X---X------X----------X--X--X---------------
-----------X--X-------------X-----------------X---
--------------X-------X-----X-----------------X---
-----------------X----------------------X-X--X----
----------------X----------------------------X----
---------------X----------X-----------X-----------
---X-X-----------------XX----X-----XX------------X
--X-X-------------------X-------------------X--X--
--X------X----------------------------------------
----X-------------------------X---X--------X-----X
X--XX----X-------------X---X----------------------
---------X---------------------------------------X
X-------X---------X--X-----XX--------------X------
------XX---------X--X---------X-------------------
--------X----------X---X--X-----X------X-----X----
----------------------------------------------X---"""
,
"""--------------X------X-----------X-X---X--X--X----X--------X--------------------X-------------------
-------------------X-X--------------------------------X-----------------X---------X-----X-----------
------------X------X------------------------X----X--------XXX---------------X---------------------XX
-----------------------------X-------------------------------X-----------X-----X------------X--X----
---------------------------X-------------XX------------XX---X-X--X----------X---X---X------X--------
----------------X--X---------------X--------X-X--X---------------X--------------------X-------------
--XX------X-X--------X-----------XX-X-----X-------XX--------X-X----------------------------------X--
---------X-------X-------------------X---------XX---------------X----------X-X-X-----------X-------X
-X---------------X-X--------X--X---X-----------------------------------------X-X---X-----X-X----XXXX
------X----------------------------------X--X----X--X--X--------------X------X---------X------X-X---
-X---X--------X---------------XX----------------X-----------X--X-X--------------X--X-----X----------
X-X----X-----------------X-X---------------------X----------X-------------------X-----------X-------
-X-----X---XX------X--X---------X--XX----X----X--------------XXX--X-------------X-------X--X----X---
-----X-------------X-X---------------X---------------------X---------XX-----------------------------
X--------------------------------------X-XX---------------X----------------------------------------X
-X------------X-------X--X-----------X-------X------X----------X-------------------X------X-X----X--
X-----X--X-X------------------X--------X---------------X--------X-----------------------------------
-------------X--------X------------------------X-XX---------------X-XX------------X-----------------
---X--------------------X--X--X---------X-------X-------------X----X------------X--X---X------------
--------------------X-----------X--------------------X------------------------------------------X---
-------------X----X----X-------X--------X-X-----X-XX-------------------X-XX----X---------X---X----X-
---------------XX--------------X----------------------X---X-------------X-----------X---------X-----
---X------------------------X-------------------------X--X-X---------------X----X-------------------
-----------------X-----------------X---------X---------X--------------X-------X----------X----------
-------------X--------X--------X--------------------------------X--X-----X----X---------------------
----X----X--X--------X-----X----------------------------X----------X-----------X-X-------X----------
-XX---X----------------X---------X-X-----X-----------------X---X---------X--------------X-XX---X----
-------------X-----XX-------X----X-------X------------X-------X-X----X-----X-X-------------------XX-
-----X------------X-----X---------------X----------X----------X--XX-------X-X-----X-----X-----------
--------X----X----X------X--------------X-------X----------X---X---X---X--------------X--X----------
---------X-----------------------XX--X-----------X-----------XX--------------X--------------X-------
X-----------------------------------X------X-----------------------------------------------XX-----X-
-------X---------X-----X-------------X-----X-----------X----X-------------------X-----X------X------
X--------------------------------------------------------------------------------X-----X------------
-------X------------------------X-----X-X--X------X----------XX--X-------------X-------------------X
--------------X-X---------X------------X-----------X-------------X----------X-------X---------------
X-X-X-------------X-----------------------X---X---X--X--------XX---X-----------X---------X----------
-----------X--------------XXX----XX------------------------------------X--X--X-X-------X-X---------X
-------------------------X-----------------X----------------------XX--X--X------X-------------X-----
--X-X---X-X----------------X---X-------X------XX-----------------X---X--X-------------X-X---X------X
------X-----X--------X---X----X------------------------X---X----X-------------------X---------------
---------------X-----------X-----X---------X-------------X---------X----X----------X---X--X-X--X----
---------------------X--------X--X-X--------------------------X----------X----------------------X---
X---X---X--X----------X------------X----------X-X------X-------------------X------X------------X----
----X---X---X-X--X-------------------X---------X---X---X------X----------------X------X-------------
-X-------X-------X----------------------X----------------X--------X-----X----------------------XX--X
---------XX-X---X--X-----------X--X--------------X-------------X--------------X----X----------------
-----------------------X------------X------------------------X------X-----------X-----XX-----X----X-
---------------------X---X----XX---------X---------------------------------X--X---X-----------X---X-
-----X----X-----X-X-------------X-X-----------X--X-------XX--------------X----X-X----XXX---X--------
-----------------X-X-------------X-----X-------X-XX-------------X----------------X-X----------X-----
------------X-X----------X---------------------------------X------X--------X---X---X----------------
--X------------------------X---------X---------------X------X-------X-----XX--------X----X-------X--
---XXX--------------------------X------X-----X-----------X-------------------X--------XX----------X-
---------X----X-------X-X-X---------------X-X----X--------------X-----X----------X----------------X-
--------X--X-X---------X------------------X---------X---------------------X----------------X--------
-----------------X------------------X----------X---X---XX-----X---X--------------------------------X
---------------------X-X----------XX--XX-----X-------X--X-----X---------X-X---------X---X-----------
-----X-------------X-X--------X----------X-----------------X-X-----X----------X----X----------X---X-
-------------------X-------X--X---X--X--X----------X-----------------------X--------X--X-------X---X
----X------X------XX------X---------------------------X--X----------------X---------------X------X--
--X---X------X----------X------------X-X-X-----------X-X---------------X----X------------X----------
-------X--X-----XX----------X-----------------------------------X---------------------------------X-
-----X-----------XX-------X-----------------X----X---------XX------X-----X---X------XX---X--X-------
---------X----------------X----X-X-----------X------X--------X-X--------------------------X----X----
X----------------------X-----------------X-------X---X--------------X-X-X-XX------X----------X--X-X-
X-----X------X-----------------------------X---------------------X----------X-XX------X-X-X-------X-
------------X---X--X------X-X---------X-----X---------X-------------------------X-------------X-----
---------------------X---X---------X------------------------------------------X-------X-X-----------
-----------------X--------XX----------X---X----------------X-----------------------X----------------
-XX-------X-----X--------------------X-------X---X-------------X-------X--X---X-------X-------X-----
-----------X--------XX----X---X------X------X---X--------------------------------------X----X------X
--------------X------X--XX-------XX-------------X---------X---X---------X------X-------X------------
----XX----------------------------------------X-------X---------X-------------------X--------------X
----------------X---X--------X----X--X-------------X---XX---X---------------X----X--X---------------
---------------X------------------X------X--X---------X--------------X---X-----------X--------X-----
----------X-------X------------X-X------X----X---------------------X--X----------X----------------X-
---------X------X-----------------------------------------------------X---X------X------------------
-----X-----------------X------------------------------X-------X-----X--X-----X-----X----------------
----X---------------------X---------------X------X------------------------------------------X----X--
-------X--X-------X-----------------X-----------XX---X-----------XX------X--------------------XX----
-----X------------------X--------X----X----X-------------------XX-------------------------X-------X-
-----XX---------------------------------------X------------X------X------XXX------X---------X------X
X-------X------X----------X--X------X-X----------XX-----X------XX-------------------X-----X---------
--X---X----------X-X---X------XX---------------X-----X--X--------X---------------------X----X-------
-X-X----------XX---X-X------------------------------XXX---X--X---X---X--X---X-----X-----X------X----
-------X---------------X--X-------------------X-----------X--------X----------------------X--X------
-------------------X-------------------------X-------X-X-----------------X------------X-X-----------
-----X-X------X----------------------------X-------------X-----------XX-----------------------------
----X----X-------------------------X----XX---------------X--X--X-----X-----X----------------------X-
-------------------X--------X-----------X---------X------X-----X-X----------------------------------
--X------------X-----------XXX-------X--------X-------------X------------X----X---------------------
-----------X--------X---------------------------------------------------X-------------X-------------
-X----XX--------------------------X--X--------X----X-------X-------X----X-------XX---X------------X-
-------X------------------------------X--X------X--X-------X--X------------X---------X--------------
-XX--------X----X-X---X--------------------------X---X-X------------------------------XX------------
----------X-----XX------------------X-X--------X-X-X---X--XX------------X-X-X--X--------------------
X-------X-------XX---X-X--XX--------X---X-------------------------------X--------------------X------
-X-----------------------------------X-----X--------------------------------X-------XX--------------
--X------------------------X-XX----------------X-------X-------X--------------X-----X-X------X---X--"""
]
import numpy as np
for INPUT in INPUTS:
FIELD = np.array(list(map(list, INPUT.split('\n'))))
FIELD_SIZE = len(FIELD[0])
# print(FIELD)#debug
tr_field = FIELD.T
# print(tr_field)#debug
max_square = 0
for n_row, row in enumerate(FIELD):
conseq_counter, conseq_start = 0, 0
for n, elem in enumerate(row):
# print(n_row, n)#debug
if elem == "-":
if not conseq_counter:
conseq_start = n
for i in row[n:]:
if i == "-":
conseq_counter += 1
else:
# X
break
# if elem == "X" or n == FIELD_SIZE-1:
if conseq_counter > max_square:
#start a square growing
square_size = 0
for i in range(min(conseq_counter, FIELD_SIZE-n_row)):
row_slice = FIELD[n_row+i][conseq_start:conseq_start+i+1]
col_slice = tr_field[conseq_start+i][n_row:n_row+i+1]
# print(1, n_row, n, conseq_start, conseq_counter, i, row_slice)#debug
# print(2, n_row, n, conseq_start, conseq_counter, i, col_slice)#debug
if "X" in row_slice or "X" in col_slice:
# print("X", square_size)#debug
max_square = max(max_square, square_size)
# conseq_counter, conseq_start = 0, 0
break
else:
square_size += 1
else:
# print("no obstacles")#debug
max_square = max(max_square, square_size)
# conseq_counter, conseq_start = 0, 0
conseq_counter, conseq_start = 0, 0
# print("max_square", max_square)
print("{1}: {0} dropships!".format(max_square**2, FIELD_SIZE))
#https://www.reddit.com/r/dailyprogrammer/comments/4o74p3/20160615_challenge_271_intermediate_making_waves/
from struct import pack
from math import sin, pi
import wave
import random
RATE=8000
note_length = 0.3 # seconds
NOTES="ABCDEFG_GFEDCBA"
NOTE_FREQS = {
"A" : 220.00,
"B" : 246.94,
"C" : 261.63,
"D" : 293.66,
"E" : 329.63,
"F" : 349.23,
"G" : 392.00,
}
with wave.open('test_mono.wav', 'w') as wv:
wv.setparams((1, 2, RATE, 0, 'NONE', 'not compressed'))
for note in NOTES:
try:
frequency = NOTE_FREQS[note]
maxVol=2**15-1 #maximum amplitude
except KeyError:
maxVol = 0
wvData=bytes()
for i in range(0, int(RATE*note_length)):
wvData+=pack('h', int(maxVol*sin(i*2*pi*frequency/RATE))) #500Hz
wv.writeframes(wvData)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment