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/
(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 tv8 23.15 20/12/2007
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ı 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.
- ö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
- 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
- 11 ile 4; 5 8 4 11 6 84 7
- 11 ile 6; 5 8 4 6 11 84 7
- 11 ile 84; 84 büyük olduğu için sıralamaya dokunmayız. 5 8 4 6 11 84 7
- ş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.