DEC 30
If we can’t catch a Nigerian with a powerful explosive powder in his oddly feminine-looking underpants and a syringe full of acid, a man whose own father had alerted the U.S. Embassy in Nigeria, a traveler whose ticket was paid for in cash and who didn’t check bags, whose visa renewal had been denied by the British, who had studied Arabic in Al Qaeda sanctuary Yemen, whose name was on a counterterrorism watch list, who can we catch?
DEC 30
Every time you sniff and say somebody has “too much free time,” the part of you that used to love making things for pure joy dies a little.
Introducing the `—>` operator!
#include <stdio.h> int main() { int x = 10; while( x --> 0 ) // x goes to 0 { printf("%d ", x); } }
Via Stack Overflow
DEC 27
RPCFN: Mazes came across my radar this morning, and although I’m not a Ruby newbie, I thought it might be a fun warmup for the day. And it was! My solution follows:
class Maze class Node attr_accessor :x, :y, :distance def initialize(x, y, distance=0) @x = x @y = y @distance = distance end def coords [x, y] end def neighbors [[@x-1,@y], [@x+1,@y], [@x,@y-1], [@x,@y+1]].map {|x,y| Node.new(x, y, @distance+1) } end end # assumptions: # * only one A # * only one B # maze is bounded on all four sides def initialize(maze_str) @maze = maze_str.dup @width = @maze.index("\n") + 1 # add one to account for the "\n"s a = @maze.index('A') start_coords = a.divmod(@width).reverse @start_node = Node.new(*start_coords) @end_node = nil @nodes = [ @start_node ] calculate end def calculate loop do node = @nodes.shift node.neighbors.each do |neighbor| case @maze[coords_to_index(*neighbor.coords)].chr when ' ' @maze[coords_to_index(*neighbor.coords)] = 'x' @nodes << neighbor when 'B' @end_node = neighbor return end end return if @nodes.empty? @nodes.sort_by!(&:distance) end end def solvable? !!@end_node end def steps @end_node.distance rescue 0 end def coords_to_index(x, y) y * @width + x end end
Edit: And for fun, here’s a slightly golfed version:
class Maze def initialize(s) @m = s.dup @d = r(@m.index('A'),@m.index("\n")+1) end def r(a,w) n = [[1,a]] until n.empty? do d,i = n.shift [i-w,i+w,i-1,i+1].each do |j| case @m[j] when 32 @m[j] = 'x' n << [d+1,j] when 66 return d end end n.sort! end nil end def solvable?; !!@d; end def steps; @d || 0; end end
