Forum: Diğer Konular RSS
99 Bottle of Beer Algoritması (1290 dilde çözüm)
canalpay (Moderator) #1
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
Subject: 99 Bottle of Beer Algoritması (1290 dilde çözüm)
Başka bir site'de gördüğüm hoş bir şey.

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");
    }
}
Avatar
esatarslan52 (Moderator) #2
Member since Jun 2009 · 142 posts
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
1290 programlama dilimi varmış  :huh: . Ben bildiklermi saymayı denedim 25 i geçmedi  <_<
canalpay (Moderator) #3
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
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
Mengu (Moderator) #4
User title: NONSERVIAM
Member since Jul 2009 · 254 posts · Location: Dersaadet
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
perl ve lisp versionu deli.
http://www.mengu.net - ki$isel bili$im guncesi.
acehreli (Moderator) #5
User title: Ali Çehreli
Member since Jun 2009 · 2279 posts
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
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
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please note the verification code from the picture into the text field next to it.
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Not logged in. · Lost password · Register
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Current time: 2012-05-18, 09:53:36 (UTC -07:00)