1
0
Fork 0
mirror of https://gitlab.rlp.net/mobitar/julia_course.git synced 2024-09-14 12:47:20 +00:00
Julia_Course/day-1/tasks.jl
2024-05-15 02:54:36 +02:00

562 lines
15 KiB
Julia

### A Pluto.jl notebook ###
# v0.19.42
using Markdown
using InteractiveUtils
# This Pluto notebook uses @bind for interactivity. When running this notebook outside of Pluto, the following 'mock version' of @bind gives bound variables a default value (instead of an error).
macro bind(def, element)
quote
local iv = try Base.loaded_modules[Base.PkgId(Base.UUID("6e696c72-6542-2067-7265-42206c756150"), "AbstractPlutoDingetjes")].Bonds.initial_value catch; b -> missing; end
local el = $(esc(element))
global $(esc(def)) = Core.applicable(Base.get, el) ? Base.get(el) : iv(el)
el
end
end
# ╔═╡ a9cadc7e-10ce-4242-82af-2849b5f258f8
# Oh, no, you found my secret! 😱
# Don't change this hidden cell!
begin
using PlutoUI
function check_reverse_string()
if !@isdefined reverse_string
return md"""
🔴 The function `reverse_string` is not implemented yet 🤨
"""
end
test_str = "BlablaHahaOKLOL"
try
if reverse_string(test_str) != reverse(test_str)
return md"""
🔴 Your function delivers wrong results 😢
"""
end
catch err
return md"""
🔴 Something is wrong with your function 😵
"""
end
return md"""
🟢 Nice, all is fine 👌
"""
end
function check_string_extraction()
if !@isdefined extracted
return md"""
🔴 The variable `extracted` is not defined yet 🤨
"""
end
test_str = "Hello World"
try
if lowercase(extracted) != lowercase(test_str)
return md"""
🔴 "Hello world" is not extracted well yet 😢
"""
end
catch err
return md"""
🔴 Something is wrong with your variable `extracted` 😵
"""
end
return md"""
🟢 Nice, all is fine 👌
"""
end
function check_squaring_difference()
if !@isdefined squaring_difference
return md"""
🔴 The function `squaring_difference` is not implemented yet 🤨
"""
end
random_numbers = (331, 236, 69, 738, 949, 631, 761, 119, 729, 280)
results_to_random_numbers = (3006919850, 777687850, 5720330, 74226126612, 202912760050, 39674819100, 83918590100, 50410780, 70671821220, 1540279020)
for i in 1:length(random_numbers)
try
if squaring_difference(random_numbers[i]) != results_to_random_numbers[i]
return md"""
🔴 Your function delivers wrong results 😢
"""
end
catch err
return md"""
🔴 Something is wrong with your function 😵
"""
end
end
return md"""
🟢 Nice, all is fine 👌
"""
end
md""
end
# ╔═╡ 094a714e-7a97-411b-8317-4d4acefaedbd
md"""
# BMI
The BMI is calculated with this formula:
$\text{BMI} = \frac{m}{l^2}$
with $m$ as the mass in kg and $l$ as the height in m.
Write code that shows "Underweight" for $\text{BMI} < 18.5$, "Normal weight" for $18.5 \le \text{BMI} < 25$ and "Overweight" for $25.0 \le \text{BMI}$.
Test your code with the two sliders below.
The variables `m` and `l` are already defined and their values are updated with the sliders.
"""
# ╔═╡ 1a43924b-da29-4154-bee4-c1fa65df6e40
@bind m Slider(2:200)
# ╔═╡ c22161f9-4def-4170-974f-86f2748037dc
md"""
`m` = $m (kg)
"""
# ╔═╡ f9e3b4af-bf21-4207-9061-3a91ae40c374
@bind l Slider(0.30:0.01:2.50)
# ╔═╡ 5781fdc3-54ed-4499-bf3d-c3438c85d1ef
md"""
`l` = $l (m)
"""
# ╔═╡ d286051e-c17e-41df-b8e3-e186b36d60cf
# Your code starts here
# ╔═╡ 9d69637b-2733-46f8-8423-41331aa45c28
md"""
# Number of grains
You know for sure about the story with grains for every chess square.
A chess board has 64 squares. For the first square, there is only one grain. For the second one, there are two grains. The number of grains doubles for every square.
Calculate the number of grains for every square and their sum.
"""
# ╔═╡ 33ed17ca-2971-4de1-8bf7-03aa380fea57
# Your code starts here
# ╔═╡ f71b0085-8185-4d3f-b29e-90af6ac8957a
md"""
# Reverse string
Write a function named `reverse_string` that takes an argument as a string and returns the reversed string.
No cheating by using builtin reversing functions!
Example: "string" would get "gnirts".
"""
# ╔═╡ 2de65e70-661c-40c1-8fdb-03fd5b25b7e2
# Write your function here
# ╔═╡ d5bff992-e8b2-4f72-8943-db8ac4a671eb
check_reverse_string()
# ╔═╡ be7120b3-3dbe-4af7-b7b9-a4ede45f6cf3
md"""
# String extraction
Extract the string "Hello world" out of the string variable `mess` defined below.
The space between the two words must be included!
The extracted string should be contained in a variable named `extracted`.
Hint: Remember that strings are a chain of characters. So you can use a lot of what you have learned about vectors on strings.
"""
# ╔═╡ c5c5ac69-6167-4078-8b8c-ac46a6d0be58
# 12345678901234567890123456789
mess = "OHLENLNLMUIOQ WNHSIDWNOURLDSD"
# ╔═╡ 9f4d8332-5814-4625-9f5c-1056ee095428
# Your code starts here
# ╔═╡ 35bcd481-acec-4c29-bfe6-732d3c4d09b0
check_string_extraction()
# ╔═╡ be22832f-2004-49ec-911c-96e7e790ba5a
md"""
# Squaring difference
Write a function named `squaring_difference` that takes one argument `N` as a natural number and returns the following:
$\left(\sum_{i=1}^N i\right)^2 - \sum_{i=1}^N i^2$
"""
# ╔═╡ 53b585dd-aa13-44c1-a3de-988e027ab0c4
# Write your function here
# ╔═╡ b08055c9-b6de-4495-9788-ff79928a85ef
check_squaring_difference()
# ╔═╡ b6fe803e-1300-4d00-97fa-de6646743f94
md"""
# Tick-tack-toe
**Only for those who have time left and want to try a hard task!**
Now that you know about matrices in Julia, use a matrix to present a Tick-tack-toe board.
To place `X` or `O`, take the user input for the row and column using the the form below. The input is stored in the variables `input_row` and `input_column`. Click on "Submit Query" to submit the input.
Make sure you update the board after the user input.
You want more?
- Implement player names.
- Implement a check if a user did win.
- Check your code for possible performance issues. Try to minimize allocations.
- Implement a playing AI. No, kidding! Just tell me to give you more tasks if get here 😂
*BTW: You can use Julia for AI, so the programming language is not the limitation here* 😅
"""
# ╔═╡ f112da8a-5157-4748-aeee-63b688a6c79f
@bind input_values confirm(
PlutoUI.combine() do Child
md"""
Row: $(Child(TextField(; default="1")))
Column: $(Child(TextField(; default="1")))
"""
end
)
# ╔═╡ cff6a5a8-10b7-4082-a39f-608cb330d408
input_row = parse(Int64, input_values[1])
# ╔═╡ 8279b799-e426-4032-9460-af803e4aa091
input_column = parse(Int64, input_values[2])
# ╔═╡ 901205ab-7d76-4abb-8665-dfa86b0f6458
# Your code starts here
# ╔═╡ 00000000-0000-0000-0000-000000000001
PLUTO_PROJECT_TOML_CONTENTS = """
[deps]
PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
[compat]
PlutoUI = "~0.7.59"
"""
# ╔═╡ 00000000-0000-0000-0000-000000000002
PLUTO_MANIFEST_TOML_CONTENTS = """
# This file is machine-generated - editing it directly is not advised
julia_version = "1.10.3"
manifest_format = "2.0"
project_hash = "6e7bcec4be6e95d1f85627422d78f10c0391f199"
[[deps.AbstractPlutoDingetjes]]
deps = ["Pkg"]
git-tree-sha1 = "6e1d2a35f2f90a4bc7c2ed98079b2ba09c35b83a"
uuid = "6e696c72-6542-2067-7265-42206c756150"
version = "1.3.2"
[[deps.ArgTools]]
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
version = "1.1.1"
[[deps.Artifacts]]
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
[[deps.Base64]]
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
[[deps.ColorTypes]]
deps = ["FixedPointNumbers", "Random"]
git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d"
uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
version = "0.11.5"
[[deps.CompilerSupportLibraries_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
version = "1.1.1+0"
[[deps.Dates]]
deps = ["Printf"]
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
[[deps.Downloads]]
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
version = "1.6.0"
[[deps.FileWatching]]
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
[[deps.FixedPointNumbers]]
deps = ["Statistics"]
git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172"
uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
version = "0.8.5"
[[deps.Hyperscript]]
deps = ["Test"]
git-tree-sha1 = "179267cfa5e712760cd43dcae385d7ea90cc25a4"
uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91"
version = "0.0.5"
[[deps.HypertextLiteral]]
deps = ["Tricks"]
git-tree-sha1 = "7134810b1afce04bbc1045ca1985fbe81ce17653"
uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2"
version = "0.9.5"
[[deps.IOCapture]]
deps = ["Logging", "Random"]
git-tree-sha1 = "8b72179abc660bfab5e28472e019392b97d0985c"
uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
version = "0.2.4"
[[deps.InteractiveUtils]]
deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
[[deps.JSON]]
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a"
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
version = "0.21.4"
[[deps.LibCURL]]
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
version = "0.6.4"
[[deps.LibCURL_jll]]
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
version = "8.4.0+0"
[[deps.LibGit2]]
deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"]
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
[[deps.LibGit2_jll]]
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"]
uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5"
version = "1.6.4+0"
[[deps.LibSSH2_jll]]
deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
version = "1.11.0+1"
[[deps.Libdl]]
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
[[deps.LinearAlgebra]]
deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
[[deps.Logging]]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
[[deps.MIMEs]]
git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb"
uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65"
version = "0.1.4"
[[deps.Markdown]]
deps = ["Base64"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
[[deps.MbedTLS_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
version = "2.28.2+1"
[[deps.Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
[[deps.MozillaCACerts_jll]]
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
version = "2023.1.10"
[[deps.NetworkOptions]]
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
version = "1.2.0"
[[deps.OpenBLAS_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
version = "0.3.23+4"
[[deps.Parsers]]
deps = ["Dates", "PrecompileTools", "UUIDs"]
git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "2.8.1"
[[deps.Pkg]]
deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
version = "1.10.0"
[[deps.PlutoUI]]
deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "FixedPointNumbers", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "MIMEs", "Markdown", "Random", "Reexport", "URIs", "UUIDs"]
git-tree-sha1 = "ab55ee1510ad2af0ff674dbcced5e94921f867a9"
uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
version = "0.7.59"
[[deps.PrecompileTools]]
deps = ["Preferences"]
git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f"
uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
version = "1.2.1"
[[deps.Preferences]]
deps = ["TOML"]
git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6"
uuid = "21216c6a-2e73-6563-6e65-726566657250"
version = "1.4.3"
[[deps.Printf]]
deps = ["Unicode"]
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
[[deps.REPL]]
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
[[deps.Random]]
deps = ["SHA"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
[[deps.Reexport]]
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
version = "1.2.2"
[[deps.SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
version = "0.7.0"
[[deps.Serialization]]
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
[[deps.Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
[[deps.SparseArrays]]
deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
version = "1.10.0"
[[deps.Statistics]]
deps = ["LinearAlgebra", "SparseArrays"]
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
version = "1.10.0"
[[deps.SuiteSparse_jll]]
deps = ["Artifacts", "Libdl", "libblastrampoline_jll"]
uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
version = "7.2.1+1"
[[deps.TOML]]
deps = ["Dates"]
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
version = "1.0.3"
[[deps.Tar]]
deps = ["ArgTools", "SHA"]
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
version = "1.10.0"
[[deps.Test]]
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
[[deps.Tricks]]
git-tree-sha1 = "eae1bb484cd63b36999ee58be2de6c178105112f"
uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775"
version = "0.1.8"
[[deps.URIs]]
git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b"
uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
version = "1.5.1"
[[deps.UUIDs]]
deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
[[deps.Unicode]]
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
[[deps.Zlib_jll]]
deps = ["Libdl"]
uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
version = "1.2.13+1"
[[deps.libblastrampoline_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
version = "5.8.0+1"
[[deps.nghttp2_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
version = "1.52.0+1"
[[deps.p7zip_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
version = "17.4.0+2"
"""
# ╔═╡ Cell order:
# ╟─094a714e-7a97-411b-8317-4d4acefaedbd
# ╟─1a43924b-da29-4154-bee4-c1fa65df6e40
# ╟─c22161f9-4def-4170-974f-86f2748037dc
# ╟─f9e3b4af-bf21-4207-9061-3a91ae40c374
# ╟─5781fdc3-54ed-4499-bf3d-c3438c85d1ef
# ╠═d286051e-c17e-41df-b8e3-e186b36d60cf
# ╟─9d69637b-2733-46f8-8423-41331aa45c28
# ╠═33ed17ca-2971-4de1-8bf7-03aa380fea57
# ╟─f71b0085-8185-4d3f-b29e-90af6ac8957a
# ╠═2de65e70-661c-40c1-8fdb-03fd5b25b7e2
# ╟─d5bff992-e8b2-4f72-8943-db8ac4a671eb
# ╟─be7120b3-3dbe-4af7-b7b9-a4ede45f6cf3
# ╠═c5c5ac69-6167-4078-8b8c-ac46a6d0be58
# ╠═9f4d8332-5814-4625-9f5c-1056ee095428
# ╟─35bcd481-acec-4c29-bfe6-732d3c4d09b0
# ╟─be22832f-2004-49ec-911c-96e7e790ba5a
# ╠═53b585dd-aa13-44c1-a3de-988e027ab0c4
# ╟─b08055c9-b6de-4495-9788-ff79928a85ef
# ╟─b6fe803e-1300-4d00-97fa-de6646743f94
# ╟─f112da8a-5157-4748-aeee-63b688a6c79f
# ╠═cff6a5a8-10b7-4082-a39f-608cb330d408
# ╠═8279b799-e426-4032-9460-af803e4aa091
# ╠═901205ab-7d76-4abb-8665-dfa86b0f6458
# ╟─a9cadc7e-10ce-4242-82af-2849b5f258f8
# ╟─00000000-0000-0000-0000-000000000001
# ╟─00000000-0000-0000-0000-000000000002