初看一脸问号,看懂直接跪下! (中)

简介: 初看一脸问号,看懂直接跪下! (中)

然后这个问题下面还有个评论,让我看到了另外一种打开方式:


image.png

你能指定打印出 hello world,那么理论上我也能指定打出其他的单词。

比如这个老哥就打了一个短语:the quick browny fox jumps over a lazy dog.

如果从字面上直译过来,那么就是“敏捷的棕色狐狸跨过懒狗”,好像也是狗屁不通的样子。

但是,你知道的,我的 English 水平是比较 high 的,一眼就看出这个短语在这里肯定不简单。

于是查了一下:

image.png

image.png

你看学沙雕技术的时候还顺便丰富了自己的英语技能,一举多得,这一会还不得在文末给我点个赞、点个“在看”啥的?

看完这个老哥的 quick brown fox 示例之后,我又有一点新想法了。

既然它能把所有的字母都打出来,那我是不是也能把我想要的特定的短语也打出来呢?

比如 i am fine thank you and you 这样的东西。

而查找指定单词对应的 seed 这样的功能的代码,在这个问题的回答中,已经有“好事之人”帮我们写出来了。

我就直接粘过来,你也可以直接拿去就用:

public static long generateSeed(String goal, long start, long finish) {
    char[] input = goal.toCharArray();
    char[] pool = new char[input.length];
    label:
    for (long seed = start; seed < finish; seed++) {
        Random random = new Random(seed);
        for (int i = 0; i < input.length; i++)
            pool[i] = (char) (random.nextInt(27) + '`');
        if (random.nextInt(27) == 0) {
            for (int i = 0; i < input.length; i++) {
                if (input[i] != pool[i])
                    continue label;
            }
            return seed;
        }
    }
    throw new NoSuchElementException("Sorry :/");
}

那么我要找前面提到的短语,就很简单了:

image.png

而且运行的时候我明显感觉到,在搜索“thank”这个单词的时候,花了很多时间。

为什么?

我给你讲一个故事啊,只有一句话,你肯定听过:

只要时间足够漫长,猴子都能敲出一部《莎士比亚》。

我们这里 generateSeed 方法,就相当于这个猴子。而 thank 这个单词,就是《莎士比亚》。

在 generateSeed 方法里面,通过 26 个字母不断的排列组合,总是能排列出 “thank” 的,只是时间长短而已。

单词越长,需要的时间就越长。

比如我来个 congratulations,这么长的单词,我从 00:05 分,跑了 23 个小时都还没跑出来:

image.png



源码


你以为我要带你读源码?

不是的,我主要带你吃瓜。

首先,看一下的 Random 无参构造函数:

image.png

好家伙,原来也是套个了个“无参”的壳而已,实际上还是自己搞了一个 seed,然后调用了有参构造方法。

只是它构建的时候加入了“System.nanoTime()”这个变量,让 seed 看起来随机了一点而已。

等等,前面不是还有一个“seedUniquifier”方法吗?

这个方法是这样的:

image.png

好家伙,看到第一眼的时候我头都大了,这里面有两个“魔法数”啊:

181783497276652981L

8682522807148012L

这玩意也看不懂啊?

遇事不决,stackoverflow。

一搜就能找到这个地方:

https://stackoverflow.com/questions/18092160/whats-with-181783497276652981-and-8682522807148012-in-random-java-7


image.png

论文中提到的数是这样的:

微信图片_20220429090100.png

目录
相关文章
|
5月前
|
数据采集 Java 机器人
根据正则表达式截取字串符,这个办法打败99%程序员
作为一名程序员,常常会在以下情况下使用函数功能根据正则表达式截取字符串:
|
8月前
|
数据采集 XML 编解码
正则表达式学废了?xpath来救!
正则表达式学废了?xpath来救!
46 0
|
9月前
|
Python
一脸懵逼的运算符走来了
一脸懵逼的运算符走来了
32 0
|
9月前
|
前端开发 JavaScript 数据安全/隐私保护
关于正则表达式,小黄人有话要说!!!
本文将带你逐步学习正则表达式的基础知识和高级技巧,从基本的元字符到实用的正则表达式示例,让你轻松掌握这一重要的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都能帮助你更好地理解和应用正则表达式。
78 0
关于正则表达式,小黄人有话要说!!!
|
SQL 算法 数据挖掘
【边学边敲边记】LeetCode008:有效的括号
【边学边敲边记】LeetCode008:有效的括号
【边学边敲边记】LeetCode008:有效的括号
【不同的子序列问题】面试官写个字符串要我求有多少个“bigsai“,我懵了
如何求一个字符串中有多少个pat。不要想着三重for循环去枚举所有情况了,那不是好的方法。这这种题如果有灵感的话应该能猜出来这应该是一种动态规划的问题。
74 0
【不同的子序列问题】面试官写个字符串要我求有多少个“bigsai“,我懵了
|
前端开发 JavaScript
#yyds干货盘点# 前端歌谣的刷题之路-第四十二题-去掉字符串两端空格
#yyds干货盘点# 前端歌谣的刷题之路-第四十二题-去掉字符串两端空格
54 0
#yyds干货盘点# 前端歌谣的刷题之路-第四十二题-去掉字符串两端空格
|
JSON API 数据格式
一日一技:难以置信,还有人不知道反斜杠和引号的关系
一日一技:难以置信,还有人不知道反斜杠和引号的关系
228 0
一日一技:难以置信,还有人不知道反斜杠和引号的关系
|
移动开发 算法
初看一脸问号,看懂直接跪下! (上)
初看一脸问号,看懂直接跪下! (上)
119 0
初看一脸问号,看懂直接跪下! (上)
|
Java
初看一脸问号,看懂直接跪下! (下)
初看一脸问号,看懂直接跪下! (下)
99 0
初看一脸问号,看懂直接跪下! (下)