Skip to content

Instantly share code, notes, and snippets.

@elreimundo
elreimundo / cipher.rb
Last active August 29, 2015 13:56
A solution to a Caesar cipher challenge in which only letters are offset and in which spaces are a handful of special characters; the original challenge featured only lowercase letters and an offset of four, but this is intended to scale easily.
def north_korean_cipher message, offset = 4
unexaggerate message.chars.map{|char| decode char, offset}.join('')
end
def unexaggerate message
message.gsub(/\d+/) { |num| num.to_i / 100 }
end
def decode char, offset
case
@elreimundo
elreimundo / picker.css
Created March 2, 2014 21:01
A website to help demonstrate object-oriented design, created as part of a workshop I led for students at Dev Bootcamp
body {
background-image: url('http://pcmreviews.com/news/wp-content/uploads/2012/01/Red-carpet.jpg');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
color: white;
font-family: 'Parisienne', cursive;
}
.header{
@elreimundo
elreimundo / eightball.js
Created August 11, 2014 17:29
EightBall - intro to JS from an object-oriented perspective
// we're starting this function with an IIFE http://benalman.com/news/2010/11/immediately-invoked-function-expression/
// it's important to start this with a semicolon because otherwise any previously loaded JavaScript might try and invoke
// its last line using the anonymous function that we define here as its argument, and then invoke the resulting return value
// on line 63. That would be silly, yo. So we explicitly end the previous thought with a semicolon.
;(function () {
// we define an array of all of the possible predictions that our eight ball can make.
// unlike in Ruby, the use of all caps is purely conventional; JavaScript has no opinions about
// what capitalized variables mean.
var PREDICTIONS = [
@elreimundo
elreimundo / triangle_validity
Last active December 19, 2015 13:18
Am I cheating? When I taught Geometry, I used to teach my kids that this was the only requirement for a (planar) triangle. I feel like I should be teaching the machine to check for isosceles, equilateral, etc., but if all we want is to determine if a triangle is valid...
def valid_triangle?(a, b, c)
(a + b > c) && (a + c > b) && (b + c > a)
end
@elreimundo
elreimundo / times_table
Last active December 19, 2015 14:09
So I thought this would show a (not-very-well-spaced) times table with individual values separated by a space and each row on a new line. What am I missing?
def times_table(rows)
bigarray = []
1.upto(rows) do |x|
newarrayrow=[]
1.upto(rows) do |y|
newarrayrow << x*y
end
bigarray << newarrayrow.join(' ')
end
@elreimundo
elreimundo / englishnumber.rb
Created July 17, 2013 15:04
Not sure how elegant this is, but here is my number-to-its-English-word-counterpart translator
def numwords any_number
bignumwords any_number, []
end
def bignumwords number, big_array
place_names = {1 => 'thousand',
2 => 'million',
3 => 'billion',
4 => 'trillion'}
comma_count = Math.log(number,10).floor / 3
@elreimundo
elreimundo / fiftysixpuzzle.rb
Created July 17, 2013 15:08
A friend posted a math puzzle: "Find the smallest integer that ends in 56, is divisible by 56, and whose digits add to 56." Here's the Ruby script I wrote to solve the puzzle.
def digitsum num
currentsum = 0
(Math.log(num,10).ceil).downto(0) do |digit|
currentsum = currentsum + num/(10**digit)
num = num%(10**digit)
end
currentsum
end
@elreimundo
elreimundo / countofmultiples.rb
Created July 17, 2013 15:19
Project Euler problem #1 : "Find the sum of all of the whole numbers less than 1000 that are multiples of either 3 or 5." I thought that problem was too quick, so I generalized it to "Find the sum of all of the whole numbers less than n that are multiples of either x or z," then ran n=1000,x=3,z=5.
def countofmultiples (num,firstfactor,secondfactor)
count = 0
1.upto(num-1) do |check|
if check % firstfactor == 0 || check % secondfactor == 0
count += check
end
end
count
end
@elreimundo
elreimundo / sumofprimes.rb
Last active December 20, 2015 00:59
Here's a pretty simple prime number generator I used for a problem in ProjectEuler (specifically, calculate the sum of every prime below 2,000,000, although this can be generalized to sum every prime below any integer)
def sumofprimesbelow number
prime_array = [3,5]
current_num = 7
while current_num < number
prime_array.each do |factor|
if current_num % factor == 0
break
elsif factor > Math.sqrt(current_num)
prime_array << current_num
break
@elreimundo
elreimundo / largestproduct.rb
Created July 20, 2013 20:34
This is the main method for a ProjectEuler problem that provides a grid of numbers (copied and pasted as a string) and wants to find the maximum product of any four consecutive elements horizontally, vertically, or diagonally. I probably could have written each of the if/then statements in a single line, but executing two lines of code actually …
def largestproduct(nums_as_a_string)
currentmax = 0
arry = nums_as_a_string.split("\n")
arry.map! { |row_as_a_string| row_as_a_string.split.map! { |digit| digit.to_i } }
0.upto( (arry.length - 1).to_i ) do |row|
0.upto( (arry[row].length - 1).to_i ) do |col|
if col <= (arry[row].length - 4)
rowprod = arry[row][col]*arry[row][col+1]*arry[row][col+2]*arry[row][col+3]
currentmax = [currentmax,rowprod].max
end