problem 40

着陸したら全く終わらなかった。 main = print $ p p = map (d.(10^)) [0..6] d x = (g 190000)!!(x-1) g x = foldl f "" [1..x] where f x y = x++(show y)ちょっとカンニングして以下。 Prelude Data.Char> product [digitToInt $ ([0..] >>= show) !! x |…

problem39

まあ、そのまま。 sortByなりmaximumByなりがData.Ordのcomparingを使わないといけないのがrubyと比較して面倒 import Data.List import Data.Ord main = print $ p p = maximumBy (comparing length) $ group $ sort [x+y+z|x<-[1..998],y<-[x..998-x],z<-[…

problem38

パンデジタル数になるのは 少なくともn 連結される数はn=2のとき、最初が4桁と次が5桁になるので 4999 import Data.List main = print $ maximum $concat $ map g [9..9999] f::Int->Int->Int f x y = read $foldl (++) [] $map show $zipWith (*) [x,x..] […

problem37

primesとtailsを使ったので楽にできた。 Prelude Data.List Data.Numbers.Primes> let f x= all (isPrime.read) $ filter (/=[]) $ tails (show x) ++ (map reverse (tails (reverse (show x)))) in sum $ take 11 [x|x<-primes,x>10,f x] 748317 it :: Inte…

probelm36

基数変換がダサい。 Prelude> let d2b x = if (div x 2)/=0 then (d2b (div x 2))++[mod x 2] else [mod x 2] in sum [x|x<-[1..1000000],show x==reverse (show x),d2b x==reverse (d2b x)] 872187 it :: Integer (1.20 secs, 877606456 bytes)

problem35

ローテート関数が見つからなかったので自作 Prelude Data.Numbers.Primes> let g (x,y) = y++x ;f::Int->[Int];f x = map (read.g.(`splitAt` (show x))) [1..((length.show) x)-1] in length [x|x<-[1..1000000],isPrime x,all isPrime $ f x] 55 it :: Int…

problem34

なぜ5桁以内かを言えていない。 Prelude List> let f x=foldr (*) 1 [1..x]; g x=x==(sum $ map (f.read.(:[])) $show x) in sum [x|x<-[3..100000],g x] 40730 it :: Integer (5.22 secs, 3383707256 bytes)

problem 33

いまいち美しくない。 Prelude List> let f a b c d = ((a==c && (a*10+b)/(c*10+d)==b/d)||(a==d&&(a*10+b)/(c*10+d)==b/c)||(b==c&&(a*10+b)/(c*10+d)==a/d)||(b==d&&(a*10+b)/(c*10+d)==a/c))&&(b/=0&&d/=0)&&(a/=c&&b/=d) in map product $ transpose [[…

chshを使用せずにログイン時のシェルを変える

chsh -s を使用せずにログイン時のシェルを変えるzshに変えられないとき.bash_loginに以下を追記 if [ -f /bin/zsh ]; then exec zsh ; fiこれだとzshの無いマシンでも安心.screenrcに以下を追記 shell zsh

rubyの car,cdr もしくは haskellにおける head tail last init

rubyの car,cdr もしくは haskellにおける head tail last initについてhaskellにおける head tail lastはそれぞれ >> [1, 2, 3, 4, 5].first => 1 >> [1, 2, 3, 4, 5].drop(1) => [2, 3, 4, 5] >> [1, 2, 3, 4, 5].last => 5だとおもう。でもなんかinit(最…

rubyのscanはブロック無のほうが便利

String.scan(re){ブロック}がstringを返すのでStringオブジェクトを拡張した。 class String def scanA(exp) # scan(re)ブロック無しと同じ r=[] scan(exp){|i|r.push(yield i)} r end endそしたら。ブロックなしのscan(re)は返り値が配列だったorz >> "abcd…

sudo でファイルにアペンド

sudoでファイルに追記するとき $ sudo echo aaa >> aパーミッションがないときエラーになってしまうのでこういう時には sudo tee -aを使う $ echo aaa >> sudo tee -a a

terminalにて画像を表示する

terminalにて画像を表示する カラーで表示 % sudo apt-get install caca-utils % img2txt -W `tput cols` ubuntu_logo_blue.pngtputにてterminfoから端末の表示幅を取得している。 ちなみに 行数はlines モノクロで表示 % sudo apt-get install imagemagick …

rubyでuniq -c

rubyでuniq -cをやる >> [1,2,2,1,2,3,4,2,1,2,4,3,1,3].inject(Hash.new(0)){|r,i|r[i]+=1;r} => {1=>4, 2=>5, 3=>3, 4=>2}最後にrを評価するのではまった。 >> {1=>2}[1]+=1 => 3だもんな…別解 >> [4,1,2,2,1,2,3,4,2,1,2,4,3,1,3].group_by{|i|i}.map{|k,…

bashでmap

大量ファイルを操作するときには forは inの後を展開してから動作するために困ってた。whileとreadを組み合わせれば 関数型言語のmapのように動作する。 $ seq 1 10 | while read i ; do echo $(($i+2)) ; done | while read i ; do echo $(($i*2)) ; doneま…

ubuntu11.04にてリモートデスクトップ操作時にキーリングのロックを解除しないためには

リモートデスクトップを操作するときに パスワード入力してしまうとリモートからのvncログイン時にパスワード入力後に「パスワードを入力してログインのキーリングのロックを解除してください」と聞かれてしまう。これを回避するためには「パスワードと暗号…

centOS5.5でputtyにてloginした際にscreenを同時起動すると漢字が化ける

centOS5.5でputtyにてloginした際にscreenを同時起動すると漢字が化けるときputtyでのlogin時にscreen -xRを立ちあげると操作がすごく便利なのだがcentOSでは漢字が化けていた。 そこでscreen -xRUとUオプションを指定すると化けないようになる。ちなみにyum…

kvm qemuにて ゲストwindowsから ホストsambaをマウントする

kvm qemuにて ゲストであるwindowsから、ホスト上のsambaをマウントするには /etc/samba/smb.confに以下を追加 [mountpoint] comment = mountpoint path = /tmp/mountpoint guest ok = yesゲスト上のwindowsからはホストは 10.0.2.2なので まずcmdで ping 10…

ubuntu 10.10 にて capslock を ctrlにする (capsもctrlも両方ctrlキーにする)

ubuntu 10.10 にて capslock を ctrlにする。 つまり、capsもctrlも両方ctrlキーにするにはシステム->設定->キーボードにてオプションをクリックしctrlキーの位置にて Make CapsLock an additional Ctrlを選択win7も http://d.hatena.ne.jp/kkomiyama/200912…

ruby,perlで標準入力から指定文字数取得する

rubyでの $ echo -e "abcde\nfghij\nklmn" | ruby -e 'puts STDIN.read(10)' abcde fghiこれがやりたかったperlではreadを利用して以下のように書く $ echo -e "abcde\nfghij\nklmn" | perl -e 'read(STDIN,$a,10);print $a,"\n"' abcde fghi

puttyのタイトルバーにscreenのスクリーンIDを出す

puttyやgnome-terminalのウインドウタイトルバーにscreenのIDを出すためには~/.screenrcに以下を記述すればよい hardstatus string "[screen %n%?: %t%?] %h"一瞬、termcapを疑ったがそんなことはなかった。 あと http://kjirou.sakura.ne.jp/mt/2008/08/scr…

project euler problem 31

ブルートフォースで6分 main = print $ take 10 [(a,b,c,d,e,f,g,h)|a<-[0..200],b<-[0..100],c<-[0..40],d<-[0..20],e<-[0..10],\ f<-[0..4],g<-[0..2],h<-[0..1],a+b*2+c*5+d*10+e*20+f*50+g*100+h*200==200]あとは 2ペンス硬貨を両替していく方法が思い…

project euler problem 30

問題どおりだと以下のとおり Prelude Data.List> let f x= g $ show x ; g []=0;g (x:xs)=((read [x])::Int)^4+ g xs in [x|x<-[2..9999],f x==x] [1634,8208,9474] (0.30 secs, 132602804 bytes)どうも色々実験すると6桁以内なので main=print $ sum $ filt…

project euler problem 29

たぶん組み合わせの出力とsort|uniqの問題だろう import Data.List main = print $ length $ map head $ group $ sort $ map (uncurry (^)) [(a,b)|a<-[2..100],b<-[\ 2..100]]あんまりなのでポイントフリー化してみたが余り意味が無かった。 import Data.Li…

project euler problem 27

なんどやってもおかしいと思ったのは n^2+a*n+bの値がマイナスになっていてもisPrimeがTrueを出すときがあったせいだ。 import Data.Numbers.Primes import Data.Ord import Data.List main=print $ uncurry (*) $ maximumBy (comparing (length.plist)) ab …

haskell で 素数のライブラリを使う

http://hackage.haskell.org/packages/archive/primes/0.2.0.0/doc/html/Data-Numbers-Primes.htmlこれをつかう。 cabal install primes以上使い方 Prelude Data.Numbers.Primes> :m Data.Numbers.Primes Prelude Data.Numbers.Primes> sum $ takeWhile (<20…

project euler problem 28

73 74 75 76 77 78 79 80 81 72 43 44 45 46 47 48 49 50 71 42 21 22 23 24 25 26 51 70 41 20 7 8 9 10 27 52 69 40 19 6 1 2 11 28 53 68 39 18 5 4 3 12 29 54 67 38 17 16 15 14 13 30 55 66 37 36 35 34 33 32 31 56 65 64 63 62 61 60 59 58 57 増分…

project euler problem 26

フェルマーの小定理をみると mod a^(p-1) p == 1 (pは2,5以外の素数) aを10とすると 10^(p-1)は p-1桁のなかに循環少数が含まれている また、余りが1になったとき循環が終わることがわかるhttp://www.math.kindai.ac.jp/~chinen/junkan_f/junkan.htmlとい…

project euler problem 25

あっさり終わった。 項数を出すのに[1..]とzipしている点で遅くなるかと思ったがまったく問題なかった。 main = print $ head $ dropWhile ((

project euler problem 23

面倒だったので 力技で行ったら40分かかった。 どうやって高速化しようか… import Data.List main = print $ (sum [1..m]) - ( sum $ map head $ group $ sort [x+y|x<-abundantNumbers,y<-abundantNumbers\ ,x+y<=m]) abundantNumbers::[Int] abundantNumbe…