この記事はpaizaのプログラミング問題をPowerShellで解いてみようという試みの記事です。
paizaのプログラミング問題とは?
ブラウザ上でコードを書いて実行できる、無料プログラミング練習問題集です。
難易度別に問題を選ぶ
- 問題文を読んで、解答コードを書く
- 提出するとテストケースが実行されて結果をわかる
- 正解・不正解だけではなく、解答コード例や解説も見ることができるので、プログラミングの習得から復習まで活用できます
こんな人におすすめ
- プログラミングスキルの腕試しをしたい方
- プログラミングのスキルアップしたい方
- 新しい言語にチャレンジをしたい方
通常は問題をc言語やJavaなどで解くのですがPowerShellで解いてみます。
問題
文字列収集 (paizaランク S 相当)
問題文
あなたは文字列の愛好家で、文字列を収集することにとても熱心です。
文字列は市場で高値で取引されています。今、市場には N 個の文字列が出まわっており、文字列 S_i (1 ≦ i ≦ N) の価格は P_i です。 あなたは数ある文字列の中でも、とくに先頭がある特定の文字列で始まる文字列に興味があり、そのような文字列をすべて買い占めたいです。例え、同じ文字列が複数売っていたとしてもそのすべてを買います。
そこで、市場に出回っている N 個の文字列 S_i とそれぞれの価格 P_i (i ≦ i ≦ N)、また、M 個のクエリ文字列 Q_i (1 ≦ i ≦ M) が与えられるので、それぞれのクエリ Q_i に対し、市場に出回っている文字列の中で先頭が Q_i で始まる文字列すべてを買い占めるのに必要な金額を出力するプログラムを作成してください。
入力
入力は以下のフォーマットで与えられます。
N M
S_1 P_1
S_2 P_2
...
S_N P_N
Q_1
Q_2
...
Q_M
ただし、文字列 S_i, Q_j (1 ≦ i ≦ N, 1 ≦ j ≦ M) は英小文字のみから構成されます。P_i は整数です。
出力
それぞれのクエリに対し、必要な金額を一行に出力してください。
コード
# 文字列数Nとクエリ文字列数Mを受け取る
$N,$M=(read-host).split()
$N=[int]$N
$M=[int]$M
# 文字列と価格をリストに分割して格納
$strings=@()
$price=@()
for($i=0;$i -lt $N;$i++){
$s,$p=(read-host).split()
$strings+=$s
$price+=$p
}
# クエリを格納
$queries = @()
for($i = 0;$i -lt $M;$i++){
$queries+=(read-host).split()
}
# クエリごとに合計金額を計算して出力
foreach($q in $queries){
$total=0
for($i =0;$i -lt $N;$i++){
if($strings[$i].StartsWith($q)) {
$total += $prices[$i]
}
}
write-host $total
}
解説
問題文をそのままプログラムに落とし込むと完成します。
途中で使っているStartsWith($str)は$strで始まるか?という意味、$strで始まれば$True。同じようなメソッドのEndsWith($str)は$strで終わるか?の意味。
終わりに
noteにPowerShellのサンプルコードの記事を書いています。そっちも見てね
PowerShellまとめ