рднреВрд▓рднреБрд▓реИрдпрд╛ рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛


рдПрдХ рдУрд▓рдВрдкрд┐рдпрд╛рдб рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд▓реЗрдмрд┐рд░рд┐рдВрде рдФрд░ рдЙрдирдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреА рдкреАрдврд╝реА рдХреЗ рдШреБрдорд╛рд╡рджрд╛рд░ рдЧрд▓рд┐рдпрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рд╣рдо рдпрд╣ рднреА рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕рдХреЗ рдЫрджреНрдо рдХреЛрдб рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕рд╛рджрдЧреА рд╣реИред


рдХрд╛рд░реНрдп


рднреВрд▓рднреБрд▓реИрдпрд╛ 10 рд╕реЗ 10 рд╕реЗ 10 рдХрд╛ рдПрдХ рдЪреЗрдХрд░ рд╡рд░реНрдЧ рд╣реИ, рдХреБрдЫ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдмрд╛рдзрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдПрдХ рд╕реЗрд▓ рдореЗрдВ рдПрдХ рдирд┐рдХрд╛рд╕ рд╣реИред рд░реЛрдмреЛрдЯ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрдХреНрд░рд╡реНрдпреВрд╣ рдореЗрдВ рд╣реИ рдФрд░ 4 рдХрдорд╛рдВрдб рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рд╕реЗрд▓ рдХреЛ рдиреАрдЪреЗ, рдКрдкрд░, рджрд╛рдПрдВ рдпрд╛ рдмрд╛рдПрдВ рдШреБрдорд╛рдПрдВред рдпрджрд┐ рд░реЛрдмреЛрдЯ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рдпрд╛ рдПрдХ рдмрд╛рдзрд╛ рдХреЗ рд╕рд╛рде рдкрд┐рдВрдЬрд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬрдЧрд╣ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдпрджрд┐ рд░реЛрдмреЛрдЯ рдирд┐рдХрд╛рд╕ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рднреВрд▓рднреБрд▓реИрдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ рдФрд░ рдЖрдЧреЗ рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддрд╛ рд╣реИред рд░реЛрдмреЛрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВ, рдЬрд┐рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реБрдП рд░реЛрдмреЛрдЯ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рд╕реЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрдерд┐рдд рдерд╛ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ 1000 рд╕реЗ рдЕрдзрд┐рдХ рдЯреАрдо рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред



рдЗрдирдкреБрдЯ рдкреНрд░рд╛рд░реВрдк


рдХреЛрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рднреВрд▓рднреБрд▓реИрдпрд╛ред
рднреВрд▓рднреБрд▓реИрдпрд╛ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕реЗ рдЖрдк рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред 0 - рдореБрдХреНрдд рд╕реЗрд▓, 1 - рдмрд╛рдзрд╛, x -
рд░рд╛рд╕реНрддрд╛ рдирд┐рдХрд╛рд▓рдирд╛ред


0011010011 0100001000 0110x00000 0010000100 0000111000 0000100100 0000010010 0100101010 0011001010 1000011000 

рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк


рдПрдХ рд▓рд╛рдЗрди рдЬрд┐рд╕рдореЗрдВ U, D, R, L рдХреА рд▓рдВрдмрд╛рдИ 1000 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ


рдЯреНрд░реЗрдирд┐рдВрдЧ


рдЬреЛ рд▓реЛрдЧ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ рдЙрдиреНрд╣реЗрдВ рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ


 using Pkg Pkg.add("Plots") Pkg.add("Colors") Pkg.add("Images") Pkg.build("Images") #     

рдпрд╣ рдЬреБрдкрд┐рдЯрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рд╕реАрдзреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ рдЖрдк рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╕рд╛рде рд╣реА рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдЪрдп рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рд▓рд┐рдП рднреВрд▓рднреБрд▓реИрдпрд╛ рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ


 S0 = "0011010011 0100001000 0110x00000 0010000100 0000111000 0000100100 0000010010 0100101010 0011001010 1000011000" 

рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рди рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ:


 S1 = prod(s-> s*' ', '['*S0*']') # prod(fun, arr)    arr #     fun #  julia  *   "[ 0 0 1 1 0 1 0 0 1 1 \n 0 1 0 0 0 0 1 0 0 0 \n 0 1 1 0 x 0 0 0 0 0 \n 0 0 1 0 0 0 0 1 0 0 \n 0 0 0 0 1 1 1 0 0 0 \n 0 0 0 0 1 0 0 1 0 0 \n 0 0 0 0 0 1 0 0 1 0 \n 0 1 0 0 1 0 1 0 1 0 \n 0 0 1 1 0 0 1 0 1 0 \n 1 0 0 0 0 1 1 0 0 0 ] " 

рдПрдХ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдЕрдЬреАрдм рдЕрдХреНрд╖рд░ x рдХреЛ рдмрджрд▓рдирд╛ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛, рд╣рдореЗрдВ рдПрдХ рднреВрд▓рднреБрд▓реИрдпрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд▓реЛрдЧреЛрдВ рдХреЛ рд╢реВрдиреНрдп рдореЗрдВ рдмрджрд▓реЗрдВ, рдФрд░ рд╢реВрдиреНрдп рдХреЛ рд▓реЛрдЧреЛрдВ рдХреЛ, рдФрд░ рдПрдХ рджреАрд╡рд╛рд░ рдкрд░ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ:


 S2 = replace(S1, 'x'=>'9') M0 = S2 |> Meta.parse |> eval m,n = size(M0) M1 = replace(M0, 1=>0, 0=>1) M = zeros(Int64,m+2,n+2) for i in 2:m+1, j in 2:n+1 M[i,j] = M1[i-1,j-1] end M # Maze map matrix 12├Ч12 Array{Int64,2}: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 1 0 1 1 1 0 0 1 0 0 1 9 1 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 

рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ


 length(M) 144 

рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдФрд░ рдЙрдирд╕реЗ


 sum(M)-9 70 

рдЬрд┐рд╕ рдкрд░ рдЖрдк рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ - рд╕рдВрднрд╛рд╡рд┐рдд рд╢реБрд░реБрдЖрддреА рд╕реНрдерд┐рддрд┐ред рдЖрдк рджреЛ-рдЖрдпрд╛рдореА рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


 using Plots heatmap(M, yaxis = :flip) # flip -   


рд╕рдорд╛рдзрд╛рди рд╕рддреНрдпрд╛рдкрди


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗред рдмрд┐рдВрджреБрдУрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ Point рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:


 mutable struct Point x::Int64 # vertical y::Int64 # horisont Point(x, y) = new(x, y) end 

рдФрд░ рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдХреЛрдб рдореЗрдВ рд░реЛрдмреЛрдЯ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред


рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдордиреНрд╡рдп рд╣реИ, рдПрдХ рд░реЗрдЦрд╛ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рдЖрддреА рд╣реИ рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЪрд▓рдирд╛ рд╣реИред рд╣рдо рдПрдХ рдЪрд┐рдЯреНрдареА рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрдбрд╝реЛрд╕реА рдХреА рдХреМрди рд╕реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕ рд╕реЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдп рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╢реВрдиреНрдп (рджреАрд╡рд╛рд░) рд╣реИ, рддреЛ рд╣рдо рдХрд╣реАрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдордиреЗ рдЖрд╡рд╢реНрдпрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдХрджрдо рдЙрдард╛рдпрд╛ рд╣реИред


рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рднрд╛рд░реА, рд╕рдорд╛рди рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


 S = "RRLDUURULDDRDDRRRUUU" S1 = replace(S , "R"=>"c.y+=M[cx, c.y+1];") S1 = replace(S1, "L"=>"cy-=M[cx, cy-1];") S1 = replace(S1, "U"=>"c.x+=M[c.x+1, cy];") S1 = replace(S1, "D"=>"cx-=M[cx-1, cy];") #  - start point Sp = eval( Meta.parse(S1) ) 

