Created
February 11, 2024 00:05
-
-
Save 4hg/6ce2fa0ff327cbc80ab0518e88d4799f to your computer and use it in GitHub Desktop.
Valentine's Day WireWorld
This file contains hidden or 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
######################################################################## | |
# 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