利用Swift语言特性,随手写个伪随机数生成器

//
//  main.swift
//  Ultimate
//
//  Created by Mewlan Musajan on 2/13/22.
//
//  Apple Inc. “The Swift Programming Language (Swift 5.5).” Apple Books. https://books.apple.com/us/book/the-swift-programming-language-swift-5-4/id881256329

protocol RandomNumberGenerator {
    func random() -> Double
}

// Linear Congruential Generator
class LinearCongruentialGenerator: RandomNumberGenerator {
    var lastRandom = 42.0
    let m = 139968.0
    let a = 3877.0
    let c = 29573.0
    func random() -> Double {
        lastRandom = ((lastRandom * a + c)
                        .truncatingRemainder(dividingBy: m))
        return lastRandom / m
    }
}
let generator = LinearCongruentialGenerator()
print("Here's a random number: \(generator.random())")
print("And another one: \(generator.random())")

extension Int {
    func repetitions(task: () -> Void) {
        for _ in 0..<self {
            task()
        }
    }
}


5.repetitions {
    print(generator.random())
}

var randomNumberSet: Set<Int> = []
8.repetitions {
    randomNumberSet.update(with: Int(generator.random() * 10))
}

8.repetitions {
    if var someNumber = randomNumberSet.popFirst() {
        if someNumber == 0 {
            someNumber = 1
        }
        print(someNumber, terminator: "")
    }
}
print()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值