2020-01-01から1年間の記事一覧

バケットソート in Rust

バケットソート bucket sort O(N logN) 比較をしないソート 含まれている値の種類の数が決定している必要がある ( = バケツの数) const RANGE: usize = 10; fn main() { let a = [5,4,6,7,1,3,8,2,9,0]; let mut d = [0;RANGE]; bucketsort(a, &mut d); prin…

バブルソート in Rust

バブルソート bubble sort O(N^2) 先頭から順に隣同士比較していく (最大値から決定する) fn main() { let mut a = [8, 3,4, 3, 7, 6, 5, 2, 1, 10]; for i in 0..a.len() { for j in i+1..a.len() { if a[j] < a[i] { a.swap(i, j); } } } println!("{:?}",…

選択ソート in Rust

選択ソート selection sort O(N^2) 最小値から順に決めていく 安定ソートでない fn main() { let mut a = [3, 2, 1, 4, 1]; for i in 0..a.len() { let mut min = i; for j in i..a.len() { if a[min] > a[j] { min = j; } } a.swap(i, min); } println!("{:…

挿入ソート in Rust

挿入ソート insertion sort O(N^2) 第2項から先頭に向かって隣同士入れ替えていく 昇順 fn main() { let mut a = [10, 3, 3, 1, 90, 34, 78, 2, 12, 56, 1]; for ins in 1..a.len() { // 挿入する値を退避 let temp = a[ins]; for cmp in (0..ins).rev() { …

関連型を持つトレイトオブジェクトを宣言する

dyn トレイト<関連型 = 型> trait Tr { type Ty; fn go(&self) -> () {} } struct St {} impl Tr for St { type Ty = String; fn go(&self) -> () {} } // トレイトオブジェクトに対して関連型を指定できる fn foo(t: &dyn Tr<Ty = String>) -> () { t.go() } fn main() {</ty>…

mutable参照は所有権を移動する

サンプルコード let mut s1 = String::from("hello"); // s2はmutable 参照 let s2 = &mut s1; print_type_name_of(s2); s2.push_str(" world"); /* error[E0382]: borrow of moved value: `s2` | 3 | let s2 = &mut s1; | -- move occurs because `s2` has …

Fibonacci in Rust

#[derive(Default)] struct Fibonacci { pair: (u64, u64), cnt: u64, max: u64, } impl Fibonacci { fn new(max: u64) -> Fibonacci { Fibonacci { pair: (0, 1), max: max, ..Default::default() } } fn reset(&mut self) { self.pair = (0, 1); self.cnt …

asキーワード

プリミティブ型の変換で使用する。 f64からi32に変換する事ができる。 let p: f64 = 50.5; let a: i32 = 50.5 as i32; Note: 標準では、f64からi32のFromトレイトは用意されていない // NG let a: i32 = i32::from(p)

プラグインマップの用意

vim

プラグイン側で用意されたキーマップをユーザー側で再定義することができる。 プラグイン側の定義 " プラグインマップ <Plug>(reverse-word) 定義 nnoremap <Plug>(reverse-word) :<C-u>call <SID>ReverseWord(expand('<cword>'))<CR> " デフォルトの割当 map <unique> <Leader>a <Plug>(reverse-word) NOTE: <Plug>(revers</plug></plug></leader></unique></cr></cword></sid></c-u></plug></plug>…

上に向かってファイルの検索をする `findfile()`

vim

例 ctagファイルの検索 let path = findfile('.tags', '.;') NOTE: 第2引数 .; カレントディレクトリから上に向かって検索をする。 ** カレントディレクトリから下に向かって検索する。デフォルト。 関連 finddir() ファイルではなくディレクトリを検索する

Vim script 概要

vim

Exコマンドを呼びだす Vim scriptはExコマンドを呼び出すためのスクリプト。 echo コマンドの実行 echo "Hello World" 関数の呼び出しもコマンドで実行 let names = []; call add(names, 'tanaka') call add(names, 'sato') call map(names, {idx, name -> l…

引数リストから検索する

vim

:vim 検索する文字列 ## vim vimgrep の略 ## 引数リストから検索する 引数リストへのファイルの追加 :arga **/*.js **/*.html **/*.css arga argadd の略。引数リストにファイルを追加する **/ フォルダ階層に渡って検索する

エラーハンドリング Result<T, E>

Rustのエラーハンドリングは以下の2種類にグループ分けされる 回復不可能なエラー panic! 回復可能なエラー Result<T, E> Result<T, E> Rustには例外処理が存在しないため、その代わりにResult<T, E>を使う。 pub enum Result<T, E> { Ok(T), Err(E), } 各variant Ok(T) 成功時 Err(</t,></t,></t,></t,>…

[健康] キャベツが良い

下痢気味のお通じにとことん悩まされています。 急にお腹がいたくなったりと。 ですが、お好み焼きを食べるようになってからすっかりなくなりました。 どうやらキャベツがいいらしい。

基本トレイト

概要 Rustの型(struct, enum)は継承が不可。 メソッドは実質関数に過ぎない。 ある特定の振る舞いの抽象化はトレイトを通して実現する。 (この点からRustの型はHaskellのdata型、トレイトは型クラスに対応すると考えることが出来る。) 標準スタンダードライ…

所有権 備忘録

所有権 移譲 (Move) 借用 (Borrow) 移譲 let a = String::from("Hello World"); let b = a; // 値の所有権が移ると変数aは二度と使えない 借用 参照にすることで、値の借用となる。 let a = String::from("Hello World"); let b = &a; // immutable borrowが…

Haskell備忘録

型システム data型 data 型シノニム type 型クラス class data型を使って型を定義する。 data型は継承できないため、型クラスを使って共通化を行う。 型クラスを実装したdata型はその型クラスのインスタンスと呼ぶ。 data型 Haskelの型。代数的データ型。 da…

Rustの標準ライブラリが難しい

標準入力から文字列を読み取るサンプル例 use std::io; fn main() -> io::Result<()> { let mut buffer = String::new(); let stdin = io::stdin(); let mut handle = stdin.lock(); handle.read_to_string(&mut buffer)?; Ok(()) } 上記はコンパイルエラー…

オブジェクト指向開発 in vimscript

クラスの実装 宣言 let s:Person = {} コンストラクタ function! s:Person(name, age, gender) let p = deepcopy(s:Person) let p.name = a:name let p.age = a:age let p.gender = a:gender endfunction メソッドの定義 function! s:Person.getName() retur…

URL with Foundation

TL;DR 種類 例 absoluteURL 絶対URL URL(string:"scheme://example.com") scheme://example.com 相対URL URL(string:"path/index.html" relativeTo:absURL) scheme:example.com/path/index.html 絶対パス URL(fileURLWithPath:"/root/path" isDirectory:true…

正規表現

正規表現 文字列 検索エンジン。 文字列による検索だけでなく、メタ文字と呼ばれる制御文字を使って、不特定の文字 や 文字の配置場所 などを指定できる。 メタ文字 正規表現として特別な意味を持つ文字 種類 概要 該当するメタ文字 文字クラス 文字にマッチ…

execプラグイン まとめ

exec-maven-pluginについて 2つのゴールを持つ exec javaプログラムを含む複数のプログラムの実行 java javaプログラムの実行。 実行するJAVAバージョンは最新もしくは、$JAVA_HOME に依存する。 java goal pom.xml <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1</version></plugin>…

プラグインによる機能の提供

vim

キーマップを定義する 例 SayHello関数の提供 function! SayHello() echo 'hello, world' endfunction noremap <Plug>(say_hello) :<C-u>call SayHello()<CR> 参照 【図解Vim】mapとnoremap - ここぽんのーと</cr></c-u></plug>

Document.importNode と Node.cloneNodeの違い

element.cloneNode() :: カレントのdocumentからノードをクローンする。 例 テンプレート要素をクローンし、shadow DOMに追加。 shadowDOM.appendChild(template.content.cloneNode(true)) cloneNode(true) にすることで、子孫ノードもコピーする document.i…

オブジェクトのインスタンスかどうか

キーワード: instanceof instanceof 演算子を使う 値 instanceof オブジェクト // Date const today = new Date() console.log(today instanceof Date); // true // Array let values = [1,2,3,4,5] console.log(values instanceof Array) // Object const t…

基本型とObject

キーワード: typeof, instanceof 型 undefined boolean string number symbol function object Array Map Date 型チェック typeof 演算子で行える console.log(typeof true) // boolean console.log(typeof 'str') // string console.log(typeof 100) // num…

難しい数式はまったくわかりませんが、微分積分を教えてください!

読んだ本 教育系Youtuberで「予備校のノリで大学数学」を公開しているヨビノリたくみによる微分積分の解説本。 難しい数式はまったくわかりませんが、微分積分を教えてください! 4つのステップで微分・積分がわかる 関数 グラフ 傾き 面積 1. 関数とは 入力…

エンジニアであること in 2020

エンジニアと名乗ること 10年前、アプリ開発者としてこのソフトウェア業界に入っていてつくづく自分はエンジニアなのだろうかという葛藤を抱えていました。 なので自分はエンジニアではなく、「プラグラマーです」と名乗るようにしていました。 これは職業と…