The Imitation Game
《The Imitation Game》是一部非常好的电影,讲述了人工智能之父——阿兰图灵的传奇一生。
重点讲述了他通过破译德国的通讯密码缩短了二战的持续时间,因而拯救了无数生命的伟大事迹。
强烈推荐大家去看一看,这可是豆瓣评分8.6的好片啊!
另外,《The Imitation Game》也是当年图灵发表的关于他对人工智能看法的论文。链接在此
德国当时的加密方式叫Enigma,具体是怎样的加密机制呢?图灵面临了怎样的挑战呢?
POJ 1449给了我们一次亲身体验破解Enigma的机会。
代码如下:
#include <cstdio>
#include <cstring>
using namespace std; #define D(x) int f[][];
int g[][];
int state[];
int cipher[];
int plain[];
int len;
int *mark[];
int mark_num;
bool ok;
int power[] = {, , * , * * }; int get_next(int a[])
{
char st[];
scanf("%s", st);
for (int i = ; st[i]; i++)
{
if (st[i] == '?')
{
a[i] = -;
mark[mark_num++] = &a[i];
continue;
}
a[i] = st[i] - 'a';
}
return strlen(st);
} void input()
{
mark_num = ;
for (int i = ; i < ; i++)
{
get_next(f[i]);
}
get_next(state);
len = get_next(plain);
get_next(cipher);
} void output()
{
for (int i = ; i < len; i++)
{
putchar(plain[i] + 'a');
}
puts("");
} int encrypt(int a, int pos)
{
int temp = f[][a];
int cur_state[];
int delta[]; for (int i = ; i < ; i++)
{
cur_state[i] = state[i] + pos / power[i];
cur_state[i] = (cur_state[i] + ) % ;
}
delta[] = cur_state[];
for (int i = ; i < ; i++)
{
delta[i] = (cur_state[i] - cur_state[i - ] + ) % ;
} for (int i = ; i < ; i++)
{
temp = f[i][(temp + delta[i] + ) % ];
} for (int i = ; i >= ; i--)
{
temp = g[i][(temp - delta[i + ] + ) % ];
} temp = g[][(temp - delta[] + ) % ];
return temp;
} bool check()
{
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
g[i][f[i][j]] = j;
}
} for (int i = ; i < len; i++)
{
if (encrypt(plain[i], i) != cipher[i])
{
return false;
}
}
return true;
} void dfs(int step)
{
if (ok)
{
return;
}
if (step == mark_num)
{
if (check())
{
ok = true;
output();
}
return;
}
for (int i = ; i < ; i++)
{
*mark[step] = i;
dfs(step + );
}
} void test(char a, int b)
{
check();
printf("%c %c\n", a, encrypt(a - 'a', b) + 'a');
} int main()
{
int t;
scanf("%d", &t);
for (int i = ; i <= t; i++)
{
printf("Scenario #%d:\n", i);
input();
ok = false;
dfs();
D(test('a', ));
puts("");
}
return ;
}
The Imitation Game的更多相关文章
- 深度学习课程笔记(七):模仿学习(imitation learning)
深度学习课程笔记(七):模仿学习(imitation learning) 2017.12.10 本文所涉及到的 模仿学习,则是从给定的展示中进行学习.机器在这个过程中,也和环境进行交互,但是,并没有显 ...
- #英文#品读中国城市个性——最好的和最坏的&当东方遇到西方
冒险家的乐园 a playground of risk 实现发财梦 realize one's dreams of wealth 道德沦丧,堕落 moral deprivation 租界 foreig ...
- Unix及类Unix系统文本编辑器的介绍
概述 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Em ...
- iOS开发之开源项目链接
1. Coding iOS 客户端 Coding官方客户端. 笔者强烈推荐的值得学习的完整APP.GitHub - Coding/Coding-iOS: Coding iOS 客户端源代码 2. OS ...
- AssetBundle loading failed because.....已解决
http://blog.csdn.net/ldghd/article/details/9632455 ***************************** 一 ******* ...
- 【Python + Selenium】Mock Testing 是啥?一个so上的高票答案。
There are many kinds of testing which really made me confused. To be honest, I've never heard of som ...
- 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)
本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...
- vim深入研究
About VIM--Unix及类Unix系统文本编辑器 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇 ...
- GitHub 上有哪些完整的 iOS-App 源码值得参考?
1. Coding iOS 客户端 Coding官方客户端. 笔者强烈推荐的值得学习的完整APP.GitHub - Coding/Coding-iOS: Coding iOS 客户端源代码 2. OS ...
随机推荐
- C语言中的参数传递
有空看看: c语言 函数传输传递的三种方式(值.指针.引用) C语言之参数传递 C语言形参和实参,传值调用和引用调用的区别
- 两种html幻灯片效果
650) this.width=650;" src="http://img1.51cto.com/attachment/201307/165757318.jpg" tit ...
- 【转】asp.net mvc 页面跳转
1.使用传统的Response.Redirect例如string url = "/account/create";Response.Redirect(url); 1.Server. ...
- List对象排序通用方法
import java.util.Collections; import java.util.Comparator; import java.util.List; import java.lang.r ...
- java的封装
- BNR Android Demo学习笔记(一)——CrimeIntent
开发环境:win7,Android Studio 1.2, 1.Model Crime,数据模型,每个Crime有一个UUID作为唯一标识. package tina.criminalintent; ...
- Makefile 编译生成多个可执行文件
CC = gcc CXX = g++ CFLAGS = -O -DDBG -D_REENTRANT -Wall -DUSE_PTHREAD -pthread LDFLAGS = -ldl -lnsl ...
- Unity手游之路<十>自动寻路Navmesh之跳跃,攀爬,斜坡
http://blog.csdn.net/janeky/article/details/17598113 在之前的几篇Blog总,我们已经系统学习了自动寻路插件Navmesh的相关概念和细节.然而,如 ...
- session会话复制
前几天请教了Yoda大神关于会话复制方面的问题, 如果客户访问是两个服务器的东西,这样会有两个分别的session, 这两个session之间怎么交互,集群环境下,同构的服务器,专业术语 ...
- [转载]html中DTD使用小结
原文链接:http://www.jb51.net/web/36856.html DTD 是一套关于标记符的语法规则.它是XML1.0版规格得一部分,是html文件的验证机制,属于html文件组成的一部 ...