typescript - 练习 机器人名字练习总是超时
问题描述
运动练习:
https://exercism.org/tracks/typescript/exercises/robot-name
我的第一个实现:
export class Robot {
private _name: string = ''
private static _releaseNames: Set<string> = new Set<string>()
constructor() {
this.resetName()
}
public get name(): string {
return this._name
}
public static releaseNames(): Set<string> {
return Robot._releaseNames
}
public resetName(): void {
let name = this.generateName()
while (Robot._releaseNames.has(name)) {
name = this.generateName()
}
Robot._releaseNames.add(name)
this._name = name
}
private generateName(): string {
const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
const digits = '0123456789'
let name = ''
for (var i = 0; i < 2; i++) {
name += letters.charAt(Math.floor(Math.random() * letters.length))
}
for (var i = 0; i < 3; i++) {
name += digits.charAt(Math.floor(Math.random() * digits.length))
}
return name
}
}
当我单击“运行测试”时它总是超时,所以我以不同的方式再次实现它(我认为它更有效):
export class Robot {
public name: string = ''
private static _availableNames: string[] = Robot.shuffleArray(Robot.getAvailableNames())
private static _releaseNames: string[] = []
constructor() {
this.resetName()
}
public resetName(): void {
let name = Robot._availableNames.shift()
if (name === undefined) {
throw new Error('No name available')
}
this.name = name
Robot._releaseNames.push(name)
}
public static releaseNames(): string[] {
return Robot._releaseNames
}
private static getAvailableNames(): string[] {
let names = []
for (let c1 = 65; c1 < 91; c1++) {
for (let c2 = 65; c2 < 91; c2++) {
for (let num = 0; num < 1000; num++) {
let name = String.fromCharCode(c1) + String.fromCharCode(c2) + num.toString().padStart(3, '0')
names.push(name)
}
}
}
return names
}
private static shuffleArray(array: any[]): any[] {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
}
但是第二个实现也超时了。
任何帮助找出他们(尤其是第二个)超时的原因都值得赞赏。
解决方案
推荐阅读
- excel - 空单元格和排序不一致
- python - tfds 在 python 3 和 tensorflow 2 中拆分抛出 AssertionError
- reporting-services - 报告项未链接到数据集 - Visual Studio 2015 中的 tablix
- phpmyadmin - 我无法访问 PhpMyAdmin
- javascript - 如何将选择的选项与用户插入的输入组合在一起?
- python - 如何在python中连接到打印机?
- django - 给出命令“python manage.py collectstatic”时出现静态错误
- codenameone - cn1 会允许原生推送吗?
- vb.net - 无法使用新关键字更改标签文本
- ms-word - 编织到 word doc 时,Rmd 表格标题搞砸了