Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
45
Task/Run-length-encoding/UNIX-Shell/run-length-encoding-1.sh
Normal file
45
Task/Run-length-encoding/UNIX-Shell/run-length-encoding-1.sh
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
encode() {
|
||||
local phrase=$1
|
||||
[[ -z $phrase ]] && return
|
||||
local result="" count=0 char=${phrase:0:1}
|
||||
for ((i = 0; i < ${#phrase}; i++)); do
|
||||
if [[ ${phrase:i:1} == "$char" ]]; then
|
||||
((count++))
|
||||
else
|
||||
result+="$(encode_sequence "$count" "$char")"
|
||||
char=${phrase:i:1}
|
||||
count=1
|
||||
fi
|
||||
done
|
||||
result+="$(encode_sequence "$count" "$char")"
|
||||
echo "$result"
|
||||
}
|
||||
|
||||
encode_sequence() {
|
||||
local count=$1 char=$2
|
||||
((count == 1)) && count=""
|
||||
echo "${count}${char}"
|
||||
}
|
||||
|
||||
decode() {
|
||||
local phrase=$1
|
||||
local result=""
|
||||
local count char
|
||||
|
||||
while [[ $phrase =~ ([[:digit:]]+)([^[:digit:]]) ]]; do
|
||||
printf -v phrase "%s%s%s" \
|
||||
"${phrase%%${BASH_REMATCH[0]}*}" \
|
||||
"$(repeat "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}")" \
|
||||
"${phrase#*${BASH_REMATCH[0]}}"
|
||||
done
|
||||
echo "$phrase"
|
||||
}
|
||||
|
||||
repeat() {
|
||||
local count=$1 char=$2
|
||||
local result
|
||||
# string of count spaces
|
||||
printf -v result "%*s" "$count" ""
|
||||
# replace spaces with the char
|
||||
echo "${result// /$char}"
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
str="WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"
|
||||
enc=$(encode "$str")
|
||||
dec=$(decode "$enc")
|
||||
declare -p str enc dec
|
||||
[[ $str == "$dec" ]] && echo success || echo failure
|
||||
Loading…
Add table
Add a link
Reference in a new issue