这个问题是由这个可怕的答案提出的。
挑战是编写一个程序或函数,该程序或函数接受一个正整数,并输出“祝您新年快乐”或稍加更改,以便该字符串的字符代码与输入的数字相加。空格也计算字符代码之和。
这种情况根本不重要;只要符合下面的规范,您就可以输出HappY New yEAR或其他东西。
规格如下:
输出的字符串必须包含happy new year。如上文所述,情况并不重要。
字符串的happy new year组件可以选择地在前面加上have a,在任何情况下都是这样。但是,如果字符串以happy开头,则在have a之前必须有一个空格。
在任何情况下,happy new year字符串都可以选择地后面跟着to you。to之前的空间是强制性的。
请注意,Have a happy new year to you虽然语法上不正确,但对于此挑战而言是一个可接受的输出。
最后,在字符串的末尾,可以输出任意数量的感叹号。
总之,输出的字符串必须满足以下正则表达式:
/^(have a )?happy new year( to you)?!*$/i在编写程序或函数时,您可能会认为,您只会得到可以构造“新年快乐”字符串的数字。
我不允许输出数组或列表格式,因为它违背了挑战的目的。
如果有多个解决方案,可以自由地输出其中任何一个解决方案、任何一个解决方案子集或所有解决方案。
由于这个挑战是密码-高尔夫,最短的代码(以字节为单位)将获胜。
2014
-> Happy new year to you!
1995
-> HAPPY NEW YEAR TO You!!!!!!!!!!!!!!
989
-> HAPPY NEW YEAR
1795
-> Have a HAPPY new year!
2997
-> Have a HAppY new year to YOU!!!!!!!!!!!!!!!!!!!发布于 2022-02-10 19:01:51
f=(n,s='',...a)=>n|!/^(have a )?happy new year( to you)?!*$/i.test(s)?f(...a,...[...f+f].map(_=>(a=!a)?s+Buffer([i++]):n-i,i=2)):s在任何计算机上耗尽内存,因为它使用的是128^14 args,但理论上它可以工作。
发布于 2022-02-11 06:31:45
=LET(r,MOD(A1,33),m,(r<20)+(r<18)+1,s,REPT("HAVE A ",m=2)&"HAPPY NEW YEAR"&REPT(" TO YOU",m=3),a,INDEX({989;1410;1469},m),b,MOD(a-r,33),d,b+SUM((b>{5,8,12,14})*1),LOWER(LEFT(s,d))&MID(s,d+1,26)&REPT("!",(A1-a-b*32)/33))受到@Arnauld S回答的启发。他的解决方案的一个巧妙之处在于,以“拥有A”开头的案例数量如此之少,因此不需要用不同的测试来解释这些空间。
=LET(r,MOD(A1,33),集r= n \mod 33。
m,(r<20)+(r<18)+1,设置模式。模式1 > 19;模式2 [18, 19];模式3 < 18。
s,REPT("HAVE A ",m=2)&"HAPPY NEW YEAR"&REPT(" TO YOU",m=3),如果模式2,前面加上“有A ";如果模式3,则附加”您“。
基字符串的a,INDEX({989;1410;1469},m),字符值和
基字符串与b,MOD(a-r,33),的n \mod 33距离
将基字符串的d,b+SUM((b>{5,8,12,14})*1),部分转换为小写。括号中的数字代表空格。
LOWER(LEFT(s,d))&MID(s,d+1,26)&REPT("!",(A1-a-b*32)/33))返回字符串,并将适当数目的字符转换为小写加"!“达到目标号码。
发布于 2022-02-11 20:09:41
“ṭ½IṾFhĿ_)Wẓȷ⁻⁸ẉ»ḲŒP“7dx‘ịK€ŒuƤŻoƊ€Ẏ;þḶ”!xⱮƊẎOS⁼ɗƇ⁸Ḣ一种接受正整数的一元链接,它产生一个字符列表(或0)。或打印有效结果(或0)的完整程序。
不要在网上尝试! (它不会结束)
相反,请参阅这个稍微修改过的测试套件,它考虑了较少的可能字符串(通过使用\frac{1}{33}作为许多可选的尾随!s)。
“...»ḲŒP“7dx‘ịK€ŒuƤŻoƊ€Ẏ;þḶ”!xⱮƊẎOS⁼ɗƇ⁸Ḣ - Link: integer, N
“...» - "have a happy new year to you"
Ḳ - split at spaces
ŒP - powerset
“7dx‘ - [55,100,120]
ị - index into -> [["happy", "new", "year"], ["have", "a", "happy", "new", "year"], {"happy", "new", "year", "to", "you"]]
K€ - join each with spaces -> ["happy new year", "have a happy new year", "happy new year to you"]
Ɗ€ - last three links as a monad for each:
ŒuƤ - upper-case prefixes
Ż - prefix with a zero
o - logical OR (the full lower-case)
Ẏ - tighten
Ɗ - last three links as a monad - f(N):
Ḷ - [0..N-1]
”! - '!'
xⱮ - map with times -> ["", "!", "!!", ..., '!'*(N-1)]
;þ - table with concatenate
Ẏ - tighten
⁸ - use N as the right argument of...
Ƈ - filter keep those for which:
ɗ - last three links as a dyad - f(possibles, N):
O - ordinals
S - sum
⁼ - equals N?
Ḣ - head -> valid result or 0 if none existshttps://codegolf.stackexchange.com/questions/242683
复制相似问题