每周挑战218
abaoqian1,My solutions
任务1:最大产品
任务
您有3个或更多整数的列表。
编写一个脚本以找到最大产品并将其返回的3个整数。
我的解决方案
这似乎很简单。以数值为单位和三个最大数字以获取解决方案。但这并不是那么简单。
最后一个示例表明该解决方案是通过多个最低数字和最大数字获得的。我们知道,如果我们多次多个均匀数量的负整数,则结果是积极的。乘以奇数的负数始终是负数。鉴于我们仅查看三位数,但负数的最大数量为两个,除非它们都是负数。
因此,在这方面,我计算了三个最大数字的乘积以及两个最低和最大数字的产品。然后,我显示这两个值的最大值。
例子
$ ./ch-1.py 3 1 2
6
$ ./ch-1.py 4 1 3 2
24
$ ./ch-1.py -1 0 1 3 1
3
$ ./ch-1.py -8 2 -9 0 -4 3
216
任务2:矩阵分数
任务
您有一个m x n
二进制矩阵,即只有1
和0
。
您可以尽可能多地获得最高分的动作。
A move can be either toggling each value in a row or column.
要获得分数,请将每行二进制转换为DEC并返回总和。
我的解决方案
由于使用XOR和一些逻辑,这一挑战实际上比我想象的要容易得多。我开始将solution
变量设置为0
,而xor_row
则小于1小于2的列数。因此,如果我们有4列,xor_row
为15(或二进制符号中的1111
)。
我要做的接下来是将每一行从列表(perl中的数组)转换为十进制数字。在python中,这是用int(<binary>, 2)
完成的,而在perl中,这是通过调用oct("0b<binary>")
来完成的,这似乎是违反直觉给定的八位字位数。我离题。
下一部分是要切换的行和列。对于列,我有一个从0
到xor_row
的循环。我从上一个步骤中用每个数字来数字xor xor。这确保了我们考虑要切换哪些列的所有组合。
切换行要容易得多。我们知道,每行的最大总和是当我们从上述步骤中具有整数,或者是用xor_row
x x x x的值,所以我为每行计算了此。如果行的总和大于当前解决方案,则我更新具有新值的solution
。
例子
$ ./ch-2.py "[[0,0,1,1],[1,0,1,0],[1,1,0,0]]"
39
$ ./ch-2.py "[[0]]"
1