![見出し画像](https://assets.st-note.com/production/uploads/images/67271381/rectangle_large_type_2_8c2fada2841d2ab5ae064eafd30747e5.png?width=1200)
【RUST】記念日判定【はるまき@エンジニアカップル】
1.はじめに
記念日には何か意味を持たせたいですよね.
そこで理系的に意味のある日にしたいと思いました.
簡単に思いつくのが素数ですよね.
と言うことで,まずは素数を見つけるプログラムを作成していこうと思います.
2022年 3月 26日なら20220306は素数なのか?
みたいな感じをイメージしてます.
ちなみに,フリードマン数を見つけにいっても面白そうですね....
おはようございmath!今日は6月25日。625=5^(6-2)は、フリードマン数です。フリードマン数とは、その数に使われている数字をすべて用いて、四則演算か、累乗か、数字を合わせた数を用いるかの3方法のうち、少なくとも1つを用いて数式を作って元の数に一致させられる数のことです。 pic.twitter.com/uBSwGJbl1Z
— 実用数学技能検定「数検」 (@sugaku_net) June 24, 2018
言語は最近流行りのRUSTで行こうと思います.
完全な素人ですので勉強も兼ねてやっていきます.
2.RUSTの環境構築
Docker を使うことでワンパンで環境構築を行っていきます.
FROM rust:1.31
ENV USER=root
# *******************************
# docker cmd lsit
#
# >>>> ref >>>>
# https://hub.docker.com/_/rust
#
# build
# sudo docker build -t my-rust-app:sample .
#
# run
# docker run -v C:\Users\harumaki\Documents\PROJECT\101_rust\share_volume:/home -it --rm --name my-running-app my-rust-app:sample
#
# *******************************
# rust cmd lsit
#
# >>>> ref >>>>
# https://doc.rust-jp.rs/book-ja/ch03-03-how-functions-work.html
#
# 01- hello
# cargo new hello_cargo --bin
# cd hello_cargo
# cargo run
#
# 02- variable
# cargo new --bin variables
# cd variables/
# cargo run
上記のDockerfileをBuildしていきます.
C:\Users\masaki\Dropbox\PC\Documents\project_local\rust>dir
Volume in drive C is Windows
Volume Serial Number is 8018-90FE
Directory of C:\Users\masaki\Dropbox\PC\Documents\project_local\rust
12/07/2021 07:03 PM <DIR> .
12/07/2021 07:03 PM <DIR> ..
12/07/2021 07:04 PM 646 Dockerfile
1 File(s) 646 bytes
2 Dir(s) 149,457,768,448 bytes free
↓ Buildコマンド
C:\Users\masaki\Dropbox\PC\Documents\project_local\rust>docker build -t my-rust-app:sample .
[+] Building 102.3s (5/5) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 685B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/rust:1.31 4.8s
=> [1/1] FROM docker.io/library/rust:1.31@sha256:e2c4e3751290e30c3f130ef3513c7999aee87b5e7ac91e2fc9f3addcdf1f13 96.8s
=> => resolve docker.io/library/rust:1.31@sha256:e2c4e3751290e30c3f130ef3513c7999aee87b5e7ac91e2fc9f3addcdf1f138 0.0s
=> => sha256:6f61eb35ad91067deeaf65056337775eb57cfc3ec02fdf45c667526750b61a30 6.36kB / 6.36kB 0.0s
=> => sha256:cd8eada9c7bb496eb685fc6d2198c33db7cb05daf0fde42e4cf5bf0127cbdf38 45.32MB / 45.32MB 10.4s
=> => sha256:e778b6e95af4c455ec1574c64fae61aceaaf5dce5a7650e7c1117ab6736eff32 1.59kB / 1.59kB 0.0s
=> => sha256:c2677faec825930a8844845f55454ee0495ceb5bea9fc904d5b3125de863dc1d 10.78MB / 10.78MB 3.4s
=> => sha256:fcce419a96b1219a265bf7a933d66b585a6f8d73448533f3833c73ad49fb5e88 4.34MB / 4.34MB 1.8s
=> => sha256:e2c4e3751290e30c3f130ef3513c7999aee87b5e7ac91e2fc9f3addcdf1f1387 1.42kB / 1.42kB 0.0s
=> => sha256:045b51e26e750443c84216071a1367a7aae0b76245800629dc04934628b4b1ea 50.06MB / 50.06MB 13.9s
=> => sha256:3b969ad6f1474525a12e57e0f9fad719fa0899131fe190ce876b8bd4d998cbbf 214.28MB / 214.28MB 41.7s
=> => sha256:2074c6bfed7de8995421d5cf63efc43584aad48182a0eee8f5a9f14a1bc245b0 228.13MB / 228.13MB 46.2s
=> => extracting sha256:cd8eada9c7bb496eb685fc6d2198c33db7cb05daf0fde42e4cf5bf0127cbdf38 14.1s
=> => extracting sha256:c2677faec825930a8844845f55454ee0495ceb5bea9fc904d5b3125de863dc1d 2.9s
=> => extracting sha256:fcce419a96b1219a265bf7a933d66b585a6f8d73448533f3833c73ad49fb5e88 1.1s
=> => extracting sha256:045b51e26e750443c84216071a1367a7aae0b76245800629dc04934628b4b1ea 15.9s
=> => extracting sha256:3b969ad6f1474525a12e57e0f9fad719fa0899131fe190ce876b8bd4d998cbbf 20.4s
=> => extracting sha256:2074c6bfed7de8995421d5cf63efc43584aad48182a0eee8f5a9f14a1bc245b0 24.3s
=> exporting to image 0.4s
=> => exporting layers 0.0s
=> => writing image sha256:4fe12bbf44a17af29eef7bcfd4cf771004f6e5519663bf35c6343a8c3424ffdd 0.1s
=> => naming to docker.io/library/my-rust-app:sample 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
C:\Users\masaki\Dropbox\PC\Documents\project_local\rust>
ちゃんとImageが作成されていますね
C:\Users\masaki\Dropbox\PC\Documents\project_local\rust>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
opencv win_doc_cpp 0cedab5c2c3b 9 days ago 2.35GB
<none> <none> 85b7bbfd5fe1 9 days ago 2.04GB
<none> <none> 21e65b744475 10 days ago 2.03GB
<none> <none> cb0f61a6fbc6 10 days ago 1.98GB
alpine/git latest 0deb7380d708 6 weeks ago 27.4MB
my-rust-app sample 4fe12bbf44a1 2 years ago 1.64GB ←これ
コンテナ起動+共有フォルダ指定
↓ コンテナ起動コマンド
C:\Users\masaki\Dropbox\PC\Documents\project_local\rust>docker run -v C:\Users\masaki\Dropbox\PC\Documents\project_local\rust\share_volume:/home -it --rm --name my-running-app my-rust-app:sample
root@42da3c4cc949:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@42da3c4cc949:/# ls home/
↓ ローカルのファイルがちゃんとある
sample.txt
root@42da3c4cc949:/#
3.hello worldの実行
↓ プロジェクトの作成
root@42da3c4cc949:/home# cargo new hello_cargo --bin
Created binary (application) `hello_cargo` package
↓ プロジェクトへ移動
root@42da3c4cc949:/home# cd hello_cargo/
↓ プロジェクトの実行
root@42da3c4cc949:/home/hello_cargo# cargo run
Compiling hello_cargo v0.1.0 (/home/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 3.38s
Running `target/debug/hello_cargo`
Hello, world!
root@42da3c4cc949:/home/hello_cargo#
4.数式/関数関係の実行
2つのファイルを編集します.
// main.rs
use rand::Rng;
fn main() {
println!("Rand Gen >>>>>>>> ");
let rand_x = rand_u_func();
println!("rand_x is {}", rand_x); // 別の関数
}
fn rand_u_func() -> u8 {
//乱数生成機を初期化
let mut rng = rand::thread_rng();
let rnd8 = rng.gen::<u8>();
println!("i32: {}, u32: {}", rng.gen::<i32>(), rnd8);
// printlin!("True or False:: {}", rng.gen::<bool>());
rnd8
}
// Cargo.toml
[package]
name = "variables"
version = "0.1.0"
authors = ["root"]
edition = "2018"
[dependencies]
rand = "0.3.0"
実行するとこんな感じ.
ちゃんと関数を実行できてますね.
root@42da3c4cc949:/home/variables# cargo run
Compiling variables v0.1.0 (/home/variables)
Finished dev [unoptimized + debuginfo] target(s) in 4.77s
Running `target/debug/variables`
Rand Gen >>>>>>>>
i32: -840969751, u32: 172
rand_x is 172
root@42da3c4cc949:/home/variables#
次回から,ゴリゴリと素数を見つける関数を作っていきます.
#はるまき @エンジニアカップル