headerphoto
Brainfuck
BRAINF**K
1
2
3
4
5
6
7
8
9
10
11
+++++[>+++++++++++++<-]>++.
--.
+++++++++++++.
<++++++++[>>++++<<-]>>.
<<++[>--<-]>+++++.
+++++++++++.
<++++[>------<-]>++.
+.
++++++++.
----.
+++++++++.

 

Bu nedir sizce?

 


Belki inanmayacaksınız ama bu ekrana CAN OZDEMIR yazan programın kaynak kodudur.

 

Brainfuck

Adının hakkını veren bu dil 1993 yılında Urban Müller tarafından en küçük derleyiciyi (200 kb'den az) yaratmak amacıyla tasarlanmış. Üstelik dil tamamen Turing uyumlu...

Brainfuck'ta sadece 8 operatör ile  harikalaryaratabilirsiniz tabi bu sırada beyin cidden fucked bir kıvama gelir. Sadece ekrana adımı yazdırmak bile bana yıldızları saydırttı açıkçası...

Ubuntu'da brainfuck derleyicisini yüklemek için uçbirimden,

 

sudo apt-get install bf

komutunu vermeniz ya da synaptic ile bf paketini yüklemeniz yeterli olacaktır.

 

Yazdığınız kodları dosyaadı.b gibi kaydettikten sonra kodun bulunduğu satırda uçbirim açarak,

 

bf dosyaadı.b

komutunu vermelisiniz.

 

Brainfuck'ta kullanılan operatörler:

 

> işaretçiyi arttırır
< işaretçiyi azaltır
+ bellek değerini arttırır
- bellek değerini azaltır
. çıkış bellek baytı
, giriş bellek baytı
[ (byte != 0) iken döngüyü başlatır
] döngüyü sonlandırır

Böyle bakınca hiç anlaşılmıyor olabilir ama Brainfuck'ın temelde yaptığı şey decimal ascii değerleri üstünde bir ileri bir geri dolaşmaktan ibaret. Yani eğer 35 tane "+" (artı) yazıp ardından "." (nokta) koyarsanız 35. Decimal ASCII değerini ekrana yazdırırsını ki bu da "#" işareti demektir.

 

 

 

 

mesela:

1
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.

Burada 65 tane "+" ile işaretçiyi decimal 65'e getirdik. Sonra "." ile ulaşılan değerin ekrana yazdırılmasını istedik. 65 sayısı Dacimal ASCII formatında büyük "A" harfine karşılık geldiğinden ekrana A yazılacaktır.

Hemen kısa bir ASCII tablosu takdim edelim (Daha geniş kapsamlılarını web üstünde bulabilirsiniz):

Peki biz bu kodu kısaltabilir miyiz?

Tabi ki kısaltabiliriz. Ekrana sadece bir "A" yazmak için 65 tane artı yazmak zorunda değiliz. Biz bunu bir döngü ile halledebilmeliyiz.

1
++++++++[>++++++++<-]>+.

Dikkat ederseniz burada 8 tane "+" işaretinden sonra sekiz kere dönen bir döngü başlattık ve "<-" ile her dönüşte döngünün başındaki sekiz tane "+" işaretine ulaştık. 8*8=64 olduğuna göre artık A harfine sadece bir adım kalmış demektir. O halde sona bir "+" daha koyup "." işaretiyle çıkış istersek, ekrana A yazılacaktır.

 

Peki "B" yazmak için ne yapmalıyım?

Az önceki koddan sonra aynı koda bir tane daha artı koyarsak B yazabilir miyiz? Bir deneyelim:

1
2
++++++++[>++++++++<-]>+. 
++++++++[>++++++++<-]>++.
Ekran Çıktısı: AJ

 

Peki neden B yazmadı da J yazdı? Çünkü bir önceki kodda işaretçimiz 65'teydi. Ekrana AB yazdırmak için işaretçiyi bir kademe arttırmak yeterli olacaktır.

Aynen Şöyle:

1
2
++++++++[>++++++++<-]>+. 
+.

 

Giriş/Çıkış işlemleri (I/O)

c kodu
1
2
3
4
5
int sayi;
 
scanf("%d", &sayi);
 
printf("%d", sayi);

 

c bilmeyenler için belirtmeliyim. Bu kod kullanıcıdan bir sayı ister ve sonra sayıyı ekrana yazdırır.

Aynı kod, örneğin python'da şöyledir:

python kodu
1
2
3
sayi=input("Sayı girin")
 
print sayi

 

Brainfuck'ta beni en çok şaşırtan şey ise bu oldu. Yukarıdaki işlemi Brainfuck'ta sadece iki karakterli kod ile yapabiliyoruz.

1
,.

Güzel değil mi?

 

Esenlikler...

 

 

 

Yorumlar (11)
  • Mehmet Değirmenci  - Brainfuck...
    Brainfuck, Urban Müller beyefendi tarafından 40 şişe bira yuvarlandıktan sonra yazılmış bir dildir. Sonra bunun Dos ortamında çalışan bir derleyicisi vardır bkz. Brainfucked :lol:.

    Eğlenceli bir dil. İnsanlara nasıl anlatacağımı bilemediğim eğlenceli ama kodlaması iğrenç ötesi bir dil. MEB bu dili mutlaka müfredata koymalı ve assembly'den sonra lise talebelerine bu dili öğretmeli. :woohoo:


    +++++++++++++++++++++++++[>++>+++>++++>+++++-----------.----.+++++++.---.----.+.++++..------.-.+++++++++++++.
  • Mehmet Değirmenci  - re: Brainfuck...
    Yorumumun yarısı çıkmamış. :D :D gerisi burda..

    +++++++++++++++++++++++++[>++>+++>++++>+++++-----------.----.+++++++.---.----.+.++++..------.-.+++++++++++++.
  • Mehmet Değirmenci
    +++++++++++++++++++++++++[>++>+++>++++>+++++-----------.----.+++++++.---.----.+.++++..------.-.+++++++++++++.
  • Mehmet Değirmenci
    Eee bu yorum çıkmıyooo. :D :D İlgili şahıslara sorunu bildiririm. :lol:
  • macellan  - re:
    Mehmet Değirmenci yazan:
    Eee bu yorum çıkmıyooo. :D :D İlgili şahıslara sorunu bildiririm. :lol:


    Sağol dostum. Hepsi çıkmış şimdi.
    Ben de 4 yorum görünce şaşırdım.

    Verdiğin kodun bende şöyle bir çıktısı var:
    ����������m :lol:
  • macellan  - İlginç
    Yorum yazınca hata veriyor ama yorumu da ekliyor.
    bkz. Web programlamada acemilik. :lol:
  • Mehmet Değirmenci
    +++++++++++++++++++++++++++++++[>++>+++>++++----------.----.+++++++.---.----.+.++++..------.-.+++++++++++++.
  • Mehmet Değirmenci
    Kodlar eksik geliyor haberin olsun. Çıktısı öyle değil aslında. :cheer: :lol: :D
  • macellan  - re:
    Mehmet Değirmenci yazan:
    Kodlar eksik geliyor haberin olsun. Çıktısı öyle değil aslında. :cheer: :lol: :D

    Fark ettim. Ben de yazıyı yazdığımda kodların bir kısmı çıkmıyordu. Code tagına alınca düzeldi.
  • Erdem Uğur Akbıyık
    hıhı evet. mavi ekran verdim lan =) mehmet yine mehmetliğini yapıp olaya son anda parmak atıyor ve hatabulucu şapkasını takıp tüm zilletyus halkını uyarıyor. ulan adam burda dilden bahsetmiş bırakta hata olsun:D Şekilciliğe SON. Mehmet bey size kısaca MANDA diyebilirmiyim :woohoo:
  • macellan  - Ooo Erdem Bey'ler de gelmiş :)
    Nasılsınız efendim?
    Mehmet Bey haklı. Sitenin yorum yönteminde (yani burada) hakikaten hata var. :)
    Öte yandan Mehmet'in hatasını ben buldum. Bu vesileyle MANDA'lık tacını tüm içtenliğimle kabul ediyor ve burnumu karıştırıyorum.
    :lol:
Yorum yaz
Your Contact Details:
Yorumlar:
[b] [i] [u] [url] [quote] [code] [img]   
:):grin;)8):p:roll:eek:upset:zzz:sigh:?:cry:(:x
Security
Lütfen resimdeki güvenlik kodunu giriniz.

!joomlacomment 4.0 Copyright (C) 2009 Compojoom.com . All rights reserved."