我正在解决欧拉项目的问题,如果我对这个问题的理解是正确的,我也不太确定。 问题8如下: 查找1000位数字中连续五位数字的最大产品。 我认为这意味着以下几点: 我需要find在1000位数字中连续运行的五个数字,然后将这些数字加起来得到总数。 我假设数字的大小可以是任何东西,即1,2,3或12,13,14或123,124,124或1234,1235,1236等。 我的这个理解是否正确,还是我误解了这个问题? 注意:请不要提供代码或解决scheme,我需要解决自己。
我很困惑,究竟是调用者还是被调用者负责检查数据的合法性。 被调用者是否应该检查传入的参数是否应该不为null并满足其他一些要求,以便被调用方法能够正常执行并成功执行,并捕获任何潜在的exception? 或者这是做主的责任呢?
我注意到很多新问题可以通过库来解决。 当build议一个图书馆时,他们通常会回应“我不想使用X图书馆”这是学习曲线吗? 要么 ? 只是好奇!
2009年即将结束,经济和所有,我们将节省我们的钱,而不是购买昂贵的烟花,我们将在今年的ASCII艺术节庆祝。 挑战 给定一组烟花和时间,在那个时候拍下烟花的照片,然后把它拿到控制台上。 在除夕(UTC)午夜之前进入的最佳解决scheme将获得500名代表的奖励。 这是代码高尔夫,所以字符数量很重; 然而社区投票也是如此,我保留最好的/最酷的/最有创意的等等的最终决定。 input数据 请注意,我们的坐标系是从左到右,从下到上的,所以所有的烟花都是在y坐标0(零)的情况下启动的。 input数据由表格的烟花组成 (x, speed_x, speed_y, launch_time, detonation_time) 哪里 x是发射烟花的位置(列) speed_x和speed_y是发射时烟花的水平和垂直速度, launch_time是这个烟火启动的时间点, detonation_time时间是这个烟花引爆的时间点。 烟花数据可能在您的程序中被硬编码为五元组列表(或您的语言中的等同物),不计入您的人物数量。 但是,它必须很容易改变这些数据。 你可以做出以下假设: 有合理数量的烟花(比如less于一百) 对于每个烟花来说,所有的五个数字都是在一个合理的范围内的整数(比如,每个16位就足够了), -20 <= x <= 820 -20 <= speed_x <= 20 0 < speed_y <= 20 launch_time >= 0 launch_time < detonation_time < launch_time + 50 单个附加的input数据是应该呈现的时间点。 这是一个非负整数,通过标准input或命令行参数(无论您select哪个)给您。 这个想法是(假设你的程序是一个名为firework.py的python脚本),这个bash脚本给你一个不错的烟花animation: #!/bin/bash I=0 while […]
作为一名程序员,我有时会发现自己处于一个完全枯燥乏味的任务。 这并不奇怪,如果编程的各个方面都是非常具有挑战性和趣味性的,但这并不会改变我希望没有这些types的任务就能生活的事实。 在大多数情况下,我只是简单地通过完成任务,尽快完成任务,但其他时间并不那么容易。 我发现自己在做任何事情,只能完成无聊的任务,如果必须承担多个其他任务,那么我就有理由不完成任务。 这当然会影响我的职业生涯,因为我经常从挑战中跳跃到挑战,在我身后留下未完成的痕迹。 你如何应付编码者的昏迷? 是否有任何提示如何在整理无聊的东西时提高效率?
说一个问题有两种可能的解决scheme:第一种是快速但是很冒险; 第二个是可取的,但需要更长的时间来执行。 你需要快速解决这个问题,所以你决定尽可能快地进行破解,计划在之后开始更好的解决scheme。 问题是,只要问题得到缓解,就会下降到待办事项列表中。 您仍然计划在某个时候提供更好的解决scheme,但是现在很难certificate它是正确的。 突然间,你发现你已经花了五年的时间使用不完美的解决scheme,诅咒它。 这听起来很熟悉吗? 我知道这是我工作的地方不止一次。 一位同事故意描绘了一个不好的graphics用户界面,以免长期意外采用。 你有更好的策略吗?
在参加今年的Google Code Jam比赛之后,我不禁注意到使用C / C ++和Java的[成功的]参赛者令人难以置信。 在整个比赛中使用的语言的分布可以在这里看到。 在C / C ++编程几年之后,我最近爱上Python,因为它的可读性/直接性。 最近,我学习了像OCaml,Scheme这样的函数式语言,甚至像Prolog这样的逻辑语言。 这些语言当然有其优点,在我看来,在某些情况下,比C ++和Java更容易应用。 例如,Scheme使用call / cc简化了回溯(一种回答几个问题所需的工具),而Prolog的逻辑规范虽然由于其强大的性质而效率低下,但能够大大简化(甚至自动解决)某些难以解决的问题把自己的大脑包裹起来。 很明显,竞赛参赛者应该使用最适合挑战的工具。 即使是x86组装也是图灵完整 – 这并不能解决问题。 在这种情况下, 使用C / C ++和Java的参赛选手为什么使用像Scheme / Lisp,Prolog甚至Python这样的不常用语言的参赛者显然不那么成功? 换句话说, 为什么不成功的参赛选手使用的语言虽然可能不太主stream,却可以说是更好的工具? 我的问题有几个动机。 最重要的是,我想成为一个更好的程序员 – 无论是在实践方面还是在竞争方面。 在被引入function和逻辑编程这样美丽的范例之后,看到有那么多人抛弃它们,转而支持C / C ++和Java,让人感到沮丧。 它甚至让我质疑我对所说范例的钦佩,担心在编程竞赛中我不能成为Lisp / Scheme / Prolog程序员。
在我们的计划中,我们都在开发我们使用和依赖的实践和模式。 然而,随着时间的推移,随着我们的理解,成熟,甚至技术使用的变化,我们认识到我们曾经以为伟大的一些做法是不(或不再适用)。 一个我曾经经常使用的实践的例子,但最近几年改变了,是使用Singleton对象模式 。 通过我自己的经验和与同事长时间的争论,我意识到单身并不总是可取的 – 他们可以使testing变得更加困难(通过禁止像嘲笑之类的技术),并可能在系统的各个部分之间产生不希望的耦合。 相反,我现在使用对象工厂(通常带有一个IoC容器)来隐藏系统中不关心或者需要知道的单件的性质和存在。 相反,他们依靠工厂(或服务定位器)来获取对这些对象的访问。 我本着自我完善的精神向社会提出的问题是: 您最近重新考虑过哪些编程模式或实践,现在试图避免? 你决定用什么replace它们?
什么是急切的加载? 我在PHP / JS代码,但更广泛的答案将会很好。 我看到了很多关于Java和Ruby的问题,但是我不知道这些语言中的任何一种,而且我发现很难阅读代码。 我不知道最初应该怎么做
如果你不得不select自己喜欢的 (聪明的)防守编码技术,他们会是什么? 虽然我现在的语言是Java和Objective-C(带有C ++背景),但可以随意用任何语言来回答。 这里强调的是除了我们这里70%以上已经知道的那些聪明的防御技术外。 所以现在是时候深入挖掘你的技巧。 换句话说,除了这个无趣的例子之外,试着想一想: if(5 == x) 而不是 if(x == 5) :以避免意外的分配 下面是一些有趣的最佳防御性编程实践的一些例子(特定于语言的例子在Java中): – locking你的variables,直到你知道你需要改变它们 也就是说,你可以声明所有的variables,直到你知道你将需要改变它,在这一点上,你可以删除final 。 一个普遍未知的事实是,这也适用于方法参数: public void foo(final int arg) { /* Stuff Here */ } – 当发生不良事件时,留下一些证据 当你有一个exception时,你可以做很多事情:显然logging它并执行一些清理将是一些。 但是你也可以留下一些证据(例如,设置variables为“无法加载文件”或99999的哨兵值将在debugging器中很有用,以防碰巧发生exceptioncatch块)。 – 当谈到一致性:魔鬼是在细节 与您正在使用的其他库一致。 例如,在Java中,如果您正在创build一个提取值的范围的方法,则使下限和上限排他 。 这将使它与像String.substring(start, end)这样的方法一致,它以相同的方式运行。 您将在Sun JDK中find所有这些types的方法,因为它可以执行各种操作,包括迭代与数组一致的元素,其中索引从零( 包含 )到数组长度( 不包括 )。 那么你们最喜欢的防守做法是什么? 更新:如果你还没有,可以随意join。在我select官方答案之前,我有机会提供更多的答案。