Project Euler - Problem sitesi:)

Project Euler - Problem sitesi:) Project Euler adlı bir site ile karşılaştım. Bu sitede yaklaşık 170 adet problem var ve bu problemleri sizden çözmeniz bekleniyor. Aralarında 14163 kez çözülmüş olanıda var 116kez çözülenide. İstediğiniz bir dilde çözüp çözümlerinizi yayınlayabiliyorsunuz. Kolay gelsin.
Adres: http://www.projecteuler.net/


Scheme ile ekrana içi boş dikdörtgen bastırmak

(define (kare x y)
  (do ((i 0 (+ i 1))) ((= i x))
    (newline)
    (do ((j 0 (+ j 1))) ((= j y))
      (if (or (= i 0) (= i (- x 1)))
          (display "*")
          (if (or (= j 0) (= j (- y 1)))
              (display "*")
              (display " "))))))

bu kod aşağıdaki gibi bir şekil oluşruracak

**********
*        *
*        *
*        *
*        *
*        *
*        *
*        *
*        *
**********

Ancak bu şekil pek hoş değil. Eğer display’in içini biraz düzenlersek çok dahahoş şekilerle karşılaşırız.

(define (kare x y)
  (do ((i 0 (+ i 1))) ((= i x))
    (newline)
    (do ((j 0 (+ j 1))) ((= j y))
      (if (or (= i 0) (= i (- x 1)))
          (display "* ")
          (if (or (= j 0) (= j (- y 1)))
              (display "* ")
              (display "  "))))))

Bu kod

* * * * * * * * * * 
*                 * 
*                 * 
*                 * 
*                 * 
*                 * 
*                 * 
*                 * 
*                 * 
* * * * * * * * * *

şeklini oluşturacaktır. Tabiki etkileşim penceresinde şekil daha düzgün çıkacaktır.


Tanrı Kent

Tanrıkent tv8 23.15 20/12/2007

Tanrı Kent

Film, Rio de Janeiro’nun gecekondu mahallelerinde geçiyor ve şehre hakim olan çetelerin arasında büyüyen ve acımasız uyuşturucu pazarında kendilerine bir yer kapmaya, daha da önemlisi hayatta kalmaya çalışan küçük çocukların yaşamını anlatıyor. Tanrıkent, 1960’larda, sefil koşullarda yaşayan halkı ev sahibi yapmak için başlatılan bir toplu konut bölgesine verilen isimdir. Film, 1980’lerde Rio de Janeiro’nun en tehlikeli mahallelerinden biri haline gelen Tanrıkent’te yaşayan ve yolları defalarca keşişen insanların yıllar boyunca süren hikayelerini anlatır. Yoksulluğun yaşam tarzı olduğu, uyuşturucu, açgözlülük ve şiddetin sokakları kapladığı bir yerdir burası. Bol ödüllü, etkileyici bir film.

Kesinlikle izlemenizi tavsiye edeceğim bir film.


Bubble sort algoritması ve scheme çözümü

Bubble sort algoritması kabaca: verilen dizideki elemanları ikili olarak karşılaştırıp gerekli olduğunda yerlerini değiştirmek esasına dayanır. Elimizde 11 5 8 4 6 84 7 sayılarında oluşan bir dizi olduğunu var sayalım ve bu diziyi küçükten büyüğe sıralamak isteyelim.

  1. önce 11 ile 5i karşılaştırırız, 11 5’ten büyük olduğu için 11 ile 5in yerini değiştiririz; 5 11 8 4 6 84 7
  2. sonra 11 ile 8i karşılaştırırız ve 11 ile 8’in yerini değiştiririz 5 8 11 4 6 84 7
  3. 11 ile 4; 5 8 4 11 6 84 7
  4. 11 ile 6; 5 8 4 6 11 84 7
  5. 11 ile 84; 84 büyük olduğu için sıralamaya dokunmayız. 5 8 4 6 11 84 7
  6. şimdi 84 ile 7’yi karşılaştırırız; 5 8 4 6 11 7 84

Son durumda 7 elemanlı bir dizi için 6 kontrol yaptık ve en büyük elemanı sona attık. Şimdiki karşılaştırmalarımızda artık son elamanı yok sayabiliriz. Yani problemimiz artık 6 elemanlı bir diziyi sıralamak oldu. Aynı işlemleri 6 eleman varsayarak yaptığımızda sırasıyla problem 5, 4, 3, 2 ve 1 elemanlı dizileri sıralamaya dönüşecek. 1 elemanlı dizi herzaman sıralı olduğu için hiç bi derdimiz sıkıntımızda kalmayacak:) Bu şekilde işlemleride 6 defa yaptık.
Şimdi sıra geldi koda