рд▓реЗрдХрд┐рди рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдХрдИ рдЕрд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╢рд╛рд╕реНрддреНрд░реАрдп рд╕рд╢рд░реНрдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╡реИрд╕реЗ, рдпрд╣ рддрдереНрдп рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рдВрдЦреНрдпрд╛ 9 рд╕реЗ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдЫреЛрдЯреА рд╕реА рдЪрд╛рд▓ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд░рд╛рд╕реНрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдорд╛рди рдЬреЛрдбрд╝рдХрд░ рдЖрдВрджреЛрд▓рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд░реЛрдмреЛрдЯ рдирд┐рдХрд╛рд╕ рдкрд░ рдХрджрдо рд░рдЦрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЙрд╕рдХреЗ рд╕рдордиреНрд╡рдп рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд░реЛрдмреЛрдЯ рд╕рд░рдгреА рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рдЙрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдХрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 try #     catch #       end 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд c рд░реЛрдмреЛрдЯ рдмрд┐рдВрджреБ c рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдХрд╛рд╕ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ:


 function isexit(str, c) scatter!([cy],[cx]) try for s in str if s == 'R' c.y+=M[cx, c.y+1]; elseif s == 'L' cy-=M[cx, cy-1]; elseif s == 'U' c.x+=M[c.x+1, cy]; elseif s == 'D' cx-=M[cx-1, cy]; else println("Error! Use only R, L, U, D") end end catch return true end return false end 

рдЖрдЗрдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдЬреЛ рд╕рднреА рд╢реБрд░реБрдЖрддреА рдкрджреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░реЗрдЧрд╛


 function test(Str) k = 0 for i in 2:m+1, j in 2:n+1 if M[i,j] == 1 c = Point(i, j) a = isexit(S,c) if a k +=1 #println(a) end end end println(k, " test completed from ", sum(M)-9) end 

рдЖрджреЗрд╢реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:


 S = "RRRLDUUURRRUUURRRRLLLRRUULDDDDRRRRDDDRRRUUU" heatmap(M, yaxis = :flip) test(S) # 10 test completed from 70 plot!(legend = false) 


рд╕рднреА рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдХреЗрд╡рд▓ 10 рдиреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рд╕реЗ рдирд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред


рдкреАрдврд╝рд┐рдпреЛрдВ рдХреА рдкреАрдврд╝реА рдФрд░ рдорд╛рд░реНрдЧ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмрдЪрд╛рдПрдВрдЧреЗред рд╣рдо Images.jl рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг (рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг ) рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрдИ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрдирдХрд╛ рдПрдХ рд╕рд╣рд╛рдпрдХ рдЙрдкрдХрд░рдг Colors.jl рдкреИрдХреЗрдЬ рд╣реИ, рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред


 using Images clrs(x) = x==9 ? RGB(1.,0.5,0) : RGB(x,x,x) maze = clrs.(M) # maze = Gray.(maze) # save("D:/dat/maze12x12.png", maze) 


рдЧрд╣рд░рд╛рдИ рдЦреЛрдЬ


рд╣реИрдмрд░ рдкрд░ рдПрдХ рд▓реЗрдЦ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ: рджреАрд╡рд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЧреНрд░рд┐рдб рдмрдирд╛рдПрдВ


 M = 10 N = 10 A = [ i&j&1 for i in 0:N, j in 0:M ] # isodd(i) & isodd(j) & 1 Gray.(A) # from Images.jl 


рдлрд┐рд░, рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдкрд┐рдВрдЧ, рд╣рдо рдорд╛рд░реНрдЧ рдФрд░ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкрдбрд╝реЛрд╕реА рдЧреИрд░-рдЕрдзрд┐рдХреГрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИ (рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкрджрдирд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╣реЗрдВрдЧреЗ), рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдкрдбрд╝реЛрд╕реА рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ (рдпрджрд┐ рдХреЛрдИ рдкрдбрд╝реЛрд╕реА рдкрдбрд╝реЛрд╕реА рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдлреНрд▓реИрдЧ-рдкреЙрдЗрдВрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ):


 function neighbours2(A,p, n, m) nbrs = [Point(px, p.y+2), # up Point(px, py-2), # down Point(px-2, py), # left Point(p.x+2, py)] # right goal = [] for a in nbrs if 0<ax<=n && 0<ay<=m && A[ax,ay]==2 push!(goal, a) end end length(goal) != 0 ? rand(goal) : Point(-1,-1) end 

рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрдВрдЧреЗ:


 function breakwall(A, newp,oldp) #  : x = (newp.x + oldp.x) >> 1 #   y = (newp.y + oldp.y) >> 1 A[x,y] = 1 end 

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


  1. рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрд▓ рдХреЛ рд╡рд░реНрддрдорд╛рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдЬрд╝рд┐рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
  2. рдЬрдмрдХрд┐ рдЕрдирд╡реАрдХреГрдд рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ
    1. рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдиреЗ "рдкрдбрд╝реЛрд╕реА" рдХреА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреА рд╣реИ
    1. рд╕реНрдЯреИрдХ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЛ рдкреБрд╢ рдХрд░реЗрдВ
    2. рдкрдбрд╝реЛрд╕реА рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
    3. рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдФрд░ рдЪрдпрдирд┐рдд рдХреЗ рдмреАрдЪ рдХреА рджреАрд╡рд╛рд░ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
    4. рдЪрдпрдирд┐рдд рд╕реЗрд▓ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
    2. рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ
    1. рд╕реНрдЯреИрдХ рд╕реЗ рдкрд┐рдВрдЬрд░реЗ рдХреЛ рдЦреАрдВрдЪреЛ
    2. рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВ
    3. рдирд╣реАрдВ рддреЛ
    1. рд░реИрдВрдбрдо рдЕрдирд╡рд┐рдЬрд┐рдЯ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЗрд╕реЗ рдХрд░рдВрдЯ рдХрд░реЗрдВ рдФрд░ рд╡рд┐рдЬрд┐рдЯ рдХреА рд╣реБрдИ рдЬрдЧрд╣ рдкрд░ рдорд╛рд░реНрдХ рдХрд░реЗрдВред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛрдб
 function amazeng(n, m) M = [ 2(i&j&1) for i in 0:n, j in 0:m ]; p = Point(2,2) #   lifo = [] #   push!(lifo, p) #i = 0 while length(lifo) != 0 #     M[px,py] = 1 #     np = neighbours2(M, p, n, m) # new point #    -   if np.x == np.y == -1 p = pop!(lifo) else push!(lifo, p) breakwall(M, np, p) p = np #i+=1 #maze = Gray.(M/2) #save("D:/dat/maze$i.png", maze) end end M[1,2] = 1 #  M[n,m+1] = 1 #  Gray.(M) end 

 lbrnt = amazeng(36, 48) # save("D:/dat/maze111.png", lbrnt) 



рдкрде рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдердо:


  1. рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрд▓ рдХреЛ рд╡рд░реНрддрдорд╛рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдЬрд╝рд┐рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
  2. рдЬрдм рддрдХ рдХреЛрдИ рд╣рд▓ рдирд╣реАрдВ рдорд┐рд▓ рдЬрд╛рддрд╛
    1. рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдиреЗ "рдкрдбрд╝реЛрд╕реА" рдХреА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреА рд╣реИ
    1. рд╕реНрдЯреИрдХ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЛ рдкреБрд╢ рдХрд░реЗрдВ
    2. рдкрдбрд╝реЛрд╕реА рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
    3. рдЪрдпрдирд┐рдд рд╕реЗрд▓ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
    2. рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ
    1. рд╕реНрдЯреИрдХ рд╕реЗ рдкрд┐рдВрдЬрд░реЗ рдХреЛ рдЦреАрдВрдЪреЛ
    2. рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВ
    3. рдЕрдиреНрдпрдерд╛, рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╣рдо рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдФрд░ рдПрдХ рдХреЛрд╢рд┐рдХрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ:


 function neighbours1(A, p, n, m) nbrs = [Point(px, p.y+1), # up Point(px, py-1), # down Point(px-1, py), # left Point(p.x+1, py)] # right goal = [] for a in nbrs if 0<ax<=n && 0<ay<=m && A[ax,ay]==1 push!(goal, a) end end length(goal) != 0 ? rand(goal) : Point(0,0) end 

рдорд╛рд░реНрдЧ рдФрд░ рдЕрд╕рдлрд▓ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд╕рд╛рде рднреВрд▓рднреБрд▓реИрдпрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ


 function amazeng(img, start, exit) M = Float64.(channelview(img)) n, m = size(M) p = start M[exit.x,exit.y] = 1 lifo = [] push!(lifo, p) while px != exit.x || py != exit.y M[px,py] = 0.4 np = neighbours1(M, p, n, m) if np.x == np.y == 0 M[px,py] = 0.75 p = pop!(lifo) #  -  ,    #      else push!(lifo, p) p = np end end Gray.(M) end 

рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рдиреЗ рджреЗрдЦрд╛ рд╣реИ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЙрддреНрдкрдиреНрди (рдПрдХрд╛рдзрд┐рдХ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ)ред рдЬрдм рдЖрдк рдЗрд╕реЗ рджреЛ рдирдВрдмрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЗрдореЗрдЬ рдФрд░ рджреЛ рдмрд┐рдВрджреБрдУрдВ (рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ) рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдореЗрдВ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ рдорд┐рд▓рддреА рд╣реИред


 img0 = load("D:/dat/maze111.png") amazeng(img0) 


рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рднреВрд▓рднреБрд▓реИрдпрд╛ рдкрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:


 img0 = load("D:/dat/maze12x12.png") n, m = size(img0) amazeng(img0, Point(11,9), Point(4,6) ) 


рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдорд╛рд░реНрдЧ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрднреА рднреА рдЦреБрд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЕрдкреНрд░рднрд╛рд╡реА рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдорд╛рдЬрд╝реЗ рдорд╣рд╛рди рдирд┐рдХрд▓рддреЗ рд╣реИрдВред


рдкреНрд░рд╛рдЗрдо рдХрд╛ рд░реИрдВрдбрдорд╛рдЗрдЬреНрдб рдЕрд▓реНрдЧреЛрд░рд┐рдердо


рдЬреИрд╕реЗ рд╣реА рдЖрдк рд▓реЗрдмрд┐рд░рд┐рдВрде рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рдмрдВрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЪрд▓реЛ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд░рддреЗ рд╣реИрдВ :


  • рджреАрд╡рд╛рд░реЛрдВ рд╕реЗ рднрд░реЗ рдЧреНрд░рд┐рдб рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред
  • рдПрдХ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЗрд╕реЗ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред рд╕реЗрд▓ рдХреА рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рджреАрд╡рд╛рд░ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
  • рдЬрдмрдХрд┐ рд╕реВрдЪреА рдореЗрдВ рджреАрд╡рд╛рд░реЗрдВ рд╣реИрдВ:
    • рд╕реВрдЪреА рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджреАрд╡рд╛рд░ рдЪреБрдиреЗрдВред рдпрджрд┐ рдХреЗрд╡рд▓ рджреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬрд┐рд╕реЗ рджреАрд╡рд╛рд░ рдХреЗ рд╢реЗрдпрд░реЛрдВ рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ:
      • рджреАрд╡рд╛рд░ рдХреЛ рдПрдХ рдорд╛рд░реНрдЧ рдмрдирд╛рдПрдВ рдФрд░ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдХрд▓реНрдкрд┐рдд рд╕реЗрд▓ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
      • рджреАрд╡рд╛рд░ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЖрд╕рдиреНрди рд╕реЗрд▓ рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред
    • рджреАрд╡рд╛рд░ рдХреЛ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред

рдХреЛрдб
 neighbors(p::Point) = [Point(px, p.y+1), # up Point(px, py-1), # down Point(px-1, py), # left Point(p.x+1, py)] # right function newalls!(walls, p, maze, n, m) nbrs = neighbors(p) for a in nbrs if 1<ax<n-1 && 1<ay<m-1 && !maze[ax,ay] push!(walls, a) #       . end end end function breakwall!(p, maze, n, m) nbrs = neighbors(p) #       if sum( a-> maze[ax,ay], nbrs) == 1 for a in nbrs if maze[ax,ay] # true =  px == ax ? nx = px : px>ax ? nx = p.x+1 : nx = px-1 py == ay ? ny = py : py>ay ? ny = p.y+1 : ny = py-1 maze[px,py] = true #   maze[nx,ny] = true px = nx py = ny return true end end else return false end end function prim(n, m) M = falses(n,m); #    p = Point(2, 2) M[px,py] = true walls = [] newalls!(walls, p, M, n, m) while length(walls) != 0 p = splice!( walls, rand(1:length(walls)) ) if breakwall!(p, M, n, m) newalls!(walls, p, M, n, m) end end M end 

 primaze = prim(19,19); Gray.(primaze) 


рдпрд╣ рдЕрдзрд┐рдХ рд╢рд╛рдЦрд╛ рдФрд░ рдХреЛрдИ рдХрдо рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ред


рдФрд░ рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдорд╛рд░реНрдЧ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдПрд▓реНрдЧреЛрд░рд┐рдердо рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:


рд╡рд┐рдзрд┐ рдП *


  • 2 рд╢реАрд░реНрд╖ рд╕реВрдЪреА рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ - рд▓рдВрдмрд┐рдд рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИред рд▓рдВрдмрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реБрд░реБрдЖрдд рдмрд┐рдВрджреБ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдм рддрдХ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИред
  • рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдЬ- рдмрд┐рдВрджреБ рд╕реЗ рд▓рдХреНрд╖реНрдп рддрдХ рдЕрдиреБрдорд╛рдирд┐рдд рджреВрд░реАред
  • рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ, рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ рдЬред рдЙрд╕реЗ рд░рд╣рдиреЗ рджреЛ Xред
  • рдЕрдЧрд░ X- рд▓рдХреНрд╖реНрдп, рдлрд┐рд░ рд╣рдореЗрдВ рдорд╛рд░реНрдЧ рдорд┐рд▓рд╛ред
  • рд╣рдо рдвреЛрддреЗ рд╣реИрдВ Xрд▓рдВрдмрд┐рдд рд╕реВрдЪреА рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╕реВрдЪреА рдореЗрдВред
  • рдкреНрд░рддреНрдпреЗрдХ рдЖрд╕рдиреНрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП X(рдЗрд╕ рдкрдбрд╝реЛрд╕реА рдмрд┐рдВрджреБ рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдВ рдп), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВ:
    • рдЕрдЧрд░ рдпрдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ - рдЗрд╕реЗ рдЫреЛрдбрд╝реЗрдВред
    • рдЕрдЧрд░ рдпрдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реВрдЪреА рдореЗрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ - рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВред
  • рдпрджрд┐ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдВрдХреЛрдВ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд▓рдХреНрд╖реНрдп рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ, рддреЛ рдорд╛рд░реНрдЧ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо "рдмрд┐рдВрджреБ" рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рдЬрд╛рдиреЗрдЧрд╛ рдХрд┐ рдпрд╣ рд▓рдХреНрд╖реНрдп рд╕реЗ рдХрд┐рддрдиреА рджреВрд░ рд╣реИ:


 mutable struct Point_h x::Int64 # horisont y::Int64 # vertical h::Float64 Point_h(x, y) = new(x, y, 0.) end 

рдЕрдм рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рддреБрд▓рдирд╛ рдСрдкрд░реЗрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐, рд╕рд╛рде рд╣реА рдПрдХ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп, рдмрд┐рдВрджреБрдУрдВ рдФрд░ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛:


рджреВрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛
 import Base: in, == ==(a::Point_h, b::Point_h) = ax==bx && ay==by function in(p::Point_h, Arr::Array{Point_h,1}) for a in Arr if a == p return true end end return false end function splicemin!(Arr)#::Array{Point_h,1} i = argmin( [ah for a in Arr] ) splice!(Arr, i) end dista(u,v) = hypot(vx-ux, vy-uy) # <=> sqrt( (vx-ux)^2 + (vy-uy)^2 ) neighbors(p::Point_h) = [Point_h(px, p.y+1), # up Point_h(px, py-1), # down Point_h(px-1, py), # left Point_h(p.x+1, py)] # right 

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЕрд╕реНрдкрд╖реНрдЯ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ? рдЬреИрд╕реЗ ?splice ?argmin


рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд┐рдзрд┐ рдП * рд╣реА


рдХреЛрдб
 function astar(M, start, final) #   -       isgood(p) = 1<px<n && 1<py<m && M[px,py] != 0 n, m = size(M) #       start.h = dista(start,final) closed = [] opened = [] push!(opened, start) while length(opened) != 0 X = splicemin!(opened) if X in closed continue end if X == final break end push!(closed, X) nbrs = neighbors(X) ygrex = filter(isgood, nbrs) for Y in ygrex if Y in closed continue else Yh = dista(Y, final) push!(opened, Y) end end end #    closed # return end 

рд╣рдо рдЪрд┐рддреНрд░ рдХреЛ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ:


 img0 = load("D:/dat/maze0.png") mazematrix = Float64.(channelview(img0)) 

рдФрд░ рд╣рдо рдПрдХ рдордирдорд╛рдирд╛ рдмрд┐рдВрджреБ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ:


 s = Point_h(11,9) # start f = Point_h(4,6) # finish M = copy(mazematrix) route = astar(M, s, f) i = 1 for c in route #   M[cx,cy] = 0.7 #save("D:/dat/Astar$i.png", M) i+=1 end Gray.(M) 


рд╕рднреА рдкрджреЛрдВ рдХреА рдПрдХ рдЦреЛрдЬ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



рджреЗрдЦрд╛ рдХрд┐ рдПрдЬреЗрдВрдЯ рдкреНрд░реЗрдЯ рд╣рдореЗрд╢рд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдореГрдд рд╕рд┐рд░реЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрджрдореЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкреВрд░реЗ рдорд╛рд░реНрдЧ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдП * рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред


  • 2 рд╢реАрд░реНрд╖ рд╕реВрдЪреА рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ - рд▓рдВрдмрд┐рдд рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИред рд▓рдВрдмрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реБрд░реБрдЖрдд рдмрд┐рдВрджреБ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдм рддрдХ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИред
  • рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ F=G+Hред рдЬреА- рд╢реБрд░реВ рд╕реЗ рдмрд┐рдВрджреБ рддрдХ рдХреА рджреВрд░реА, рдЬ- рдмрд┐рдВрджреБ рд╕реЗ рд▓рдХреНрд╖реНрдп рддрдХ рдЕрдиреБрдорд╛рдирд┐рдд рджреВрд░реАред рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдЙрд╕ рдмрд┐рдВрджреБ рдХрд╛ рд▓рд┐рдВрдХ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рд╡рд╣ рдЖрдпрд╛ рдерд╛ред
  • рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ, рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ рдПрдлред рдЙрд╕реЗ рд░рд╣рдиреЗ рджреЛ Xред
  • рдЕрдЧрд░ X- рд▓рдХреНрд╖реНрдп, рдлрд┐рд░ рд╣рдореЗрдВ рдорд╛рд░реНрдЧ рдорд┐рд▓рд╛ред
  • рд╣рдо рдвреЛрддреЗ рд╣реИрдВ Xрд▓рдВрдмрд┐рдд рд╕реВрдЪреА рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╕реВрдЪреА рдореЗрдВред
  • рдкреНрд░рддреНрдпреЗрдХ рдЖрд╕рдиреНрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП X(рдЗрд╕ рдкрдбрд╝реЛрд╕реА рдмрд┐рдВрджреБ рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдВ рдп), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВ:
    • рдЕрдЧрд░ рдпрдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ - рдЗрд╕реЗ рдЫреЛрдбрд╝реЗрдВред
    • рдЕрдЧрд░ рдпрдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реВрдЪреА рдореЗрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИ - рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВ, рд▓рд┐рдВрдХ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ XрдФрд░ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ Y.G(рдпрд╣ рд╣реИ X.G+ рд╕реЗ рджреВрд░реА XрдХреЛ рдп) рдФрд░ Y.Hред
    • рдЕрдЧрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдореЗрдВ - рдпрджрд┐ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ X.G+ рд╕реЗ рджреВрд░реА XрдХреЛ рдп<Y.GрддреЛ рд╣рдо рдореБрджреНрджреЗ рдкрд░ рдЖрдП рдпрдХрдо рд░рд╛рд╕реНрддрд╛, рдЬрдЧрд╣ Y.Gрдкрд░ X.G+ рд╕реЗ рджреВрд░реА XрдХреЛ рдп, рдФрд░ рдЬрд┐рд╕ рдмрд┐рдВрджреБ рд╕реЗ рд╡реЗ рдЖрдП рдереЗ рдпрдкрд░ Xред
  • рдпрджрд┐ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдВрдХреЛрдВ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд▓рдХреНрд╖реНрдп рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ, рддреЛ рдорд╛рд░реНрдЧ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрджрдореЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛рд░реНрдп рдХреА рдмрд╛рдзрд╛ рдХреЗ рднреАрддрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЖрдкрдХрд╛ рд╣реЛрдорд╡рд░реНрдХ рд╣реЛрдЧрд╛ред


рдУрд▓рдВрдкрд┐рдпрд╛рдб рдХреЗ рдЕрдВрдд рддрдХ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж "RRLUUDL..." рдЖрджреЗрд╢реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ "RRLUUDL..."


рдФрд░ рдЗрди рд╕рднреА рдХреЗ рдмрд╛рдж рдорд╛рдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдХрд▓реНрдк рдЕрднреА рднреА рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрдВрджрд░ рдЪреАрдЬреЗрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ ред


рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдХрд▓рд╛рдХрд╛рд░ рдХреЛ рдПрдХ рдЦреБрд▓реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдкрд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдЕрдкрдиреЗ рд╢реБрд░реБрдЖрддреА рд╕реНрдерд╛рди рдХреЗ рдкрд╛рд╕ рд╕рдВрдХреЛрдЪ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рджреАрд╡рд╛рд░реЛрдВ рдХреА рд╢реБрд░реВрдЖрдд рдХреЗ рд╕рд╛рде, рдХреБрдЫ рджрд┐рд╢рд╛рдПрдВ рдлреАрдХреА рдкрдбрд╝рдиреЗ рд▓рдЧреЗрдВрдЧреА, рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреА рдбрд┐рдЧреНрд░реА рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреА, рдФрд░ рдПрдХ рд╣реА рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде, рдПрдЬреЗрдВрдЯ рдЕрдзрд┐рдХ рджреВрд░реА рддрдп рдХрд░реЗрдЧрд╛ред


рдпрд╣рд╛рдБ рдПрдХ рднреВрд▓рднреБрд▓реИрдпрд╛ рд╕реЗ рд░реЛрдмреЛрдЯ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдЯреАрдореЛрдВ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:


рдХреЛрдб
 M = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 1 0 1 1 1 0 0 1 0 0 1 9 1 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0] mutable struct Point # point x::Int64 # vertical y::Int64 # horisont Point(x, y) = new(x, y) end function isexit(str, c) try for s in str if s == 'R' c.y+=M[cx, c.y+1]; elseif s == 'L' cy-=M[cx, cy-1]; elseif s == 'U' c.x+=M[c.x+1, cy]; elseif s == 'D' cx-=M[cx-1, cy]; else println("Error! Use only R, L, U, D") end end catch return true end return false end function test(Str) k = 0 n, m = 10,10 for i in 2:m+1, j in 2:n+1 if M[i,j] == 1 c = Point(i, j) a = isexit(S,c) if a k +=1 #println(a) end end end println(k, " test completed from ", sum(M)-9) end 

рдЕрдм рдЬрдм рддрдХ рдХрд┐ рдЖрдк рд╕рднреА рдЖрд░рдВрднрд┐рдХ рдкрджреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рди рдХрд░ рд▓реЗрдВ, рддрдм рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓рд╛рдЗрдиреЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:


 using Random S = randstring("RLUD",200) "RDRRRDLRLUULURUDUUDLLLLLULLUDRRURDLDLULLRLUUUDURUUUULRUDUURUUDLRLLULRLUDRRLRRULLDULRRRRULRLLDULRLDRUDURDRUUDUUDDDDDLURRRRDRDURRRDDLLDUURRRLDRUDLRLLRDDRLRRRDDLLLRUURDRLURDLLUULLLLUURLLULUDULDDLDLLRLDUD" test(S) 41 test completed from 70 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдпрд╣ рдХрд╛рд░реНрдп рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛:


 for i in 1:20 S = randstring("RLUD",1000) test(S) end 70 test completed from 70 70 test completed from 70 70 test completed from 70 70 test completed from 70 55 test completed from 70# 65 test completed from 70# 70 test completed from 70 70 test completed from 70 38 test completed from 70# 70 test completed from 70 70 test completed from 70 56 test completed from 70# 70 test completed from 70 70 test completed from 70 70 test completed from 70 16 test completed from 70# 70 test completed from 70 24 test completed from 70# 70 test completed from 70 70 test completed from 70 

рдпрд╛рдиреА 70% рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде, рд▓рд╛рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░реЗрдЧреАред


рд╡рд╣ рд╕рдм рд╣реИред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдкрд╛рдардХ рдХреЛ рдПрдХ рд╕рдлрд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛, рдзреИрд░реНрдп рдФрд░ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред


рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХреЗ рд▓рд┐рдП - рд╡рд┐рд╖рдп рдХреЛ рдЧрд╣рд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ:


Source: https://habr.com/ru/post/hi451460/


All Articles