找到 n 个唯一随机选择的坐标的算法

问题描述 投票:0回答:1

我需要一种方法来检查由 ( 0 <= x <= 4 and ( 0 <= y <= 4 ) are unique i.e. no two pints have the same coordinate pairs.

但这里有一个问题:

点数在运行时确定,可以从 1 到 n(好吧,让我们说 <= 10). The coordinates are selected randomly x = rand(0,4) and y = rand(0,4)

附注我在这个项目中使用基于 makecode 块的编码,并且 LED 位于 microbit V1 上。所以上面的代码已经通过makecode从blocks转换为python了。

谢谢

while index22 < level:  # level determines how many points I need to generate max 10
            listx[index22] = randint(0, 4)
            listy[index22] = randint(0, 4)
            led.plot(listx[index22], listy[index22])  # turns on an LED at the coordinate value
            index22 = index22 + 1

我对此感到困惑..

algorithm random unique bbc-microbit makecode
1个回答
0
投票

由于您只显示了 python 代码,所以我的假设是用 python 表达的可能解决方案也是可以接受的。

保证整数的唯一性比保证多维点的唯一性更容易。使用整数除法和模算术的古老技巧允许我们将单个整数映射到唯一的索引。如果我们使用python的

random.sample()
从整数范围内不进行替换地获取指定样本,则会弹出以下代码。

import random

level = 10

# there are 25 distinct points in a 5x5 grid, so we
# sample 'level' unique values in the range 0..24
for value in random.sample(range(25), level):
    print(value // 5, value % 5)   # map int to indices

我使用了

print()
,这样你就可以确认解决方案的唯一性。将
print()
替换为对您的应用程序的
led.plot()
调用。

© www.soinside.com 2019 - 2024. All rights reserved.