Skip to content

Instantly share code, notes, and snippets.

@4hg
Created February 11, 2024 00:05
Show Gist options
  • Save 4hg/6ce2fa0ff327cbc80ab0518e88d4799f to your computer and use it in GitHub Desktop.
Save 4hg/6ce2fa0ff327cbc80ab0518e88d4799f to your computer and use it in GitHub Desktop.
Valentine's Day WireWorld
########################################################################
# Wireworld Valentine Challenge
# Objective: Implement Wireworld and create a Valentine circuit!
# Start Date: February 2, 2023
# End Date: February 14, 2023
########################################################################
class WireworldValentine
EMPTY = "πŸŸͺ" # State 0
ELECTRON_HEAD = "πŸŸ₯" # State 1
ELECTRON_TAIL = "🟦" # State 2
CONDUCTOR = "🟨" # State 3
def initialize(rows:, cols:)
@rows = rows
@cols = cols
@grid = Array.new(rows) { Array.new(cols, EMPTY) }
@neighbor_offsets = [-1, 0, 1].product([-1, 0, 1])
end
def self.load(file)
# parse the file data
data =
file
.readlines(chomp: true)
.map(&:chars)
# create the game
self
.new(rows: data.length, cols: data[0].length)
.tap { |game| game.instance_variable_set(:@grid, data) }
end
def display
system("clear") || system("cls")
puts @grid.collect(&:join)
end
def update(grid, row, col, h_count)
cell = grid[row][col]
conductor_state = h_count == 1 || h_count == 2 ? ELECTRON_HEAD : CONDUCTOR
case cell
when EMPTY then EMPTY
when ELECTRON_HEAD then ELECTRON_TAIL
when ELECTRON_TAIL then CONDUCTOR
when CONDUCTOR then conductor_state
end
end
def tick
tgrid = Marshal.load(Marshal.dump(@grid))
(0...@rows).each do |row|
(0...@cols).each do |col|
next if @grid[row][col] == EMPTY
ns = @neighbor_offsets.map{ [(row + _1).clamp(0, @rows-1), (col + _2).clamp(0, @cols-1)] }.uniq
h_count = ns.count{ @grid[_1][_2] == ELECTRON_HEAD } if @grid[row][col] == CONDUCTOR
tgrid[row][col] = update(@grid, row, col, h_count)
end
end
@grid = tgrid
end
def run(steps=nil)
(0..steps).each do
display
tick
sleep 1
end
end
end
WireworldValentine.load(DATA).run
__END__
πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨🟨🟨🟨🟨🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨🟨πŸŸͺπŸŸͺπŸŸͺ🟨🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ🟨🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨🟨🟨🟨🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨πŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨🟨🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟦πŸŸ₯🟨🟨🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ🟨🟨🟨🟨🟨πŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺπŸŸͺ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment