//
// 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()
利用Swift语言特性,随手写个伪随机数生成器
最新推荐文章于 2022-11-03 14:40:47 发布
本文介绍了如何在Swift中使用`LinearCongruentialGenerator`实现随机数生成器,并展示了如何通过`repetitions`扩展生成一系列随机数,以及对生成的随机数进行处理和集合操作。
1519

被折叠的 条评论
为什么被折叠?



