見出し画像

【RUST】記念日判定【はるまき@エンジニアカップル】

1.はじめに

記念日には何か意味を持たせたいですよね.

そこで理系的に意味のある日にしたいと思いました.

簡単に思いつくのが素数ですよね.

画像1

と言うことで,まずは素数を見つけるプログラムを作成していこうと思います.

2022年 3月 26日なら20220306は素数なのか?

みたいな感じをイメージしてます.

ちなみに,フリードマン数を見つけにいっても面白そうですね....


言語は最近流行りの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していきます.

画像2

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#

画像3

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#

画像4



次回から,ゴリゴリと素数を見つける関数を作っていきます.


#RUST

#記念日判定

#はるまき @エンジニアカップル

#素数










この記事が気に入ったらサポートをしてみませんか?