Mặt trận 9 của Euber


11

 

Project Euler là một trang web thử thách lập trình thú vị khác để cạnh tranh (tốt, chơi) trên. Các vấn đề ban đầu bắt đầu nhẹ nhàng, nhưng sau đó bùng nổ trong khó khăn hơn một trăm đầu tiên. Một số vấn đề đầu tiên có một số điểm chung giữa việc tìm các số nguyên tố, bội số và các yếu tố, vì vậy có thể có một số cơ hội tái sử dụng mã vi thú vị để chơi với.

Vì vậy, hãy viết một chương trình giải quyết, không sử dụng kiến thức tiên nghiệm , bất kỳ vấn đề nào trong 9 vấn đề đầu tiên .

  1. Vấn đề được lựa chọn bởi người dùng, ASCII '1' đến '9', bao gồm, thông qua một đối số khi gọi hoặc đầu vào tiêu chuẩn trong khi chạy. (Bạn có thể tính tất cả các câu trả lời, nhưng chỉ hiển thị một câu.)
  2. Câu trả lời đúng phải được in trên một dòng mới, trong cơ sở 10, sử dụng ASCII.
  3. Các chương trình sẽ thực hiện trong vòng chưa đầy một phút (đề xuất PE).
  4. Bởi "không có một tiên nghiệm kiến thức", tôi có nghĩa là mã của bạn phải lấy được các câu trả lời mà không cần nguồn lực bên ngoài . Một chương trình như thế này sẽ bị coi là không hợp lệ (nếu không thì đúng, giả sử tôi không mắc lỗi đánh máy):

    print[233168,4613732,6857,906609,232792560,25164150,104743,40824,31875000][input()-1]
    

    cho vấn đề # 8 (bao gồm một số 1000-chữ số), bạn có thể đọc các số từ một tập tin bên ngoài, chỉ cần chỉ định cách nó được lưu trữ (ví dụ nhị phân, văn bản, tiêu đề, mô-đun nhập khẩu) và / hoặc bao gồm nó trong bài trả lời của bạn ( không tính vào thời lượng của chương trình chính).

  5. Điểm bằng byte.

  6. Mười lăm Unicorn Points ™ được trao cho nhà lãnh đạo đếm byte sau 2 tuần.

Câu trả lời:


4

Con trăn, 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]

Khoảng trắng được thêm vào dòng cuối cùng để dễ đọc. Số 1000 chữ số được nhập từ mô-đun có tên f.pychứa dòng:

s="7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"

3

Javascript

Giải pháp: 1785 ký tự

thực thi mã với nodeJS

lưu ý về vấn đề 7: thuật toán là ok, nhưng phải mất một chút thời gian! Nếu ai đó có giải pháp hiệu quả hơn ...

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)}

vấn đề 1: 39 ký tự

b=0;for(i=1e3;i--;)if(i%3<1||i%5<1)b+=i

vấn đề 2: 49 ký tự

d=e=1;f=0;while(e<=4e6)g=d+e,d=e,e=g,f+=e%2<1?e:0

vấn đề 3: 85 ký tự

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}

vấn đề 4: 105 ký tự

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++}

vấn đề 5: 55 ký tự

for(a=c=1;c;){for(b=20;b>1;)a%b>0?b=0:b--;b==1?c=0:a++}

vấn đề 6: 51 ký tự

for(a=100,b=Math.pow(a*(a+1)/2,2),d=a+1;d--;)b-=d*d

vấn đề 7: 82 ký tự

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}

vấn đề 8: 1078 ký tự ^ _ ^

a="7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
for(e=0,b=996;b--;){d=eval(a.substr(b,5).split("").join("*"));if(d>e)e=d}

vấn đề 9: 58 ký tự

for(a=b=0;a+b+Math.sqrt(a*a+b*b)!=1e3;)if(++a==500)a=0,b++

if(i%3<1||i%5<1)a+=ingắn hơn :)
Michael M.

Vấn đề ngắn hơn 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}
Florent

Vấn đề ngắn hơn 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++}
Florent

@Florent: vấn đề 3 g==g|0không hoạt động g|0phải nằm trong ngoặc đơn
chàng777

1
@Florent: giải pháp là biến h, không phải giá trị được trả về bởi tập lệnh
guys777

1

R 684 ký tự

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,]))}

Thụt lề:

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,]))
    }

Sử dụng:

> 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

Riêng biệt:

1: 48 ký tự sum(which(rowSums(!outer(1:999,c(3,5),`%%`))>0))

2: 64 ký tự x=c(1,1);while(tail(x,1)<4e6)x=c(x,sum(tail(x,2)));sum(x[!x%%2])

3: 73 ký tự n=600851475143;m=2:sqrt(n);M=m[!n%%m];max(M[rowSums(!outer(M,M,`%%`))<2])

4: 88 ký tự a=900:999;b=a%o%a;max(b[sapply(strsplit(c(b,""),""),function(x)all(x==rev(x)))],na.rm=T)

5: 34 ký tự a=20;while(any(a%%1:20>0))a=a+20;a

6: 25 ký tự a=1:100;sum(a)^2-sum(a^2)

7: 54 ký tự d=3;P=2;while(P<=1e4){d=d+2;if(sum(!d%%2:d)<2)P=P+1};d

8: 181 ký tự

Dòng đầu tiên đọc số từ trang web euler dự án, dòng thứ hai thực hiện tính toán.

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 ký tự z=1:1e3;Z=expand.grid(z,z);Y=cbind(Z,sqrt(rowSums(Z^2)));prod(Y[rowSums(Y)==1000,][1,])


Đến bây giờ, f(7)mất 2 phút để tính toán để nó không thực sự tuân thủ các ràng buộc về thời gian thực hiện. Tôi sẽ cố gắng để làm việc đó. ( f(5)mất 48 giây trên máy của tôi)
plannapus

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 là một tệp chứa các mục sau:

n=:'7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'

0

TI-BASIC (Công việc đang tiến hành)

Đối với máy tính TI-83 hoặc TI-84 của bạn

Chương trình chính, 15 byte :

Input X:OpenLib(1):X:ExecLib:Disp Ans

Thư viện 1 ( 4 byte ) không được tính vào tổng số byte:

L1(Ans

Sau đó, chúng tôi có Danh sách # 1:

work in progress
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.