每周挑战 301
穆罕默德·S·安瓦尔 (Mohammad S. Anwar) 每周都会发出“每周挑战”,让我们所有人都有机会为两周的任务提出解决方案。我的解决方案首先用Python编写,然后转换为Perl。这对我们所有人来说都是练习编码的好方法。
挑战,我的解决方案
任务 1:最大数
任务
给你一个正整数列表,@ints。
编写一个脚本来排列给定列表中的所有元素,使它们形成最大的数字并返回它。
我的解决方案
也许我想太多了,但这并不像听起来那么容易。
一种选择是计算所有排列,并查看哪个数字最大。然而,当我们添加更多整数时,这会消耗大量资源。如果我有 13 个整数,则有超过 60 亿种排列。所以我排除了这个可能的解决方案。
所以显而易见的事情就是对整数进行排序,组合它们并输出结果。由于 Python 对待字符串和整数的方式不同,我需要将排序后的列表转换为字符串,连接它们并将其转换回整数。
def largest_number(ints: list) -> int: sorted_ints = sorted(ints, key=cmp_to_key(number_sort), reverse=True) return int(''.join(map(str, sorted_ints)))
说到排序,这有点复杂。在提供的第二个示例中,我们可以看到 3、30 和 34 都是给定的整数。为此,我知道最大的数字是通过对项目(从高到低)34、3 和 30 进行排序获得的。
对于我的 number_sort 函数,我将整数转换为字符串 s1 和 s2。然后我得到整数 c1,它是 s1 和 s2 的串联,而 c2 是 s2 和 s1 的串联。
如果 c1 小于 c2,我返回 -1。如果更大,我返回 1。如果它们相同,我返回 0。sorted 函数使用此信息根据需要对列表进行排序。
def number_sort(i1: int, i2: int) -> int: s1 = str(i1) s2 = str(i2) c1 = int(s1 + s2) c2 = int(s2 + s1) if c1 c2: return 1 return 0
Perl 代码要简单得多:)
sub number_sort() { return "$a$b" "$b$a"; }
示例
$ ./ch-1.py 20 3 320 $ ./ch-1.py 3 30 34 5 9 9534330
任务 2:汉明距离
任务
给你一个整数数组,@ints。
编写一个脚本以返回给定整数数组中所有整数对之间的汉明距离之和。
两个整数之间的汉明距离是它们的二进制表示形式不同的位数。
我的解决方案
在上一个任务中,我提到了 Python 如何将整数和字符串视为不同的类型。 Perl 的优点之一是我们被告知,无论出于何种目的,我们都不需要担心变量的类型。尽管它们在内部存储方式不同,但 Perl 知道该怎么做。
在 Perl 5.10 和 Perl 5.16(这是我大部分 Perl 开发的地方)中,有两个值得注意的例外。一个是 JSON 模块,它将输出字符串“10”和整数 10。
另一个是按位运算。从 perlop 页面,105 | 150(两个整数)是 255,而“105”| “150”(两个字符串)是 155。
所以,当我再次阅读 perlop 页面时,我惊喜地发现这个问题已经在 Perl 的更高版本中得到了解决。它现在具有 Perl 5.22 中实验性的按位功能,并且在 Perl 5.28 中可用。这确保了按位运算符始终将值视为整数,并且基于字符串的按位具有新的运算符。
无论如何,回到手头的任务。为此,我计算两个整数的所有组合。对于每个组合,我对两个值执行 XOR(异或),将其转换为二进制并计算二进制表示中 1 的数量。
def largest_number(ints: list) -> int: sorted_ints = sorted(ints, key=cmp_to_key(number_sort), reverse=True) return int(''.join(map(str, sorted_ints)))
示例
def number_sort(i1: int, i2: int) -> int: s1 = str(i1) s2 = str(i2) c1 = int(s1 + s2) c2 = int(s2 + s1) if c1 c2: return 1 return 0
以上是锤击清单的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了Python版本3.10中介绍的新“匹配”语句,该语句与其他语言相同。它增强了代码的可读性,并为传统的if-elif-el提供了性能优势

Python中的功能注释将元数据添加到函数中,以进行类型检查,文档和IDE支持。它们增强了代码的可读性,维护,并且在API开发,数据科学和图书馆创建中至关重要。

本文讨论了Python中的单位测试,其好处以及如何有效编写它们。它突出显示了诸如UNITSEST和PYTEST等工具进行测试。

文章讨论了Python的\ _ \ _ Init \ _ \ _()方法和Self在初始化对象属性中的作用。还涵盖了其他类方法和继承对\ _ \ _ Init \ _ \ _()的影响。

本文讨论了python中@classmethod,@staticmethod和实例方法之间的差异,详细介绍了它们的属性,用例和好处。它说明了如何根据所需功能选择正确的方法类型和DA

Inpython,YouAppendElementStoAlistusingTheAppend()方法。1)useappend()forsingleelements:my_list.append(4).2)useextend()orextend()或= formultiplelements:my_list.extend.extend(emote_list)ormy_list = [4,5,6] .3)useInsert()forspefificpositions:my_list.insert(1,5).beaware


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver CS6
视觉化网页开发工具

Dreamweaver Mac版
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具