Project Eulerを解こう(報酬あり)

科学・IT

69 Res. 39.96342342 MONA 6 Fav.

1 :志位++和夫六段:2014/05/24 13:20:20 (10年前)  0.00114114MONA/1人

Project Eulerを1人で解いていくのが嫌+どこかに報告したい。
今入金してあるMonaが500ぐらい有るので、問題がひとつ解けるごとに僕が1モナ配布、そのかわりソースコードを書き込んでください。
どこかからコピペして来た人には配布しません。
質問が有れば答えてください。また配布します。

問題例: http://projecteuler.net/problem=1 (本家)
http://odz.sakura.ne.jp/projecteuler/ (和訳)

言語は問いません。
僕はCの経験はちょっとありますが、Haskellで解いていきます。

2 :名無し二段:2014/05/24 13:22:46 (10年前)  1MONA/1人

試しに一問だけ見て普通に数列で解決してしまった。
プログラミング出来ないのくやちいw

3 :志位++和夫六段:2014/05/24 13:27:18 (10年前)  0MONA/0人

現在コンパイラをインストールしてます。
環境整えるのも、プログラミングのうち…
何で解く人が多いんだろうか。

4 :志位++和夫六段:2014/05/24 13:31:04 (10年前)  1MONA/1人

>>2
Σ3n n=1…333 + Σ5n n=1…199 - Σ15n n=1…66 ってこと?
それなら配布せざるを得ない…
言語は数学ということになるのかなぁ

5 :名無し百五十五段:2014/05/24 13:32:44 (10年前)  1MONA/1人

codegolfみたいにコード数で競ったりはしないのか。
1問目
count = 0
repeat 1000,1
if cnt \ 3 = 0 : count = count + cnt : continue
if cnt \ 5 = 0 : count = count + cnt
wait 0
loop
mes "合計"+count
言語はHSPね

6 :志位++和夫六段:2014/05/24 13:36:24 (10年前)  0MONA/0人

macで環境作れなくて激怒
やっぱubuntuが最高なんすね。
はっきりわかんだね。

7 :名無し二段:2014/05/24 13:37:18 (10年前)  0MONA/0人

>>4
ソースコードって書いてるあたりプログラミングだって分かるし
シグマ嫌いだから返すよw何か譲歩してくれてありがとー

8 :志位++和夫六段:2014/05/24 13:45:27 (10年前)  0MONA/0人

やっと、ハローワールドできた。一問目に取りかかる。
main = putStrLn "Hello world\n"

9 :志位++和夫六段:2014/05/24 13:46:38 (10年前)  0MONA/0人

あれ、>>5のコードだと間違ってるな。
15の倍数二回計算してない?

10 :名無し百五十五段:2014/05/24 13:50:34 (10年前)  2MONA/1人

>9
3でヒットすればcontinueでrepeatの初めからやり直すから二回計算はしてないはずだけど・・・
2問目
old = 1
now = 1
count = 0
repeat
if now \ 2 = 0 : count = count + now
idx = old
old = now
now = now + idx
if now > 4000000 : break
loop
mes "合計"+count

11 :くまりんこ七段:2014/05/24 14:01:19 (10年前)  1MONA/1人

問一って問題文の和訳が「1000 以下」ってなってるけど、正しくは未満っぽい?Perlでやってみました

my $sum=0;
foreach my $value (1...999){
if($value % 3 == 0 || $value % 5 == 0){
$sum += $value;
}
}
print "result = $sum\n";

実行するとこうなります
result = 233168

12 :名無し百五十五段:2014/05/24 14:10:13 (10年前)  0MONA/0人

未満ならこうだわ・・・。答えはおなじになりました。
count = 0
repeat 999,1
if cnt \ 3 = 0 : count = count + cnt : continue
if cnt \ 5 = 0 : count = count + cnt
wait 0
loop
mes "合計"+count

13 :くまりんこ七段:2014/05/24 14:12:48 (10年前)  1MONA/1人

