找到1000以下的3或5的所有倍数之和。
这是我编写的解决此问题的代码/脚本:
HAI 1.2
VISIBLE "HAI, PROJEK LOLLER ONE!!"
I HAS A LIMIT ITZ 1000
I HAS A TOTAL ITZ 0
I HAS A CHEEZ ITZ 3
I HAS A BURGER ITZ 5
I HAS A CHEEZBURGER ITZ PRODUKT OF CHEEZ AN BURGER
HOW IZ I ADDTOTAL YR VALUE
I HAS A RESULT ITZ SUM OF VALUE AN TOTAL
FOUND YR RESULT
IF U SAY SO
IM IN YR MIND UPPIN YR NUMBER TIL BOTH SAEM NUMBER AN LIMIT
I HAS A PICKLE ITZ FAIL
BOTH SAEM 0 AN MOD OF NUMBER AN CHEEZBURGER
O RLY?, YA RLY
PICKLE R WIN
NO WAI
BOTH SAEM 0 AN MOD OF NUMBER AN CHEEZ
O RLY?, YA RLY
PICKLE R WIN
NO WAI
BOTH SAEM 0 AN MOD OF NUMBER AN BURGER
O RLY?, YA RLY
PICKLE R WIN
OIC
OIC
OIC
BOTH SAEM PICKLE AN WIN
O RLY?, YA RLY
TOTAL R I IZ ADDTOTAL YR NUMBER MKAY
OIC
IM OUTTA YR MIND
VISIBLE SMOOSH "TEH ANSWER IZ " AN TOTAL MKAY
VISIBLE "DOWN WITH PROJEK LOLLER ONE!"
KTHXBYE
此代码可以在CodingGround上执行,并产生以下输出:
HAI,PROJEK LOLLER ONE !!! />
用PROJEK LOLLER击倒!在“简易”陷阱中?是否有办法将所有条件合而为一并编写较短的脚本?还是这种算法不好/效率低?
#1 楼
相同的人,相同的语言,相同的批评?您的名字自上次以来就变得更好了。Cheez和Burgr并不是最好的,但是考虑到它们的内容是任意设置的,因此在一定程度上毫无根据。他们确实站稳了脚。有一件事:不需要您的Cheezburgers。
如果您提早返回,首先检查最大除数会浪费计算能力(我记得rolfl在一次我无法找到的嘶嘶声评论中对此有一些不错的统计。)我们可以完全从您的代码中删除该
O RLY? YA RLY
。哦,当我们在吃芝士汉堡时...我真的不喜欢芝士汉堡上的一件事...泡菜。
临时TROOF变量删除了这三个
YA RLY
,同样的事情是完全过分的。代替PICKLES R WIN
,将当前数字添加到总共。到现在为止的代码是:
IM IN YR Mind UPPIN YR Number TIL BOTH SAEM Number AN Limit
BOTH SAEM 0 AN MOD OF Number AN Cheez
O RLY?, YA RLY
Total R I IZ AddToTotal YR Number MKAY
NO WAI
BOTH SAEM 0 AN MOD OF Number AN Burger
O RLY?, YA RLY
Total R I IZ AddToTotal YR Number MKAY
OIC
OIC
IM OUTTA YR Mind
现在我们在这里得到了什么?看起来应该是ElseIf,也可以是将条件简单组合成Or。
后者比较容易,但仅供参考:还有一个if。是
MEBBE
最终代码:
HAI 1.2
VISIBLE "HAI, PROJEK LOLLER ONE!!"
I HAS A Limit ITZ 1000
I HAS A Total ITZ 0
I HAS A Cheez ITZ 3
I HAS A Burger ITZ 5
HOW IZ I AddToTotal YR Value
I HAS A Result ITZ SUM OF Value AN Total
FOUND YR Result
IF U SAY SO
BTW Iterates from 0 to 999
IM IN YR Mind UPPIN YR Number TIL BOTH SAEM Number AN Limit
EITHER OF BOTH SAEM 0 MOD OF Number AN Cheez AN BOTH SAEM 0 MOD OF Number AN Burger
O RLY?, YA RLY
Total R I IZ AddToTotal YR Number MKAY
OIC
IM OUTTA YR Mind
VISIBLE SMOOSH "TEH ANSWER IZ " AN Total MKAY
VISIBLE "DOWN WITH PROJEK LOLLER ONE!"
KTHXBYE
#2 楼
恕我直言,您选择了错误的算法。最好采用极限...
整数除以\ $ 3 \ $ ... \ $(999 \ \ mathbf {div} \ 3 = 333)\ $。
然后(该数字为2加上自身的幂)除以\ $ 2 \ $。然后乘以我们最初将其除以的值。
所以\ $((((333 * 333)+ 333)/ 2)* 3 \ $。
那就是\ $ 166833 \ $。
接下来,对\ $ 5 \ $做同样的事情。
\ $ 999 \ \ mathbf {div} \ 5 = 200,((( 199 * 199)+ 199)/ 2)* 5 = 99500 \ $。
将它们加在一起,我们得到\ $ 266333 \ $。
但是我们计算了\ $ 15 \ $,\ $ 30 \ $等加倍!
对\ $ 15 \ $做同样的事情,然后取走!
\ $ 999/15 = 66,((((66 * 66)+ 66)/ 2)* 15)= 33165 \ $。
\ $ 266333-33165 = 233168 \ $。
之所以起作用,是因为它做到了:在通往\ $ 999 \ $的途中,我们将看到\ $ 999 \ \ mathbf {div} \ 3 = 333 \ $是3的倍数的数字。每个数字都比前面的数字大3。因此,我们要做的是取整个\ $ [1,2,3 ... 333] \ $并相反地匹配它们,如下所示:
1 + 332 = 333
2 + 331 = 333
3 + 330 = 333
然后不断。
最好用\ $((x * x)/ 2)\ $表示。
或者,实际上是\ $(x / 2)\ $(对数)\ $ * x \ $(每对具有的值)。
然后我们手动添加\ $ x \ $。这是因为\ $ 333 \ $不需要配对。
所以我们就有了\ $ [1、2、3 ... 333] \ $集合的值。但是我们有\ $ [3,6,9,12 ... 999] \ $。所以我们全部做*3。
我们对5.做同样的事情。 。] \ $我们算出了两倍!
评论
\ $ \ begingroup \ $
对此表示严重同意。所有语言关键字都是SHOUTCASE,变量不应该是。
\ $ \ endgroup \ $
–RubberDuck
2015年2月2日在16:26
\ $ \ begingroup \ $
这方面就像SQL。
\ $ \ endgroup \ $
– Pimgd
2015年2月2日在16:27
\ $ \ begingroup \ $
我个人不同意,lolcats通常都在SHOUTCASE中。当然,小写变量的可读性更好,但这不是lolcode的重点。
\ $ \ endgroup \ $
–尼克·乌德尔(Nick Udell)
15年6月16日在12:00
\ $ \ begingroup \ $
对于生产源代码,可以。对于深奥的编程语言,不可以。重点是实验性的,有趣的或与深奥的语言有所不同,并不一定意味着它应该可读。毕竟,空白的可读性基本上为零。
\ $ \ endgroup \ $
–尼克·乌德尔(Nick Udell)
15年6月16日在12:44
\ $ \ begingroup \ $
该答案是“ 2015年最佳代码评论”(Losts of Laughs)类别的获得者。恭喜你!
\ $ \ endgroup \ $
– 200_success
16年1月16日,0:49