回答編集履歴

4

tailsを使うように修正

2016/08/31 18:41

投稿

MakeNowJust
MakeNowJust

スコア545

test CHANGED
@@ -6,18 +6,18 @@
6
6
 
7
7
  import Control.Applicative
8
8
 
9
+ import Data.List (tails, isPrefixOf)
10
+
9
11
 
10
12
 
11
13
  main = do
12
14
 
13
- ls <- lines <$> getContents
15
+ ls <- map (map (read :: String -> Integer) . words . head) . takeWhile (not . isPrefixOf ["", ""]) . tails . lines <$> getContents
14
16
 
15
- let ls' = map (map (read :: String -> Integer) . words . fst) $ takeWhile (/= ("", "")) $ zip ls $ tail ls
16
-
17
- print ls'
17
+ print ls
18
18
 
19
19
  ```
20
20
 
21
21
 
22
22
 
23
- コツとしては`zip ls $ tail ls`とすることで2行ずつに並んだリストを用意しておき、この要素が`("", "")`となるところまで、つまり改行のみの行が2回連続で続くところまでを`takeWhile`で取得しています。
23
+ コツとしては`tails . lines`とすることで1行ずつずれたリストを用意しておき、このリストの先頭が`["", ""]`となるところまで、つまり改行のみの行が2回連続で続くところまでを`takeWhile`で取得しています。

3

なんか勘違いしてたので修正

2016/08/31 18:41

投稿

MakeNowJust
MakeNowJust

スコア545

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  ls <- lines <$> getContents
14
14
 
15
- let ls' = map (map (read :: String -> Integer) . words . fst) $ takeWhile (/= ("\n", "\n")) $ zip ls $ tail ls
15
+ let ls' = map (map (read :: String -> Integer) . words . fst) $ takeWhile (/= ("", "")) $ zip ls $ tail ls
16
16
 
17
17
  print ls'
18
18
 
@@ -20,8 +20,4 @@
20
20
 
21
21
 
22
22
 
23
- コツとしては`zip ls $ tail ls`とすることで2行ずつに並んだリストを用意しておき、この要素が`("\n", "\n")`となるところまで、つまり改行が2連続で続くところまでを`takeWhile`で取得しています。
23
+ コツとしては`zip ls $ tail ls`とすることで2行ずつに並んだリストを用意しておき、この要素が`("", "")`となるところまで、つまり改行のみの行が2連続で続くところまでを`takeWhile`で取得しています。
24
-
25
-
26
-
27
- また、`getContents`を使うと、入力が終了したら`Ctrl-D`を押さないと終了しないので注意してください。

2

s/getContent/getContents/

2016/08/31 18:24

投稿

MakeNowJust
MakeNowJust

スコア545

test CHANGED
@@ -24,4 +24,4 @@
24
24
 
25
25
 
26
26
 
27
- また、`getContent`を使うと、入力が終了したら`Ctrl-D`を押さないと終了しないので注意してください。
27
+ また、`getContents`を使うと、入力が終了したら`Ctrl-D`を押さないと終了しないので注意してください。

1

色々と加筆

2016/08/31 18:21

投稿

MakeNowJust
MakeNowJust

スコア545

test CHANGED
@@ -12,8 +12,16 @@
12
12
 
13
13
  ls <- lines <$> getContents
14
14
 
15
- let data = map ((read :: String -> Integer) . words . fst) $ takeWhile (/= ("\n", "\n")) $ zip ls $ tail ls
15
+ let ls' = map (map (read :: String -> Integer) . words . fst) $ takeWhile (/= ("\n", "\n")) $ zip ls $ tail ls
16
16
 
17
- print data
17
+ print ls'
18
18
 
19
19
  ```
20
+
21
+
22
+
23
+ コツとしては`zip ls $ tail ls`とすることで2行ずつに並んだリストを用意しておき、この要素が`("\n", "\n")`となるところまで、つまり改行が2行連続で続くところまでを`takeWhile`で取得しています。
24
+
25
+
26
+
27
+ また、`getContent`を使うと、入力が終了したら`Ctrl-D`を押さないと終了しないので注意してください。