(define vector-bubble-sort 
  (lambda (vec op)
    (let ((tmp 0) (stop-do #f))
      (do ((i 0 (+ i 1))) ((or (= i (vector-length vec)) stop-do))
        (set! stop-do #t)
        (do ((j 0 (+ j 1))) ((= j (- (vector-length vec) i 1)))
          (if (not (op (vector-ref vec j) (vector-ref vec (+ j 1))))
              (begin 
                (set! tmp (vector-ref vec j))
                (vector-set! vec j (vector-ref vec (+ j 1)))
                (vector-set! vec (+ j 1) tmp)
                (set! stop-do #f))))))
    vec))

DrScheme de etkileşim penceresine

(vector-bubble-sort #(5 11 8 4 6 84 7) < )

şeklide giriş yapmamız gerekiyor. “< " işareti yerine “>” işaretide koyabiliriz. Bu sayede birde büyükten küçüğe sıralamak için aynı kodları yazmamıza gerek kalmayacak.


Sezar şifreleme

Sezar şifreleme için yazdığım ilk kod aşağıdaki gibiydi

(define str2 "")
(define (sezar str lst)
  (do ((i 0 (+ i 1)) (j 0 (+ j 1))) ((= j (string-length str)))
    (if (= i (length lst))
        (set! i 0))
    (set! str2 
          (string-append
           str2
           (string (integer->char
                    (+ (list-ref lst i )
                       (char->integer (string-ref str j)))))))))

Ancak bu kod pek hoşuma gitmedi üzerinde biraz daha oynama yapmak gerekiyordu. Mesela en baştaki

(define str2 "")

pek hoş durmuyordu ve hiç bir sonuç gönmüyordu. Ekstradan srt2 nin değerini sorgulamak gerekiyordu.


Bir son dakka görevi daha başarıyla tamamlandı

Kim demişse iyi demiş son dakkalar olmazsa hiç bir iş yeteişmez diye:) Bir son dakka görevimi daha başarıyla tamamladım. Pbl ödevimden sonra (bknz: Same Oyunu) proje ödevimi de son anda teslim ettim. Şimdi sırada yeni pbl ödevim var. Hadi hayırlısı.


Same oyunu

Merhaba arkadaşlarımın isteği üzerine ödev olarak verilmiş olan same oyununun kendi yazdığım scheme kodlarını internete koydum. Olaki bigün sizden de scheme ile same oyunu yazmanızı isterlerse bu kodlardan faydalanabilirsiniz.

same.scm


jaguar veya jtech ic100 webcam sürücüleri

jaguar - jtech ic100 webcam
Yaklaşık 1 saat boyunda jaguar ic100 webcam sürücüsü aradım dün. Kimi siteler üyelik istiyor kimisi bilgisayardaki eksik sürücüleri bulacağını vaad eden programlar yüklemmek istiyor. Ama biliyorum ki hiç birisi benim isteğimle ilgilenmiyor. Ancak sonunda bir site bana o sürücülerin olduğu adresi verdi. İsmini hatırlamamakla birlikte googleda baya arkalarda olduğunu hatırlıyorum. Eger olaki bu sitenin başına bir iş gelmezse ve size de bu sürücü lazım olursa burdan indirebilirsiniz.
jaguar - jtech ic100 webcam driver - sürücü


En basit recursion - özyineleme mantığı

Benin algılamakta en zorluk çektiğim kavramdı. Ancak öğrenince çok çok işe yarıyor.

(define
  (lst-length lst)
  (if (null? lst)
      0
      (+ 1 (lst-length (cdr lst)))))

Kodu tanımlayacak olursak (null? lst) lst değişkeninde tuttuğumuz listenin boş olup olmadığını kontrol ediyor. Boş listenin eleman sayısının 0 olduğunu biliyoruz. Listemiz genelde ilk halinde boş olmayacağı için if condition direk #f verip 2. satıra geçecek. özyinelemenin can damarı aslında burda. Biz 1 eksik elemanlı listenin eleman sayısıyla 1i topluyoruz. Sonra tekrar 1 eksik elemanlı listenin 1 elemanını daha çıkartıp, o listenin eleman sayısıyla topluyoruz. Taki (null? lst) #t olana kadar. Ozamanda zaten fonkiyon 0 verecek ve tüm o 1leri toplayacak. size tavsiyem bu konu hakkında çok düşüünün elinizde olan örnekleri tekrar tekrar uygulayın.


Scheme hakkında birkaç kitap

Madem tekrardan scheme öğrenmeye başladım o konu hakkında braz yazı yazalım değilmi. İşe bir kitap ile başlayalım.

Öncelikle scheme kitaplarıyla başlasak mantıklı olacak gibi geliyor.scheme hakkında birçok kitap bulunabilir fakat ben aramada ilk karşıma çıkan seçenekleri burda vereceğim biraz google güvenilir gibi geldi bu konuda.

How to Design Programs // Dr scheme projesiyle birlikte yürüyen bir kitap bu açıdan en sağlam kaynaklardan biri olduğu görüşündeyim. Sitesi aşağıda. Site üzerinden e-book olarak kitaba ulaşabilirsiniz.
http://www.htdp.org

The Scheme Programming Language // Scheme için kullandığım tek kaynaktı. Ancak tek kaynak hiç bir şekilde yetmiyor.
Aynı şekilde site üzerinden bu kitabada ulaşabilirsiniz.
http://www.scheme.com/tspl3/

Teach Yourself Scheme in Fixnum days // Yeni başlayanlar için iyi bir başlangıç olacağını düşünüyorum
http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html

Ayrıca
Buradan ve buradan scheme hakkındaki kitapları sıkıtırılmış haliyle indirebilirsiniz

Kitapları bitirdik sıra geldi internet sitelerine

Dr.Scheme Ortamını indirebileceğimiz ve onunla ilgili hatta scheme ile ilgili çeşitli kaynaklara ulaşabileceğimiz bir site.
http://www.drscheme.org

Son olarakta schemers
Scheme programlama dili hakkında son haberleri, kütüphaneleri vs. bulabileceğiniz bir site.
http://www.schemers.org/