我正在玩我自己的数独求解器,当我遇到这个时,我正在寻找一些指向良好和快速设计的指针:
def r(a):i=a.find('0');~i or exit(a);[m
in[(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3)or a[j]for
j in range(81)]or r(a[:i]+m+a[i+1:])for m in'%d'%5**18]
from sys import*;r(argv[1])
Run Code Online (Sandbox Code Playgroud)
我自己的实现解决了Sudokus,就像我在头脑中解决它一样,但这个神秘的算法是如何工作的?
http://scottkirkwood.blogspot.com/2006/07/shortest-sudoku-solver-in-python.html
我已经开发了.NET 4软件,我已准备好将其发送给测试版用户.如果在软件中抛出未处理的异常,我想抓住它,记录它并将日志发送给我.我已经实现了这个功能,当我在Visual Studio的调试模式下运行时,它似乎运行正常.但是,当我构建软件的发行版并安装它时,Microsoft .NET Framework开始在我的代码之前捕获异常.我收到一个错误消息的弹出窗口:"应用程序中的组件中发生了未处理的异常.如果单击继续,应用程序将忽略此错误并尝试继续."
为了测试崩溃,我创建了一个崩溃按钮,它会抛出异常.此崩溃记录自身,异常处理程序记录所有收到的未处理异常.当我查看发布版本的日志时,我只能看到崩溃时的日志消息,而不是异常处理程序中的日志消息.
我用这段代码附加了自己的异常处理程序:
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Run Code Online (Sandbox Code Playgroud)
有没有办法禁用.NET Framework的异常捕获,还是有更好的方法来附加我自己的异常处理程序?
更新:我正在使用WPF.我将查看DispatcherUnhandledException并告诉您它是否解决了问题.
更新#2:不幸的是,向Application.Current.DispatcherUnhandledException添加处理程序并没有解决问题.显然,这个调试弹出窗口是由Visual Studio附带的JIT(实时)调试器创建的.我将不得不用"民用"Windows测试软件,看看是否也有例外.
更新#3:由于某种原因,使用Visual Studio构建的版本可以使用,但是使用MSBuild脚本和Dotfuscator构建的版本不能.
我在同一个项目中使用了Knockout(版本2.0)和jQuery Mobile(版本1.0.1).问题在于将数据绑定到选择列表.jQuery Mobile以一种看似选择的值和实际列表是单独元素的方式呈现选择列表.这是通过执行来解决的
$(element).selectmenu('refresh', true);
Run Code Online (Sandbox Code Playgroud)
更改列表或选定值后.根据我的经验,这是一个危险的情况,因为开发人员经常忘记刷新选择列表.
为了简化这一点,我编写了自己的Knockout绑定处理程序.使用以下代码将值绑定到选择列表:
<select name="selection" data-bind="jqmOptions: values, optionsValue: 'id', optionsText: 'name', value: selectedValue">
</select>
Run Code Online (Sandbox Code Playgroud)
jqmOptions的实现:
ko.bindingHandlers.jqmOptions = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
if (typeof ko.bindingHandlers.options.init !== 'undefined') {
ko.bindingHandlers.options.init(element, valueAccessor, allBindingsAccessor, viewModel);
}
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
if (typeof ko.bindingHandlers.options.update !== 'undefined') {
ko.bindingHandlers.options.update(element, valueAccessor, allBindingsAccessor, viewModel);
}
var instance = $.data(element, 'selectmenu');
if (instance) {
$(element).selectmenu('refresh', true);
}
}
};
Run Code Online (Sandbox Code Playgroud)
这使用本机options绑定,但除此之外,它会在更改列表值后自动刷新选择列表.但是当我更改所选值时,这有问题.如果我首先设置列表值,我的jqmOptions将刷新选择列表,但此时,尚未设置所选值.我最终得到一个选择列表,它具有所有正确的值,并在内部选择了正确的选项,但jQuery Mobile仍然显示默认值为selected.
this.values(someArrayOfValues);
this.selectedValue(oneOfTheArrayValues);
Run Code Online (Sandbox Code Playgroud)
Knockout不允许我首先设置所选值然后设置列表值,因为在这种情况下,当我设置所选值时没有允许的值.因此,所选值始终未定义.
有没有办法编写Knockout自定义绑定,在两种情况下都会刷新选择列表元素:更改列表值和更改选定值时? …
我正在使用Eclipse 3.4和Tomcat 5.5,并且我已经设置了动态Web项目.我可以从http://127.0.0.1:8080/project/访问它,但默认情况下它提供WebContent文件夹中的文件.我想要提供的真实文件可以在名为"share"的文件夹下找到.这个文件夹来自CVS,所以我想用它给定的名字而不是重命名它.如何才能做到这一点?
我正在使用Eclipse 3.4和WTP 3.0.2并运行一个相当大的动态Web项目.我已经设置了项目,以便我可以在http://127.0.0.1:8080/share/访问它,但每当我这样做时,我都会收到以下错误:
java.lang.NoSuchMethodError: javax.servlet.jsp.tagext.TagAttributeInfo.(Ljava/lang/String;ZLjava/lang/String;ZZ)V at org.apache.jasper.compiler.TagLibraryInfoImpl.createAttribute(TagLibraryInfoImpl.java:572) at org.apache.jasper.compiler.TagLibraryInfoImpl.createTagInfo(TagLibraryInfoImpl.java:401) at org.apache.jasper.compiler.TagLibraryInfoImpl.parseTLD(TagLibraryInfoImpl.java:248) at org.apache.jasper.compiler.TagLibraryInfoImpl.(TagLibraryInfoImpl.java:162) at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:423) at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492) at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1552) at org.apache.jasper.compiler.Parser.parse(Parser.java:126) at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211) at org.apache.jasper.compiler.ParserController.parse(ParserController.java:100) at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:155) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:276) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:264) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) at java.lang.Thread.run(Unknown Source)
因为上述文件都不是我自己的,所以指出问题的原因是非常困难的.任何想法从哪里开始寻找?
我正在编写一个需要用户身份验证的jQuery Mobile应用程序.同一个用户无法从多个位置打开她的会话:如果用户从另一个浏览器登录,则前一个会话被标记为已死.
如果用户尝试使用具有死会话的浏览器移动到另一页面,则会显示"错误加载页面"消息.这很糟糕,因为用户可能不知道她为什么会收到此错误.是否可以点击错误事件,以便我可以检查会话的状态,并在会话耗尽时将用户重定向到登录页面?
我有一个Delphi XE项目,我正在尝试在使用MSBuild构建它之前更改程序的版本号.版本号信息位于DPROJ文件中,但如果我更改这些值,则版本号不会更改.我认为这样做的原因是当您在IDE中更改版本号时,Delphi会将更改保存到DPROJ和RES文件中.
有没有办法从命令行编译RES文件与DPROJ文件中的更改?我发现这个问题,这表明节省的INC文件的版本号和包括的项目,但这种感觉更复杂一点的解决方案相比,只是在DPROJ进行更改.
我正在实施名为Suomen Verkkomaksut的数字支付服务界面.有关付款的信息将通过HTML表单发送给他们.为了确保在传输过程中没有人混淆信息,MD5哈希在两端都会计算出一个没有发送给他们的特殊密钥.
我的问题是,由于某种原因,他们似乎决定传入的数据是用ISO-8859-1而不是UTF-8编码的.我发送给它们的哈希是用UTF-8字符串计算的,因此它与它们计算的哈希值不同.
我尝试使用以下代码:
String prehash = "6pKF4jkv97zmqBJ3ZL8gUw5DfT2NMQ|13466|123456||Testitilaus|EUR|http://www.esimerkki.fi/success|http://www.esimerkki.fi/cancel|http://www.esimerkki.fi/notify|5.1|fi_FI|0412345678|0412345678|esimerkki@esimerkki.fi|Matti|Meikäläinen||Testikatu 1|40500|Jyväskylä|FI|1|2|Tuote #101|101|1|10.00|22.00|0|1|Tuote #202|202|2|8.50|22.00|0|1";
String prehashIso = new String(prehash.getBytes("ISO-8859-1"), "ISO-8859-1");
String hash = Crypt.md5sum(prehash).toUpperCase();
String hashIso = Crypt.md5sum(prehashIso).toUpperCase();
Run Code Online (Sandbox Code Playgroud)
不幸的是,两个散列都与值C83CF67455AF10913D54252737F30E21相同.根据Suomen Verkkomaksut的文档,此示例案例的正确值为975816A41B9EB79B18B3B4526569640E.
有没有办法用ISO-8859-1字符串计算Java中的MD5哈希?
更新:在等待Suomen Verkkomaksut的回答时,我发现了另一种制作哈希的方法.Michael Borgwardt纠正了我对字符串和编码的理解,并且我找到了一种从byte []创建哈希的方法.
Apache Commons是一个很好的库源,我发现它们的DigestUtils类有一个md5hex函数,它接受byte []输入并返回一个32字符的十六进制字符串.
由于某种原因,这仍然无效.这两个都返回相同的值:
DigestUtils.md5Hex(prehash.getBytes());
DigestUtils.md5Hex(prehash.getBytes("ISO-8859-1"));
Run Code Online (Sandbox Code Playgroud) 我正在使用两个TChart组件,并希望为它们进行同步缩放.我发现TChart有ZoomRect程序用于放大图表上的所需矩形,但我没有找到任何方法从另一个图表中读取此缩放矩形的坐标.
这里有一些伪代码可以进一步说明:
MainChart.OnZoom := HandleZooming;
...
procedure HandleZooming(Sender: TObject);
var
zoomRectangle: TRect;
begin
zoomRectangle := MainChart.?????;
SecondaryChart.ZoomRect(zoomRectangle);
end;
Run Code Online (Sandbox Code Playgroud)
我正在使用Delphi XE.
我正在使用Delphi XE,我想制作一个按钮,只显示提供的PNG图像,透明背景,没有任何额外的边距.
我尝试用TButton做这个,但是我得到了一个带有bsPushButton风格的丑陋灰色背景.如果我使用bsCommandLink样式,则有一个10像素的上边距,尽管我的所有ImageMargins设置都设置为0.
实现这一目标的最简单方法是什么?
编辑:它不必看起来像一个按钮.我只需要它看起来与它所分配的图像完全一样.优选地,它应该能够是制表位并具有各种状态(启用,禁用,悬停......),因此我可以为每个状态分配适当的图像.
我正在使用Delphi XE.
我在表单上添加了一个TAdvGlowButton,并添加了一个带有一个透明PNG图像的TImageList作为图像源.当我在设计模式下查看表单时,按钮看起来完全正确,图像是透明的.但是,当我运行程序时,图像的背景变为纯黑色.如果我不正确,这不是TAdvGlowButton的错误,而是TImageList.
有没有办法解决这个问题,而不使用任何第三方组件?