Balanced brackets: Difference between revisions
Content deleted Content added
add UNIX Shell |
|||
Line 4,353: | Line 4,353: | ||
][[[[]]]][][ ][[[[]]]][][ |
][[[[]]]][][ ][[[[]]]][][ |
||
[[]]]]][[][[ [[]] ]]][[][[ </pre> |
[[]]]]][[][[ [[]] ]]][[][[ </pre> |
||
=={{header|UNIX Shell}}== |
|||
{{works with|bash}} |
|||
<lang bash>generate() { |
|||
local b=() |
|||
local i j tmp |
|||
for ((i=1; i<=$1; i++)); do |
|||
b+=( '[' ']') |
|||
done |
|||
for ((i=${#b[@]}-1; i>0; i--)); do |
|||
j=$(rand $i) |
|||
tmp=${b[j]} |
|||
b[j]=${b[i]} |
|||
b[i]=$tmp |
|||
done |
|||
local IFS= |
|||
echo "${b[*]}" |
|||
} |
|||
# a random number in the range [0,n) |
|||
rand() { |
|||
echo $(( $RANDOM % $1 )) |
|||
} |
|||
balanced() { |
|||
local -i lvl=0 |
|||
local i |
|||
for ((i=0; i<${#1}; i++)); do |
|||
case ${1:i:1} in |
|||
'[') ((lvl++));; |
|||
']') (( --lvl < 0 )) && return 1;; |
|||
esac |
|||
done |
|||
(( lvl == 0 )); return $? |
|||
} |
|||
for ((i=0; i<=10; i++)); do |
|||
test=$(generate $i) |
|||
balanced "$test" && result=OK || result="NOT OK" |
|||
printf "%s\t%s\n" "$test" "$result" |
|||
done</lang> |
|||
{{output}} |
|||
<pre> OK |
|||
][ NOT OK |
|||
[]][ NOT OK |
|||
[[][]] OK |
|||
]][[]][[ NOT OK |
|||
[[]][[][]] OK |
|||
[]][[[[]]]][ NOT OK |
|||
[[]][]][]][[[] NOT OK |
|||
[][][[[[][][]]]] OK |
|||
[][][[[[]]][[][]]] OK |
|||
][[]][][][[[]]][[]][ NOT OK</pre> |
|||
=={{header|Ursala}}== |
=={{header|Ursala}}== |