paizaでmod7占い(ランク S 相当)やってみた 2
前回に引き続き Paizaの mod7占い
https://paiza.jp/learning/mod7
前回Pythonでitertools使ってタイムアウトになり
他に書けるの言語なんて、JS, Ruby, PHP ぐらいだからどれ選んでも遅い
LLじゃない言語っていうといま入門読んでる Haskell しか・・・
試しに書いてみた
import Control.Monad combinations :: Int -> [a] -> [[a]] combinations _ [] = [] combinations 1 xs = [[x] | x <- xs] combinations n (x:xs) = [x:y | y <- combinations (n-1) xs] ++ combinations n xs main::IO() main = do n <- readLn :: IO Int ns <- replicateM n readLn :: IO [Int] print $ length [x | x <- combinations 3 ns, sum(x) `mod` 7 == 0]
入門から始めてるのにHaskellで出来るわけないか・・・
paizaコーディングスキルチェックの各言語のバージョン、環境情報 | ITプログラマー・エンジニア転職のpaiza
Pythonより実行速度早いからって書いてみたけど、ちゃんと言語ごとに制限時間設けられてて
結局クリアできないっていう
paizaでmod7占い(ランク S 相当)やってみた
mod7占い (paizaランク S 相当)
https://paiza.jp/learning/mod7
N個の数値から3つの数値を組み合わせた総和が7で割り切れるパターンを数える問題
5 -- N個の数値 10 -- 1番目の数値 20 -- 2番目の数値 30 -- 3番目の数値 40 -- 4番目の数値 50 -- 5番目の数値
import itertools n = input() cards = tuple([input() for i in xrange(n)]) print len([None for a,b,c in itertools.combinations(cards,3) if (a+b+c) % 7 == 0])
itertoolsモジュールに頼りきって内包表記でまとめて処理したコード
タイムアウトで落とされたけどこれ以上早くできる気がしない・・・
Haskell入門 階乗の解説
Haskell で階乗のお約束のコードは下記のものらしい
fact 1 = 1 fact n = n * fact (n - 1) main = do print $ fact 5
再帰に不慣れだとちょっと戸惑うので簡単に解説
fact 1 = 1 fact n = n * fact (n - 1)
の部分でパターンマッチを行い、第1引数が 1 の場合はそのまま 1 を返す
第一引数がそれ以外の場合、第一引数が変数 n に束縛されて n * fact (n - 1) が実行される
条件にマッチする間再帰処理が呼び出し続け(往路)、
再帰処理が終わった時点で計算結果を順に返す(復路)
図にして書くと 1 の時点で往路が終了し、復路に入っているのがわかる
まぁ慣れればそれだけの簡単な話でイメージさえ掴めばとくに難しいこともない
iOS上のSafariをOSXから確認する方法
web開発をされている皆さんは普段どのブラウザを使ってますでしょうか
Chrome?ふんふん、なるほど
メモリ消費大きいけどに動作も早いし使いやすいですよね
NodeでもV8エンジンにはお世話になってます
もし OSX と iOS でweb開発してるのなら Safari もおすすめですよ
iOS端末上のwebインスペクタをOSX上で確認、変更ができるので
iPhoneで確認したときだけ表示が崩れるなんて場合に便利
使い方は以下
画像は
・コマンドラインから扱いにくいディレクトリ名が作成されるのが嫌
・英語読む気があるなら英語のメッセージで調べたほうが情報が多い
っていう個人的な都合でOSを英語設定にしてるため適宜読み替えて参考にしてください
ここからiOS端末のwebインスペクタを表示
使い方はOSX上の Safari と同じように
ブラウザが変わるとこのあたりのツールもUI変わってて慣れるまで大変だとは思いますが・・・
なお、あらかじめ
OSX側:Preferences(⌘,) > Advanced > Show Develop menu bar
iOS側:Setting > Safari > Advances > Web Inspector
をそれぞれ有効にしてください
Haskell始めました
length' [] = 0 length' (_:xs) = 1 + length' xs sum' [] = 0 sum' (x:xs) = x + sum' xs product' [] = 1 product' (x:xs) = x * product' xs take' _ [] = [] take' n _ | n < 1 = [] take' n (x:xs) = x : take' (n - 1) xs drop' _ [] = [] drop' n xs | n < 1 = xs drop' n (_:xs) = drop' (n - 1) xs reverse' [] = [] reverse' (x:xs) = reverse' xs ++ [x] main = do -- リストの長さ print $ length' [1,2,3,4,5] -- 5 -- 総和 print $ sum' [1,2,3,4,5] -- 15 -- 階上 print $ product' [1,2,3,4,5] -- 120 -- 先頭2件を抽出 print $ take' 2 [1,2,3,4,5] -- [1,2] -- 先頭2件を除いたものを抽出 print $ drop' 2 [1,2,3,4,5] -- [3,4,5] -- 逆順 print $ reverse' [1,2,3,4,5] -- [5,4,3,2,1]
qiita.com
今回はこちらの記事を参考に進めてます
Haskell初心者でもわかりやすい記事に感謝
Haskell は数学だと聞いてたけどそれでも予想以上に数学色が強い
けどまぁ関数型言語を学ぶいいきっかけになったかなと
関数型が万能ってわけじゃないんだろうけどオブジェクト思考からのパラダイムもあるはずだから
早めに覚えておいたほうがなにかとうまく立ち回れそう
いま流行りの「理想の彼氏」を私も描いてみた! pic.twitter.com/olL3yX6Qs1
— ちょまど@プログラマ兼マンガ家 (@chomado) May 3, 2013
こんな風になりたぁい
vimからemacsに乗り換えた話
最近色々と変化があって、頭のなかだけじゃまとめきれなくなったのと
学生時代の憧れだったweb系ブロガーっていうのになってみようとブログを作成
新しい言語に触れてみたとか、関数型言語(Haskell)を始めたとかよりも
エディタ変えたほうが個人的には大きな変化だったので今回はEmacsに乗り換えたお話
そもそもこれまでのエディタ遍歴が
だったのでEmacsも使い出すと4大エディタ全部手を出したことになる
ちなみに、それぞれ長所があるから今でもいくつか使ってます
vim
どハマりしてた頃(vundle全盛期)はプラグイン入れまくってIDEに近づいてた .vimrc で数百行とか書いてた気がする
標準から離れすぎてメンテが大変だったのとそこまで複雑化しても使いこなせなかったので SublimeText へ移行して
.vimrc もプラグイン無し標準の設定項目だけの50行程度まで縮小
今でもコンソール上だと基本これ・・・というか ssh して作業とかになると不可避
Sublime Text
vimme も emacser も SublimeText! っていう流行に流され使いはじめる
⌘d のマルチカーソルが超便利 これだけでローカル環境は移行する価値があった
プラグインが python で書けると聞いて pythonista としてもワクワクした(結局書いたことないけど)
Atom
正直この辺りからエディタにさほど拘りが無くなってきてなんとなく移行した感が強い
きっかけは AtomShell(現在のElectron)を使ってwebベースで動いてるところに興味があったから
SublimeText で出来ることはほとんど出来る感じ webベースだから複雑なことをするとちょっと重い・・・
今でも単なるテキストエディタとして使用 マルチカーソル便利
git status の modify を git add に置き換えてターミナルに貼り付けるとか
もう十分開発環境作っててこれ以上なにすんのって感じもするけど、新しく Emacs に触れてみると
vim との違いに驚愕
正直、『結局どっちもコンソール上で動くCUIエディタでしょ、便利便利』って思ってたけど全然違う
vim が普段 cd, mkdir, git とかしてるのと同じように編集して閉じてって使ってたのに対して
emacs はCUIでも動くけどGUI環境も推奨されてるし立ち上げたら滅多に落とさずバッファに開いたファイルを
がんがん編集していく感じ(GVim?ナニソレ邪道)
使い方は人それぞれかもしれないけど、自分はもう emacs 上でほとんど作業するようになってしまった
随分前置きが長くなったけど、emacsを使うにあたって主に入れたもの
他のエディタでも入れるようなカラーシンタックスやオートコンプリートは省略
multi-term
ターミナルエミュレーター
これでフルスクリーン表示したり、エディタとウインドウ分割してコマンドが叩ける クリップボードからの貼り付けがまだ調子悪いのがネック 設定次第かEvil
Emacs に vimバインドを追加する悪魔のパッケージ
行数指定ジャンプに M-x gotoline とか9タイプ必要とかもう耐えられなくて入れた 後悔はしていない
vim 操作染み付いてるからなんの違和感もなく導入できたmultiple-cursors
SublimeText風マルチカーソル
あとがき
初投稿で読み返してみると読者フレンドリーじゃないね
誰に対して書いてるかがまるで意識されてない
名言っぽいポエム
ここまで共に戦ってきたすべてのエディタに感謝を…
それぞれのエディタの開発者たちに感謝を!
訪れるのは、すべてが入り混じった混沌の世界!
世界は再構成される―!