走出Sansara的方向盘,极端主义和一些绿色的东西-在Joker 2018大会上解析GridGain手册中的任务

Joker会议于10月19日至20日在圣彼得堡举行-对于那些热爱我们的人来说,这是最好的活动:酷的报告,与Java高级专家的交流和任务。 我们不会赞扬GridGain( 1,2 )的第三期任务,我们最好引用参与者的反馈:

“他们的任务看起来很愚蠢,与IT无关”
“一如既往的出色工作(尽管我还没有掌握)”
“任务成瘾”
“一如既往的首要任务”

我们按照承诺发布了详细的解决方案。 他们将其带到破坏者的下面,以便那些错过会议的人可以尝试一下。



任务1


三个月前,我们编写了这项任务,但在2018年10月,总统提出了将282篇文章定为非刑事犯罪的倡议,我们对此感到非常高兴,但我们一直在不停地重做这些文本。 因此,让所有内容照原样保留在此任务中。

字母中心监视攻击性模因的位置以及它们在社交网络上的喜欢和转发。 作为数字化转型的一部分,监控部门的整个办公室已被人工智能所取代。 这项创新有助于快速计算用户从点赞转为转贴的可能性,以成功将案件提交法院。 以前,在192天内以90%的概率发布了单字母定罪。 该过程的自动化使指标达到12天的可能性为99.9%。

问题:如果句子的频率具有指数分布,那么创新方法使母乳喂养者转化为信念的次数增加了282次?

问题1的解决方案
*在我们作者的展位上命名报价和作品后,您可以立即收到礼物。 当然,这是尤里·科伊(Klinsky),“煤气部门”和“无家可归者”曲目

根据初始条件, 句子的出现频率呈指数分布,然后在引入机器人之前和之后,我们具有以下表达式来评估句子在时间≤t中发音的可能性:

F1t=1e lambda1tF2t=1e lambda2t

在哪里  lambda1 lambda2 -这些是未知的参数,用于指定句子的出现频率,t是时间参数,根据条件证明:

F1192=0.9F212=0.999

从这些方程式可以很容易地表达参数  lambda1 lambda2

 lambda1= ln10.9/192 sim=0.012 lambda2= ln10.999/12 sim=0.576

从句子数和memasics数线性相关的假设,我们可以得出以下结论:  lambda1 lambda2 只是给出所需的值:

 lambda2/ lambda1 sim=48




任务2


从佛教瓦西里的角度来看,该代码是完美的,而不是什么都没有添加,而是什么都不能删除的时候。 受此想法的激励,我们的瓦西里决定改进EpsilonGC,并向世界展示Dzen-GC-一种完美思想的产品,它不仅可以清除堆内存,甚至不允许对其进行分配。 显然,使用这种创新的GC在JVM中进行分配仅可以在堆栈上进行,并且仅适用于原始类型。

为了测试新功能,Vasily决定用Java编写一个函数,以找到6个值的模式(mode是观察值集中最常出现的值),也就是说,它具有以下签名:

public static int mode(int n0, int n1, int n2, int n3, int n4, int n5) 

为了更接近启蒙,瓦西里没有在代码中声明其他局部变量和方法,并且仅用左手的小指进行编程。

任务:帮助Vasily轻松地执行此功能(允许使用所有手指)。

问题2的解决方案
让我们尝试弄清楚如果没有如此严格的限制,该问题如何解决。 只需说说这些值是在一个数组中传输的,建议不要使用额外的内存(但是可以使用一点内存)。

然后,我们将注意到使用Map <Integer,Integer>的选项,并注意到该模式在排序数组中查找最为方便:如果重复该值,则所有重复项都在附近。 我们对数组进行排序,然后一遍(和两个变量)找到具有最大重复次数的值。

现在注意:

1)您可以对值进行递归排序。

 // Expectation: if there are more than one mode, we are free to return any of them. // 2,2,3,3,4,4 has 3 modes : 2,3,4. I expect that 3 is correct answer. public static int mode (int a, int b, int c, int d, int e, int f){ // If arguments are not sorted, let's sort them with bubble sort :) if (a > b) return mode(b,a,c,d,e,f); if (b > c) return mode(a,c,b,d,e,f); if (c > d) return mode(a,b,d,c,e,f); if (d > e) return mode(a,b,c,e,d,f); if (e > f) return mode(a,b,c,d,f,e); 


2)我们只有6个排序值。
3)如果该值重复3次(所有值的一半)-这已经是mod!
3.1)如果没有,但是有2次重复-这是一个mod!
3.2)如果没有重复的值,则任何值都是一个模式。

 // Check for mode with 3+ repeats. 3 repeats is enough to say value is a mode (3 is half of 6). // Since args are sorted, a == b && b == c is the same as a == c; if (a == c) return a; if (b == d) return b; if (c == e) return c; if (d == f) return d; // Check for 2 repeats. if (a == b) return a; if (b == c) return b; if (c == d) return c; if (d == e) return d; if (e == f) return e; return f; } 


