Skip to main content

Shuffle Deck of Cards

May 31, 2023CodeCatch
Loading...

More Python Posts

Sherlock Holmes Curious Lockbox Solver

Mar 12, 2021LeifMessinger

0 likes • 0 views

import copy
begining = [False,False,False,False,False,None,True,True,True,True,True]
#False = black True = white
its = [0]
def swap(layout, step):
layoutCopy = copy.deepcopy(layout)
layoutCopy[(step[0]+step[1])], layoutCopy[step[1]] = layoutCopy[step[1]], layoutCopy[(step[0]+step[1])]
return layoutCopy
def isSolved(layout):
for i in range(len(layout)):
if(layout[i] == False):
return (i >= (len(layout)/2))
def recurse(layout, its, steps = []):
if isSolved(layout):
its[0] += 1
print(layout,list(x[0] for x in steps))
return
step = None
for i in range(len(layout)):
if(layout[i] == None):
if(i >= 1): #If the empty space could have something to the left
if(layout[i - 1] == False):
step = [-1,i]
recurse(swap(layout,step), its, (steps+[step]))
if(i > 1): #If the empty space could have something 2 to the left
if(layout[i - 2] == False):
step = [-2,i]
recurse(swap(layout,step), its, (steps+[step]))
if(i < (len(layout)-1)): #If the empty space could have something to the right
if(layout[i + 1] == True):
step = [1,i]
recurse(swap(layout,step), its, (steps+[step]))
if(i < (len(layout)-2)): #If the empty space could have something to the right
if(layout[i + 2] == True):
step = [2,i]
recurse(swap(layout,step), its, (steps+[step]))
its[0] += 1
#return None
recurse(begining,its,[])
print(its[0])

xxx

Apr 27, 2025hasnaoui1

0 likes • 1 view

import random
import time
def generate_maze(width, height):
"""Generate a random maze using depth-first search"""
maze = [[1 for _ in range(width)] for _ in range(height)]
def carve(x, y):
maze[y][x] = 0
directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]
random.shuffle(directions)
for dx, dy in directions:
nx, ny = x + dx*2, y + dy*2
if 0 <= nx < width and 0 <= ny < height and maze[ny][nx] == 1:
maze[y + dy][x + dx] = 0
carve(nx, ny)
carve(1, 1)
maze[0][1] = 0 # Entrance
maze[height-1][width-2] = 0 # Exit
return maze
def print_maze(maze, path=None):
"""Print the maze with ASCII characters"""
if path is None:
path = []
for y in range(len(maze)):
for x in range(len(maze[0])):
if (x, y) in path:
print('◍', end=' ')
elif maze[y][x] == 0:
print(' ', end=' ')
else:
print('▓', end=' ')
print()
def solve_maze(maze, start, end):
"""Solve the maze using recursive backtracking"""
visited = set()
path = []
def dfs(x, y):
if (x, y) == end:
path.append((x, y))
return True
if (x, y) in visited or maze[y][x] == 1:
return False
visited.add((x, y))
path.append((x, y))
for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]:
if dfs(x + dx, y + dy):
return True
path.pop()
return False
dfs(*start)
return path
# Generate and solve a maze
width, height = 21, 11 # Should be odd numbers
maze = generate_maze(width, height)
start = (1, 0)
end = (width-2, height-1)
print("Generated Maze:")
print_maze(maze)
print("\nSolving Maze...")
time.sleep(2)
path = solve_maze(maze, start, end)
print("\nSolved Maze:")
print_maze(maze, path)

integer to roman numeral

Nov 19, 2022CodeCatch

0 likes • 1 view

def to_roman_numeral(num):
lookup = [
(1000, 'M'),
(900, 'CM'),
(500, 'D'),
(400, 'CD'),
(100, 'C'),
(90, 'XC'),
(50, 'L'),
(40, 'XL'),
(10, 'X'),
(9, 'IX'),
(5, 'V'),
(4, 'IV'),
(1, 'I'),
]
res = ''
for (n, roman) in lookup:
(d, num) = divmod(num, n)
res += roman * d
return res
to_roman_numeral(3) # 'III'
to_roman_numeral(11) # 'XI'
to_roman_numeral(1998) # 'MCMXCVIII'

Nodes and Trees

Nov 18, 2022AustinLeath

0 likes • 1 view

import random
class Node:
def __init__(self, c):
self.left = None
self.right = None
self.color = c
def SetColor(self,c) :
self.color = c
def PrintNode(self) :
print(self.color)
def insert(s, root, i, n):
if i < n:
temp = Node(s[i])
root = temp
root.left = insert(s, root.left,2 * i + 1, n)
root.right = insert(s, root.right,2 * i + 2, n)
return root
def MakeTree(s) :
list = insert(s,None,0,len(s))
return list
def MakeSet() :
s = []
count = random.randint(7,12)
for _ in range(count) :
color = random.randint(0,1) == 0 and "Red" or "White"
s.append(color)
return s
def ChangeColor(root) :
if (root != None) :
if (root.color == "White") :
root.SetColor("Red")
ChangeColor(root.left)
ChangeColor(root.right)
def PrintList(root) :
if root.left != None :
PrintList(root.left)
else :
root.PrintNode()
if root.right != None :
PrintList(root.right)
else :
root.PrintNode()
t1 = MakeTree(MakeSet())
print("Original Colors For Tree 1:\n")
PrintList(t1)
ChangeColor(t1)
print("New Colors For Tree 1:\n")
PrintList(t1)
t2 = MakeTree(MakeSet())
print("Original Colors For Tree 2:\n")
PrintList(t2)
ChangeColor(t2)
print("New Colors For Tree 2:\n")
PrintList(t2)
t3 = MakeTree(MakeSet())
print("Original Colors For Tree 3:\n")
PrintList(t3)
ChangeColor(t3)
print("New Colors For Tree 3:\n")
PrintList(t3)

Print "X" pattern

Nov 19, 2022CodeCatch

0 likes • 0 views

def print_x_pattern(size):
i,j = 0,size - 1
while j >= 0 and i < size:
initial_spaces = ' '*min(i,j)
middle_spaces = ' '*(abs(i - j) - 1)
final_spaces = ' '*(size - 1 - max(i,j))
if j == i:
print(initial_spaces + '*' + final_spaces)
else:
print(initial_spaces + '*' + middle_spaces + '*' + final_spaces)
i += 1
j -= 1
print_x_pattern(7)

Sort a List of Strings

Oct 15, 2022CodeCatch

1 like • 2 views

my_list = ["blue", "red", "green"]
#1- Using sort or srted directly or with specifc keys
my_list.sort() #sorts alphabetically or in an ascending order for numeric data
my_list = sorted(my_list, key=len) #sorts the list based on the length of the strings from shortest to longest.
# You can use reverse=True to flip the order
#2- Using locale and functools
import locale
from functools import cmp_to_key
my_list = sorted(my_list, key=cmp_to_key(locale.strcoll))