Last active
May 16, 2021 10:00
-
-
Save rep-movsd/89f22eea6cae35a30d4375efddd7a22f to your computer and use it in GitHub Desktop.
Word puzzle checker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/usr/bin/python | |
import sys | |
import json | |
# open grid file | |
with open(sys.argv[1]) as f: | |
lines = [line.rstrip('\n') for line in f] | |
# make the grid but padded on left right and bottom sides with a sentinel like this (makes it easy to grab diagonals) | |
# *X* | |
# m = width and n = height, w is full padded width | |
grid = lines | |
m = len(lines[0]) | |
n = len(lines) | |
w=m*3 | |
# left and right padding for each row | |
hstars = '*' * m | |
grid = [ (hstars + row + hstars) for row in grid ] | |
print('Grid') | |
for row in range(n): | |
print(grid[row]) | |
print() | |
# List of strings to search horizontally, vertically, primary and secondary diagonal | |
horz = lines | |
vert = [''.join([grid[row][col] for row in range(n)]) for col in range(m,m*2)] | |
diag1 = [''.join([grid[row][row+col] for row in range(n)]) for col in range(m*2)] | |
diag2 = [''.join([grid[row][col-row] for row in range(n)]) for col in range(m,w)] | |
# combine all of these including their reverse into a set | |
gridwords = horz + vert + diag1 + diag2 | |
gridwords += [word[::-1] for word in gridwords] | |
gridwords = list(set(gridwords)) | |
gridwords.sort() | |
# Make one big string with all words separated by ',' filter out the '*' | |
wordcat = ','.join([word for word in gridwords]) | |
wordcat = ''.join([c for c in wordcat if c != '*']) | |
print('All words in grid') | |
print(wordcat) | |
print() | |
# open words file | |
with open(sys.argv[2]) as f: | |
words = [line.rstrip('\n') for line in f] | |
print('List of words') | |
print(words) | |
print() | |
print('Checking if words exist in grid') | |
for word in words: | |
count = wordcat.count(word) | |
if count != 1: | |
print('Word occured %d times: %s' % (count, word)) | |
print('Done') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment