2011-01-01から1年間の記事一覧

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…