Skip to content

Commit 3589159

Browse files
authored
Merge pull request #46 from tsolakoua/bash-fixtures
Add bash fixtures source only
2 parents 990a28f + 1ab601c commit 3589159

15 files changed

+313
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/bin/sh
2+
accumulator() {
3+
# Define a global function named $1
4+
# with a global variable named ${1}_sum.
5+
eval "${1}_sum=\$2"
6+
eval "$1() {
7+
${1}_sum=\$(echo \"(\$${1}_sum) + (\$2)\" | bc)
8+
eval \"\$1=\\\$${1}_sum\" # Provide the current sum.
9+
}"
10+
}
11+
12+
accumulator x 1
13+
x r 5
14+
accumulator y 3
15+
x r 2.3
16+
echo $r
17+
y r -3000
18+
echo $r

fixtures/bench_binary_search.bash

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
left=0
2+
right=$(($size - 1))
3+
while [ $left -le $right ] ; do
4+
mid=$((($left + $right) >> 1))
5+
# echo "$left $mid(${array[$mid]}) $right"
6+
if [ $value -eq ${array[$mid]} ] ; then
7+
echo $mid
8+
exit
9+
elif [ $value -lt ${array[$mid]} ]; then
10+
right=$(($mid - 1))
11+
else
12+
left=$((mid + 1))
13+
fi
14+
done
15+
echo 'ERROR 404 : NOT FOUND'
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
halve()
2+
{
3+
expr "$1" / 2
4+
}
5+
6+
double()
7+
{
8+
expr "$1" \* 2
9+
}
10+
11+
is_even()
12+
{
13+
expr "$1" % 2 = 0 >/dev/null
14+
}
15+
16+
ethiopicmult()
17+
{
18+
plier=$1
19+
plicand=$2
20+
r=0
21+
while [ "$plier" -ge 1 ]; do
22+
is_even "$plier" || r=`expr $r + "$plicand"`
23+
plier=`halve "$plier"`
24+
plicand=`double "$plicand"`
25+
done
26+
echo $r
27+
}
28+
29+
ethiopicmult 17 34
30+
# => 578

fixtures/bench_fibonacci.bash

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
fib() {
2+
local n=$1
3+
[ $n -lt 2 ] && echo -n $n || echo -n $(( $( fib $(( n - 1 )) ) + $( fib $(( n - 2 )) ) ))
4+
}

fixtures/bench_fizzbuzz.bash

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
i=1
2+
while expr $i '<=' 100 >/dev/null; do
3+
w=false
4+
expr $i % 3 = 0 >/dev/null && { printf Fizz; w=true; }
5+
expr $i % 5 = 0 >/dev/null && { printf Buzz; w=true; }
6+
if $w; then echo; else echo $i; fi
7+
i=`expr $i + 1`
8+
done

fixtures/bench_gcd.bash

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
gcd() {
2+
# Calculate $1 % $2 until $2 becomes zero.
3+
until test 0 -eq "$2"; do
4+
# Parallel assignment: set -- 1 2
5+
set -- "$2" "`expr "$1" % "$2"`"
6+
done
7+
8+
# Echo absolute value of $1.
9+
test 0 -gt "$1" && set -- "`expr 0 - "$1"`"
10+
echo "$1"
11+
}
12+
13+
gcd -47376 87843
14+
# => 987

fixtures/bench_happy_numbers.bash

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/bin/bash
2+
function sum_of_square_digits
3+
{
4+
local -i n="$1" sum=0
5+
while (( n )); do
6+
local -i d=n%10
7+
let sum+=d*d
8+
let n=n/10
9+
done
10+
echo "$sum"
11+
}
12+
13+
function is_happy?
14+
{
15+
local -i n="$1"
16+
local seen=()
17+
while (( n != 1 )); do
18+
if [ -n "${seen[$n]}" ]; then
19+
return 1
20+
fi
21+
seen[n]=1
22+
let n="$(sum_of_square_digits "$n")"
23+
done
24+
return 0
25+
}
26+
27+
function first_n_happy
28+
{
29+
local -i count="$1"
30+
local -i n
31+
for (( n=0; count; n+=1 )); do
32+
if is_happy? "$n"; then
33+
echo "$n"
34+
let count-=1
35+
fi
36+
done
37+
return 0
38+
}
39+
40+
first_n_happy 8

fixtures/bench_hundred_doors.bash

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#! /bin/bash
2+
3+
declare -a doors
4+
for((i=1; i <= 100; i++)); do
5+
doors[$i]=0
6+
done
7+
8+
for((i=1; i <= 100; i++)); do
9+
for((j=i; j <= 100; j += i)); do
10+
echo $i $j
11+
doors[$j]=$(( doors[j] ^ 1 ))
12+
done
13+
done
14+
15+
for((i=1; i <= 100; i++)); do
16+
if [[ ${doors[$i]} -eq 0 ]]; then
17+
op="closed"
18+
else
19+
op="open"
20+
fi
21+
echo $i $op
22+
done

fixtures/bench_is_prime.bash

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
primep() {
2+
set -- "$1" 3
3+
test "$1" -eq 2 && return 0 # 2 is prime.
4+
expr "$1" \% 2 >/dev/null || return 1 # Other evens are not prime.
5+
test "$1" -ge 3 || return 1
6+
7+
# Loop for odd p from 3 to sqrt(n).
8+
# Comparing p * p <= n can overflow. We use p <= n / p.
9+
while expr $2 \<= "$1" / $2 >/dev/null; do
10+
# If p divides n, then n is not prime.
11+
expr "$1" % $2 >/dev/null || return 1
12+
set -- "$1" `expr $2 + 2`
13+
done
14+
return 0 # Yes, n is prime.
15+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
M()
2+
{
3+
local n
4+
n=$1
5+
if [[ $n -eq 0 ]]; then
6+
echo -n 0
7+
else
8+
echo -n $(( n - $(F $(M $((n-1)) ) ) ))
9+
fi
10+
}
11+
12+
F()
13+
{
14+
local n
15+
n=$1
16+
if [[ $n -eq 0 ]]; then
17+
echo -n 1
18+
else
19+
echo -n $(( n - $(M $(F $((n-1)) ) ) ))
20+
fi
21+
}
22+
23+
for((i=0; i < 20; i++)); do
24+
F $i
25+
echo -n " "
26+
done
27+
echo
28+
for((i=0; i < 20; i++)); do
29+
M $i
30+
echo -n " "
31+
done
32+
echo

0 commit comments

Comments
 (0)