質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

Q&A

解決済

2回答

2460閲覧

どの言語でも躓く、競技プログラミング対策についての質問です。

Bolshikh_i_mal

総合スコア32

Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

0グッド

0クリップ

投稿2016/08/31 09:51

編集2016/08/31 13:06
import Control.Applicative main = do ii <- fmap (fmap (read :: String -> Int) . words) . lines <$> getContents break ( ii == ("\n","\n")) print $ ii

複数行の入力を受け取って、
改行を二回入れたらブレイクしたいなって思い、
このようなコードを書いてみましたが
やっぱりそうは問屋が卸さないようです。

huku.hs:3:65: error: • Couldn't match expected type ‘((a0 -> Bool) -> [a0] -> ([a0], [a0])) -> Bool -> IO String’ with actual type ‘IO String’ • The function ‘getContents’ is applied to two arguments, but its type ‘IO String’ has none In the second argument of ‘(<$>)’, namely ‘getContents break (ii == ("\n", "\n"))’ In a stmt of a 'do' block: ii <- fmap (fmap (read :: String -> Int) . words) . lines <$> getContents break (ii == ("\n", "\n")) huku.hs:4:14: error: • Variable not in scope: ii :: ([Char], [Char]) • Perhaps you meant one of these: ‘id’ (imported from Prelude), ‘pi’ (imported from Prelude)

このように、親切ではありますが
たくさんのエラーが出てしまい
参ってしまいました。
助けてください。お願いします。

ありがとうございます。

改行二回のイメージは、二回連続でエンターを押した時です。
もう入力する値がない場合に、値を決定して
入力から抜けたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2016/08/31 12:38

「改行を二回入れたらブレイクしたい」の具体例もらえますか?
raccy

2016/08/31 21:45

「空白行が二回続く」でしょうか、それとも、「改行が二回続く(実質空白行は一回のみ)」でしょうか。後者だと一応できたのですが…。
Bolshikh_i_mal

2016/09/01 11:17

ありがとうございます。俺がイメージしていたのは後者の方です。
Bolshikh_i_mal

2016/09/07 01:08

ちなみに、ですが、ここで入力したリストを一つのリストとする場合 fordを使えば出来ますか?
guest

回答2

0

ベストアンサー

改行が二回、つまり、空白行が一つあればと言うことであれば、

43 3 2 2 63 324 8 9 3 4 98

こんな感じの入力について(わかりにくいですが最後に空白行ありです)、全ての数字を足す場合は、

Haskell

1main :: IO () 2main = do 3 list <- takeWhile (not . null) . map (map read . words) . lines <$> getContents 4 print $ sum $ map sum list

という風になるかと思います。

投稿2016/09/01 11:41

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

こういうことでしょうか?

haskell

1import Control.Applicative 2import Data.List (tails, isPrefixOf) 3 4main = do 5 ls <- map (map (read :: String -> Integer) . words . head) . takeWhile (not . isPrefixOf ["", ""]) . tails . lines <$> getContents 6 print ls

コツとしてはtails . linesとすることで1行ずつずれたリストを用意しておき、このリストの先頭が["", ""]となるところまで、つまり改行のみの行が2回連続で続くところまでをtakeWhileで取得しています。

投稿2016/08/31 18:15

編集2016/08/31 18:41
MakeNowJust

総合スコア545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bolshikh_i_mal

2016/09/01 11:40

ありがとうございます。感謝感激です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問