Skip to content

Instantly share code, notes, and snippets.

View segfo's full-sized avatar

segfo segfo

View GitHub Profile
@segfo
segfo / hsv2rgb.rs
Created August 1, 2017 22:31
HSVからRGBに色を変換
struct RGB{
r:u8,
g:u8,
b:u8
}
impl RGB{
fn new()->Self{
Self{
r:0,
@segfo
segfo / min_max.rs
Created August 2, 2017 14:54
最小値、最大値を取得
macro_rules! max {
($x:expr) => ( $x );
($x:expr, $($xs:expr),+) => {
{
use std::cmp::max;
max($x, max!( $($xs),+ ))
}
};
}
@segfo
segfo / abstractionTest.rs
Created August 9, 2017 14:09
トレイトで抽象化
use std::io::{BufReader,BufWriter,BufRead,Read,Write};
use std::net::{TcpListener, TcpStream};
use std::fs::File;
use std::io::prelude::*;
// WriteトレイトとReadトレイトを実装しているSugoiTraitを実装すると
trait SugoiTrait:Write+Read{
}
// TCPストリームも
impl SugoiTrait for std::net::TcpStream{
@segfo
segfo / orig_error.rs
Created September 23, 2017 02:13
自作エラー(FFIで受け取ったり定義したり)とRustで定義されているエラーを混在させて"println!({},e)"する
use std::io;
use std::fmt::Display;
use std::fmt::Formatter;
// オレオレエラー列挙体
#[derive(Debug)]
enum myError{
RustError(io::Error),
FileError(myFileError),
SocketError(mySocketError)
@segfo
segfo / file_partial_read.rs
Last active October 31, 2017 13:35
部分的にファイルを読み取る
use std::fs::File;
use std::io::prelude::*;
fn main(){
let mut file = File::open("src/main.rs").unwrap();
// ベクタを使ってread_to_endしているのはヒープに直接ぶち込みたいから。
// スタックに制約がない場合は、普通の配列を初期化してでもOK
// 5回繰り返す。
for i in 0..5{
let mut buf = Vec::<u8>::new();
@segfo
segfo / printDisplay_for_Vec8.rs
Last active November 4, 2017 04:02
newtypeパターンでVec<u8>にDisplayトレイトを実装する
// 既存の型への自作trait以外の実装については
// newtypeパターンでないと実装できないらしい
// いろいろな制約があるとのこと、このあたりは知らん。
use std::fs::File;
use std::io::prelude::*;
use std::fmt;
use std::fmt::Formatter;
// 型を新しく定義する(newtype)
@segfo
segfo / fizzbuzz.rs
Created December 31, 2017 05:38
登録された値でFizzbuzzする(登録が面倒なのでマクロも作る)
#[derive(Debug)]
struct FizzBuzzData{
num:u32,
id:&'static str
}
#[derive(Debug)]
struct FizzBuzzN{
data:Vec<FizzBuzzData>,
}
@segfo
segfo / fuckin_vending_machine.rs
Last active February 10, 2018 04:46
自販機のふるまいを再現してみるプログラム
use std::io::stdin;
use std::io::Write;
use std::str::FromStr;
use std::io::Read;
use std::fmt::{Debug, Display};
use std::error::Error;
#[derive(Debug)]
struct drink<'a>{
price:u32,
@segfo
segfo / fizzbuzz_odd_double.rs
Last active April 28, 2018 14:57
forを使わずにfizzbuzzしたり、奇数だけを2倍して表示したり。
fn main(){
let n = (0..20).collect::<Vec<u32>>();
let v = n.iter().filter(|n|(*n)%2==1).map(|n|n*2).collect::<Vec<u32>>();
let fb = n.iter().map(fizzbuzz).collect::<Vec<String>>();
println!("{:?}",v);
println!("{:?}",fb);
//もっとスマートに書くと
println!("{:?}",(0..20).filter(|n|(*n)%2==1).map(|n| n * n).collect::<Vec<u32>>());
@segfo
segfo / random_string.rs
Created April 29, 2018 09:10
Rustでランダム文字列をホイホイ出力
extern crate rand;
use rand::Rng;
fn main() {
let mut vec=(0x20..0x7f)
.filter_map(|n|std::char::from_u32(n as u32))
.collect::<Vec<char>>();
rand::thread_rng().shuffle(&mut vec);
vec.iter().for_each(|n|print!("{}",n));
}