On 8/14/07, Aycan iRiCAN <[EMAIL PROTECTED]> wrote: > Alp Özmert yazmış: > > Selam! > > > > Selem <[EMAIL PROTECTED]> yazmış: > > > > > >> -- What is the exponent of the largest power of two whose base seven > >> representation doesn't contain three zeros in a row? > >> > > > > Hiç de optimal olmayan bir çözüm: > > > > (do ((i 10000 (1- i))) > > ((not (search "000" (write-to-string (expt 2 i) :base 7))) > > i)) > > > > Bu soru ile uğraşırken çözemediğim bir problem ile karşılaştım. Bu > > betiği onbin değil de yüzbinden geri saydırınca tabii ki de zaman > > alıyor. Ben de bir kaç kere bölüp nerelerde olduğuna bakmak istedim > > ama beceremedim. (Bölüp değişkenlerin değerlerine işlev çağrılarına > > falan bakabiliyorum ama i'nin değerini bulamadım.) Yardımcı > > olabilecek olursa sevinirim. > > > > Saygılar, > > Alp Özmert > > > http://hpaste.org/2240 > > Acemi bir programcı olarak ben de aynı deneme yanılma çözümünü haskell > ile denedim. İlginç bir problemmiş, üzerinde düşünmesi bile eğitici. > Teşekkürler. > > Sevgiler... > -- > aycan
Ben de sizin koddan yola cikarak ussun degil de exponent'in kendisinin bulunmasini sagladim. En son 8833 buldu. Bu iletiyi gonderirken acik unutmusum programi, bilgisayarin hafizasini doldurdu. Ayni programi baska dilde (mesela C'de) yazsaydik boyle hafiza kullanilmazdi. Ya hafizayi dogru kullanan Haskell programi yazmayi bilmiyorum, ya da programi interpreter'dan calistirdigim icin bazi optimizasyonlar yapilmiyor. Denemek icin programi derleyeyim dedim, fakat bu sefer de monadlara takildim. main = map (putStrLn . show) setC veya main = foldl1 (>>) $ map (putStrLn . show) setC gibi seyler denedim, olmadi. En sonunda main = foldr1 (>>) $ map (putStrLn . show) setC seklinde oldu. Ve evet, bu sekilde hafiza problemi yok :) Haskell'de kod yazmak aslinda zevkli (fonksiyonlari manipule etmek falan), yalniz okunakli kod yazmasi zor gibi (kendi kodumdan bahsediyorum). Bir de asagida tanimladigim parallel fonksiyonu gibi calisan standard bir fonksiyon yok mu Haskell'de? Soyle bir baktim, bulamadim. (Afedersiniz, yukaridaki yazi ugrastigim seyleri aninda buraya yazdigim icin biraz karisik oldu sanirim, uzun zaman sonra Haskell'e tekrar bakan birinin karsilastigi problemler olarak degerlendirebilirsiniz). module Main where import Numeric import Char import List import Data.List parallel :: (x -> a, y -> b) -> (x, y) -> (a, b) parallel (f, g) (x, y) = ((f x), (g y)) setA = iterate (parallel ((+1), (*2))) (0, 1) setB = [ (x, showIntAtBase 7 (intToDigit) y "") | (x, y) <- setA] setC = map fst $ filter (not . isInfixOf "000" . snd) setB main = foldr1 (>>) $ map (putStrLn . show) setC -- Mehmet
_______________________________________________ cs-lisp mailing list cs-lisp@cs.bilgi.edu.tr http://church.cs.bilgi.edu.tr/lcg http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp