4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事はpaizaのプログラミング問題をPowerShellで解いてみようという試みの記事です。

paizaのプログラミング問題とは?

ブラウザ上でコードを書いて実行できる、無料プログラミング練習問題集です。

  1. 難易度別に問題を選ぶ
  2. 問題文を読んで、解答コードを書く
  3. 提出するとテストケースが実行されて結果をわかる
    正解・不正解だけではなく、解答コード例や解説も見ることができるので、プログラミングの習得から復習まで活用できます

こんな人におすすめ

  • プログラミングスキルの腕試しをしたい方
  • プログラミングのスキルアップしたい方
  • 新しい言語にチャレンジをしたい方

通常は問題を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まとめ

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?