Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
44
Task/Soundex/UNIX-Shell/soundex-3.sh
Normal file
44
Task/Soundex/UNIX-Shell/soundex-3.sh
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
soundex2() {
|
||||
local -u word=${1//[^[:alpha:]]/}
|
||||
|
||||
# 1. Save the first letter. Remove all occurrences of 'h' and 'w' except first letter.
|
||||
local first=${word:0:1}
|
||||
word=${word:1}
|
||||
word=$first${word//[HW]/}
|
||||
|
||||
# 2. Replace all consonants (include the first letter) with digits as in [2.] above.
|
||||
local consonants=$(IFS=; echo "${!value[*]}")
|
||||
local tmp letter
|
||||
local -i i
|
||||
for ((i=0; i < ${#word}; i++)); do
|
||||
letter=${word:i:1}
|
||||
if [[ $consonants == *$letter* ]]; then
|
||||
tmp+=${value[$letter]}
|
||||
else
|
||||
tmp+=$letter
|
||||
fi
|
||||
done
|
||||
word=$tmp
|
||||
|
||||
# 3. Replace all adjacent same digits with one digit.
|
||||
local char
|
||||
tmp=${word:0:1}
|
||||
local previous=${word:0:1}
|
||||
for ((i=1; i < ${#word}; i++)); do
|
||||
char=${word:i:1}
|
||||
[[ $char != [[:digit:]] || $char != $previous ]] && tmp+=$char
|
||||
previous=$char
|
||||
done
|
||||
word=$tmp
|
||||
|
||||
# 4. Remove all occurrences of a, e, i, o, u, y except first letter.
|
||||
tmp=${word:1}
|
||||
word=${word:0:1}${tmp//[AEIOUY]/}
|
||||
|
||||
# 5. If first symbol is a digit replace it with letter saved on step 1.
|
||||
[[ $word == [[:digit:]]* ]] && word=$first${word:1}
|
||||
|
||||
# 6. right pad with zeros
|
||||
word+="000"
|
||||
echo "${word:0:4}"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue