or1ko's diary

日々を書きます

Haskell

Outlook の Web APIを呼び出す例

Outlook の Web APIを呼び出すサンプルコードを書いた。起動して http://localhost:8080/ にアクセスすると、 OAuth2のためにOutlookに転送され、許可すると、 http://localhost:8080に戻ってきて、 メッセージのタイトル一覧を表示する。Outlook の Web API…

24

言語処理100本ノック 2015 24. ファイル参照の抽出 記事から参照されているメディアファイルをすべて抜き出せ. メディアファイルというのが何を指しているのかわからなかったが、 ファイル参照の抽出というタイトルから、File:を抜き出すことにした。 中身…

Windows版HaskellでUTF8のファイル読み書き

Haskell Platform 7.10.2-aをインストールした際に、日本語(utf8)の扱いがわからなくなってしまって、ずっとほっといたのだが、ふと思い出して調べてみた。 紆余曲折したが、ポイントとしては下記の2点。 Handleにutf8を指定 ファイルの読み書きなどのデフ…

20

言語処理100本ノック 2015 Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ. 20.hs {-# LANGUAGE OverloadedStrings, DeriveGeneric #-} import Data.Aeson as A …

JSONの読み込み方法

言語処理100本ノック 2015言語処理100本ノックの第3章に入るにあたり、JSON形式の読み取り方法について調べた。 標準のライブラリにはないため、別途パッケージが必要で、Googleで検索した限りでは、下記の2つの名前が上がった。aeson: Fast JSON parsing an…

19

言語処理100本ノック 2015 19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる 各行の1列目の文字列の出現頻度を求め,その高い順に並べて表示せよ.確認にはcut, uniq, sortコマンドを用いよ. 19.hs import System.Environment impor…

17

言語処理100本ノック 2015 17. 1列目の文字列の異なり 1列目の文字列の種類(異なる文字列の集合)を求めよ.確認にはsort, uniqコマンドを用いよ. > Get-Content -Encoding utf8 .\hightemp.txt | ConvertFrom-Csv -Header a -Delimiter `t | % { $_.a } …

16

言語処理100本ノック 2015 16. ファイルをN分割する 自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ. 16.hs import System.Environment import Control.Monad main = do args …

15

言語処理100本ノック 2015 15. 末尾のN行を出力 自然数Nをコマンドライン引数などの手段で受け取り,入力のうち末尾のN行だけを表示せよ.確認にはtailコマンドを用いよ. > tail -n 10 15.hs import System.Environment main = do num <- getArgs >>= retur…

14

言語処理100本ノック 2015 14. 先頭からN行を出力 自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ. >head -n 10 14.hs import System.Environment main = do num <- getArgs >>= retu…

13

言語処理100本ノック 2015 13. col1.txtとcol2.txtをマージ 12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ. pasteコマンドなかったため未実施。たぶん…

12

言語処理100本ノック 2015 12. 1列目をcol1.txtに,2列目をcol2.txtに保存 各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ. > cut -f 1 hightemp.txt > col1.tx…

11

11. タブをスペースに置換 タブ1文字につきスペース1文字に置換せよ.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ. >sed "s/\t/ /g" hightemp.txt >tr "\t" " " < hightemp.txt expandはなかったためやめる。11.hs import System.IO.…

10

言語処理100本ノック 20152章はUnixのコマンドの練習のようだけれども、 Haskellを書きたいので、同様のプログラムも作成していく。と思っていたら、よく読んでみたら、プログラム書く演習だった。 10. 行数のカウント 行数をカウントせよ.確認にはwcコマン…

09

言語処理100本ノック 2015 09. Typoglycemia スペースで区切られた単語列に対して,各単語の先頭と末尾の文字は残し,それ以外の文字の順序をランダムに並び替えるプログラムを作成せよ.ただし,長さが4以下の単語は並び替えないこととする.適当な英語の…

08

言語処理100本ノック 2015 08. 暗号文 与えられた文字列の各文字を,以下の仕様で変換する関数cipherを実装せよ.英小文字ならば(219 - 文字コード)の文字に置換 その他の文字はそのまま出力 この関数を用い,英語のメッセージを暗号化・復号化せよ. import…

07

言語処理100本ノック 2015 07. テンプレートによる文生成 引数x, y, zを受け取り「x時のyはz」という文字列を返す関数を実装せよ.さらに,x=12, y="気温", z=22.4として,実行結果を確認せよ. 07.hs import Text.Printf main = putStrLn $ f 12 "気温" 22.…

04-06

言語処理100本ノック 2015 04. 元素記号 "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."という文を単語に分解し,1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,そ…

01-03

言語処理100本ノック 2015Haskellで何か書きたくなったので、上記のサイトの問題を解いていくことにした。 00. 文字列の逆順 文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ. Prelude> Data.List.reverse "stressed" "desserts…

単純なParsec利用例2

5文字の入力がある場合、OKと表示し、 そうでない場合に、NGと表示する例 module Main where import System.IO import Text.ParserCombinators.Parsec main = getContents >>= return . ngok . parseSimple >>= print parseSimple input = parse simple "(un…

単純なParsec利用例

標準入力から"abc"と入力されたかをチェックするParsecの例 プログラム module Main where import System.IO import Text.ParserCombinators.Parsec main = getContents >>= return . parseSimple >>= print parseSimple input = parse simple "(unknown)" i…

基本認証があるHTTPS GETでコンテンツを取得する例

Network.HTTPでHTTPSをサポートしていないとのことであったので、 http-conduitをパッケージを使用http-conduitでは特になにもせずに、HTTPSが利用可能(サンプルの転記) import Network.HTTP.Conduit main = withSocketsDo $ do request' <- parseUrl url >>…

URIクエリの構築例(UTF8)

コード import Network.URI (escapeURIString, isAllowedInURI) host = "http://www.yahoo.co.jp/test" params = [("query","テスト"), ("key", "キー")] main = putStr $ buildURI host params buildURI host params = host ++ "?" ++ (join "&" $ map aQue…

HTTP GETでコンテンツを取得する例

import Network.URI import Network.HTTP url = "http://www.yahoo.co.jp/" main = simpleHTTP (getRequest url) >>= getResponseBody

Parsecの練習 〜 hrefの値を取り出す 〜

Parsecを勉強したので、 htmlのアンカータグのhref属性の値を取り出す処理を書いた。標準入力から読み込んだテキストから、 href="aaaa"といったところから、 "aaaa"をとりだす。 import System.IO (getContents) import Text.ParserCombinators.Parsec impo…

Haskellのuniq

Haskellのuniqっぽいのをを忘れてしまうので備忘録。Data.Listのnub関数 Prelude>:m Data.List Prelude Data.List>nub $ [1,3,2,3,3] [1,3,2]一番最初に表れたものだけを保持して、リストを作成する。

295

久しぶりに見かけたのでチャレンジ Server error 一昔前は、すごい勢いで投稿されていたけど、 最近は寂しい限りみたいだ。 パスワードとかが分からなくてログインできず...再発行も面倒で...orz import Data.Char (isDigit) import Data.List (find, groupB…

RegisterHotKeyを呼び出す

RegisterHotKey 関数 WindowsのRegisterHotKeyを呼び出したくて、RWHを読んで、 hsc2hsを使って、モジュールを作成してみた。以下のようにして、hscファイルをhsに変換して使う $ hsc2hs HotKey.hsc $ ghc --make HotKey.hs $ runghc .\TestHotKey.hs 設定し…

モナド

モナドか、 いつか、あの力の秘密、 解き明かしてみたいな。

Project Euler 8

import Control.Monad (liftM) import Data.Char (digitToInt) main = liftM (maximum . map product . sub5 . concat . lines) getContents sub5 s = [map digitToInt $ take 5 $ drop n s | (n,_) <- zip [0..length s - 5] s]