着陸したら全く終わらなかった。 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 |…
まあ、そのまま。 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<-[…
パンデジタル数になるのは 少なくとも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..] […
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…
基数変換がダサい。 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)
ローテート関数が見つからなかったので自作 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…
なぜ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)
いまいち美しくない。 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 -s を使用せずにログイン時のシェルを変えるzshに変えられないとき.bash_loginに以下を追記 if [ -f /bin/zsh ]; then exec zsh ; fiこれだとzshの無いマシンでも安心.screenrcに以下を追記 shell zsh
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(最…
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 echo aaa >> aパーミッションがないときエラーになってしまうのでこういう時には sudo tee -aを使う $ echo aaa >> sudo tee -a a
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をやる >> [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,…
大量ファイルを操作するときには forは inの後を展開してから動作するために困ってた。whileとreadを組み合わせれば 関数型言語のmapのように動作する。 $ seq 1 10 | while read i ; do echo $(($i+2)) ; done | while read i ; do echo $(($i*2)) ; doneま…
リモートデスクトップを操作するときに パスワード入力してしまうとリモートからのvncログイン時にパスワード入力後に「パスワードを入力してログインのキーリングのロックを解除してください」と聞かれてしまう。これを回避するためには「パスワードと暗号…
centOS5.5でputtyにてloginした際にscreenを同時起動すると漢字が化けるときputtyでのlogin時にscreen -xRを立ちあげると操作がすごく便利なのだがcentOSでは漢字が化けていた。 そこでscreen -xRUとUオプションを指定すると化けないようになる。ちなみにyum…
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キーにするにはシステム->設定->キーボードにてオプションをクリックしctrlキーの位置にて Make CapsLock an additional Ctrlを選択win7も http://d.hatena.ne.jp/kkomiyama/200912…
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やgnome-terminalのウインドウタイトルバーにscreenのIDを出すためには~/.screenrcに以下を記述すればよい hardstatus string "[screen %n%?: %t%?] %h"一瞬、termcapを疑ったがそんなことはなかった。 あと http://kjirou.sakura.ne.jp/mt/2008/08/scr…
ブルートフォースで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ペンス硬貨を両替していく方法が思い…
問題どおりだと以下のとおり 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…
たぶん組み合わせの出力と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…
なんどやってもおかしいと思ったのは 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 …
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…
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 増分…
フェルマーの小定理をみると 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とい…
あっさり終わった。 項数を出すのに[1..]とzipしている点で遅くなるかと思ったがまったく問題なかった。 main = print $ head $ dropWhile ((
面倒だったので 力技で行ったら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…