rot13的想法是模糊文本,例如防止剧透.它并不意味着加密安全,而只是确保只有那些确定要阅读它的人才能阅读它.
对于涉及密封投标的申请,我想对数字做类似的事情.粗略地说,我想向某人发送我的号码并相信他们选择他们自己的号码,不受我的影响,但是当他们准备好时他们应该能够透露我的(纯粹是客户端).他们不应要求我或任何第三方提供进一步的意见.
(已添加:请注意收件人信任不作弊的假设.)
它并不像rot13那么简单,因为某些数字,比如1和2,会经常发生,你可能会记得34.2确实是1.
这是我正在寻找的具体内容:
功能密封(),将实数映射到实数(或字符串).它应该不具有确定性-封口(7)每次不应映射到相同的事情.但相应的函数unseal()应该是确定性的 - unseal(seal(x))应该等于所有x的x.我不希望密封或开封调用任何web服务甚至获得系统时间(因为我不想假设同步时钟).(补充:可以假设所有出价都低于某个最高出价,每个人都知道,比如一百万.)
完整性检查:
> seal(7)
482.2382 # some random-seeming number or string.
> seal(7)
71.9217 # a completely different random-seeming number or string.
> unseal(seal(7))
7 # we always recover the original number by unsealing.
Run Code Online (Sandbox Code Playgroud) 使用可选的命名参数定义函数的最佳/规范方法是什么?为了使混凝土,让我们创建一个函数foo与命名的参数a,b和c,其默认为1,2,3,分别.为了比较,这是一个foo带位置参数的版本:
foo[a_:1, b_:2, c_:3] := bar[a,b,c]
Run Code Online (Sandbox Code Playgroud)
以下是命名参数版本的示例输入和输出foo:
foo[] --> bar[1,2,3]
foo[b->7] --> bar[1,7,3]
foo[a->6, b->7, c->8] --> bar[6,7,8]
Run Code Online (Sandbox Code Playgroud)
当然,在命名参数之前使用位置参数也很容易.
我最近做了从tcsh到bash的长期过期.我唯一想念的是tcsh的ESC+ p功能:开始键入一个命令,然后点击ESC+ p(我实际上找到了等效的ctrl- [p更容易键入],它跳转到历史记录中最新的命令,从你的开始打字到目前为止.
也许最好的答案就是习惯于抨击Ctrl+ r但是到目前为止我并不喜欢它.我经常开始输入一个命令然后发生在我之前我发过它.有了tcsh的功能,我就可以用ESC+ p+ Enter重新发布它.这是如此之快,我通常永远不会使用向上箭头超过2个命令.
我发现它特别好的一个例子:长命令通常以点开头,因为它们是形式
./myprogram.pl -lots -of -args -and -switches
Run Code Online (Sandbox Code Playgroud)
在tcsh中我会发出这样的命令,然后可能是ls,less,tail,whatever,然后重新发出long命令,4个键:dot,escape,p,enter.
我怎么能在Bash中做到这一点?或者,为了使其具体化,bash中最少的击键次数是"重复以点开头的最后一个命令"?它可以匹配或击败tcsh的4吗?
我正在寻找简单的Python函数,它接受一个字符串并返回一个类似的字符串,但所有非ascii字符转换为它们最接近的ascii等价物.例如,应该删除变音符号等.我想象必须有一个非常规范的方法来做这个并且有很多相关的stackoverflow问题,但我找不到一个简单的答案所以它似乎值得一个单独的问题.
输入/输出示例:
"Étienne" -> "Etienne"
Run Code Online (Sandbox Code Playgroud) 请考虑以下带有内核命令行界面的对话框:
$ math
Mathematica 6.0 for Linux x86 (32-bit)
In[1]:= p = Plot[x^2, {x,-1,1}]
Out[1]= -Graphics-
In[2]:= Export["foo.png", p]
Out[2]= foo.png
Run Code Online (Sandbox Code Playgroud)
这在一台机器上工作正常$Version = 6.0 for Linux x86 (32-bit) (June 2, 2008)但在$Version = 7.0 for Linux x86 (64-bit) (November 11, 2008)具有以下错误的机器上失败:
Export::nofe: A front end is not available; export of PNG
requires a front end.
Run Code Online (Sandbox Code Playgroud)
我可以想到任何其他图像格式的类似错误.
所以问题是,我怎样才能获得Mathematica内核,没有前端,导出图像?为什么它在Mathematica 6.0中顺利运行?如果以上示例适用于版本7,请告诉我们!
PS:版本7引入了该功能,UsingFrontEnd但失败了
Developer`UseFrontEnd::nofestart:
Unable to launch a front end. Proceeding without a front end.
Run Code Online (Sandbox Code Playgroud)
大概是因为机器上没有安装X11.
事实证明,在这方面版本6和版本7之间没有区别.相反,在版本为6的机器上,前端正在静默调用.正如这个问题的答案所表明的那样,另一台机器的问题是没有X服务器,因此无法调用前端.
在下面的代码中,如果字符串s被追加为10或2万个字符,则Mathematica内核会出错.
s = "This is the first line.
MAGIC_STRING
Everything after this line should get removed.
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
...";
s = StringReplace[s, RegularExpression@"(^|\\n)[^\\n]*MAGIC_STRING(.|\\n)*"->""]
Run Code Online (Sandbox Code Playgroud)
我认为这主要是Mathematica的错,我已经提交了一份错误报告,如果得到回复,我会在这里跟进.但我也想知道我是否以愚蠢/低效的方式做这件事.即使不是,也应该赞赏解决Mathematica错误的想法.
我把它一起作为一种表面上看起来很健壮的方式来调用一个不稳定的web服务,它会给出超时和偶尔的名称解析或套接字错误等等.我想我会把它放在这里以防它有用,或者更有可能被告知更好的方法来做到这一点.
require 'net/http'
retries = 5
begin
url = URI.parse('http://api.flakywebservice.com')
http = Net::HTTP.new(url.host, url.port)
http.read_timeout = 600 # be very patient
res = nil
http.start{|http|
req = Net::HTTP::Post.new(url.path)
req.set_form_data(params) # send a hash of the POST parameters
res = http.request(req)
}
rescue Exception # should really list all the possible http exceptions
sleep 3
retry if (retries -= 1) > 0
end
# finally, do something with res.body, like JSON.parse(res.body)
Run Code Online (Sandbox Code Playgroud)
这个问题的核心是:在打电话给这样的网络服务时,我应该寻找所有例外情况?这是尝试收集所有这些,但似乎必须有一个比这更好的方法:http: //tammersaleh.com/posts/rescuing-net-http-exceptions
你知道reducePython中的方便功能.例如,您可以使用它来总结这样的列表(假装没有内置总和):
reduce(lambda x,y: x+y, [1,2,3,4], 0)
Run Code Online (Sandbox Code Playgroud)
返回(((0 + 1)+2)+3)+4 = 10.
现在如果我想要一个中间总和列表怎么办?在这种情况下,[1,3,6,10].
这是一个丑陋的解决方案.还有更多的pythonic吗?
def reducelist(f, l, x):
out = [x]
prev = x
for i in l:
prev = f(prev, i)
out.append(prev)
return out
Run Code Online (Sandbox Code Playgroud)