我最近偶然发现了2048游戏.您可以通过在四个方向中的任意一个方向上移动它们来合并类似的图块,以制作"更大" 每次移动后,新的图块会出现在随机空位置,其值为2
或4
.当所有框都被填充并且没有可以合并图块的移动时,或者您创建值为的图块时,游戏会终止2048
.
一,我需要遵循明确的战略来实现目标.所以,我想为它编写一个程序.
我目前的算法:
while (!game_over) {
for each possible move:
count_no_of_merges_for_2-tiles and 4-tiles
choose the move with a large number of merges
}
Run Code Online (Sandbox Code Playgroud)
我做的是在任何时候,我会尝试合并与价值观的瓷砖2
和4
,就是我努力2
和4
瓷砖,尽可能最小.如果我这样尝试,所有其他瓷砖自动合并,策略似乎很好.
但是,当我实际使用这个算法时,我只能在游戏结束前获得大约4000点.AFAIK的最高分数略高于20,000分,远高于我目前的分数.有比上面更好的算法吗?
逻辑表达式( a && b )
(包括a
和b
具有布尔值)可以写成像!(!a || !b)
,例如.这是不是意味着&&
"不必要"?这是否意味着所有逻辑表达式只能使用||
和!
?
编辑:这个谜题也被称为"爱因斯坦的谜语"
该谁拥有斑马(你可以试试这里的网络版)是一款经典的一套谜题的一个例子,我敢打赌,大多数人对堆栈溢出可以用纸笔解决它.但程序化解决方案会是什么样子?
基于下面列出的线索......
谁拥有斑马?
PHP以其类型杂耍而闻名.我必须承认这让我很困惑,而且我很难在比较中找出基本的逻辑/基本事物.
例如:如果$a > $b
是真实的,$b > $c
是真实的,必须将它意味着$a > $c
是永远真实的吗?
遵循基本逻辑,我会说是的,但是我很困惑,我真的不相信PHP.也许某人可以提供一个不是这样的例子?
另外,我想知道严格的小于和严格的大于运算符(因为它们的含义被严格描述,我过去只从等式比较中知道)如果左右操作数交换时有任何区别严格不平等的价值观:
# Precondition:
if ($a === $b) {
throw new Exception(
'Both are strictly equal - can not compare strictly for greater or smaller'
);
}
($a > $b) !== ($b > $a)
Run Code Online (Sandbox Code Playgroud)
对于大多数类型比较组合,这些更大/更小的比较运算符没有记录,因此在这种情况下阅读手册并不是真正有用.
Java if语句如何在具有赋值和相等性检查时OR
一起工作?
public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这个打印错误?
你会怎么写,在python中:
if key < 1 or key > 34:
Run Code Online (Sandbox Code Playgroud)
我已经尝试过各种我能想到的方式,并且发现它非常令人沮丧.
我正在浏览一些C++代码,发现这样的东西:
(a + (b & 255)) & 255
Run Code Online (Sandbox Code Playgroud)
双重和我生气,所以我想到:
(a + b) & 255
Run Code Online (Sandbox Code Playgroud)
(a
并且b
是32位无符号整数)
我很快写了一个测试脚本(JS)来证实我的理论:
for (var i = 0; i < 100; i++) {
var a = Math.ceil(Math.random() * 0xFFFF),
b = Math.ceil(Math.random() * 0xFFFF);
var expr1 = (a + (b & 255)) & 255,
expr2 = (a + b) & 255;
if (expr1 != expr2) {
console.log("Numbers " + a + " and " + b + " mismatch!");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然剧本证实了我的假设(两个操作都是平等的),但我仍然不相信它,因为1) …
我最近完成了一个大学课程,其中包括Haskell和Agda(一种依赖类型的函数式编程语言),并且想知道是否有可能用组合逻辑替换这些中的lambda演算.使用Haskell,这似乎可以使用S和K组合器,从而使其无点.我想知道Agda的等价物是什么.即,可以在不使用任何变量的情况下制作与Agda等效的依赖类型的函数式编程语言吗?
此外,是否有可能以某种方式用组合器取代量化?我不知道这是巧合,但通用量化例如使类型签名看起来像lambda表达式.有没有办法从类型签名中删除通用量化而不改变其含义?例如:
forall a : Int -> a < 0 -> a + a < a
Run Code Online (Sandbox Code Playgroud)
如果不使用forall可以表达同样的事情吗?
if ((n & -n) == n) // i.e., n is a power of 2
// rest of the code
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我有一个简单的if语句:
if ($('html').hasClass('m320')) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
这按预期工作.但是,我想添加更多类来if statement
检查<html>
标记中是否存在任何类.我需要它所以它不是全部而是只有至少一个类的存在但它可以更多.
我使用的情况是,我有类(例如m320
,m768
),增加了对各种视口的宽度,所以我只想执行某些jQuery的,如果它是一个特定的宽度(类).
这是我到目前为止所尝试的:
1.
if ($('html').hasClass('m320', 'm768')) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
2.
if ($('html').hasClass('m320')) || ($('html').hasClass('m768')) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
3.
if ($('html').hasClass(['m320', 'm768'])) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
这些似乎都不起作用.不确定我做错了什么,但很可能是我的语法或结构.
logic ×10
if-statement ×3
java ×2
2048 ×1
agda ×1
algorithm ×1
binary ×1
c++ ×1
comparison ×1
haskell ×1
ieee-754 ×1
javascript ×1
jquery ×1
php ×1
python ×1
syntax ×1
types ×1
zebra-puzzle ×1