Workshop/StartHaskell2/exercise9

『もっと入力、もっと出力』 練習問題

電卓コマンド

簡単な電卓コマンド calc を作ろう

calcコマンドは引数にサブコマンド文字列 add, sub, times, div と、さらに2つの数字を受け取る。 

実行例

% calc add 1 4
5
% calc sub 10 20
-10
% calc times 4 9
36
% calc div 10 3
3.3333333333333335

ヒント: 文字列から数字を読み取るには、以下のような関数がある。

read   :: Read a => String -> a
readLn :: Read a => IO a
readIO :: Read a => String -> IO a

数当てゲーム

ヒミツの数字を当てるプログラムを作ろう。

  • プログラムは、最初に4桁のヒミツの数字を1つランダムに生成する。
  • ユーザは、標準入力から数字を入力する。
  • 入力された数字がヒミツの数字と等しいときは、正解の旨を表示して、プログラムを終了する。
  • 入力された数字がヒミツの数字と異なるときは、以下の仕様に従った2つの数字の組を表示して 2 へ戻る。

入力された数字の各桁の数字について

  • 桁と数字が、ヒミツの数字のそれと一致しているものの個数
  • 数字が、ヒミツの数字のどこかの桁と一致しているものの個数

実行例

% ./guessnumber
% Hello, guess the number!
% > 1111
1 1
% > 2222
1 1
% > 3210
1 3
% > 0123
0 3
% > 1234
Correct!

echoコマンド

標準入力から入力された行を、そのまま標準出力に表示するコマンドを作ろう。(オプションは実装しなくてよい。)

余裕のある人は、ソースコードのバイト数を削って、どこまで短くなるか試してみよう。完成したら anarchy golf に投稿しよう。


Haskell版 UNIXコマンド集

以下のような、UNIXコマンドをHaskellで実装してみよう。

cat
head
tail
sort
uniq
ls

ヒント:ディレクトリ内のエントリ一覧を取得するには、 System.Directory の getDirectoryContents が使える。

getDirectoryContents :: FilePath -> IO [FilePath]

Project Euler problem 8

Problem