[過去ログ] プログラミングのお題スレ Part21 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
397
(5): デフォルトの名無しさん [] 2023/01/22(日) 14:44:09.50 ID:4qkUXg4j(1) AAS
お題
月、名前、金額が入力されます
月が2022-12〜2023-01の期間で
金額の合計が最も大きい人の名前と合計の金額を出力してください

2022-10 加藤 10
2022-12 柳沢 10000
2022-10 柳沢 26
2023-01 伊東 10
2022-12 柳沢 151288
2022-11 加藤 10000
2023-02 伊東 257900
2022-12 柳沢 12600
2022-10 伊東 12600
2023-01 伊東 70000
2022-11 加藤 40000
2023-01 伊東 150000
2022-11 加藤 60000
2022-12 柳沢 257900
2023-02 柳沢 40000
2022-11 加藤 26
2023-02 加藤 10000
398: デフォルトの名無しさん [sage] 2023/01/22(日) 16:15:12.29 ID:kK2ZzIVu(1) AAS
>>397
Haskell

mport Data.List

makeReport ls = id
$ (\x -> ( minimum x, maximum x ))
$ map (\x -> ( sum $ map (read.(!!2)) x, (head x)!!1))
$ groupBy (\x y -> x!!1 == y!!1 )
$ filter ( \x -> head x >= "2022-12" && head x <= "2023-01" )
$ map words
$ ls

main = do
cont <- getContents
let ls = lines cont
print $ makeReport ls
399
(1): デフォルトの名無しさん [] 2023/01/23(月) 01:10:57.11 ID:PlrAEUgr(1/2) AAS
>>397
awk, sort, head

元データをコピペで odai_397.txt に入れておいて Linux で bash から以下を実行した。

awk '$1>="2022-12"&&$1<="2023-01"{t[$2]+=$3}END{for(i in t)print i,t[i]}' odai_397.txt | sort -k 2nr | head -1

結果はこう出た。

柳沢 431788
400: デフォルトの名無しさん [] 2023/01/23(月) 02:39:02.46 ID:PlrAEUgr(2/2) AAS
>>397
Kotlin

>>399をKotlinに変えたような感じ。

外部リンク:paiza.io
405
(1): デフォルトの名無しさん [] 2023/02/03(金) 20:44:23.48 ID:KJ3h+c6Z(1/2) AAS
>>397
Elixir で作った。これは、ややこしかった

{ :ok, input_data } = File.read( "input_data.csv" )
# IO.inspect input_data

# 末尾の改行を削除してから、1行ずつ処理する。空白で区切る。
# 2022-12 〜 2023-01 の期間内のデータだけに絞り込む。
# 名前でグルーピングしてから、金額を取り出す。
# 各人の金額を、数値に変換してから合計する。
# 合計が最も大きい人を求める

tuple = input_data
|> String.trim
|> String.split( "\n" )
|> Enum.map( fn( line ) -> String.split( line, " " ) end )
|> Enum.filter( fn [ head | _ ] -> "2022-12" <= head and head <= "2023-01" end )
# |> IO.inspect
|> Enum.group_by( fn [ _, name, _ ] -> name end, fn [ _, _, money ] -> money end )
# |> IO.inspect
|> Enum.map( fn { key, val } -> { key,
Enum.sum( Enum.map( val, &String.to_integer( &1 ) ) )
}
end )
# |> IO.inspect
|> Enum.max_by( &elem( &1, 1 ) )
# |> IO.inspect

{ name, money } = tuple
IO.puts "#{ name }, #{ money }"
#=> 柳沢, 431788
407: デフォルトの名無しさん [] 2023/02/14(火) 09:18:44.14 ID:NQYE/eke(1) AAS
>>397
C#
public static void Main(String[] args) {
 var m = ReadLines()
  .Select(x => {
   var a = x.Split(" ");
   return new { Month = a[0], Name = a[1], Money = int.Parse(a[2]) };
  })
  .Where(x => "2022-12".CompareTo(x.Month) <= 0 && x.Month.CompareTo("2023-01") <= 0)
  .GroupBy(x => x.Name)
  .Select(g => new { Name = g.Key, Total = g.Select(x => x.Money).Sum() })
  .MaxBy(x => x.Total);

 Console.WriteLine(m);
}

static IEnumerable<string> ReadLines() {
 while (true) {
  var line = Console.ReadLine();
  if (line == null) {
   yield break;
  }
  yield return line;
 }
}
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.041s