I’m trying to use a broader range of languages than I do usually, so I figured I’d try not to use one I’d already used before through the days. I use bash all the time, so I thought I’d get it out of the way early.
This was not one of my better decisions, but worked fine!
Part 1 uses regular expressions; I could have used an associative array like some other people in the thread, but for some reason I went here first. The sort function wasn’t necessary, but helped with debugging.
#!/bin/bashtwos=0
threes=0
function sort_str (){# Bubble Sort ^_^local sl="$1"changed=1
while[["$changed"-eq 1 ]];do
changed=0
for i in$(seq 1 $((${#sl}-1)));do
if[[${sl:$(( i -1)):1}>${sl:$i:1}]];then
echo"${sl:$(( i -1)):1} > ${sl:$i:1}">>sort_progress
changed=1
if[[$i-eq 1 ]];then
sl=${sl:1:1}${sl:0:1}${sl:2}else
sl=${sl:0:$(( i -1))}${sl:$i:1}${sl:$((i-1)):1}${sl:$i+1}fi
fi
done
done
echo$sl}re_2_str=""re_3_str=""for a in a b c d e f g h i j k l m n o p q r s t u v w x y z;do
re_2_str+="^[^$a]*$a[^$a]*$a[^$a]*$|"
re_3_str+="^[^$a]*$a[^$a]*$a[^$a]*$a[^$a]*$|"done
re_2_str="(${re_2_str%|})"re_3_str="(${re_3_str%|})"while read line
do
echo-n"$line: $(sort_str $line): "if[["$line"=~ $re_2_str]];then
twos=$(( twos +1))echo-n"2 "fi
if[["$line"=~ $re_3_str]];then
threes=$(( threes +1))echo-n"3 "fi
echo
done <2.1.input
echo"Twos: $twos"echo"Threes: $threes"echo"x: $(( twos * threes ))"
Part 2 uses the same double for loop lamented elsewhere, but it gets the job done.
#!/bin/bashwhile read line
do
while read comp_line
do
same_string=""ndiffs=0
for i in$(seq 0 $((${#line}-1)))do
if[["${line:$i:1}"=="${comp_line:$i:1}"]];then
same_string+=${line:$i:1}else
ndiffs=$(( ndiffs+1 ))fi
done
if[["$ndiffs"-eq 1 ]];then
echo"$line: $comp_line: $same_string"exit
fi
done <2.2.input
done <2.2.input
Ryan is an engineer in the Sacramento Area with a focus in Python, Ruby, and Rust. Bash/Python Exercism mentor. Coding, physics, calculus, music, woodworking. Looking for work!
I’m trying to use a broader range of languages than I do usually, so I figured I’d try not to use one I’d already used before through the days. I use bash all the time, so I thought I’d get it out of the way early.
This was not one of my better decisions, but worked fine!
Part 1 uses regular expressions; I could have used an associative array like some other people in the thread, but for some reason I went here first. The sort function wasn’t necessary, but helped with debugging.
Part 2 uses the same double
for
loop lamented elsewhere, but it gets the job done.Neither of these is what I’d call “fast”.
Woah, nice! It's always really cool to see bigger things done with Bash :)
P.S. Depending on your Bash version, you can save yourself some typing with
{a..z}
.Oh yes, good call, I missed that compaction.