Skip to content

Instantly share code, notes, and snippets.

Avatar
🎯
Elixir/OTP

Jakub Godawa vysogot

🎯
Elixir/OTP
View GitHub Profile
View ruby-lambda-factorial.rb
IS_ZERO = -> (x) { x == 0 }
ONE = -> { 1 }
ONE_LESS = -> (x) { x - 1 }
ITSELF = -> (x) { x }
COND = -> (cond) { -> (doit) { -> (doelse) { cond ? doit.(nil) : doelse.(nil) } } }
MULT = -> (x) { -> (y) { x * y } }
puts(
-> myself {
-> (n) {
@vysogot
vysogot / 01_odd_elements.ex
Last active Sep 26, 2019
Odd elements of list in Elixir
View 01_odd_elements.ex
defmodule Solution do
def odds(elements) do
Enum.with_index(elements)
|> Enum.map_reduce([], fn {element, index}, acc ->
case rem(index, 2) == 1 do
true -> {{element, index}, acc ++ [element]}
_ -> {{element, index}, acc}
end
end)
|> elem(1)
@vysogot
vysogot / podcast_generator.rb
Created Sep 16, 2017
Generates RSS file from the files in a folder with subfolders
View podcast_generator.rb
#!/usr/bin/env ruby -wKU
#
# based on a script
# by Kelan Champagne
# http://kelan.io
require 'date'
# Config values
podcast_title = "Title"
@vysogot
vysogot / youtube-transcript-to-srt.rb
Created Mar 16, 2017
YouTube Transcript to SRT - Ruby script
View youtube-transcript-to-srt.rb
# Paste your transcript between the quotes
# and run
# ruby youtube-transcript-to-srt.rb > subtitles.srt
transcript = "0:00 Hello and welcome
0:05 This is a very nice story
0:10 and it needs subtitles"
times = transcript.split("\n").map {|x| x[0..4].strip.rjust(5, '0')}
times << times[-1]
@vysogot
vysogot / MultipleOutputTimeline.ino
Last active Aug 29, 2015
Arduino – multiple output control with timeline
View MultipleOutputTimeline.ino
/* Algorithm based on delay for running different outputs in given LOW/HIGH intervals
This code is meant to control the relay grid behind a washing machine
and it can be used for many other devices. By Jakub Godawa (vysogot) */
/* addresses for Arduino Uno (!setup properly for Arduino Mega or other!) */
const int r1out = A0;
const int r2out = A1;
const int s3out = A2;
const int s4out = A3;
const int s5out = A4;
@vysogot
vysogot / people_matcher.rb
Created Jul 16, 2011
Using FilterMatcher example
View people_matcher.rb
class PeopleMatcher
include FilterMatcher
attr_reader :db
def initialize(db, input)
@db, @input = db, input
end
def match
@vysogot
vysogot / filter_matcher.rb
Created Jul 16, 2011
FilterMatcher module
View filter_matcher.rb
module FilterMatcher
#
# define filter in a class that uses this module
# named like:
# - name_filter
# - age_filter
#
# they should a filtered array
#
@vysogot
vysogot / filter_matcher_test.rb
Created Jul 16, 2011
FilterMatcher test suite
View filter_matcher_test.rb
require 'test/unit'
class PeopleMatcherTest < Test::Unit::TestCase
def setup
@db = [
{ :id => 1, :name => "John", :age => 33, :homepage => "www.johny.com", :matched => false },
{ :id => 2, :name => "Mike", :age => 30, :homepage => "www.mikes.com", :matched => false },
{ :id => 3, :name => "Johny", :age => 25, :homepage => "www.johny.com", :matched => false },
{ :id => 4, :name => "Mike", :age => 30, :homepage => "www.realmike.com", :matched => false },
{ :id => 5, :name => "Dan", :age => 25, :homepage => "www.danny.com", :matched => false },
View fast_cartesian_product.rb
def cartprod(*args)
result = [[]]
while [] != args
t, result = result, []
b, *args = args
t.each do |a|
b.each do |n|
result << a + [n]
end
end
@vysogot
vysogot / fast_permute_sets.rb
Created Jul 7, 2011
Fast, fully iterative permute sets
View fast_permute_sets.rb
def permute(*args)
# filter the arguments
args.reject! {|x| !x.is_a?(Array) || x.empty?}
# get the number of all combinations
total = args.inject(1) {|total, array| total * array.size}
# prepare the small_cycles array to know how many times
# one element should be repeated in a loop
You can’t perform that action at this time.