見出し画像

PowerShell 入社試験対策

最近は入社試験にコーディング問題が出るらしいですね。
おそらくC言語やPythonで解くと思うのですが
PowerShellで解いてみましょう。




問題:1から100までの素数を表示しなさい


普通の解き方

素数は、1とその数自身でしか割り切れない数のことなので、そのまま処理に置き換える方法

# 配列の要素を順番にループする
foreach ($number in (2..100)) {
 # 素数かどうか判定する
 $isPrime = $true
 for ($i = 2; $i -lt $number; $i++) {
   if ($number % $i -eq 0) {
     $isPrime = $false
     break
   }
 }

 # 素数なら表示する
 if ($isPrime) {
   Write-Host $number
 }
}


もっとはやく

素数かどうかを判定するには、より小さい素数で割っていき割り切れなければ素数だと判定できます。2から順にその数までをループするより早いです。
発見した素数を配列$PrimeNumersに入れていき、素数かどうか判定するときは配列$PrimeNumersで割り切れるかチェックしています。

$PrimeNumbers=@()
for($i=2;$i -lt 101;$i++){
 $flg=$True
 foreach($j in $PrimeNumbers){
  if($i % $j -eq 0){
   $flg=$False
   break
  }
 }
 if($flg -eq $True){
  $i
  $PrimeNumbers+=$i
 }
}


もっともはやい

問題は「素数を表示しなさい」なので計算しないで表示させました。もっとも早い方法。計算して表示しなさいだとアウト

write-host "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97"



問題:FizzBuzz問題を解きなさい

 1から100までの数字を順番に表示する。3の倍数のときは「Fizz」、5の倍数のときは「Buzz」、両方の倍数のときは「FizzBuzz」と表示する

普通の解き方

for($i=1;$i -lt 101;$i++){
 $res = [string]$i
 if ($i % 3 -eq 0) { $res += "Fizz" }
 if ($i % 5 -eq 0) { $res += "Buzz" }
 $res
}


ワンライナー

プログラムの中の「 @("Fizz")[$i%3] 」ここがポイントで
これは3で割った余りが0の時は"Fizz"、余りが0以外なら空白になります。

for($i=1;$i -lt 101;$i++){$res=@("Fizz")[$i%3]+@("Buzz")[$i%5];[string]$i+$res;}


ワンライナー2

For分の代わりに(2..100)とパイプ処理を使ったもの。
PowerShellっぽい書き方

(2..100) | ?{write-host $_ @("Fizz")[$_%3] @("Buzz")[$_%5] }


もっともはやい

@("
1
2
3Fizz
4
5Buzz
6Fizz
7
8
9Fizz
10Buzz
11
12Fizz
13
14
15FizzBuzz
16
17
18Fizz
19
20Buzz
21Fizz
22
23
24Fizz
25Buzz
26
27Fizz
28
29
30FizzBuzz
31
32
33Fizz
34
35Buzz
36Fizz
37
38
39Fizz
40Buzz
41
42Fizz
43
44
45FizzBuzz
46
47
48Fizz
49
50Buzz
51Fizz
52
53
54Fizz
55Buzz
56
57Fizz
58
59
60FizzBuzz
61
62
63Fizz
64
65Buzz
66Fizz
67
68
69Fizz
70Buzz
71
72Fizz
73
74
75FizzBuzz
76
77
78Fizz
79
80Buzz
81Fizz
82
83
84Fizz
85Buzz
86
87Fizz
88
89
90FizzBuzz
91
92
93Fizz
94
95Buzz
96Fizz
97
98
99Fizz
100Buzz
")


素数問題とFizzBuzz問題が有名だと思うので解いてみました。
このような試験で何を見ているのかは分からないです。
最低限のコーディングスキルを見ているのか、早いコードが書けるかどうか見ているのか?
仕事人としては、ここで上げた「もっともはやい」方法でコーディングする人が優秀なんですけども


#PowerShell #プログラミング学習 #プログラミング入門 #コマンドレット #入社試験 #コーティング試験 #エンジニア採用 #毎日投稿


この記事が気に入ったらサポートをしてみませんか?