この記事はpaizaのプログラミング問題をPowerShellで解いてみようという試みの記事です。
paizaのプログラミング問題とは?
ブラウザ上でコードを書いて実行できる、無料プログラミング練習問題集です。
- 難易度別に問題を選ぶ
- 問題文を読んで、解答コードを書く
- 提出するとテストケースが実行されて結果をわかる
正解・不正解だけではなく、解答コード例や解説も見ることができるので、プログラミングの習得から復習まで活用できます
こんな人におすすめ
- プログラミングスキルの腕試しをしたい方
- プログラミングのスキルアップしたい方
- 新しい言語にチャレンジをしたい方
通常は問題をc言語やJavaなどで解くのですがPowerShellで解いてみます。
問題
Fizz Buzz (paizaランク C 相当)
問題
整数 N が入力として与えられます。
1からNまでの整数を1から順に表示してください。
ただし、表示しようとしている数値が、
・3の倍数かつ5の倍数のときには、"Fizz Buzz"
・3の倍数のときには、"Fizz"
・5の倍数のときには、"Buzz"
を数値の代わりに表示してください。
入力: N
N は1以上N以下の整数です。
コード:
# ワンライナー
(1..[int](read-host))|foreach-object{if(-not(($_ % 3 -eq 0)-or($_ % 5 -eq 0))){ $_ }elseif(($_ % 3 -eq 0)-and($_ % 5 -eq 0)){ "Fizz Buzz" }elseif($_ % 3 -eq 0){"Fizz"}elseif($_ % 5 -eq 0){"Buzz"}} | %{write-host $_}
コードの説明:
1.数値1から入力値まで列挙:
(1..[int](read-host))
- (a..b) の書き方で数値aから数値bまで順に列挙します
- read-hostで入力値を読み込みint型に変換します
2.パイプ処理
|
- 前の処理の出力を一つづつ次処理へ送ります
- PowerShellの特徴として前処理(a..b) が一つづつ通ります
3.ワンライナー
foreach-object{if(-not(($_ % 3 -eq 0)-or($_ % 5 -eq 0))){ $_ }elseif(($_ % 3 -eq 0)-and($_ % 5 -eq 0)){ "FizzBuzz" }elseif($_ % 3 -eq 0){"Fizz"}elseif($_ % 5 -eq 0){"Buzz"}} | %{write-host $_}
- PowerShellでもワンライナーで書けるか挑戦してみました。
- $_ は前処理からパイプ処理で送られてきた値
- $_ が3でも5でも割れないとき -> 数字
- $_ が3でも5でも割れるとき -> Fizz Buzz
- $_ が3で割れるとき -> Fizz
- $_ が5で割れるとき -> Buzz
4.パイプ処理
|
- 前の処理の出力を一つずつ次処理へ送ります
5.出力
%{write-host $_ }
- write-hostで前処理から送られてきた値$_を表示
- %{} はforeach-object{} の省略形
終わりに
noteにPowerShellのサンプルコードの記事を書いています。そっちも見てね
PowerShellまとめ