March 2014 update
This commit is contained in:
parent
09687c4926
commit
a25938f123
1846 changed files with 21876 additions and 5203 deletions
97
Task/Balanced-brackets/Fortran/balanced-brackets.f
Normal file
97
Task/Balanced-brackets/Fortran/balanced-brackets.f
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
! $ gfortran -g -O0 -std=f2008 -Wall f.f08 -o f.exe
|
||||
! $ ./f
|
||||
! compiles syntax error
|
||||
! :
|
||||
! : ][
|
||||
! : ]][[
|
||||
! :[[[]]]
|
||||
! : ][[][]][
|
||||
! : ][[]]][[[]
|
||||
! : ]]]][]][[[[[
|
||||
! : ]]]][][]][[[[[
|
||||
! : ][[[]]]]][]][[[[
|
||||
! : [[][]]][]]][[[][[]
|
||||
! : ]]][[][[[[[[[[]]]]]]
|
||||
! :[[][[[][]]][]]
|
||||
! :[[[][]][][[[]][]][]]
|
||||
|
||||
program balanced_brackets
|
||||
implicit none
|
||||
integer :: N
|
||||
character(len=20) :: brackets, fmt
|
||||
write(6,*)'compiles syntax error'
|
||||
call random_seed
|
||||
do N=0, 10
|
||||
call generate(N, brackets)
|
||||
if (balanced(brackets)) then
|
||||
fmt = '(a,a20)'
|
||||
else
|
||||
fmt = '(a,21x,a20)'
|
||||
end if
|
||||
write(6,fmt)':',brackets
|
||||
end do
|
||||
|
||||
brackets = '[[][[[][]]][]]'
|
||||
if (balanced(brackets)) then
|
||||
fmt = '(a,a20)'
|
||||
else
|
||||
fmt = '(a,21x,a20)'
|
||||
end if
|
||||
write(6,fmt)':',brackets
|
||||
|
||||
N = 10
|
||||
call generate(N, brackets)
|
||||
do while (.not. balanced(brackets)) ! show a balanced set
|
||||
call generate(N, brackets)
|
||||
end do
|
||||
fmt = '(a,a20)'
|
||||
write(6,fmt)':',brackets
|
||||
|
||||
contains
|
||||
|
||||
logical function balanced(s)
|
||||
implicit none
|
||||
character(len=*), intent(in) :: s
|
||||
integer :: i, a, n
|
||||
n = len_trim(s)
|
||||
a = 0
|
||||
balanced = .true.
|
||||
do i=1, n
|
||||
if (s(i:i) == '[') then
|
||||
a = a+1
|
||||
else
|
||||
a = a-1
|
||||
end if
|
||||
balanced = balanced .and. (0 <= a)
|
||||
end do
|
||||
end function balanced
|
||||
|
||||
subroutine generate(N, s)
|
||||
implicit none
|
||||
integer, intent(in) :: N
|
||||
character(len=*), intent(out) :: s
|
||||
integer :: L, R, i
|
||||
real, dimension(2*N) :: harvest
|
||||
character :: c
|
||||
i = 1
|
||||
L = 0
|
||||
R = 0
|
||||
s = ' '
|
||||
call random_number(harvest)
|
||||
do while ((L < N) .and. (R < N))
|
||||
if (harvest(i) < 0.5) then
|
||||
L = L+1
|
||||
s(i:i) = '['
|
||||
else
|
||||
R = R+1
|
||||
s(i:i) = ']'
|
||||
end if
|
||||
i = i+1
|
||||
end do
|
||||
c = merge('[', ']', L < N)
|
||||
do while (i <= 2*N)
|
||||
s(i:i) = c
|
||||
i = i+1
|
||||
end do
|
||||
end subroutine generate
|
||||
end program balanced_brackets
|
||||
1
Task/Balanced-brackets/Julia/balanced-brackets-2.julia
Normal file
1
Task/Balanced-brackets/Julia/balanced-brackets-2.julia
Normal file
|
|
@ -0,0 +1 @@
|
|||
balanced(str) = foldl((x,y)->x<0? -1: x+y, 0, [(x=='[')-(x==']') for x=str])==0
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
grammar BalBrack {
|
||||
token TOP { ^ <balanced>* $ };
|
||||
token balanced { '[' <balanced>* ']' }
|
||||
}
|
||||
grammar BalBrack { token TOP { '[' <TOP>* ']' } }
|
||||
|
||||
my $n = prompt "Number of bracket pairs: ";
|
||||
my $s = (<[ ]> xx $n).pick(*).join;
|
||||
my $s = ('[' xx $n, ']' xx $n).pick(*).join;
|
||||
say "$s { BalBrack.parse($s) ?? "is" !! "is not" } well-balanced";
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
use 5.10.0; # for given ... when construct
|
||||
sub balanced {
|
||||
my $depth = 0;
|
||||
for (split //, shift) {
|
||||
when('[') { ++$depth }
|
||||
when(']') { return if --$depth < 0 }
|
||||
}
|
||||
return !$depth
|
||||
sub generate {
|
||||
my $n = shift;
|
||||
my $str = '[' x $n;
|
||||
substr($str, rand($n + $_), 0) = ']' for 1..$n;
|
||||
return $str;
|
||||
}
|
||||
|
||||
for (']', '[', '[[]', '][]', '[[]]', '[[]]]][][]]', 'x[ y [ [] z ]][ 1 ][]abcd') {
|
||||
print balanced($_) ? "" : "not ", "balanced:\t'$_'\n";
|
||||
sub balanced {
|
||||
shift =~ /^ (\[ (?1)* \])* $/x;
|
||||
}
|
||||
|
||||
for (0..8) {
|
||||
my $input = generate($_);
|
||||
print balanced($input) ? " ok:" : "bad:", " '$input'\n";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,3 @@
|
|||
use 5.10.0; # for '++' non-backtrack behavior
|
||||
sub balanced {
|
||||
my $_ = shift;
|
||||
s/(\[(?:[^\[\]]++|(?1))*\])//g;
|
||||
! /[\[\]]/;
|
||||
}
|
||||
|
||||
for (']', '[', '[[]', '][]', '[[]]', '[[]]]][][]]', 'x[ y [ [] z ]][ 1 ][]abcd') {
|
||||
print balanced($_) ? "" : "not ", "balanced:\t'$_'\n";
|
||||
shift =~ /^ ( [^\[\]]++ | \[ (?1)* \] )* $/x;
|
||||
}
|
||||
|
|
|
|||
8
Task/Balanced-brackets/Perl/balanced-brackets-3.pl
Normal file
8
Task/Balanced-brackets/Perl/balanced-brackets-3.pl
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
sub balanced {
|
||||
my $depth = 0;
|
||||
for (split //, shift) {
|
||||
if ($_ eq '[') { ++$depth }
|
||||
elsif ($_ eq ']') { return if --$depth < 0 }
|
||||
}
|
||||
return !$depth
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue