Moves in squared strings (I)
This kata is the first of a sequence of four about "Squared Strings".
You are given a string of n lines, each substring being n characters long: For example:
s = "abcd\nefgh\nijkl\nmnop"
We will study some transformations of this square of strings.
Vertical mirror:
vert_mirror (or vertMirror or vert-mirror)
vert_mirror(s) => "dcba\nhgfe\nlkji\nponm"Horizontal mirror:
hor_mirror (or horMirror or hor-mirror)
hor_mirror(s) => "mnop\nijkl\nefgh\nabcd"
or printed:
vertical mirror |horizontal mirror
abcd --> dcba |abcd --> mnop
efgh hgfe |efgh ijkl
ijkl lkji |ijkl efgh
mnop ponm |mnop abcdTask:
Write these two functions
and
high-order function
oper(fct, s)wherefct is the function of one variable f to apply to the string
s(fct will be one of
vertMirror, horMirror)
Examples:
s = "abcd\nefgh\nijkl\nmnop"
oper(vert_mirror, s) => "dcba\nhgfe\nlkji\nponm"
oper(hor_mirror, s) => "mnop\nijkl\nefgh\nabcd"Note:
The form of the parameter fct in oper changes according to the language. You can see each form according to the language in "Sample Tests".
Bash Note:
The input strings are separated by , instead of \n. The output strings should be separated by \r instead of \n. See "Sample Tests".
Forthcoming katas will study other transformations.
Solutions
π² Shell
#!/bin/bash
#will set internal field separator (IFS) to ','
IFS=','
vertMirror()
{
arr=() #bash array
for field
do
arr+=( $(rev <<< $field) )
done
str=""
for (( i=0; i < ${#arr[*]}; ++i))
do
str+=${arr[$i]}
str+=$'\r'
done
echo $str
}
horMirror()
{
arr=("$@") #bash array
str=""
for (( i=${#arr[*]}-1; i >= 0; --i))
do
str+=${arr[$i]}
str+=$'\r'
done
echo $str
}
oper()
{
$1 "${@:2}"
}
oper $1 $2
IFS=' 'Last updated
Was this helpful?