Thread overview
Project Euler
Jun 29, 2011
Ali
Jun 29, 2011
Ali
Jun 29, 2011
Ali
Jun 29, 2011
Ali
Jun 29, 2011
Ali
Jun 29, 2011
Ali
June 29, 2011

Selamlar.

Project Euler'i takip edeniniz var mi?

Burada gercekten guzel problemler var.

profil sayfanizi editlerseniz

Hangi dilde bu problemleri cozdugunuzu de gosterebilirsiniz.

D dili de dahil.

Algoritmanizi gelistirmeniz acisindan guzel bir olusum

344 kadar problem var

gittikce zorlasiyor ama.

Benim ilk cozdugum soru kolay gelmisti.

Sonralari 2 milyonun altindaki asal sayilari cozmek zor gelmisti.

Cunku nasil alacagimi bulamamistim (:

Bence burada algoritma gelistirilebilir.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 29, 2011

Hatta ilk problemi D ile cozdum

Ama anlam veremedigim su

ben sadece son sonucu isterken o 0'dan basliyor son sonucu da yazdiriyor

C++ aliskanligimdan olsa gerek bir hata yaptigimi dusunuyorum.

import std.stdio;

void main()
{
	int sayi = 0;
	for (int i = 0; i < 1000; i++) {
		if (i % 3 == 0 || i % 5 == 0) {
			sayi += i;
	writeln(sayi);
		}
	}
}

  1. Problem icin bir fibonacci yapisi kullanayim dedim

4 milyon'u asmayacak sekilde fibonacci sayilarini yazdirin diyor sanirim. ve bu sayilarin toplamini bulun diyor.

yani 3.999.999 seklinde bir deger varsa en son ondan oncekilerde dahil toplayin diyor

bende su tarzda bir kod var

Nette gordum. Belki bu isime yarar diye. Ama her turlu fibonaccinin 4 milyonu asmayacak sekilde yazdirilip diger degerlerinin toplanmasi islemini yaptiramadim. cok kasmaya basladi pc.

Milyonu asan rakamlari cikardi :S

module main;
import std.stdio;
import std.string;
import std.conv;
import std.bigint;

int calculate(BigInt usernum)
{
if (usernum != 0)
{
BigInt num1 = 0;
BigInt num2 = 1;
BigInt total;
writeln("");
auto file = File("Fibonacci.txt", "w");

for (int x = 0; x<usernum; x++)
{
	if (total >=num1 + num2)
	{
		break;
	}
	total = num1 + num2;
	writeln(total);
	file.writeln(total);
	num1 = num2;
	num2 = total;
	}
file.writefln("The Fibonacci sequence to %d terms.", usernum);
writeln("");
writefln("The Fibonacci sequence to %d terms written to Fibonacci.txt", usernum);
readln();
return 0;
}
	else
	{
	writeln("");
	writeln("You can't enter 0!");
	writeln("");
	return 1;
	}
}

void main()
{
writeln("Please enter the terms of the Fibonacci sequence you want to calculate:");
string input = readln().chomp();
BigInt number = 0;
if (input.isNumeric)
{

if (calculate(number.__ctor(input)) == 1)
{
	main();
}
	return;
}
else
{
writeln("");
writeln("Non numeric input.");
writeln("");
main();
}
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 29, 2011

Abi senin yaptigin daha iyi ama

iyi programlama alistirmalarina bakarsak senin yaptigin daha iyi degil mi?

ben de yaptim ama

uzunca oldu

ne kadar kisa satir, o kadar okunakli program

diye bir makale okumustum sence bu dogru mudur?

(:

Birde su problemi yanlis mi cevirdim, ingilizcem bazen yetersiz kaliyor :D

Alıntı:

>

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

4 milyonu asmayan fibonacci sayilarinin tamaminin toplamini istiyor degil mi?

c++ ile yapinca patladi program.

d ile daha kuramadim kafamda :S (:

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 29, 2011

çiftleri alabilirim de

işte onları alırken program patlıyor

daha toplama bile gelmeden yani.

thread kullanımında da daha bilgi sahibi degilim.

direkt ona atlamak istemiyorum.

bi sekilde cozucem (:

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 29, 2011

Kusura bakmayin flood gibi oluyor :(

Su sekilde cozdum (:

import std.stdio;

void main()
{

	int sayi = 0, sim = 0, once = 1, once2 = 1;

	while (sim <= 4000000) {
		sim = once + once2;
		once2 = once;
		once = sim;

		if (!(sim & 1)) {
			sayi += sim;
		}
	}

	writeln(sayi);
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 29, 2011

Anladima bi su sekilde bir baslik acsam olur sanirim

Project Euler / Soru 3

gibi

her soru icin ayri baslik google icinde iyidir (:


Abi ben daha araliklara gelmedim.

const ve immutable

konusuna gectim

oradayim su an.

Tabii sorular farkli boyutlarda olunca . (:

Son olarak diger birseye dikkat ettim abi

ben std.algorithm

kullanmadan yaziyorum

std.algorithm faydalari nelerdir?

benim yazdigim kod ile karsilastirirsak.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 29, 2011

Alıntı (CWSuskun):

>

ben sadece son sonucu isterken o 0'dan basliyor son sonucu da yazdiriyor

> import std.stdio;
>
> void main()
> {
> 	int sayi = 0;
> 	for (int i = 0; i < 1000; i++) {
> 		if (i % 3 == 0 || i % 5 == 0) {
> 			sayi += i;
> 	writeln(sayi);
> 		}
> 	}
> }
> ```


writeln'ı döngü içine yazmışsın. :) for'un dışında olması gerekiyor.

Kodu C++'tan D'ye kaydırmak için ve aklımızda bulunsun diye iyice D'ce yazılmış bir program da vereceğim. Delilik olduğunu biliyorum ama şu da aynı sonucu veriyor: :D


import std.stdio;
import std.range;
import std.algorithm;

void main()
{
writeln(
reduce!"a + b"(
0, filter!"((a % 3) == 0) || ((a % 5) == 0)"(iota(0, 1000))));
}



Ali

Not: Diğerine ben şimdi bakamıyorum.

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
June 29, 2011

Kısa program daha iyidir ama okunaklılık için gerekmese de aralarda anlamlı isimleri olan değişkenler tanımlanabilir.

Evet, 4 milyondan küçük sayıların çift (even-valued) olanlarının toplamı.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 29, 2011

Alıntı (CWSuskun):

>

Kusura bakmayin flood gibi oluyor

Her sorunun kendi konusu olunca okunması ve bulunması da daha kolay oluyor. :) Ayrıca D ile yazdığımıza göre "Diğer Konular" bölümü artık doğru değil. Bence "Ders Arası" veya "D Programlama Dili" bölümlerinde soru numarasıyla yazarsak daha kullanışlı olur.

Ben de Aralıklar dersindeki ( http://ddili.org/ders/d/araliklar.html ) konuların örneği olarak yazdım:

import std.stdio;
import std.algorithm;

struct FibonacciSerisi
{
   int baştaki = 0;
   int sonraki = 1;

   static immutable bool empty = false;

   @property int front() const
   {
       return baştaki;
   }

   void popFront()
   {
       int ikiSonraki = baştaki + sonraki;
       baştaki = sonraki;
       sonraki = ikiSonraki;
   }
}

struct SınırlıFibonacciSerisi
{
   int sınır;
   FibonacciSerisi seri;
   int öndeki;

   this(int sınır)
   {
       this.sınır = sınır;
       this.öndeki = seri.front;
   }

   @property bool empty()
   {
       return öndeki >= sınır;
   }

   @property int front()
   {
       return öndeki;
   }

   void popFront()
   {
       seri.popFront();
       öndeki = seri.front;
   }
}

void main()
{
   writeln(
       reduce!"a + b"(
           0, filter!"(a % 2) == 0"(SınırlıFibonacciSerisi(4_000_000))));
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 29, 2011

Alıntı (CWSuskun):

>

Project Euler / Soru 3

Çok iyi olur. :)

Alıntı:

>

Abi ben daha araliklara gelmedim.

Ben göz alışkanlığı olsun diye öyle de çözüyorum. (Aralıklar aslında gerçekten de kolay bir konu.)

Alıntı:

>

ben std.algorithm

kullanmadan yaziyorum

std.algorithm faydalari nelerdir?

benim yazdigim kod ile karsilastirirsak.

std.algorithm gibi modüller genel çözümler sunarlar. Örneğin kendi yazdığımız kod çok özel olarak örneğin "10'dan 20'ye kadar olan sayıların çift olanlarının toplamı" olabilir.

Ama o tanımın içinde üç tane genel kavram var:

  • belirli bir aralıkta sayı üretme (iota)

  • sayı süzme (filter)

  • toplam alma (reduce)

Çoğu problem benzer şekilde genel algoritmalar olarak görülebilir. O zaman bizim kod yazmamıza fazla gerek kalmaz. Algoritmaları Lego parçaları gibi birbirlerine takarız. Takma düzeneğini de aralıklar sağlarlar.

Parçaları ayrı ayrı isimlerle yazınca daha anlaşılır oluyor:

import std.stdio;
import std.algorithm;
import std.range;

void main()
{
   auto hepsi = iota(10, 21);
   auto süzülmüşleri = filter!"!(a % 2)"(hepsi);
   auto toplamları = reduce!"a + b"(0, süzülmüşleri);

   writeln("hepsi            : ", hepsi);
   writeln("süzülmüş olanları: ", süzülmüşleri);
   writeln("toplamları       : ", toplamları);
}

Çıktısı:

'hepsi : [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
süzülmüş olanları: [10, 12, 14, 16, 18, 20]
toplamları : 90
'

Kütüphane algoritmalarının büyük bir yararı, uzmanlar tarafından yazılmış olmaları ve çok sayıda programcı tarafından kullanıldıkları için hataları bulunmuş ve giderilmiş olmalarıdır.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]