Skip to content
{{ message }}

Instantly share code, notes, and snippets.

# pedrosnk/balance.ex

Created May 2, 2014
Problems from scala course to elixir
 defmodule Balance do def balance str do balance(str, 0) end defp balance str, parenthesis_count do if String.length(str) == 0 do parenthesis_count == 0 else if parenthesis_count < 0 do false else {head, tail} = String.next_codepoint(str) parenthesis_count_acc = parenthesis_count cond do head == "(" -> parenthesis_count_acc = parenthesis_count_acc + 1 head == ")" -> parenthesis_count_acc = parenthesis_count_acc - 1 true -> end balance(tail, parenthesis_count_acc) end end end end
 defmodule BalanceSuiteTest do use ExUnit.Case import Balance test 'balance: "(if (zero? x) max (/ 1 x))" is balanced' do assert balance("(if (zero? x) max (/ 1 x))") end test 'balance: "I told him ..." is balanced' do assert balance("I told him ...") end test 'balance: ":-)" is unbalanced' do assert !balance(":-)") end test 'balance: counting is not enough' do assert !balance("())(") end end
 defmodule CountChange do def count_change money, change_list do cond do money == 0 -> 1 money < 0 -> 0 length(change_list) == 0 -> 0 true -> # else [head|tail] = change_list count_change(money - head, change_list) + count_change(money, tail) end end end
 defmodule CountChangeTest do use ExUnit.Case import CountChange test 'countChange: example given in instructions' do assert count_change(4, [1,2]) == 3 end test 'countChange: sorted CHF' do assert count_change(300, [5,10,20,50,100,200,500]) === 1022 end test 'countChange: no pennies' do assert count_change(301, [5,10,20,50,100,200,500] ) === 0 end test('countChange: unsorted CHF') do assert count_change(300, [500,5,50,100,20,200,10]) === 1022 end end
 defmodule Pascal do def pascal column, row do if column == 0 || row == column do 1 else pascal(column, row - 1) + pascal( column - 1, row - 1 ) end end end
 defmodule PascalSuiteTest do use ExUnit.Case import Pascal test 'pascal: col=0, row=2' do assert pascal(0,2) == 1 end test 'pascal: col=1, row=2' do assert pascal(1,2) == 2 end test 'pascal: col=1, row=3' do assert pascal(1,3) == 3 end end
to join this conversation on GitHub. Already have an account? Sign in to comment