Forum: Diğer Konular RSS
99 Bottle of Beer Algoritması (1290 dilde çözüm)
canalpay (Moderatör) #1
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: 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 (Moderatör) #2
Üye Haz 2009 tarihinden beri · 142 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
1290 programlama dilimi varmış  :huh: . Ben bildiklermi saymayı denedim 25 i geçmedi  <_<
canalpay (Moderatör) #3
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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 (Moderatör) #4
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
perl ve lisp versionu deli.
http://www.mengu.net - some kind of monster
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 06:05:44 (UTC -08:00)