問2もできた
my ($tmp1, $tmp2) = (1, 2);
my $sum=2;
while($tmp2 < 4000000){
my $current = $tmp1 + $tmp2;
$tmp1=$tmp2;$tmp2=$current;
$sum += $current if $current % 2 == 0;
}

print "result = $sum\n";
実行するとこう表示する
result = 4613732

14 :志位++和夫六段:2014/05/24 14:15:23 (10年前)  0MONA/0人

解き方は分かるんだが、コンパイルが通らない。
エラーメッセージも意味分かんないし、そこら辺に落ちてる解答をコンパイルしても通らない。謎

15 :名無し百五十五段:2014/05/24 14:23:14 (10年前)  1MONA/1人

問題3はHSPだとオーバーフローするので多倍長精度モジュール使用。え、素数テーブル?ナ、ナンノコトカナ・・・・w
#include "longint.hsp"
Q = longint("600851475143")
idx = longint("2")
repeat
if Q \ idx = 0{
A = idx
Q = Q / idx
idx = 1
}
idx= idx + 1
wait 0
if Q = 1 : break
loop
mes A

16 :志位++和夫六段:2014/05/24 14:24:26 (10年前)  0MONA/0人

main = sum [ x | x<- [1..999] , (x `mod` 3) == 0 ]
なぜこれがコンパイルできないんだ。
謎過ぎる。

17 :志位++和夫六段:2014/05/24 14:39:00 (10年前)  0.00114114MONA/1人

やっとできたよ!メイン関数は出力を受け付ける関数だったよ。
コード以下
ans = sum [ x | x<- [1..999] , x `mod` 3 == 0 || x `mod` 5 == 0 ]
main = putStrLn (show ans)

答え233168

18 :くまりんこ七段:2014/05/24 14:41:55 (10年前)  1MONA/1人

問3長くなったのでPasteBinに貼りました
http://pastebin.com/77059Hde

実行結果はこうなります
result = 6857

19 :志位++和夫六段:2014/05/24 15:07:39 (10年前)  0MONA/0人

飯食ってこよう。フィボナッチ数列作るのクソムズい。

20 :名無し百五十五段:2014/05/24 16:16:40 (10年前)  1MONA/1人

HSPで問4
http://www.twitlonger.com/show/n_1s1sae2
かなりめんどかったwww
結果は906609で993*913

21 :くまりんこ七段:2014/05/24 16:36:07 (10年前)  1MONA/1人

Perlで問4
http://pastebin.com/TWrHVii6
答えは
result = 906609 = 993 x 913
です

22 :くまりんこ七段:2014/05/24 16:37:52 (10年前)  1MONA/1人

Perlで問5
http://pastebin.com/bSK8N5AV
素因数分解で解けますね
実行結果は
result = 232792560
です

23 :名無し百五十五段:2014/05/24 17:09:04 (10年前)  0MONA/0人

HSPで問5
http://www.twitlonger.com/show/n_1s1sanf
なーんか間違ってる可能性大だけど結果は
5587021440

24 :くまりんこ七段:2014/05/24 17:09:11 (10年前)  1MONA/1人

Perlで問6
my $sum=0;
my $multi=0;

foreach my $value (1...100){
$sum += $value;
$multi += ($value ** 2);
}

print "result = ".(($sum ** 2) - $multi)."\n";
実行結果は
result = 25164150
です

この問題、問4より難易度低いような・・・w

25 :名無し百五十五段:2014/05/24 17:10:15 (10年前)  0MONA/0人

がーん問5間違ってたか・・・?

26 :くまりんこ七段:2014/05/24 17:14:22 (10年前)  1MONA/1人

Perlで問7
普通に総当たりでやろうとすると計算時間がとてつもなく長くなるのでエラトステネスの篩を使いました
http://pastebin.com/B134KPMr

実行結果は
result = 104743
です

27 :くまりんこ七段:2014/05/24 17:18:12 (10年前)  0MONA/0人

