Answers:
a=gets.to_i;a=eval"#{a}".gsub /./,'+\&**2'until a<5
puts a<2?:Happy: :Unhappy
char b[1<<30];a;main(n){for(scanf("%d",&n);b[n]^=1;n=a)for
(a=0;a+=n%10*(n%10),n/=10;);puts(n-1?"Unhappy":"Happy");}
这使用2 30字节(1GB)数组作为位图来跟踪循环中遇到的数字。在Linux上,只要启用了内存过量使用(通常默认情况下),这实际上可以有效地工作。通过过量使用,可以按需分配阵列的页面并将其清零。
请注意,在Linux上编译该程序会使用1 GB的RAM。
f 1="Happy"
f 4="Unhappy"
f n=f$sum[read[c]^2|c<-show n]
main=interact$f.read
eTeX,153
\let~\def~\E#1{\else{\fi\if1#1H\else Unh\fi appy}\end}~\r#1?{\ifnum#1<5
\E#1\fi~\s#1{0?}}~\s#1{+#1*#1\s}~~{\expandafter\r\the\numexpr}\message{~\noexpand
称为etex filename.tex 34*23 + 32/2 ?
(包括末尾的问号)。表达式中的空格无关紧要。
编辑:我下降到123,但现在输出是dvi(如果使用编译etex
)或pdf(如果使用编译pdfetex
)。由于TeX是一种排版语言,所以我认为这很公平。
\def~{\expandafter\r\the\numexpr}\def\r#1?{\ifnum#1<5 \if1#1H\else
Unh\fi appy\end\fi~\s#1{0?}}\def\s#1{+#1*#1\s}~\noexpand
do{n=0;for(i in a){n+=a[i]*a[i]|0}a=n+''}while(n>4);alert(['H','Unh'][n>1?1:0]+'appy')
通过将a设置为所需的数字来提供输入。
归功于mellamokb。
n==4?h="Unh":n==1?h="H":a=n+""}alert(h+"appy")
||
为,我还删除了另一个字符|
。
n==4?h...
。更改为do ... while条件循环while(n>4)
。然后改用以下最终声明:alert(["H","Unh"][n>1?1:0]+"appy")
n=0;
f=lambda n:eval({1:'"H"',4:'"Unh"'}.get(n,'f(sum(int(x)**2for x in`n`))'))
print f(input())+"appy"
方式,距离竞争太久了,但也许会带来笑声。它在Python中执行“惰性”评估。现在我想到的确实与Haskell条目非常相似,只是没有任何魅力。
'Happy'"_`('Unhappy'"_)`([:$:[:+/*:@:"."0@":)@.(1&<+4&<)
动词,而不是独立的脚本,因为问题是模棱两可的。
用法:
happy =: 'Happy'"_`('Unhappy'"_)`([:$:[:+/*:@:"."0@":)@.(1&<+4&<)
happy =: 'Happy'"_`('Unhappy'"_)`([:$:[:+/*:@:"."0@":)@.(1&<+4&<)
happy"0 (7 4 13)
happy"0 (7 4 13)
Happy
Unhappy
Happy
def d(n:Int):Int=if(n<10)n*n else d(n%10)+d(n/10)
def h(n:Int):Unit=n match{
case 1=>println("happy")
case 4=>println("unhappy")
case x=>h(d(x))}
(n*n)
短于n*n
,或者空格不足以将if表达式与else
?分开吗?
def h(s: String):String=if(s=="1")"H"else if(s=="4")"Unh"else h(s.map(_.asDigit).map(a=>a*a).sum+"");print(h(readLine)+"appy")
'appy',~>('Unh';'H'){~=&1`$:@.(>&6)@(+/@:*:@:("."0)@":)
我敢肯定,胜任的J-er比我能做的还要短。我是一个相对较新的人。
新增和改进:
('Unhappy';'Happy'){~=&1`$:@.(>&6)@(+/@:*:@:("."0)@":)
得益于ɐɔıʎuʎ的更新和改进:
(Unhappy`Happy){~=&1`$:@.(>&6)@(+/@:*:@:("."0)@":)
("."0)
。这会产生排名错误,但是如果我不拆分“ Happy”并将结果保留在方框中,则可以保存一个字符。
("."0)
是,连词适用于它们所附加的整个先前动词系列,这不是我想要的。如果我说的话+/@:("."0)@":
,那与+/@:"."0@:
实际情况截然不同(+/@:".)"0@:
。
'Unhappy';'Happy'
为来节省4个字符Unhappy`Happy
。
(format t"~Aappy~%"(do((i(read)(loop for c across(prin1-to-string i)sum(let((y(digit-char-p c)))(* y y)))))((< i 5)(if(= i 1)"H""Unh"))))
更具可读性:
(format t "~Aappy~%"
(do
((i (read)
(loop for c across (prin1-to-string i)
sum (let
((y (digit-char-p c)))
(* y y)))))
((< i 5) (if (= i 1) "H" "Unh"))))
会更短一些,只从中返回“ Happy”或“ Unhappy” (do)
,但是可以说这不会算作整个程序
*语言约会挑战
D²SµÐLỊị“¢*X“<@Ḥ»
D²SµÐLỊị“¢*X“<@Ḥ» - Main link: n
µÐL - loop while the accumulated unique set of results change:
D - cast to a decimal list
² - square (vectorises)
S - sum
- (yields the ultimate result, e.g. n=89 yields 58 since it enters the
- "unhappy circle" at 145, loops around to 58 which would yield 145.)
Ị - insignificant? (abs(v)<=1 - in this case, 1 for 1, 0 otherwise)
“¢*X“<@Ḥ» - dictionary lookup of ["Happy", "Unhappy"] (the central “ makes a list)
ị - index into
- implicit print
'ŽØs[SnOD5‹#}≠i„unì}™
说明:
每个数字最终都会产生1
或4
,因此我们会无限循环,并在数字小于5时立即停止。
'ŽØ '# Push string "happy"
s # Swap to take the (implicit) input
[ } # Loop indefinitely
S # Convert the integer to a list of digits
n # Square each
O # Take the sum
D5‹# # If this sum is smaller than 5: stop the infinite loop
≠i } # If the result after the loop is NOT 1:
„unì # Prepend string "un" to string "happy"
™ # Convert the string to titlecase (and output implicitly)
见我这个05AB1E尖端(部分如何使用字典?)理解为什么'ŽØ
是"happy"
。
#include<iostream>
int n,i,j;int main(){for(std::cin>>n;n>1;n=++j&999?n*n+i:0)for(i=0;n/10;n/=10)i+=n%10*(n%10);std::cout<<(n?"H":"Unh")<<"appy";}
这是我在这里所做的修改后的版本:
&999
办?如果j
是垃圾值,它将如何工作?
if(j==999){n = 0;}else{n=n*n +i;}
,j不应为垃圾值,全局变量初始化为零。
是的,这个挑战有三年了;是的,它已经有一个赢家的答案;但是由于我很无聊,并且为了另一个挑战而这么做,所以我想把它放在这里。令人惊讶的惊喜,长期以来-在...
import java.util.*;class H{public static void main(String[]a){int n=Integer.parseInt(new Scanner(System.in).nextLine()),t;while((t=h(n))/10!=0)n=t;System.out.print(t==1?"":"");}static int h(int n){if(n/10==0)return n*n;else return(int)Math.pow(n%10,2)+h(n/10);}}
取消高尔夫:
import java.util.*;
class H {
public static void main(String[] a) {
int n = Integer.parseInt(new Scanner(System.in).nextLine()), t;
while ((t = h(n)) / 10 != 0) {
n = t;
}
System.out.print(t == 1 ? "" : "");
}
static int h(int n) {
if (n / 10 == 0) {
return n * n;
} else {
return (int) Math.pow(n % 10, 2) + h(n / 10);
}
}
}
int d(int n)=>n<10?n*n:(d(n%10)+d(n/10));string h(int n)=>n==1?"happy":n==4?"unhappy":h(d(n));
对于任何给定的数字(如int
),h()
将返回正确的值。您可以在.NetFiddle上尝试代码。
#include <iostream>
using namespace std ;
int main ()
{
int m , a[25] , kan=0 , y , z=0 , n , o=0, s , k=0 , e[25] ;
do {
m :
for ( int j=1 ; j <10000 ; j++ )
{
n:
for (int i=0 ; j!=0 ; i++ )
{
a[i]=j%10 ;
j/=10 ;
kan++ ;
}
for ( int i=0 ; i<kan ; i++ )
{
y=a[i]*a[i] ;
z+=y ;
}
k+=1 ;
if (z==1)
{
cout<<j<<endl;
o++ ;
}
else
{
for (int f=0 ; f<k ; f++ )
{
e[f]=z ;
}
for ( int f=0 ; f=k-1 ; f++ )
{
for ( int p=f+1 ; p <k-1 ; p++ )
{
if(e[f]=e[p])
goto m ;
else { j=z ; goto n ; }
}
}
}
}
}while(o!=100) ;
return 0 ;
}