Sort String
クソコマンドシリーズ
n7mに引き続き、昔思いつきで作ったクソコマンドシリーズです。
SortString
の名前の通り、渡した文字列をソートしてくれます。それだけです。コードもこれだけ
#[macro_use]
extern crate clap;
use std::io::Read;
fn main() {
let matches = clap_app!(ss =>
(version: crate_version!())
(author: crate_authors!())
(about: crate_description!())
(@arg content: "sort content")
(@arg input: -i --input "read from stdin")
).get_matches();
if let Some(s) = matches.value_of("content") {
println!("{}", sort(s.into()));
} else if matches.is_present("input") {
let mut s = Vec::new();
std::io::stdin().read_to_end(&mut s).expect("Can't readline");
println!("{}", sort(String::from_utf8_lossy(&s).into()));
}
}
fn sort(s: String) -> String {
let mut s = s.chars().collect::<Vec<_>>();
s.sort();
s.iter().collect::<String>().trim().into()
}
ソートするとこう
!!!!!!""""""""""""""#&&'((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))),,----..............8::::::::::::::::::::::;;;;;;;;;<<<=====>>>>>@@CRSSSSSVV[]_____________aaaaaaaaaaaaaaaaaaaaaaaaabcccccccccccccccccccccccddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffffggggggghhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiillllllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooopppppppppppprrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssstttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuvvvwxxy}}}}
3年位前に作ったので、まだclapをmacroで使ってる。最近は基本deriveで作ってます。
Usecase
$ ss まんがタイムきららキャラット
がきまららんイキタットムャラ
$ ss スーパーウルトラハイパーミラクルロマンチック
イウククスチットハパパマミララルルロンーーー
$ uname -a | ss -i
#--.../0000000111222222233333444445555666666666666667788889999ACDEEGILLMMMMNNOPPPRSSTTUY____acceeeeghiiiiinnnnnnruuuxxxxx~~~
なんかいいじゃん。
Rust
最近気づいた点として、
- イテレータ
- 値を持ったVariantを定義できるEnum
match
Rustを書く上で最低限これら3つの機能があればある程度快適な気がしています。これらを満たす言語、他にもありそうなので手を付けて確認してみたい。
おわりに
この記事はn01e0 Advent Calendar 2023の12日目の記事です。
明日はあるかわかりません
また、IPFactory OB Advent Calendar 2023の12日目の記事も兼ねています。
Comments