RSS

Para üstünü nasıl alırdınız? Lisp ile para saymaca

12 Jan

Volkan, cs-lisp listesinde eğlenceli bir yazışma başlatı “Eldeki Paralar ile İstenen Miktarı Yakalamak” diye. Gecenin bir körü doğal dil damgalama kodu ile uğraşırken (Common Lisp sağolsun 😉 bir de baktım Türkiye’den, ABD’den, Belçika’dan vızır vızır mesajlar gelmeye başladı (Bu arada cs-lisp grubndaki üye sayısı 100’e yaklaşmış ve Google’da Türkçe olarak Lisp aratınca böyle sonuçlar gelmeye başlamış).

Mesele, kısaca “elinizdeki bir parayı, daha küçük paralar cinsinden hangi şekillerde ifade edebilirsiniz?” olarak ifade edilebilir.

Sonuçta ortaya çıkan nihai kodlardan biri ise şöyleydi:


(define (bul toplam paralar)
  (cond
   ((= toplam 0) '(()))
   ((< toplam 0) '())
   ((not (pair? paralar)) '())
   (else
    (let ((bas (car paralar))
	   (kuyruk (cdr paralar)))
      (append (map (lambda (l) (cons bas l))
		    (bul (- toplam bas) paralar))
	      (bul toplam kuyruk))))))

Dr. Scheme‘i açıp kodu çalıştırdığımızda ise şu tür sonuçlar almak mümkün oluyor:


> (bul 100 '(50 25 10))
((50 50) (50 25 25) (50 10 10 10 10 10) (25 25 25 25)
 (25 25 10 10 10 10 10) (10 10 10 10 10 10 10 10 10 10))

> (bul 100 '(25 10))
((25 25 25 25) (25 25 10 10 10 10 10) (10 10 10 10 10 10 10 10 10 10))

Güzel, basit ve eğlenceli 🙂

Advertisements
 
 

2 responses to “Para üstünü nasıl alırdınız? Lisp ile para saymaca

  1. ahmet alp balkan

    December 10, 2009 at 01:35

    pek de güzelmiş 🙂

     
  2. Abercrombie phone number

    December 30, 2009 at 12:02

    Humor is a rubber sword – it allows you to make a point without drawing blood.

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: