生成易于记忆的数字

3

有没有可能生成介于1000000和9999999之间的易于记忆的随机数?

我知道“易于记忆”这个术语是相对的,但我相信对于普通人来说,数字331332比537106更容易记住(或者不是这样吗?)

用例。我正在为应用程序中的人生成唯一的数字,并考虑通过分配“易于记忆的数字”来使其更容易。 我的玩法是,首先注册的人获得易于记忆的数字,从那里开始易于度逐渐降低。

如果您在任何编程语言中看到过类似的内容,可以发布以供其他人参考。

这里有一个类似的问题, 但那是六年前的字母数字混合。


2
只有当它们遵循某种模式时,才能被定义为非随机。 - martineau
1
这是一个非常广泛的话题,似乎包含了两个不同的问题。第一个问题是“什么使数字容易记忆”,这超出了SO的范围。这更有可能是一个心理学研究项目。第二个问题是“如何生成易于记忆的数字”,这取决于第一步。 - Morgan Thrapp
1
为什么不从小数字开始呢?这些数字肯定比大数字更容易记住! - Chris_Rands
@user2357112,很遗憾,对于这种特定的用例只能使用数字,但是欢迎您提供指针以了解您所指的内容。 - lukik
定义“易记”数字,编写一个函数来检查它,然后在给定范围内生成随机数字,直到找到符合条件的数字。 - martineau
显示剩余4条评论
3个回答

3

我找到了一些使数字易记的方法:

http://www.slideshare.net/cntryrckr69/what-makes-a-number-memorable

我用Python实现了其中的几个方法。

下面是代码示例:

import random

def easynum(num):
    num = str(num)

    if len(set(num)) <= 2: # common characters eg. 1114111
        print("common")
        return True
    if num == num[::-1]: # its the same backwards eg. 1234321
        print("reversible")
        return True
    if all(x <= y for x, y in zip(list(num), list(num)[1:])): # increasing, e.g. 123456789
        print("increasing")
        return True
    if all(x >= y for x, y in zip(list(num), list(num)[1:])): # decreasing
        print("decreasing")
        return True


for count in range(10):
    rand = random.randint(1000000, 9999999)
    while easynum(rand) == None:
        rand = random.randint(1000000, 9999999)
    print(rand)
我获得的输出如下:
reversible
5691965
reversible
9585859
increasing
1112557
reversible
9057509
reversible
3831383
decreasing
8322000
increasing
1122356
common
4884484
decreasing
9887320
common
4004040

2

我可以想到几个易于记忆的模式:

1234321 (half reversed)
1234567 (in order)
1231231 (repeating)
7654321 (reverse order)
2468024 (even in order)
1357135 (odd in order)
1212121 (alternating)

显然你能想到更多的方法。拥有一个不同的模式库。从库中随机选择一个模式,然后在模式的限制范围内随机填充该模式。例如,在“按顺序”模式下,您只能选择起始数字,其余数字将取决于起始数字。


我认为带有重复数字的数字也很容易记住,“116633”。 - George Willcox

1

一种简单的方法是随机重复0-9数字不同次数,从而使一些数字比其他数字更容易出现。

import random
DIGITS = list(range(10))

def generate_easy_number(length=6):
    multiplier = list(range(10))
    random.shuffle(multiplier)
    repeated_dig = list()
    for i, n in enumerate(DIGITS):
        for _ in range(multiplier[i]):
            repeated_dig.append(n)
    random.shuffle(repeated_dig)
    return ''.join([str(x) for x in repeated_dig[:length]])

print(generate_easy_number())

准备一个0-10的数字列表,创建另一个名为multiplier的列表并进行随机化,然后使用其值来指示每个数字应重复的次数(或权重)。

创建最终的重复数字列表,对其进行随机化并进行切片。

随机结果:

404092
090417
002657
840818
130610
065644
495060

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接