Thread overview
99 Bottle of Beer Algoritması (1290 dilde çözüm)
Sep 04, 2009
esatarslan52
Feb 26, 2010
Mengu
September 03, 2009

Başka bir site'de gördüğüm hoş bir şey.

Alıntı:

>

Duvarın üstünde 99 bira şişesi var
Birisi kırıldı , geriye 98 bira şişesi kaldııı

Duvarın üstünde 98 bira şişesi vaaar
Birisi kırıldı , geriyeee 97 bira şişesi kaldııı

...........
...........
...........

Duvarıın üstünde 1 bira şişesi vaar
Birisi kırıldı , başka bira şişesi kalmadıııı

şeklindeki algoritmanın çözümünü 1290 programlama dilinde verilmiş.

Sitenin adresi : http://99-bottles-of-beer.net/

D'nin algoritması :

import std.stdio;
import std.string;

void main() {
   int bottles = 99;
   char[] text = "99 bottles";

   while (bottles != 0) {
       writefln(text, " of beer on the wall,");
       writefln(text, " of beer.");
       writefln("Take one down, pass it around,");

       if (--bottles == 1) {
           text = "1 bottle";
       } else {
           text = format("%d bottles", bottles);
       }
       writefln(text, " of beer on the wall.\n");
   }
}

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

September 04, 2009

1290 programlama dilimi varmış :huh: . Ben bildiklermi saymayı denedim 25 i geçmedi <_<

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

September 04, 2009

http://99-bottles-of-beer.net/language-whitespace-154.html Buradaki dil çok dikkatimi çekti. Sadece boşluklarla bu iş yapılıyor.

Birde başka bir dil vardı. Resim çizerek programlıyordun. Galiba bu http://99-bottles-of-beer.net/language-piet-1269.html

Ve bunun gibi bir çok değişik programlama dili var.

Tabii bunlarla büyük bir proje yazdığınızı düşüncenize. Boşluklardan yada resimlerden başka bir şey yok :-D

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

February 26, 2010

perl ve lisp versionu deli.

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

February 26, 2010

Ben de oradaki şablonlu D çözümünden etkilendim (incelemedim ama) ve şöyle bir şey yaptım:

import std.cstream;

string kalanŞişe(int adet)()
{
   return adet.stringof ~ " şişe bira";
}

// Sıfır adet için özellemesi
string kalanŞişe(int adet : 0)()
{
   return "hiç şişe kalmadı";
}

string ilkSatır(int adet)()
{
   return "Duvarda " ~ kalanŞişe!adet() ~ ", " ~ kalanŞişe!adet() ~ ".\n";
}

string ikinciSatır(int adet, int başlangıçtakiAdet)()
{
   return
       "Birini indir, elden ele geçir;"
       ~ " duvarda " ~ kalanŞişe!(adet - 1)() ~ ".\n\n";
}

// Sıfır adet için özellemesi
string ikinciSatır(int adet : 0, int başlangıçtakiAdet)()
{
   return
       "Bakkala git, daha al; duvarda "
       ~ kalanŞişe!başlangıçtakiAdet() ~ ".\n\n";
}

string şarkı(int adet, int birEksiği = adet - 1, int başlangıçtakiAdet = adet)()
{
   return
       ilkSatır!adet()
       ~ ikinciSatır!(adet, başlangıçtakiAdet)()
       ~ şarkı!(birEksiği, birEksiği - 1, başlangıçtakiAdet);
}

// -1 adet için özellemesi
string şarkı(int adet : -1, int birEksiği, int başlangıçtakiAdet)()
{
   return "";
}

static string şarkıSözü = şarkı!99();

void main()
{
   dout.writefln(şarkıSözü);
}

Aslında çok daha kısa yapılabilir. Ben kod tekrarını azaltmak için alt dizgileri bile işlev şablonlarına ürettirdim...

Bunun güzelliği, bütün kodun derleme zamanında tek bir string oluşturuyor olması.

Eğer oluşturulan programın içine bir şekilde bakarsanız; bütün şarkı sözünün tek bir uzun dizgi olarak gömülü olduğunu göreceksiniz:

  • Linux komut satırında 'strings deneme' yazılabilir

  • Program dosyası Emacs'te açılıp 'M-x hexl-mode' yazılabilir

  • vs.

Ali

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