프로젝트 오일러 (Game Euler) 는 또 다른 재미있는 프로그래밍 도전 사이트입니다. 초기 문제는 완만하게 시작되지만 처음 백 개 이상의 난이도로 폭발합니다. 처음 몇 가지 문제는 소수, 배수 및 요인을 찾는 것 사이에 공통점이 있으므로 재미있는 코드 마이크로 재사용 기회가있을 수 있습니다.
따라서 사전 지식없이 처음 9 가지 문제 를 해결하는 프로그램을 작성하십시오 .
- 사용자가 호출 할 때 인수 또는 실행 중에 표준 입력을 통해 ASCII ‘1’에서 ‘9’까지 문제가 선택됩니다. (모든 답변을 계산할 수 있지만 하나만 표시하십시오.)
- 10을 기준으로 ASCII를 사용하여 정답을 새 줄에 인쇄해야합니다.
- 프로그램은 1 분 이내에 실행되어야합니다 (PE 제안).
-
“아니오함으로써 선험적 지식”, 내 말은 당신의 코드가 외부 리소스없이 답을 도출해야한다 ‡ . 이와 같은 프로그램은 유효하지 않은 것으로 간주됩니다 (그렇지 않으면 오타를하지 않았다고 가정하면).
print[233168,4613732,6857,906609,232792560,25164150,104743,40824,31875000][input()-1]
‡ 문제 # 8, 당신은 단지 (당신의 대답 게시물을가 (예를 들어, 이진, 텍스트, 헤더, 수입 모듈) 저장되는 방법을 지정 및 / 또는 포함, 외부 파일에서 숫자를 읽을 수 있습니다 (1000 자리 숫자를 포함한다) 메인 프로그램의 길이에는 포함되지 않습니다).
-
점수는 바이트 단위입니다.
- 2 주 후 15 개의 유니콘 포인트 ™가 바이트 수 리더에게 수여되었습니다.
답변
파이썬, 505
import f
A,B,C,D=map(range,[22,1000,101,500])
R=reduce
M=int.__mul__
a=x=0
b=1
n=2
p=[]
while b<=4e6:a,b=b,a+b;x+=b*(b%2<1)
while len(p)<=1e4:p+=[n]*all(n%i for i in p);n+=1
q=y=R(M,p[:8])
while any(y%(i+1)for i in A):y+=q
print[
sum(i for i in B if i%3*(i%5)<1),
x,
max(i for i in p if 600851475143%i<1),
max(a*b for a in B for b in B if`a*b`==`a*b`[::-1]),
y,
sum(C)**2-sum(i**2for i in C),
p[-1],
max(R(M,map(int,f.s[i:i+5]))for i in B),
[a*b*(1000-a-b)for a in D for b in D if(a+b)*1e3==5e5+a*b][0]
][input()-1]
가독성을 위해 공백이 마지막 줄에 추가됩니다. 1000 자리 숫자는 f.py
행이 포함 된 모듈에서 가져옵니다 .
s="7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
답변
자바 스크립트
해결책 : 1785 자
nodeJS로 코드를 실행
문제 7에 대한 참고 사항 : 알고리즘은 괜찮지 만 시간이 걸립니다! 누군가가보다 효율적인 솔루션을 가지고 있다면 …
z=process.argv[2]
y=console.log
if(z==1){b=0;for(i=1e3;i--;)if(i%3<1||i%5<1)b+=i;y(b)}
if(z==2){d=e=1;f=0;while(e<=4e6)g=d+e,d=e,e=g,f+=e%2<1?e:0;y(f)}
if(z==3){e=Math.sqrt(d=600851475143)|0+1;f=2;while(f<e){g=d/f;if(g==(g|0))h=f,d=g;f+=f==2?1:2}y(h)}
if(z==4){for(a=b=100,c=0;a+b<1998;){d=a++*b;if(d==(""+d).split("").reverse().join("")&&d>c)c=d;if(a>999)a=b+1,b++}y(c)}
if(z==5){for(a=c=1;c;){for(b=20;b>1;)a%b>0?b=0:b--;b==1?c=0:a++}y(a)}
if(z==6){for(a=100,b=Math.pow(a*(a+1)/2,2),d=a+1;d--;)b-=d*d;y(b)}
if(z==7){for(a=3,c=d=0;c<1e4;){for(b=a;b>2;){b=b>3?b-2:2;if(a%b<1)b=0}if(b>0)c++,d=a;a=a+2}y(d)}
if(z==8){a="7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";for(e=0,b=996;b--;){d=eval(a.substr(b,5).split("").join("*"));if(d>e)e=d};y(e)}
if(z==9){for(a=b=0;(c=a+b+Math.sqrt(a*a+b*b))!=1e3;)if(++a==500)a=0,b++;y(a,b,c-b-a)}
문제 1 : 39 자
b=0;for(i=1e3;i--;)if(i%3<1||i%5<1)b+=i
문제 2:49 자
d=e=1;f=0;while(e<=4e6)g=d+e,d=e,e=g,f+=e%2<1?e:0
문제 3 : 85 자
e=Math.sqrt(d=600851475143)|0+1;f=2;while(f<e){g=d/f;if(g==(g|0))h=f,d=g;f+=f==2?1:2}
문제 4 : 105 자
for(a=b=100,c=0;a+b<1998;){d=a++*b;if(d==(""+d).split("").reverse().join("")&&d>c)c=d;if(a>999)a=b+1,b++}
문제 5:55 자
for(a=c=1;c;){for(b=20;b>1;)a%b>0?b=0:b--;b==1?c=0:a++}
문제 6:51 자
for(a=100,b=Math.pow(a*(a+1)/2,2),d=a+1;d--;)b-=d*d
문제 7:82 자
for(a=3,c=d=0;c<1e4;){for(b=a;b>2;){b=b>3?b-2:2;if(a%b<1)b=0}if(b>0)c++,d=a;a=a+2}
문제 8 : 1078 자 ^ _ ^
a="7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
for(e=0,b=996;b--;){d=eval(a.substr(b,5).split("").join("*"));if(d>e)e=d}
문제 9:58 자
for(a=b=0;a+b+Math.sqrt(a*a+b*b)!=1e3;)if(++a==500)a=0,b++
답변
R 684 자
f=function(N){r=rowSums;p=function(x,y)r(!outer(x,y,`%%`));S=sum;x=c(1,1);n=600851475143;a=900:999;b=20;c=1:100;m=2:sqrt(n);M=m[!n%%m];A=a%o%a;d=3;P=2;z=1:1e3;Z=expand.grid(z,z);Y=cbind(Z,sqrt(r(Z^2)));W=gsub("\n","",xpathApply(htmlParse("http://projecteuler.net/problem=8"),"//p",xmlValue)[[2]]);switch(N,S(which(p(1:999,c(3,5))>0)),{while(tail(x,1)<4e6)x=c(x,S(tail(x,2)));S(x[!x%%2])},max(M[p(M,M)<2]),max(A[sapply(strsplit(c(A,""),""),function(x)all(x==rev(x)))],na.rm=T),{while(any(b%%1:20>0))b=b+20;b},S(c)^2-S(c^2),{while(P<=1e4){d=d+2;if(sum(!d%%2:d)<2)P=P+1};d},max(sapply(5:nchar(W),function(i)prod(as.integer(strsplit(substr(W,i-4,i),"")[[1]])))),prod(Y[r(Y)==1000,][1,]))}
들여 쓰기 :
f=function(N){
r=rowSums
p=function(x,y)r(!outer(x,y,`%%`))
S=sum
x=c(1,1)
n=600851475143
a=900:999
b=20
c=1:100
m=2:sqrt(n)
M=m[!n%%m]
A=a%o%a
d=3
P=2
z=1:1e3
Z=expand.grid(z,z)
Y=cbind(Z,sqrt(r(Z^2)))
W=gsub("\n","",xpathApply(htmlParse("http://projecteuler.net/problem=8"),"//p",xmlValue)[[2]])
switch(N,S(which(p(1:999,c(3,5))>0)),
{while(tail(x,1)<4e6)x=c(x,S(tail(x,2)));S(x[!x%%2])},
max(M[p(M,M)<2]),
max(A[sapply(strsplit(c(A,""),""),function(x)all(x==rev(x)))],na.rm=T),
{while(any(b%%1:20>0))b=b+20;b},
S(c)^2-S(c^2),
{while(P<=1e4){d=d+2;if(sum(!d%%2:d)<2)P=P+1};d},
max(sapply(5:nchar(W),function(i)prod(as.integer(strsplit(substr(W,i-4,i),"")[[1]])))),
prod(Y[r(Y)==1000,][1,]))
}
용법:
> f(1)
[1] 233168
> f(2)
[1] 4613732
> f(3)
[1] 6857
> f(4)
[1] 906609
> f(5)
[1] 232792560
> f(6)
[1] 25164150
> f(7)
[1] 104743
> f(8)
[1] 40824
> f(9)
[1] 31875000
갈라져:
1:48 자 sum(which(rowSums(!outer(1:999,c(3,5),`%%`))>0))
2:64 자 x=c(1,1);while(tail(x,1)<4e6)x=c(x,sum(tail(x,2)));sum(x[!x%%2])
3:73 자 n=600851475143;m=2:sqrt(n);M=m[!n%%m];max(M[rowSums(!outer(M,M,`%%`))<2])
4:88 자 a=900:999;b=a%o%a;max(b[sapply(strsplit(c(b,""),""),function(x)all(x==rev(x)))],na.rm=T)
5:34 자 a=20;while(any(a%%1:20>0))a=a+20;a
6:25 자 a=1:100;sum(a)^2-sum(a^2)
7:54 자 d=3;P=2;while(P<=1e4){d=d+2;if(sum(!d%%2:d)<2)P=P+1};d
8 : 181 자
첫 번째 줄은 프로젝트 오일러 웹 사이트에서 번호를 읽고, 두 번째 줄은 실제로 계산을 수행합니다.
W=gsub("\n","",xpathApply(htmlParse("http://projecteuler.net/problem=8"),"//p",xmlValue)[[2]])
max(sapply(5:nchar(W),function(i)prod(as.integer(strsplit(substr(W,i-4,i),"")[[1]]))))
9 : 87 자 z=1:1e3;Z=expand.grid(z,z);Y=cbind(Z,sqrt(rowSums(Z^2)));prod(Y[rowSums(Y)==1000,][1,])
답변
J 245 236 232
load'n'
echo".>(<:".1!:1]1){<;._1'!+/I.+./0=5 3|,:~i.1e3!+/}:(],4&*@:{:+_2&{)^:(4e6>{:)^:_]0 2!{:q:600851475143!>./(#~(-:|.)@":"0),/*/~i.1e3!*./>:i.20!(([:*:+/)-[:+/*:)i.101!p:1e4!>./5*/\"."0 n!x:*/{.(#~1e3=+/"1)(+.,|)"0,j./~i.500'
n은 다음을 포함하는 파일입니다.
n=:'7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'
답변
TI-BASIC (작업 진행 중)
TI-83 또는 TI-84 계산기
메인 프로그램, 15 바이트 :
Input X:OpenLib(1):X:ExecLib:Disp Ans
라이브러리 1 ( 4 바이트 ) 은 총 바이트 수에 포함됩니다.
L1(Ans
그런 다음 목록 # 1이 있습니다.
work in progress