HSPは昔やってたけど読み方忘れた(´・ω・`)

28 :名無し百五十五段:2014/05/24 17:28:01 (10年前)  0MONA/0人

わかった理論がそもそも間違ってたぜテヘペロ

29 :くまりんこ七段:2014/05/24 17:39:30 (10年前)  1MONA/1人

Perlで問8
http://pastebin.com/tmK4CeWe

結果は
result = 40824
でした

30 :名無し百五十五段:2014/05/24 18:09:20 (10年前)  1MONA/1人

HSPで問5の修正
http://www.twitlonger.com/show/n_1s1sb13
畜生しょうもないことで時間かかったーw
というわけでA = 232792560

31 :名無し百五十五段:2014/05/24 18:20:19 (10年前)  0MONA/0人

>>27
こんな超初心者用言語忘れていいのよ・・・w
忘れないとHSPで数千bitの暗号ソフトとか作る羽目になって死ぬ。

32 :志位++和夫六段:2014/05/25 21:56:43 (10年前)  0MONA/0人

フィボナッチ数列のリストを出すのにとんでもない時間がかかる。
Cだとすぐに簡単に実装できるのだが、Haskellは機械を意識しないで意味しか書かないからすごく効率悪いアルゴリズムをすぐに書いてしまう。

33 :名無し百五十五段:2014/05/25 22:43:14 (10年前)  0.00114114MONA/1人

リスト作るんじゃなくて、変数に前の数値を収納しておいて、次の数値を足す作業を繰り返しながら、偶数を別変数に足してくだけだお。

34 :志位++和夫六段:2014/05/25 23:24:09 (10年前)  0MONA/0人

>>33
そうか、リストを作る必要ないのか。

35 :くまりんこ七段:2014/05/26 21:52:24 (10年前)  1MONA/1人

perlで問9
foreach my $a (1...(1000/3)){
foreach my $b ($a...(1000/2)){
my $c = 1000 - $a - $b;
if(($a **2 + $b ** 2) == ($c ** 2)){
print "a = $a, b = $b, c = $c\n";
print "abc =".$a*$b*$c."\n";
exit 0;
}
}
}
実行結果は
a = 200, b = 375, c = 425
abc =31875000
になりました

36 :くまりんこ七段:2014/05/26 22:07:21 (10年前)  1MONA/1人

Perlで問10
http://pastebin.com/hT6EMrim
結果が出るまで60秒かかります

実行結果は
result = 142913828922
です

37 :名無し四段:2014/06/07 21:33:02 (10年前)  1MONA/1人

いまさらながら1からやっていこうと思う

https://dl.dropboxusercontent.com/u/105760787/Euler/Problem1.cpp
3と5は互いに素だからこれでいいけど
そうじゃなかったら再起制限で厄介なことになってた

38 :志位++和夫六段:2014/06/07 21:45:08 (10年前)  0MONA/0人

>>37
ダウンロードできない0KBになってるぽよ

39 :志位++和夫六段:2014/06/07 21:50:05 (10年前)  0MONA/0人

>>37
ごめん回線遅いだけだった。
template使ってるのすごいなぁ

40 :Monant.Gox四段:2014/06/07 22:18:06 (10年前)  0MONA/0人

1monaじゃやる気しないな(笑

41 :名無し百五十五段:2014/06/07 22:20:21 (10年前)  0MONA/0人

じゃあ問題番号/10くらい?w

42 :志位++和夫六段:2014/06/07 22:41:08 (10年前)  0MONA/0人

何か開発しろって訳じゃなくて、ただ
「一緒にやってくれたらコインをあげるよ。」
ってだけだよ。ProjectEuler自体が、お願いして「やってください」なんて性質の物じゃないよ。

43 :Monant.Gox四段:2014/06/08 02:33:48 (10年前)  0MONA/0人

問11って難しそう

44 :名無し名誉名人教士:2014/06/08 02:48:37 (10年前)  0MONA/0人

>>43
上下左右斜め、ループ6回でいいんじゃね?
ってかこの表を配列にするのがめんどくせぇ…

45 :名無し四段:2014/06/08 20:21:00 (10年前)  1MONA/1人

https://dl.dropboxusercontent.com/u/105760787/Euler/Problem2.cpp
できた

46 :やるお九段錬士尊者:2014/06/08 20:30:50 (10年前)  1MONA/1人

問題12

12375番目になる
三角数76576500
約数の数 576

なはず

47 :やるお九段錬士尊者:2014/06/08 20:38:19 (10年前)  0MONA/0人

#include <stdio.h>
int func(int);
int func(int num)
{ int i = 1, j, cnt = 0; j = num;
while(i < j){
if(num % i == 0){
j = num / i;
if(i == j) cnt++; else cnt = cnt + 2;
} i++; } return cnt;}
int main(void){ int num, cnt, yaruo;
num = 0; yaruo = 1;
while(1){
num = num + yaruo; i++;
cnt = func(num); if(cnt >= 501)
break;

48 :やるお九段錬士尊者:2014/06/08 20:38:27 (10年前)  0MONA/0人

}
printf("%d, %d\n", cnt, num);
getch();
return 0;
}

49 :やるお九段錬士尊者:2014/06/08 20:41:08 (10年前)  1MONA/1人

問題11フォートランでいけね?
program problemyaruo11
implicit none
integer i, j, k, n(20, 20)
integer vert(17,20), hori(20,17), dia1(17,17), dia2(17,17)

50 :やるお九段錬士尊者:2014/06/08 20:41:24 (10年前)  0MONA/0人


open(7,file='number.dat',status='old')
do i=1,20
read(7,*) (n(i,j),j=1,20)
end do
close(7)

51 :やるお九段錬士尊者:2014/06/08 20:41:32 (10年前)  0MONA/0人

do i = 1,17
do j = 1,20
vert(i,j) = product(n(i:i+3,j))
hori(j,i) = product(n(j,i:i+3))
end do
do j = 1,17
dia1(i,j)=product((/(n(i+k,j+k),k=0,3)/))
dia2(i,j)=product((/(n(i+k,j-k+3),k=0,3)/))
end do
end do
write(*,*) maxval((/vert,hori,dia1,dia2/))
end program problemyaruo11
こたえ 70600674

52 :志位++和夫六段:2014/06/09 02:01:32 (10年前)  0MONA/0人

Fortranできるとかこのやる夫何者なんだ!!????

53 :くまりんこ七段:2014/06/09 08:07:05 (10年前)  5.96MONA/1人

>>47のコピペ元
http://ceuler.blog.fc2.com/blog-entry-25.html


>>50のコピペ元
http://projecteuler.web.fc2.com/Problems/Problem11.html

行数制限を回避するためか改行が消えていたり、変数名をyaruoに書き換えたりしているが、完全に一致

54 :志位++和夫六段:2014/06/09 10:57:00 (10年前)  0MONA/0人

やる夫、オボカタしていたようである。

55 :名無し四段:2014/06/09 22:09:52 (10年前)  0MONA/0人

https://dl.dropboxusercontent.com/u/105760787/Euler/Problem5.cpp
3と4はとばして5を解いた

56 :名無し五段錬士:2014/06/10 18:47:06 (10年前)  1MONA/1人

面白そうなスレだったのとモナが欲しいので参加させてください
rubyで問題1を解きました
p (1...1000).select{|x| x % 3 == 0 || x % 5 == 0}.inject(:+)

実行結果
https://ideone.com/TDpqdh

57 :名無し五段錬士:2014/06/10 19:08:37 (10年前)  1MONA/1人

問2を解きました(ruby)
https://ideone.com/1pkkSu

問1はWeb上に同じ回答があったようなので駄目なら駄目でいいです
短く書こうとすると返って他の答えと被ってしまうようですね

58 :名無し五段錬士:2014/06/10 19:24:15 (10年前)  1MONA/1人

問3を解きました(ruby)
require 'prime'
p Prime.prime_division(600851475143)[-1][0]

実行結果:https://ideone.com/GHKOlY
真面目に解いていないのと多分Web上に同じような答えがあると思うので駄目なら弾いてください

59 :名無し五段錬士:2014/06/10 19:38:04 (10年前)  1MONA/1人

問4を解きました。あまり綺麗に書こうという努力をしてません
a = 0
(100..999).each{|x|(100..999).each{|y|
z = x*y
a = z if z.to_s.reverse == z.to_s && a < z
}}
p a
実行結果:https://ideone.com/UonlD3

60 :名無し五段錬士:2014/06/10 20:01:23 (10年前)  1MONA/1人

これもライブラリに任せきりですが問5を解きました。(ruby)
このまま解き続けても全部弾かれたら悲しいのでまずはこの辺で。
require "rational"
a = 1
(2..20).each{|x| a = a.lcm(x) }
p a

実行結果:https://ideone.com/Wogtiq

61 :名無し四段:2014/06/13 20:12:48 (10年前)  1MONA/1人

https://dl.dropboxusercontent.com/u/105760787/Euler/Problem6.cpp
一般項を求めるだけという意味では1と似ている
どの言語でも大体同じだろうから>55がダメだとこれもきついか

62 :makit五段錬士:2014/06/16 22:15:19 (10年前)  1MONA/1人

被るとイヤだからとりあえず問20解いてみた
PHPでそのまま計算しただけだけど^^

https://ideone.com/G7P41l

63 :志位++和夫六段:2014/06/17 15:32:30 (10年前)  0MONA/0人

>>62
PHPって文字列得意に加えて、こんな大きな桁の計算できるのか…
知らなかった。

64 :名無し四段:2014/06/21 03:25:26 (10年前)  1MONA/1人

https://dl.dropboxusercontent.com/u/105760787/Euler/Problem15.cpp
厄介な問題が続くので一気に飛ばして15を解いた
公式通りにやるよりもこのほうがそれらしくきれいに書けると思う
答えは137846528820

65 :名無し七段錬士:2014/06/21 04:41:57 (10年前)  1MONA/1人

アルゴリズムの知識とか無しで解けそうな問19をやりましたわよ js
var year=1900, month=1, day=1, p=0, xdays=0;
var dayNum=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], days=[0,0,0,0,0,0,1];
function urudoshi_check(){
if (year%400==0 || (year%4==0 && year%100!=0)) dayNum[1]=29;
else dayNum[1]=28;
}
urudoshi_check();
while (year<=2000){
if (year>=1901 && day==1 && days[p%7]==1) xdays++;
if (++day > dayNum[month-1]){ //日付更新
day=1;
if (++month > 12){ month=1; year++; urudoshi_check(); }
} p++;
} document.write(xdays); //答え出力

66 :名無し四段:2014/06/23 21:10:30 (10年前)  1MONA/1人

https://dl.dropboxusercontent.com/u/105760787/Euler/Problem19.cpp
1/1の曜日と閏年判定を組み合わせた14通りで1年間の回数を調査すれば
もっと計算を減らすことができるはずだけどそこまではやらない

67 :名無し四段:2014/06/27 23:22:35 (10年前)  1MONA/1人

https://dl.dropboxusercontent.com/u/105760787/Euler/Problem28.cpp
今の縛りと自分の能力ではそろそろ限界かもしれない
答えは669171001

68 :名無し四段:2014/07/01 00:11:44 (10年前)  1MONA/1人

面白そうなスレハケーン
とりあえずc#でProblem21
http://ideone.com/ZxRvCb

69 :新疆改造中心 六四事件二段:2018/01/16 15:02:45 (6年前)  0MONA/0人

age

お気に入り

新規登録してMONAをもらえた

本サイトはAsk Mona 3.0に移行しましたが、登録すると昔のAsk Monaで遊ぶことができます。

新規登録ログイン