严格来说,一个问题可以有很多解决方案,但是我们喜欢它是最简单,最和谐的解决方案。



任务3


两名吸毒者决定离开黑客帝国,了解其中哪一位是被选中的吸毒者。 为此,他们获得了1包蓝色药丸和4包红色药丸(相同大小的药盒),并且为了增强效果,他们决定以绿色喝。

突然,事实证明,由于矩阵故障(如吸毒者所认为的),最初具有RGB颜色#2D241D和#F4E3E1的颜色的面部开始根据所使用的片剂和绿茶的数量而发生变化:每片(或1毫升绿茶)线性增加相应的片剂量吸毒者脸上的颜色。

同时,每个RGB分量的值不能超过#FF,也就是说,进一步使用数位板或鲜绿色没有效果。 Zelenka最初有几个完整的小瓶,每个小瓶20毫升,以毫升计的总瓶数比以小片计的片剂总数少2倍。 在黑客帝国退出事件之后,第二个瘾君子在其中吃饭
吸毒者的红色药片比第一个蓝色的多54片,没有剩多少。

问题:如果每个瘾君子的脸分别是#F0FF6B和#FFFEFF,那么每个瘾君子使用了多少药丸和美元,并且已知美钞的强度是红药的3倍,而红药的强度是红药的2倍
比蓝色弱?

问题3的解决方案
首先,我们将只在最终值中选择严格小于0xFF的颜色,因为根据条件,对于值0xFF,我们只能给出所用色彩增强器的下边界。 这些是值0xF0、0x6B和0xFE。 我们得到以下方程式:

r1k=0xF00x2D=195b12k=0x6B0x1D=78g23k=0xFE0xE3=27



r1k=195b1k=39g2k=9

这里k是红色药丸的作用系数, col_i,col \ in \ {r,g,b \},i \ in \ {1,2 \}col_i,col \ in \ {r,g,b \},i \ in \ {1,2 \} ,-相应消费者使用的相应颜色的放大器数量(片剂以件为单位,绿色-毫升)。 此外,我们知道第二种吃的红色药片比第一种吃的红色药片多54种,一切都很简单:

r2=54+b1

从片剂数与绿色的毫升数之比的条件得出另一个方程式:

2g1+g2=r1+b1+r2+b2

从红色和蓝色药片之间的比率我们也可以得出:

r1+r2=4b1+b2

此外,我们知道有20毫升的美元有好几次:

g1+g2=20z 其中z是一个非负整数。

从假设k为整数,而丸剂为整数(可以随意喝美元)的情况出发,唯一符合以下条件的答案:

r1=195g1=171b1=39

r2=93g2=9b2=33

例如,可以通过下面描述的方法非常简单地获得它。
我们有一个比例 b1k=39 。 39的唯一因式分解是{1,39},{3,13}。 因此,k只能从集合{1、3、13、39}中取值。 让我们尝试值“ 3”。

r1=195/3=65b1=39/3=13g2=9/3=3r2=54+b1=54+13=67b2=r1+r24b1/4=65+67413/4=20g1=r1+b1+r2+b22g2/2=65+13+67+2023/2=79/2

但同时 g1+g2 必须为20的倍数,而不是该值(79.5 + 3)。

完全以相同的方式消除值“ 13”和“ 39”。 k剩余的唯一值是1。 替代它,我们不会遇到矛盾并得到答案。

实际上,由于问题中无处可说,红色RGB分量的线性增量系数k是整数,因此解决方案是一个全族,即使我们假设绿色仅以1 ml的倍数消耗,并且片剂全部被消耗(即使没有单独指定):

r1=1040n+195g1=732n+171b1=208n+39

r2=208n+93g2=48n+9b2=104n+33
n是一个非负整数。

为了获得这个族,您需要通过重写它们来消除前三个方程中的k,例如:

3r115b1=03r165g2=015b165g2=0

然后求解线性Diophantine方程组(自然包括其余的方程组,化简为正确的形式)。 如果我们不假设zelenka仅在以毫升为单位的体积中消耗,我们将获得一个Diophantine方程的非线性系统,对整个未知分子和分母取g1和g2(显然应该是有理数)。 如果我们以最一般的形式解决问题(所有值都是连续的),那么还有更多解决方案。

优胜者


没错,所有任务都由Alexey Ryzhikov和Valentin Shipilov解决。 此外,Alexey Galkin,Anton Blinov,Ilya Perevozchikov和其他几位参与者也获得了奖项。 恭喜你!

Source: https://habr.com/ru/post/zh-CN428369/


All Articles