61. Get current date
获取当前时间
package main import ( "fmt" "time" ) func main() { d := time.Now() fmt.Println("Now is", d) // The Playground has a special sandbox, so you may get a Time value fixed in the past. }
Now is 2009-11-10 23:00:00 +0000 UTC m=+0.000000001
extern crate time; let d = time::now();
or
use std::time::SystemTime; fn main() { let d = SystemTime::now(); println!("{:?}", d); }
SystemTime { tv_sec: 1526318418, tv_nsec: 699329521 }
62. Find substring position
字符串查找
查找子字符串位置
package main import ( "fmt" "strings" ) func main() { x := "été chaud" { y := "chaud" i := strings.Index(x, y) fmt.Println(i) } { y := "froid" i := strings.Index(x, y) fmt.Println(i) } }
i is the byte index of y in x, not the character (rune) index. i will be -1 if y is not found in x.
6 -1
fn main() { let x = "été chaud"; let y = "chaud"; let i = x.find(y); println!("{:?}", i); let y = "froid"; let i = x.find(y); println!("{:?}", i); }
Some(6) None
63. Replace fragment of a string
替换字符串片段
package main import ( "fmt" "strings" ) func main() { x := "oink oink oink" y := "oink" z := "moo" x2 := strings.Replace(x, y, z, -1) fmt.Println(x2) }
moo moo moo
fn main() { let x = "lorem ipsum dolor lorem ipsum"; let y = "lorem"; let z = "LOREM"; let x2 = x.replace(&y, &z); println!("{}", x2); }
LOREM ipsum dolor LOREM ipsum
64. Big integer : value 3 power 247
超大整数
package main import "fmt" import "math/big" func main() { x := new(big.Int) x.Exp(big.NewInt(3), big.NewInt(247), nil) fmt.Println(x) }
7062361041362837614435796717454722507454089864783271756927542774477268334591598635421519542453366332460075473278915787
extern crate num; use num::bigint::ToBigInt; fn main() { let a = 3.to_bigint().unwrap(); let x = num::pow(a, 247); println!("{}", x) }
7062361041362837614435796717454722507454089864783271756927542774477268334591598635421519542453366332460075473278915787
65. Format decimal number
格式化十进制数
package main import "fmt" func main() { x := 0.15625 s := fmt.Sprintf("%.1f%%", 100.0*x) fmt.Println(s) }
15.6%
fn main() { let x = 0.15625f64; let s = format!("{:.1}%", 100.0 * x); println!("{}", s); }
15.6%
66. Big integer exponentiation
大整数幂运算
package main import "fmt" import "math/big" func exp(x *big.Int, n int) *big.Int { nb := big.NewInt(int64(n)) var z big.Int z.Exp(x, nb, nil) return &z } func main() { x := big.NewInt(3) n := 5 z := exp(x, n) fmt.Println(z) }
243
extern crate num; use num::bigint::BigInt; fn main() { let x = BigInt::parse_bytes(b"600000000000", 10).unwrap(); let n = 42%
67. Binomial coefficient "n choose k"
Calculate binom(n, k) = n! / (k! * (n-k)!). Use an integer type able to handle huge numbers.
二项式系数“n选择k”
package main import ( "fmt" "math/big" ) func main() { z := new(big.Int) z.Binomial(4, 2) fmt.Println(z) z.Binomial(133, 71) fmt.Println(z) }
6 555687036928510235891585199545206017600
extern crate num; use num::bigint::BigInt; use num::bigint::ToBigInt; use num::traits::One; fn binom(n: u64, k: u64) -> BigInt { let mut res = BigInt::one(); for i in 0..k { res = (res * (n - i).to_bigint().unwrap()) / (i + 1).to_bigint().unwrap(); } res } fn main() { let n = 133; let k = 71; println!("{}", binom(n, k)); }
555687036928510235891585199545206017600
68. Create a bitset
创建位集合
package main import ( "fmt" "math/big" ) func main() { var x *big.Int = new(big.Int) x.SetBit(x, 42, 1) for _, y := range []int{13, 42} { fmt.Println("x has bit", y, "set to", x.Bit(y)) } }
x has bit 13 set to 0 x has bit 42 set to 1
or
package main import ( "fmt" ) const n = 1024 func main() { x := make([]bool, n) x[42] = true for _, y := range []int{13, 42} { fmt.Println("x has bit", y, "set to", x[y]) } }
x has bit 13 set to false x has bit 42 set to true
or
package main import ( "fmt" ) func main() { const n = 1024 x := NewBitset(n) x.SetBit(13) x.SetBit(42) x.ClearBit(13) for _, y := range []int{13, 42} { fmt.Println("x has bit", y, "set to", x.GetBit(y)) } } type Bitset []uint64 func NewBitset(n int) Bitset { return make(Bitset, (n+63)/64) } func (b Bitset) GetBit(index int) bool { pos := index / 64 j := index % 64 return (b[pos] & (uint64(1) << j)) != 0 } func (b Bitset) SetBit(index int) { pos := index / 64 j := index % 64 b[pos] |= (uint64(1) << j) } func (b Bitset) ClearBit(index int) { pos := index / 64 j := index % 64 b[pos] ^= (uint64(1) << j) }
x has bit 13 set to false x has bit 42 set to true
fn main() { let n = 20; let mut x = vec![false; n]; x[3] = true; println!("{:?}", x); }
[false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
69. Seed random generator
Use seed s to initialize a random generator.
If s is constant, the generator output will be the same each time the program runs. If s is based on the current value of the system clock, the generator output will be different each time.
随机种子生成器
package main import ( "fmt" "math/rand" ) func main() { var s int64 = 42 rand.Seed(s) fmt.Println(rand.Int()) }
3440579354231278675
or
package main import ( "fmt" "math/rand" ) func main() { var s int64 = 42 r := rand.New(rand.NewSource(s)) fmt.Println(r.Int()) }
3440579354231278675
use rand::{Rng, SeedableRng, rngs::StdRng}; fn main() { let s = 32; let mut rng = StdRng::seed_from_u64(s); println!("{:?}", rng.gen::<f32>()); }
0.35038823
70. Use clock as random generator seed
Get the current datetime and provide it as a seed to a random generator. The generator sequence will be different at each run.
使用时钟作为随机生成器的种子
package main import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().UnixNano()) // Well, the playground date is actually fixed in the past, and the // output is cached. // But if you run this on your workstation, the output will vary. fmt.Println(rand.Intn(999)) }
524
or
package main import ( "fmt" "math/rand" "time" ) func main() { r := rand.New(rand.NewSource(time.Now().UnixNano())) // Well, the playground date is actually fixed in the past, and the // output is cached. // But if you run this on your workstation, the output will vary. fmt.Println(r.Intn(999)) }
524
use rand::{Rng, SeedableRng, rngs::StdRng}; use std::time::SystemTime; fn main() { let d = SystemTime::now() .duration_since(SystemTime::UNIX_EPOCH) .expect("Duration since UNIX_EPOCH failed"); let mut rng = StdRng::seed_from_u64(d.as_secs()); println!("{:?}", rng.gen::<f32>()); }
0.7326781