Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue