From 6deda94630f2570e2ba71eb3f453400955a2c3b3 Mon Sep 17 00:00:00 2001 From: Defelo Date: Tue, 17 Dec 2024 18:58:35 +0100 Subject: [PATCH] Uiua/2015/04: add solution --- README.md | 4 +-- Uiua/2015/04.ua | 12 +++++++ Uiua/utils/.gitignore | 1 + Uiua/utils/Cargo.lock | 77 +++++++++++++++++++++++++++++++++++++++++++ Uiua/utils/Cargo.toml | 10 ++++++ Uiua/utils/build.sh | 7 ++++ Uiua/utils/lib.ua | 5 +++ Uiua/utils/src/lib.rs | 12 +++++++ 8 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 Uiua/2015/04.ua create mode 100644 Uiua/utils/.gitignore create mode 100644 Uiua/utils/Cargo.lock create mode 100644 Uiua/utils/Cargo.toml create mode 100755 Uiua/utils/build.sh create mode 100644 Uiua/utils/lib.ua create mode 100644 Uiua/utils/src/lib.rs diff --git a/README.md b/README.md index 430b0c6..ae3556f 100644 --- a/README.md +++ b/README.md @@ -93,10 +93,10 @@ |[**19**](https://adventofcode.com/2016/day/19) [](Python/2016/19.py "Python solution for 2016/19")|[**20**](https://adventofcode.com/2016/day/20) [](Python/2016/20.py "Python solution for 2016/20")|[**21**](https://adventofcode.com/2016/day/21) [](Python/2016/21.py "Python solution for 2016/21")|[**22**](https://adventofcode.com/2016/day/22) [](Python/2016/22.py "Python solution for 2016/22")|[**23**](https://adventofcode.com/2016/day/23) [](Python/2016/23.py "Python solution for 2016/23")|[**24**](https://adventofcode.com/2016/day/24) [](Python/2016/24.py "Python solution for 2016/24")|[**25**](https://adventofcode.com/2016/day/25) [](Python/2016/25.py "Python solution for 2016/25")| |26|27|28|29|30|31|| -## [2015](https://adventofcode.com/2015) ([ Python](Python/2015): 25/25 | [ Rust](Rust/2015): 7/25 | [ Uiua](Uiua/2015): 5/25 | [ Nix](Nix/2015): 1/25 | [ Nu](Nu/2015): 1/25) +## [2015](https://adventofcode.com/2015) ([ Python](Python/2015): 25/25 | [ Rust](Rust/2015): 7/25 | [ Uiua](Uiua/2015): 6/25 | [ Nix](Nix/2015): 1/25 | [ Nu](Nu/2015): 1/25) |Mo|Tu|We|Th|Fr|Sa|Su| |-|-|-|-|-|-|-| -||[**1**](https://adventofcode.com/2015/day/1) [](Rust/2015/01.rs "Rust solution for 2015/01") [](Python/2015/01.py "Python solution for 2015/01") [](https://uiua.org/pad?src=JnNjCgotwqwuPUAoCuKKgygrMeKKl8KvMVwrKS8rCg== "Uiua solution for 2015/01") [](Nix/2015/01.nix "Nix solution for 2015/01") [](Nu/2015/01.nu "Nu solution for 2015/01")|[**2**](https://adventofcode.com/2015/day/2) [](Rust/2015/02.rs "Rust solution for 2015/02") [](Python/2015/02.py "Python solution for 2015/02") [](https://uiua.org/pad?src=JnNjCgriipwo4oqc4ouV4omgQHguKeKJoEBcbi4KCuKIqSgvKyspIOKJoeKKgygvw5d8w5cyLeKKgy_ihqUvK3zDt-KKgy_ihqUvw5d8w5cyLyvip4jDl-KGr1s0XSkK "Uiua solution for 2015/02")|[**3**](https://adventofcode.com/2015/day/3) [](Rust/2015/03.rs "Rust solution for 2015/03") [](Python/2015/03.py "Python solution for 2015/03") [](https://uiua.org/pad?src=JnNjCgriipc64oqZ4pa9OuKXoeKIiiI8Xj52Igriio_iiplb4peh4oipwq_iirjih4zih6EyXQoK4oqDKOKkuDHihq_iiJ5fMl8yfMKkKQriiKko4qe74pe04oqCMF8wL-KKguKJoVwrKQo= "Uiua solution for 2015/03")|[**4**](https://adventofcode.com/2015/day/4) [](Rust/2015/04.rs "Rust solution for 2015/04") [](Python/2015/04.py "Python solution for 2015/04")|[**5**](https://adventofcode.com/2015/day/5) [](Rust/2015/05.rs "Rust solution for 2015/05") [](Python/2015/05.py "Python solution for 2015/05") [](https://uiua.org/pad?src=JnNjCgriipzilqHiiaBAXG4uCgpBIOKGkCAvw5db4oqDKOKJpTMvK-KIiiJhZWlvdSJ8L-KGpeKniD18wqwv4oal4pmt4omh4oyVImFiIl8iY2QiXyJwcSJfInh5IsKkKV0KQiDihpAgw5fiioMo4omlMi_ihqXima3iiaHiprfip4jiiJgy4p-cwqR8L-KGpT3iioPiiqLiiqPijYnip4jiiJgzKQoK4oipLyviiaHil4fiioNCIEEK "Uiua solution for 2015/05")|[**6**](https://adventofcode.com/2015/day/6) [](Rust/2015/06.rs "Rust solution for 2015/06") [](Python/2015/06.py "Python solution for 2015/06") [](https://uiua.org/pad?src=JnNjCgriipwo4oqZW-KIqeKIqeKLlV0g4o2jKAogICAg4omNIm9uIsKwJCJ0dXJuIF8gXyxfIHRocm91Z2ggXyxfIgogIHwgMsKwJCJ0b2dnbGUgXyxfIHRocm91Z2ggXyxfIikKKeKJoEBcbi4KCuKKmeKKmSjihq9bLjEwMDBdMCkKClNvbHZlISDihpAgLyvima3iiKco4o2c4oqhKF4wOikg4o2c4o2c4o2JLSjima3igoLih6EpIOKKmSgrMSniiKniip_CsFviipniipniipniiJhd4oqZOjopCuKKg1NvbHZlIeKorCjihqUwLTF8KzF8KzIpIFNvbHZlIeKorCjihqcwfOKGpTF8wqwpCg== "Uiua solution for 2015/06")| +||[**1**](https://adventofcode.com/2015/day/1) [](Rust/2015/01.rs "Rust solution for 2015/01") [](Python/2015/01.py "Python solution for 2015/01") [](https://uiua.org/pad?src=JnNjCgotwqwuPUAoCuKKgygrMeKKl8KvMVwrKS8rCg== "Uiua solution for 2015/01") [](Nix/2015/01.nix "Nix solution for 2015/01") [](Nu/2015/01.nu "Nu solution for 2015/01")|[**2**](https://adventofcode.com/2015/day/2) [](Rust/2015/02.rs "Rust solution for 2015/02") [](Python/2015/02.py "Python solution for 2015/02") [](https://uiua.org/pad?src=JnNjCgriipwo4oqc4ouV4omgQHguKeKJoEBcbi4KCuKIqSgvKyspIOKJoeKKgygvw5d8w5cyLeKKgy_ihqUvK3zDt-KKgy_ihqUvw5d8w5cyLyvip4jDl-KGr1s0XSkK "Uiua solution for 2015/02")|[**3**](https://adventofcode.com/2015/day/3) [](Rust/2015/03.rs "Rust solution for 2015/03") [](Python/2015/03.py "Python solution for 2015/03") [](https://uiua.org/pad?src=JnNjCgriipc64oqZ4pa9OuKXoeKIiiI8Xj52Igriio_iiplb4peh4oipwq_iirjih4zih6EyXQoK4oqDKOKkuDHihq_iiJ5fMl8yfMKkKQriiKko4qe74pe04oqCMF8wL-KKguKJoVwrKQo= "Uiua solution for 2015/03")|[**4**](https://adventofcode.com/2015/day/4) [](Rust/2015/04.rs "Rust solution for 2015/04") [](Python/2015/04.py "Python solution for 2015/04") [](https://uiua.org/pad?src=IyBFeHBlcmltZW50YWwhCgomc2MKCuKWveKKuOKJoEBcbgoKfiAiLi4vdXRpbHMvbGliLnVhIiB-IE1E4oKFCgpaZXJvZXMg4oaQIOKMisO3NC8rXOKGp8Ks4pmt4omh4oeM4ouvTUTigoUkIl9fIjoKTWluZSAgIOKGkCDii4Xiipnil4zijaIo4oqZK-KCgXw84oqZWmVyb2VzKQoKTWluZSA2IOKfnDriirhNaW5lIDUgMQo= "Uiua solution for 2015/04")|[**5**](https://adventofcode.com/2015/day/5) [](Rust/2015/05.rs "Rust solution for 2015/05") [](Python/2015/05.py "Python solution for 2015/05") [](https://uiua.org/pad?src=JnNjCgriipzilqHiiaBAXG4uCgpBIOKGkCAvw5db4oqDKOKJpTMvK-KIiiJhZWlvdSJ8L-KGpeKniD18wqwv4oal4pmt4omh4oyVImFiIl8iY2QiXyJwcSJfInh5IsKkKV0KQiDihpAgw5fiioMo4omlMi_ihqXima3iiaHiprfip4jiiJgy4p-cwqR8L-KGpT3iioPiiqLiiqPijYnip4jiiJgzKQoK4oipLyviiaHil4fiioNCIEEK "Uiua solution for 2015/05")|[**6**](https://adventofcode.com/2015/day/6) [](Rust/2015/06.rs "Rust solution for 2015/06") [](Python/2015/06.py "Python solution for 2015/06") [](https://uiua.org/pad?src=JnNjCgriipwo4oqZW-KIqeKIqeKLlV0g4o2jKAogICAg4omNIm9uIsKwJCJ0dXJuIF8gXyxfIHRocm91Z2ggXyxfIgogIHwgMsKwJCJ0b2dnbGUgXyxfIHRocm91Z2ggXyxfIikKKeKJoEBcbi4KCuKKmeKKmSjihq9bLjEwMDBdMCkKClNvbHZlISDihpAgLyvima3iiKco4o2c4oqhKF4wOikg4o2c4o2c4o2JLSjima3igoLih6EpIOKKmSgrMSniiKniip_CsFviipniipniipniiJhd4oqZOjopCuKKg1NvbHZlIeKorCjihqUwLTF8KzF8KzIpIFNvbHZlIeKorCjihqcwfOKGpTF8wqwpCg== "Uiua solution for 2015/06")| |[**7**](https://adventofcode.com/2015/day/7) [](Rust/2015/07.rs "Rust solution for 2015/07") [](Python/2015/07.py "Python solution for 2015/07")|[**8**](https://adventofcode.com/2015/day/8) [](Python/2015/08.py "Python solution for 2015/08")|[**9**](https://adventofcode.com/2015/day/9) [](Python/2015/09.py "Python solution for 2015/09")|[**10**](https://adventofcode.com/2015/day/10) [](Python/2015/10.py "Python solution for 2015/10")|[**11**](https://adventofcode.com/2015/day/11) [](Python/2015/11.py "Python solution for 2015/11")|[**12**](https://adventofcode.com/2015/day/12) [](Python/2015/12.py "Python solution for 2015/12")|[**13**](https://adventofcode.com/2015/day/13) [](Python/2015/13.py "Python solution for 2015/13")| |[**14**](https://adventofcode.com/2015/day/14) [](Python/2015/14.py "Python solution for 2015/14")|[**15**](https://adventofcode.com/2015/day/15) [](Python/2015/15.py "Python solution for 2015/15")|[**16**](https://adventofcode.com/2015/day/16) [](Python/2015/16.py "Python solution for 2015/16")|[**17**](https://adventofcode.com/2015/day/17) [](Python/2015/17.py "Python solution for 2015/17")|[**18**](https://adventofcode.com/2015/day/18) [](Python/2015/18.py "Python solution for 2015/18")|[**19**](https://adventofcode.com/2015/day/19) [](Python/2015/19.py "Python solution for 2015/19")|[**20**](https://adventofcode.com/2015/day/20) [](Python/2015/20.py "Python solution for 2015/20")| |[**21**](https://adventofcode.com/2015/day/21) [](Python/2015/21.py "Python solution for 2015/21")|[**22**](https://adventofcode.com/2015/day/22) [](Python/2015/22.py "Python solution for 2015/22")|[**23**](https://adventofcode.com/2015/day/23) [](Python/2015/23.py "Python solution for 2015/23")|[**24**](https://adventofcode.com/2015/day/24) [](Python/2015/24.py "Python solution for 2015/24")|[**25**](https://adventofcode.com/2015/day/25) [](Python/2015/25.py "Python solution for 2015/25")|26|27| diff --git a/Uiua/2015/04.ua b/Uiua/2015/04.ua new file mode 100644 index 0000000..19dfc2a --- /dev/null +++ b/Uiua/2015/04.ua @@ -0,0 +1,12 @@ +# Experimental! + +&fras ⊣ &args + +▽⊸≠@\n + +~ "../utils/lib.ua" ~ MD₅ + +Zeroes ← ⌊÷4/+\↧¬♭≡⇌⋯MD₅$"__": +Mine ← ⋅⊙◌⍢(⊙+₁|<⊙Zeroes) + +Mine 6 ⟜:⊸Mine 5 1 diff --git a/Uiua/utils/.gitignore b/Uiua/utils/.gitignore new file mode 100644 index 0000000..d4eaad0 --- /dev/null +++ b/Uiua/utils/.gitignore @@ -0,0 +1 @@ +libutils.so diff --git a/Uiua/utils/Cargo.lock b/Uiua/utils/Cargo.lock new file mode 100644 index 0000000..0f58637 --- /dev/null +++ b/Uiua/utils/Cargo.lock @@ -0,0 +1,77 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "utils" +version = "0.1.0" +dependencies = [ + "md-5", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" diff --git a/Uiua/utils/Cargo.toml b/Uiua/utils/Cargo.toml new file mode 100644 index 0000000..42bbbc3 --- /dev/null +++ b/Uiua/utils/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "utils" +version = "0.1.0" +edition = "2024" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +md-5 = "0.10.6" diff --git a/Uiua/utils/build.sh b/Uiua/utils/build.sh new file mode 100755 index 0000000..91e33df --- /dev/null +++ b/Uiua/utils/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -ex + +target=$(cargo metadata --format-version=1 | jq -r .target_directory) +cargo build -r +cp "$target/release/libutils.so" . diff --git a/Uiua/utils/lib.ua b/Uiua/utils/lib.ua new file mode 100644 index 0000000..5fa2456 --- /dev/null +++ b/Uiua/utils/lib.ua @@ -0,0 +1,5 @@ +# Experimental! + +Lib ↚ &ffi⊂□"./utils/libutils.so" + +MD₅ ← Lib {$"{_}"/⊂↯16"unsigned char;" "md5" "const unsigned char:1" "unsigned long"} □₁ diff --git a/Uiua/utils/src/lib.rs b/Uiua/utils/src/lib.rs new file mode 100644 index 0000000..3279158 --- /dev/null +++ b/Uiua/utils/src/lib.rs @@ -0,0 +1,12 @@ +use std::slice; + +use md5::{Digest, Md5}; + +#[repr(C)] +pub struct Md5Digest([u8; 16]); + +#[unsafe(no_mangle)] +pub unsafe extern "C" fn md5(data: *const u8, len: usize) -> Md5Digest { + let data = unsafe { slice::from_raw_parts(data, len) }; + Md5Digest(*Md5::new().chain_update(data).finalize().as_ref()) +}