true
Part 1: autograding
Step 1: Select submission files
You need to write some code that returns the absolute paths to the students' homework submissions. The following code works for me, but probably not for you.
IOError: readdir("/home/fons/disorganised-mess/autograding/submissions/"): no such file or directory (ENOENT)
Here is what happened, the most recent locations are first:
- uv_errorfrom libuv.jl:97
- readdir
(dir::String; join::Bool, sort::Bool) from file.jl:851 - from This cell: line 2
submission_files = let
all = readdir("/home/fons/disorganised-mess/autograding/submissions/"; join=true)
filter(f -> endswith(f, ".jl"), all)
It should return an arrays of strings, something like:
"/home/fonsi/hw1/submissions/hw1 - fonsi.jl"
"/home/fonsi/hw1/submissions/hw1 - template.jl"
Another cell defining submission_files contains errors.
Step 2: autograde actions
I have already written these, you can ignore this.
"name"
:(student.name)
"kerberos_id"
:(student.kerberos_id)
"1.1 - random vector"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:111 =# length(random_vect) == 10 && length(Set(random_vect)) == 10 end
"1.1 - mean"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:115 =# mean([-1, -1, 2]) ≈ 0 end
"1.1 - mean of random vec"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:119 =# m == mean(random_vect) end
"1.1 - demean function"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:123 =# demean([1, 2, 3, 4, 5]) ≈ [-2, -1, 0, 1, 2] end
"1.2 - create bar - 20"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:128 =# create_bar() ≈ let #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:129 =# x = zeros(100) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:130 =# x[40:59] .= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:131 =# x end end
"1.2 - create bar - 20 or 21"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:136 =# create_bar() ≈ let #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:137 =# x = zeros(100) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:138 =# x[40:59] .= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:139 =# x end || create_bar() ≈ let #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:142 =# x = zeros(100) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:143 =# x[40:60] .= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:144 =# x end end
"1.3 - vecvec_to_matrix"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:150 =# vecvec_to_matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == hcat([1, 2, 3], [4, 5, 6], [7, 8, 9]) || vecvec_to_matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == (hcat([1, 2, 3], [4, 5, 6], [7, 8, 9]))' end
"1.3 - matrix_to_vecvec"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:155 =# let #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:156 =# A = [1 2; 4 5; 7 8] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:157 =# matrix_to_vecvec(A) == collect(eachcol(A)) || matrix_to_vecvec(A) == collect(eachrow(A)) end end
"2.1 - mean colors"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:164 =# begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# function solution_extend(v, i) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =# v[1] elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =# v[end] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =# v[i] end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# function solution_blur_1D(v, l) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =# mean([extend(v, i + j) for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# function solution_convolve_vector(v, k) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =# l = (length(k) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =# sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# function solution_pascal(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =# if n <= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =# [1.0] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =# prev = pascal(n - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =# 0.5 * ([prev..., 0] .+ [0, prev...]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# function solution_gaussian_kernel(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =# solution_pascal(2n + 1) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# function solution_extend_mat(M::AbstractMatrix, i, j) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =# solution_extend_mat(M, 1, j) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =# solution_extend_mat(M, size(M, 1), j) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =# if j < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =# solution_extend_mat(M, i, 1) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =# solution_extend_mat(M, i, size(M, 2)) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =# M[i, j] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =# extend_mat(M, (i - offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =# extend_mat(M, (i + offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# function solution_with_gaussian_blur(image; sigma = 3, l = 5) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# gauss(x, y; sigma = 3) = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =# K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =# convolve_image(image, K_gauss ./ sum(K_gauss)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# function solution_sobel_edge_detect(image) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =# K_sobol = [1 0 -1; 2 0 -2; 1 0 -1] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =# x = solution_convolve_image(image, K_sobol) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =# y = solution_convolve_image(image, K_sobol') #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =# return x .* x .+ y .* y end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# testimg() = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# rand(RGB, (10, 20)) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:165 =# t = testimg() #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:166 =# mean_colors(t) == ((mean(t)).r, (mean(t)).g, (mean(t)).b) || mean_colors(t) == RGB((mean(t)).r, (mean(t)).g, (mean(t)).b) end
"2.2 - quantize::Number"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:172 =# quantize(3) ≈ floor(30) / 10 end
"2.3 - quantize::Color"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:177 =# c = rand(RGB) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:178 =# quantize(c) == RGB(quantize(c.r), quantize(c.g), quantize(c.b)) end
"2.4 - quantize::AbstractMatrix"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:183 =# begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# function solution_extend(v, i) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =# v[1] elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =# v[end] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =# v[i] end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# function solution_blur_1D(v, l) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =# mean([extend(v, i + j) for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# function solution_convolve_vector(v, k) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =# l = (length(k) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =# sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# function solution_pascal(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =# if n <= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =# [1.0] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =# prev = pascal(n - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =# 0.5 * ([prev..., 0] .+ [0, prev...]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# function solution_gaussian_kernel(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =# solution_pascal(2n + 1) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# function solution_extend_mat(M::AbstractMatrix, i, j) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =# solution_extend_mat(M, 1, j) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =# solution_extend_mat(M, size(M, 1), j) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =# if j < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =# solution_extend_mat(M, i, 1) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =# solution_extend_mat(M, i, size(M, 2)) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =# M[i, j] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =# extend_mat(M, (i - offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =# extend_mat(M, (i + offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# function solution_with_gaussian_blur(image; sigma = 3, l = 5) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# gauss(x, y; sigma = 3) = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =# K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =# convolve_image(image, K_gauss ./ sum(K_gauss)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# function solution_sobel_edge_detect(image) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =# K_sobol = [1 0 -1; 2 0 -2; 1 0 -1] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =# x = solution_convolve_image(image, K_sobol) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =# y = solution_convolve_image(image, K_sobol') #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =# return x .* x .+ y .* y end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# testimg() = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# rand(RGB, (10, 20)) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:184 =# t = testimg() #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:185 =# quantize(t) == quantize.(t) end
"2.5 - invert"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:190 =# c = rand(RGB) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:191 =# invert(c) == RGB(1 - c.r, 1 - c.g, 1 - c.b) end
"2.6 - noisify::Number - noise"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:198 =# let #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:199 =# N = 10000 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:202 =# x = [noisify(0.5, 0.25) for _ = 1:N] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:203 =# sample_mean = sum(x) / N #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:205 =# sample_var = sum((x .- sample_mean) .^ 2) / N #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:207 =# abs(sample_mean - 0.5) < 0.01 && abs(sample_var - 1 / 48) < 0.01 end end
"2.6 - noisify::Number - clamp"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:214 =# let #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:215 =# N = 10000 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:218 =# x = [noisify(0.5, 10) for _ = 1:N] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:220 =# 0.0 <= minimum(x) < maximum(x) <= 1.0 end end
"2.6 - noisify::Color"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:226 =# c = rand(RGB) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:227 =# noisify(c, 0.1) != c end
"2.6 - noisify::Image"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:231 =# begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# function solution_extend(v, i) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =# v[1] elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =# v[end] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =# v[i] end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# function solution_blur_1D(v, l) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =# mean([extend(v, i + j) for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# function solution_convolve_vector(v, k) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =# l = (length(k) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =# sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# function solution_pascal(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =# if n <= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =# [1.0] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =# prev = pascal(n - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =# 0.5 * ([prev..., 0] .+ [0, prev...]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# function solution_gaussian_kernel(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =# solution_pascal(2n + 1) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# function solution_extend_mat(M::AbstractMatrix, i, j) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =# solution_extend_mat(M, 1, j) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =# solution_extend_mat(M, size(M, 1), j) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =# if j < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =# solution_extend_mat(M, i, 1) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =# solution_extend_mat(M, i, size(M, 2)) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =# M[i, j] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =# extend_mat(M, (i - offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =# extend_mat(M, (i + offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# function solution_with_gaussian_blur(image; sigma = 3, l = 5) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# gauss(x, y; sigma = 3) = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =# K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =# convolve_image(image, K_gauss ./ sum(K_gauss)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# function solution_sobel_edge_detect(image) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =# K_sobol = [1 0 -1; 2 0 -2; 1 0 -1] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =# x = solution_convolve_image(image, K_sobol) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =# y = solution_convolve_image(image, K_sobol') #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =# return x .* x .+ y .* y end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# testimg() = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# rand(RGB, (10, 20)) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:232 =# t = testimg() #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:233 =# noisify(t, 0.1) != t end
"3.2 - extend"
10
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:241 =# begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# function solution_extend(v, i) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =# v[1] elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =# v[end] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =# v[i] end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# function solution_blur_1D(v, l) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =# mean([extend(v, i + j) for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# function solution_convolve_vector(v, k) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =# l = (length(k) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =# sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# function solution_pascal(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =# if n <= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =# [1.0] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =# prev = pascal(n - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =# 0.5 * ([prev..., 0] .+ [0, prev...]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# function solution_gaussian_kernel(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =# solution_pascal(2n + 1) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# function solution_extend_mat(M::AbstractMatrix, i, j) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =# solution_extend_mat(M, 1, j) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =# solution_extend_mat(M, size(M, 1), j) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =# if j < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =# solution_extend_mat(M, i, 1) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =# solution_extend_mat(M, i, size(M, 2)) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =# M[i, j] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =# extend_mat(M, (i - offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =# extend_mat(M, (i + offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# function solution_with_gaussian_blur(image; sigma = 3, l = 5) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# gauss(x, y; sigma = 3) = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =# K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =# convolve_image(image, K_gauss ./ sum(K_gauss)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# function solution_sobel_edge_detect(image) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =# K_sobol = [1 0 -1; 2 0 -2; 1 0 -1] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =# x = solution_convolve_image(image, K_sobol) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =# y = solution_convolve_image(image, K_sobol') #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =# return x .* x .+ y .* y end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# testimg() = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# rand(RGB, (10, 20)) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:242 =# extend(v, -5) == solution_extend(v, -5) end
"3.3 - blur_1D"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:247 =# begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# function solution_extend(v, i) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =# v[1] elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =# v[end] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =# v[i] end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# function solution_blur_1D(v, l) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =# mean([extend(v, i + j) for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# function solution_convolve_vector(v, k) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =# l = (length(k) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =# sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# function solution_pascal(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =# if n <= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =# [1.0] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =# prev = pascal(n - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =# 0.5 * ([prev..., 0] .+ [0, prev...]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# function solution_gaussian_kernel(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =# solution_pascal(2n + 1) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# function solution_extend_mat(M::AbstractMatrix, i, j) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =# solution_extend_mat(M, 1, j) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =# solution_extend_mat(M, size(M, 1), j) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =# if j < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =# solution_extend_mat(M, i, 1) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =# solution_extend_mat(M, i, size(M, 2)) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =# M[i, j] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =# extend_mat(M, (i - offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =# extend_mat(M, (i + offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# function solution_with_gaussian_blur(image; sigma = 3, l = 5) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# gauss(x, y; sigma = 3) = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =# K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =# convolve_image(image, K_gauss ./ sum(K_gauss)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# function solution_sobel_edge_detect(image) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =# K_sobol = [1 0 -1; 2 0 -2; 1 0 -1] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =# x = solution_convolve_image(image, K_sobol) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =# y = solution_convolve_image(image, K_sobol') #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =# return x .* x .+ y .* y end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# testimg() = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# rand(RGB, (10, 20)) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:248 =# blur_1D(v, 2) == solution_blur_1D(v, 2) end
"3.5 - convolution"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:256 =# begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# function solution_extend(v, i) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =# v[1] elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =# v[end] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =# v[i] end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# function solution_blur_1D(v, l) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =# mean([extend(v, i + j) for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# function solution_convolve_vector(v, k) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =# l = (length(k) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =# sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# function solution_pascal(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =# if n <= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =# [1.0] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =# prev = pascal(n - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =# 0.5 * ([prev..., 0] .+ [0, prev...]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# function solution_gaussian_kernel(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =# solution_pascal(2n + 1) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# function solution_extend_mat(M::AbstractMatrix, i, j) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =# solution_extend_mat(M, 1, j) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =# solution_extend_mat(M, size(M, 1), j) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =# if j < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =# solution_extend_mat(M, i, 1) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =# solution_extend_mat(M, i, size(M, 2)) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =# M[i, j] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =# extend_mat(M, (i - offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =# extend_mat(M, (i + offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# function solution_with_gaussian_blur(image; sigma = 3, l = 5) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# gauss(x, y; sigma = 3) = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =# K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =# convolve_image(image, K_gauss ./ sum(K_gauss)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# function solution_sobel_edge_detect(image) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =# K_sobol = [1 0 -1; 2 0 -2; 1 0 -1] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =# x = solution_convolve_image(image, K_sobol) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =# y = solution_convolve_image(image, K_sobol') #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =# return x .* x .+ y .* y end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# testimg() = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# rand(RGB, (10, 20)) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:257 =# convolve_vector([1, 10, 100, 1000, 10000], [0, 1, 0]) == solution_convolve_vector([1, 10, 100, 1000, 10000], [0, 1, 0]) end
"3.6 - gaussian_kernel - centered"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:262 =# K = gaussian_kernel(9) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:264 =# center = length(K) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:266 =# K[1] < K[center] > K[end] end
"3.6 - gaussian_kernel - normalized"
2.5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:271 =# K = gaussian_kernel(9) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:272 =# 0.9 < sum(K) < 1.1 end
"4.1 - extend mat"
10
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:277 =# begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# function solution_extend(v, i) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =# v[1] elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =# v[end] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =# v[i] end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# function solution_blur_1D(v, l) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =# mean([extend(v, i + j) for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# function solution_convolve_vector(v, k) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =# l = (length(k) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =# sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# function solution_pascal(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =# if n <= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =# [1.0] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =# prev = pascal(n - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =# 0.5 * ([prev..., 0] .+ [0, prev...]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# function solution_gaussian_kernel(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =# solution_pascal(2n + 1) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# function solution_extend_mat(M::AbstractMatrix, i, j) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =# solution_extend_mat(M, 1, j) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =# solution_extend_mat(M, size(M, 1), j) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =# if j < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =# solution_extend_mat(M, i, 1) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =# solution_extend_mat(M, i, size(M, 2)) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =# M[i, j] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =# extend_mat(M, (i - offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =# extend_mat(M, (i + offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# function solution_with_gaussian_blur(image; sigma = 3, l = 5) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# gauss(x, y; sigma = 3) = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =# K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =# convolve_image(image, K_gauss ./ sum(K_gauss)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# function solution_sobel_edge_detect(image) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =# K_sobol = [1 0 -1; 2 0 -2; 1 0 -1] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =# x = solution_convolve_image(image, K_sobol) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =# y = solution_convolve_image(image, K_sobol') #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =# return x .* x .+ y .* y end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# testimg() = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# rand(RGB, (10, 20)) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:278 =# M = rand(Float64, (3, 3)) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:279 =# all([extend_mat(M, i, j) ≈ solution_extend_mat(M, i, j) for i = [-5, 4, 2], j = [-1, 1, 0, 10]]) end
"4.3 - with_gaussian_blur - no error"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:304 =# begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# function solution_extend(v, i) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =# v[1] elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =# v[end] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =# v[i] end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# function solution_blur_1D(v, l) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =# mean([extend(v, i + j) for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# function solution_convolve_vector(v, k) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =# l = (length(k) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =# sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# function solution_pascal(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =# if n <= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =# [1.0] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =# prev = pascal(n - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =# 0.5 * ([prev..., 0] .+ [0, prev...]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# function solution_gaussian_kernel(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =# solution_pascal(2n + 1) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# function solution_extend_mat(M::AbstractMatrix, i, j) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =# solution_extend_mat(M, 1, j) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =# solution_extend_mat(M, size(M, 1), j) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =# if j < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =# solution_extend_mat(M, i, 1) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =# solution_extend_mat(M, i, size(M, 2)) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =# M[i, j] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =# extend_mat(M, (i - offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =# extend_mat(M, (i + offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# function solution_with_gaussian_blur(image; sigma = 3, l = 5) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# gauss(x, y; sigma = 3) = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =# K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =# convolve_image(image, K_gauss ./ sum(K_gauss)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# function solution_sobel_edge_detect(image) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =# K_sobol = [1 0 -1; 2 0 -2; 1 0 -1] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =# x = solution_convolve_image(image, K_sobol) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =# y = solution_convolve_image(image, K_sobol') #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =# return x .* x .+ y .* y end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# testimg() = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# rand(RGB, (10, 20)) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:305 =# try #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:306 =# with_gaussian_blur(rand(Gray, (20, 10))) isa Array catch #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:308 =# false end || (try #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:310 =# with_gaussian_blur(rand(Float64, (20, 10))) isa Array catch #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:312 =# false end || try #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:314 =# with_gaussian_blur(rand(RGB, (20, 10))) isa Array catch #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:316 =# false end) end
"4.4 - sobel_edge_detect - no error"
5
quote #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:322 =# begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# function solution_extend(v, i) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =# v[1] elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =# v[end] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =# v[i] end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# function solution_blur_1D(v, l) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =# mean([extend(v, i + j) for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# function solution_convolve_vector(v, k) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =# l = (length(k) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =# return map(eachindex(v)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =# sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# function solution_pascal(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =# if n <= 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =# [1.0] else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =# prev = pascal(n - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =# 0.5 * ([prev..., 0] .+ [0, prev...]) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# function solution_gaussian_kernel(n) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =# solution_pascal(2n + 1) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# function solution_extend_mat(M::AbstractMatrix, i, j) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =# if i < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =# solution_extend_mat(M, 1, j) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =# solution_extend_mat(M, size(M, 1), j) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =# if j < 1 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =# solution_extend_mat(M, i, 1) elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =# solution_extend_mat(M, i, size(M, 2)) else #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =# M[i, j] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =# extend_mat(M, (i - offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =# l = (size(K, 1) - 1) ÷ 2 #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =# map(CartesianIndices(M)) do i #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =# sum(CartesianIndices(K)) do a #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =# offset = a - CartesianIndex(-l - 1, -l - 1) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =# extend_mat(M, (i + offset).I...) * K[a] end end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# function solution_with_gaussian_blur(image; sigma = 3, l = 5) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# gauss(x, y; sigma = 3) = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =# (1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =# K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =# convolve_image(image, K_gauss ./ sum(K_gauss)) end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# function solution_sobel_edge_detect(image) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =# #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =# K_sobol = [1 0 -1; 2 0 -2; 1 0 -1] #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =# x = solution_convolve_image(image, K_sobol) #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =# y = solution_convolve_image(image, K_sobol') #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =# return x .* x .+ y .* y end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# testimg() = begin #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =# rand(RGB, (10, 20)) end end #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:323 =# try #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:324 =# with_sobel_edge_detect(rand(Gray, (20, 10))) isa Array catch #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:326 =# false end || (try #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:328 =# with_sobel_edge_detect(rand(Float64, (20, 10))) isa Array catch #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:330 =# false end || try #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:332 =# with_sobel_edge_detect(rand(RGB, (20, 10))) isa Array catch #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:334 =# false end) end
all (generic function with 11 methods)
107.5
UndefVarError: HTMLTable not defined
Here is what happened, the most recent locations are first:
Step 3: autograde all notebooks
Another cell defining submission_files contains errors.
"j57Bno0D"
nothing
nothing
"/"
"127.0.0.1"
2468
1234
false
false
true
"/home/runner/work/disorganised-mess/disorganised-mess/autograding/"
false
false
0.4
false
nothing
false
0.0
0.0
"data:text/javascript;base64,"
#1 (generic function with 1 method)
false
false
true
true
false
nothing
false
true
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
"no"
"no"
2
Pluto
⌀ (This table has no columns) | ||
⌀ (This table has no rows) |
Part 2: manual review
Step 1: start notebook server
Click to start notebook server:
Step 2: manual grade actions
"3.1 - colored line"
5
Did they write colored_line(v)
?
"3.4 - make it interactive"
8
Did they create a slider? Does the slider control the amount of blur?
"4.2 - convolve_image"
20
Is convole_image correct?
"4.3 - Gaussian blur"
10
Does the Gaussian blur look okay?
"4.4 - Sobel filter"
10
Does the Sobel filter look okay?
53
Step 3: select notebook
BoundsError: attempt to access 0-element Vector{Pair} at index [1]
Here is what happened, the most recent locations are first:
- getindexfrom array.jl:861
- first
(a::Vector{Pair}) from abstractarray.jl:398 - get
(select::PlutoUI.BuiltinsNotebook.Select) from Builtins.jl:667 - macro expansionfrom This cell: line 126
- Show more...
Autograde results for selected homework
Another cell defining inspected_notebook_index_str contains errors.
Editable view of selected homework
Manual grading
Currently stored grades for this notebook:
Another cell defining inspected_notebook_index_str and inspected_manual_results contains errors.
Another cell defining inspected_notebook_index_str contains errors.
Another cell defining inspected_notebook_index_str and inspected_notebook contains errors.
Another cell defining inspected_notebook_index_str and inspected_notebook contains errors.
Another cell defining inspected_notebook_index_str and inspected_notebook contains errors.
Another cell defining inspected_notebook_index_str contains errors.
Another cell defining inspected_notebook_index_str contains errors.
Appendix
Grading actions
ManualScoreAction
ManualCheckAction
do_action (generic function with 2 methods)
displayname (generic function with 1 method)
Misc
eval_in_notebook (generic function with 1 method)
Not used
""
MethodError: no method matching Main.workspace#3.GradedStudent(::SubString{String})
Closest candidates are:
Main.workspace#3.GradedStudent(::Any, ::Any, ::Any) at ~/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#0796b462-f85c-11ea-1bf2-53ad24ec447c:2
Here is what happened, the most recent locations are first: