- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于那些不熟悉游戏的人。你有 8 个数字,你必须使用 +、-、/和 * 来达到目标。
因此,如果目标是 254,而您的游戏号码是 2, 50, 5, 2, 1,那么您可以正确回答问题,说 5 * 50 = 250。那么 2+2 就是 4。加上它,得到 254。
部分游戏视频如下:
Video 1
video 2
基本上,我通过为数字和符号的所有烫发生成所有大小的所有烫发来强制使用游戏,并使用基本的 inflix 计算器来计算解决方案。
然而它包含一个缺陷,因为所有的解决方案都是这样解决的:((((1+1)*2)*3)*4)。它不会排列括号,这让我很头疼。
因此我无法解出所有方程。例如,给定
目标 16 和数字 1,1,1,1,1,1,1,1 在它应该执行 (1+1+1+1)*(1+1+1+1)=16 时失败。
我会喜欢有人可以帮助完成这个......用任何语言。
这是我到目前为止所写的:
#!/usr/bin/env perl
use strict;
use warnings;
use Algorithm::Permute;
# GAME PARAMETERS TO FILL IN
my $target = 751;
my @numbers = ( '2', '4', '7', '9', '1', '6', '50', '25' );
my $num_numbers = scalar(@numbers);
my @symbols = ();
foreach my $n (@numbers) {
push(@symbols, ('+', '-', '/', '*'));
}
my $num_symbols = scalar(@symbols);
print "Symbol table: " . join(", ", @symbols);
my $lst = [];
my $symb_lst = [];
my $perms = '';
my @perm = ();
my $symb_perms = '';
my @symb_perm;
my $print_mark = 0;
my $progress = 0;
my $total_perms = 0;
my @closest_numbers;
my @closest_symb;
my $distance = 999999;
sub calculate {
my @oprms = @{ $_[0] };
my @ooperators = @{ $_[1] };
my @prms = @oprms;
my @operators = @ooperators;
#print "PERMS: " . join(", ", @prms) . ", OPERATORS: " . join(", ", @operators);
my $total = pop(@prms);
foreach my $operator (@operators) {
my $x = pop(@prms);
if ($operator eq '+') {
$total += $x;
}
if ($operator eq '-') {
$total -= $x;
}
if ($operator eq '*') {
$total *= $x;
}
if ($operator eq '/') {
$total /= $x;
}
}
#print "Total: $total\n";
if ($total == $target) {
#print "ABLE TO ACCURATELY SOLVE WITH THIS ALGORITHM:\n";
#print "PERMS: " . join(", ", @oprms) . ", OPERATORS: " . join(", ", @ooperators) . ", TOTAL=$total\n";
sum_print(\@oprms, \@ooperators, $total, 0);
exit(0);
}
my $own_distance = ($target - $total);
if ($own_distance < 0) {
$own_distance *= -1;
}
if ($own_distance < $distance) {
#print "found a new solution - only $own_distance from target $target\n";
#print "PERMS: " . join(", ", @oprms) . ", OPERATORS: " . join(", ", @ooperators) . ", TOTAL=$total\n";
sum_print(\@oprms, \@ooperators, $total, $own_distance);
@closest_numbers = @oprms;
@closest_symb = @ooperators;
$distance = $own_distance;
}
$progress++;
if (($progress % $print_mark) == 0) {
print "Tested $progress permutations. " . (($progress / $total_perms) * 100) . "%\n";
}
}
sub factorial {
my $f = shift;
$f == 0 ? 1 : $f*factorial($f-1);
}
sub sum_print {
my @prms = @{ $_[0] };
my @operators = @{ $_[1] };
my $total = $_[2];
my $distance = $_[3];
my $tmp = '';
my $op_len = scalar(@operators);
print "BEST SOLUTION SO FAR: ";
for (my $x = 0; $x < $op_len; $x++) {
print "(";
}
$tmp = pop(@prms);
print "$tmp";
foreach my $operator (@operators) {
$tmp = pop(@prms);
print " $operator $tmp)";
}
if ($distance == 0) {
print " = $total\n";
}
else {
print " = $total (distance from target $target is $distance)\n";
}
}
# look for straight match
foreach my $number (@numbers) {
if ($number == $target) {
print "matched!\n";
}
}
for (my $x = 1; $x < (($num_numbers*2)-1); $x++) {
$total_perms += factorial($x);
}
print "Total number of permutations: $total_perms\n";
$print_mark = $total_perms / 100;
if ($print_mark == 0) {
$print_mark = $total_perms;
}
for (my $num_size=2; $num_size <= $num_numbers; $num_size++) {
$lst = \@numbers;
$perms = new Algorithm::Permute($lst, $num_size);
print "Perms of size: $num_size.\n";
# print matching symb permutations
$symb_lst = \@symbols;
$symb_perms = new Algorithm::Permute($symb_lst, $num_size-1);
while (@perm = $perms->next) {
while (@symb_perm = $symb_perms->next) {
calculate(\@perm, \@symb_perm);
}
$symb_perms = new Algorithm::Permute($symb_lst, $num_size-1);
}
}
print "exhausted solutions";
print "CLOSEST I CAN GET: $distance\n";
sum_print(\@closest_numbers, \@closest_symb, $target-$distance, $distance);
exit(0);
[15:53: /mnt/mydocuments/git_working_dir/countdown_solver$] perl countdown_solver.pl
Symbol table: +, -, /, *, +, -, /, *, +, -, /, *, +, -, /, *, +, -, /, *, +, -, /, *, +, -, /, *, +, -, /, *Total number of permutations: 93928268313
Perms of size: 2.
BEST SOLUTION SO FAR: (2 + 4) = 6 (distance from target 751 is 745)
BEST SOLUTION SO FAR: (2 * 4) = 8 (distance from target 751 is 743)
BEST SOLUTION SO FAR: (4 + 7) = 11 (distance from target 751 is 740)
BEST SOLUTION SO FAR: (4 * 7) = 28 (distance from target 751 is 723)
BEST SOLUTION SO FAR: (4 * 9) = 36 (distance from target 751 is 715)
BEST SOLUTION SO FAR: (7 * 9) = 63 (distance from target 751 is 688)
BEST SOLUTION SO FAR: (4 * 50) = 200 (distance from target 751 is 551)
BEST SOLUTION SO FAR: (7 * 50) = 350 (distance from target 751 is 401)
BEST SOLUTION SO FAR: (9 * 50) = 450 (distance from target 751 is 301)
Perms of size: 3.
BEST SOLUTION SO FAR: ((4 + 7) * 50) = 550 (distance from target 751 is 201)
BEST SOLUTION SO FAR: ((2 * 7) * 50) = 700 (distance from target 751 is 51)
BEST SOLUTION SO FAR: ((7 + 9) * 50) = 800 (distance from target 751 is 49)
BEST SOLUTION SO FAR: ((9 + 6) * 50) = 750 (distance from target 751 is 1)
Perms of size: 4.
BEST SOLUTION SO FAR: (((9 + 6) * 50) + 1) = 751
最佳答案
关于perl - 帮我完成应用程序的最后一部分?它通过暴力破解每个可能的方程来解决第 4 channel 上的任何倒计时数字游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5938861/
用户将输入重量阈值、物体数量以及 3 个物体的重量和成本。输出应该是背包图,并且应该显示最优解。 重量应该最大,成本应该最小。 示例输出: w=60 n=3 w = 10 w2 = 35 w3 = 3
所以我在学习 Python 的同时从“Violent Python”开始黑客攻击,我遇到了一个问题这是我的代码: import optparse import socket from socket i
我是一名优秀的程序员,十分优秀!