搜索

Making connections

每周挑战 285

穆罕默德·S·安瓦尔 (Mohammad S. Anwar) 每周都会发出“每周挑战”,让我们所有人都有机会为两周的任务提出解决方案。我的解决方案首先用Python编写,然后转换为Perl。这对我们所有人来说都是练习编码的好方法。

挑战,我的解决方案

任务 1:无连接

任务

您将获得路线列表,@routes。

编写一个脚本来查找目的地,而无需进一步的传出连接。

我的解决方案

这非常简单,因此不需要太多解释。我计算两个列表,出发地具有路线列表中的第一个值,而目的地具有第二个值。

然后,我使用列表理解来查找不在起始列表中的目的地,并将其存储为 dead_ends。如果此列表中不存在一项,我会发出错误。

def no_connection(routes: list) -> str:
    origins = [v[0] for v in routes]
    destinations = [v[1] for v in routes]
    dead_ends = [d for d in destinations if d not in origins]

    if len(dead_ends) > 1:
        raise ValueError(
            'There are multiple routes with no outgoing connection')

    if len(dead_ends) == 0:
        raise ValueError('All routes have an outgoing connection')

    return dead_ends[0]

示例

$ ./ch-1.py B C C D D A
A

$ ./ch-1.py A Z
Z

任务 2:做出改变

任务

计算给定金额(以美分为单位)找零的方式数量。通过使用硬币,例如便士、镍币、一毛币、四分之一美元和半美元,有多少种不同的方式可以使总价值等于给定金额?硬币选择顺序并不重要。

  • 一便士 (P) 等于 1 美分。
  • 一镍 (N) 等于 5 美分。
  • 一毛钱 (D) 等于 10 美分。
  • 四分之一 (Q) 等于 25 美分。
  • 半美元 (HD) 等于 50 美分。

我的解决方案

由于我的代码中存在一个(现已修复)错误,这比我希望的要花更长的时间才能完成。我知道 Python 和 Perl 都有调试器,但有时你无法击败打印语句:)

我们已经有一段时间没有任务需要使用递归函数了。对于这个任务,我有一个名为making_change的递归函数,它获取剩余的零钱和最后使用的硬币。第一个调用将剩余的更改值设置为输入,并将最后的硬币值设置为 None(Perl 中的 undef)。

每次调用都会迭代可能的硬币,并执行以下三件事之一:

  1. 如果硬币值大于last_coin值,我们会跳过它。这可以确保我们不会重复可能的组合。
  2. 如果硬币值与剩余零钱相同,我们就有一个有效的解决方案,所以我在组合值上加一。
  3. 如果硬币价值小于剩余价值,我会再次调用该函数,剩余价值会减去所使用的硬币。

组合值被传递到上游,因此最终返回将具有正确的组合数量。

def making_change(remaining: int, last_coin: int | None = None) -> int:
    combinations = 0

    for coin in [1, 5, 10, 25, 50]:
        if last_coin and last_coin 



<p>递归是有限制的。当递归达到(100 深度)时,Perl 会发出警告[https://perldoc.perl.org/perldiag#Deep-recursion-on-subroutine-%22%25s%22]。该值只能通过重新编译 Perl 来更改。默认情况下,Python 将在 995 次递归后引发 (ResursionError)[https://docs.python.org/3/library/exceptions.html#RecursionError],尽管该值可以在运行时修改。</p>

<h3>
  
  
  示例
</h3>



<pre class="brush:php;toolbar:false">$ ./ch-2.py 9
2

$ ./ch-2.py 15
6

$ ./ch-2.py 100
292

以上是建立联系的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
您如何切成python列表?您如何切成python列表?May 02, 2025 am 12:14 AM

SlicingaPythonlistisdoneusingthesyntaxlist[start:stop:step].Here'showitworks:1)Startistheindexofthefirstelementtoinclude.2)Stopistheindexofthefirstelementtoexclude.3)Stepistheincrementbetweenelements.It'susefulforextractingportionsoflistsandcanuseneg

在Numpy阵列上可以执行哪些常见操作?在Numpy阵列上可以执行哪些常见操作?May 02, 2025 am 12:09 AM

numpyallowsforvariousoperationsonArrays:1)basicarithmeticlikeaddition,减法,乘法和division; 2)evationAperationssuchasmatrixmultiplication; 3)element-wiseOperations wiseOperationswithOutexpliitloops; 4)

Python的数据分析中如何使用阵列?Python的数据分析中如何使用阵列?May 02, 2025 am 12:09 AM

Arresinpython,尤其是Throughnumpyandpandas,weessentialFordataAnalysis,offeringSpeedAndeffied.1)NumpyArseNable efflaysenable efficefliceHandlingAtaSetSetSetSetSetSetSetSetSetSetSetsetSetSetSetSetsopplexoperationslikemovingaverages.2)

列表的内存足迹与python数组的内存足迹相比如何?列表的内存足迹与python数组的内存足迹相比如何?May 02, 2025 am 12:08 AM

列表sandnumpyArraysInpyThonHavedIfferentMemoryfootprints:listSaremoreFlexibleButlessMemory-效率,而alenumpyArraySareSareOptimizedFornumericalData.1)listsStorReereReereReereReereFerenceStoObjects,withoverHeadeBheadaroundAroundaroundaround64bytaround64bitson64-bitsysysysyssyssyssyssyssyssysssys2)

部署可执行的Python脚本时,如何处理特定环境的配置?部署可执行的Python脚本时,如何处理特定环境的配置?May 02, 2025 am 12:07 AM

toensurepythonscriptsbehavecorrectlyacrycrossdevelvermations,登台和生产,USETHESTERTATE:1)Environment varriablesforsimplesettings,2)configurationFilesForefilesForcomPlexSetups,3)dynamiCofforAdaptapity.eachmethodofferSuniquebeneiquebeneiquebeneniqueBenefitsaniqueBenefitsandrefitsandRequiresandRequireSandRequireSca

您如何切成python阵列?您如何切成python阵列?May 01, 2025 am 12:18 AM

Python列表切片的基本语法是list[start:stop:step]。1.start是包含的第一个元素索引,2.stop是排除的第一个元素索引,3.step决定元素之间的步长。切片不仅用于提取数据,还可以修改和反转列表。

在什么情况下,列表的表现比数组表现更好?在什么情况下,列表的表现比数组表现更好?May 01, 2025 am 12:06 AM

ListSoutPerformarRaysin:1)DynamicsizicsizingandFrequentInsertions/删除,2)储存的二聚体和3)MemoryFeliceFiceForceforseforsparsedata,butmayhaveslightperformancecostsinclentoperations。

如何将Python数组转换为Python列表?如何将Python数组转换为Python列表?May 01, 2025 am 12:05 AM

toConvertapythonarraytoalist,usEthelist()constructororageneratorexpression.1)intimpthearraymoduleandcreateanArray.2)USELIST(ARR)或[XFORXINARR] to ConconverTittoalist,请考虑performorefformanceandmemoryfformanceandmemoryfformienceforlargedAtasetset。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用