Language detail: PowerShell
Coverage: 24.62%
|
number of '+' ratings |
contribution for coverage |
Unsolved challenges
- LL Golf Hole 4 - 文章から単語の索引を作る (Nested Flatten)
- LL Golf Hole 3 - 13日の金曜日を数え上げる (Nested Flatten)
- LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする (Nested Flatten)
- tailの実装 (Nested Flatten)
- lessの実装 (Nested Flatten)
codes
Hello, world!その2
(Nested
Flatten)
$ofsのoを大文字にすれば逃げられるのでは?
1 | "$($Ofs=`"`")$(`"Helo, wrd!`"[0,1,2,2,3,4,5,6,3,7,2,8,9,10])"
|
n人中m人が当選するくじ
(Nested
Flatten)
とりあえず。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | function lot($n, $m) {
if ($n -ge $m) {
$randomgenerator = New-Object Random
$source = 1 .. $n
$limit = $n
$result = @()
foreach ($i in 1 .. $m) {
$limit -= 1
$ii = $randomgenerator.Next($limit + 1)
$result += $source[$ii]
if ($ii -gt 0) {
$srclow = $source[0 .. ($ii - 1)]
} else {
$srclow = @()
}
if ($ii -lt $limit) {
$srchi = $source[($ii + 1) .. $limit]
} else {
$srchi = @()
}
$source = $srclow + $srchi
}
}
return $result | sort
}
|
音声合成でHello, world!
(Nested
Flatten)
Windows では COM 経由で SAPI を使うといいようですね。
1 2 3 4 | function say($msg) {
$speaker = new-object -com Sapi.SpVoice
$speaker.Speak($msg, 1)
}
|
Hello, world!その2
(Nested
Flatten)
やっちゃった。$ofsの値が悪さしてました $ofsは配列を文字列にするときに個々の値の間に挟まれる文字列で、デフォルトはスペースになっています。 PS C:\> $ofs=" " PS C:\> [string](1,2,3) 1 2 3 PS C:\> $ofs="" PS C:\> [string](1,2,3) 123 なので初めのコードだと H e l l o , w o r l d ! と出てしまっていました。 ちゃんと新しいシェル出して動作確認しないと駄目ですね。
1 | "$($ofs=`"`")$(`"Helo, wrd!`"[0,1,2,2,3,4,5,6,3,7,2,8,9,10])"
|
長方形の交差判定
(Nested
Flatten)
1 2 3 4 | [void][reflection.assembly]::loadwithpartialname("system.drawing")
$r1 = new-object system.drawing.rectangle(0,0,100,100)
$r2 = new-object system.drawing.rectangle(100,0,100,100)
$r1.intersectsWith($r2)
|
実行時間の測定
(Nested
Flatten)
$argsが展開されて渡されてしまうのでとりあえず引数は無しで。綺麗に渡す方法無いかなー。
PS C:\> function func{sleep 3}
PS C:\> profile
Days : 0
Hours : 0
Minutes : 0
Seconds : 2
Milliseconds : 997
Ticks : 29977106
TotalDays : 3.4695724537037E-05
TotalHours : 0.000832697388888889
TotalMinutes : 0.0499618433333333
TotalSeconds : 2.9977106
TotalMilliseconds : 2997.7106
1 | function profile{measure-command{func}}
|
Hello, world!その2
(Nested
Flatten)
配列スライスして文字列展開しています。 PS C:\> "$(`"Helo, wrd!`"[0,1,2,2,3,4,5,6,3,7,2,8,9,10])" Hello, world!
1 | "$(`"Helo, wrd!`"[0,1,2,2,3,4,5,6,3,7,2,8,9,10])"
|
アルファベットの繰り上がり
(Nested
Flatten)
他の基数も対応 $table = [char[]]"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" print-excel-header 1000 $table $table = [char[]]"いろはにほへと" print-excel-header 100 $table
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function print-excel-header($count, $table)
{
$radix = $table.length
foreach ($i in 0..($count -1)) {
$s = ""
$p = $i
do {
$q = $p % $radix
$p = [math]::truncate($p / $radix) - 1
$s = $table[$q] + $s
} while ($p -ne -1)
$s
}
}
$table = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
print-excel-header 100 $table
|
議席数をドント方式で
(Nested
Flatten)
48 1 21 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | function create-party($id,$votes)
{
$p = add-member -in $id --passthru NoteProperty votes $votes
add-member -in $p NoteProperty level 1
add-member -in $p ScriptMethod rate { $this.votes / $this.level; $this.level++}
$p
}
filter max {
begin{$m = 0; $i = 0; $r = 0}
process{if($m -lt $_) {$m=$_; $r=$i} $i++}
end{$r}
}
$const = 100
$votes = 123, 4, 56, 78
$parties = $votes | %{$i=0}{create-party $i $_; $i++}
$result = 1..$const
$rates = $parties | %{$_.rate()}
for ($i = 0; $i -lt $const; ++$i) {
$id = $rates | max
$result[$i] = $id
$rates[$id] = $parties[$id].rate()
}
foreach ($id in $parties) {@($result | where-object {$_ -eq $id}).length}
|
n日後を返す関数を返す関数
(Nested
Flatten)
コマンド間違えてた。ただ値を返すだけでした PS C:\> $f = n_days_later(3) PS C:\> &$f 2007年9月6日 20:02:27 PS C:\> $f (get-date).addDays(3) PS C:\> $f = n_days_later(1) PS C:\> $f (get-date).addDays(1) PS C:\> &$f 2007年9月4日 20:03:04
1 | function n_days_later($n){$ExecutionContext.InvokeCommand.NewScriptBlock("(get-date).addDays($n)")}
|
n日後を返す関数を返す関数
(Nested
Flatten)
文字列展開をつかってクロージャモドキ PS C:\> $t = n_days_later(1) PS C:\> $t 2007年9月4日 15:54:59 PS C:\> $t = n_days_later(10) PS C:\> $t 2007年9月13日 15:55:06
1 | function n_days_later($n){$ExecutionContext.InvokeCommand.InvokeScript("(get-date).addDays($n)")}
|
倍数になる13進数
(Nested
Flatten)
とりあえず総当たりで
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function to-dec($num, $r)
{
$ret = 0
$p = 1
$s = [string]$num
for ($i = $s.length -1; $i -ge 0; $i--) {
$ret += [int][string]($s[$i]) * $p
$p = $p * $r
}
$ret
}
for ($i = 10; ; $i++) {
$r = to-dec $i 13
if (($r % $i) -eq 0) {
$i; break
}
}
|
重複する要素を取り除く
(Nested
Flatten)
PS C:\> $list = (3, 1, 4, 1, 5, 9, 2, 6, 5)
PS C:\> $list | %{$h=@{}} {$h[$_] += 1}
PS C:\> $list | %{if($h[$_] -eq 1) {$_}}
3
4
9
2
6
1 2 3 | $list = (3, 1, 4, 1, 5, 9, 2, 6, 5)
$list | %{$h=@{}} {$h[$_] += 1}
$list | %{if($h[$_] -eq 1) {$_}}
|
呼んだのは誰?
(Nested
Flatten)
PS C:\> bar bar PS C:\> buz buz
1 2 3 4 5 6 7 8 9 10 | function caller
{
if ((get-variable -scope 1 MyInvocation).Value.PositionMessage -match "\+ (\S+) <<<<")
{
$matches[1]
}
}
function bar { caller }
function buz { caller }
|
ビンゴの結果を整形表示
(Nested
Flatten)
PS C:\> format-bingo(bingo(5)) 1 2 3 4 5 4 2 1 0 3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function bingo([int] $n)
{
$r = new-object system.random
$a = 0..($n-1)
0..($n-1) | %{ $i = $r.next($n-1); $a[$_],$a[$i] = $a[$i],$a[$_] }
$a
}
function format-bingo($ary)
{
$keta = ([string]$ary.length).length + 1
for ($i = 0; $i -lt $ary.length; $i+=10) {
$len = $ary[($i)..($i+9)].length + $i
[string]::join("", (@(($i+1)..$len) | %{"{0,$keta}" -f $_}))
[string]::join("", ($ary[($i)..($len-1)] | %{"{0,$keta}" -f $_}))
""
}
}
|
重複無し乱数
(Nested
Flatten)
PS C:\> bingo(3) 2 1 0 PS C:\> @(bingo(10000) | sort | get-unique).length 10000
1 2 3 4 5 6 7 | function bingo([int] $n)
{
$r = new-object system.random
$a = 0..($n-1)
0..($n-1) | %{ $i = $r.next($n-1); $a[$_],$a[$i] = $a[$i],$a[$_] }
$a
}
|
税込み価格への修正
(Nested
Flatten)
next >>
おっと。$itemが抜けた
1 2 | $item = "ダイコン150円、ハクサイ120円、ジャガイモ30円"
$item.split("、") | %{$_ -match "(^.+[^\d])(\d+)(.+$)"} | %{([int]$matches[2]) * 1.05} | %{$matches[1]+[int]($_-0.5)+$matches[3]}
|






しょーた
#6799()
[
PowerShell
]
Rating0/0=0.00
env: ドライブを ls します。 ls は Get-ChildItem のエイリアスですので Get-ChildItem と書くほうがよいですね。 キーを指定する場合には env: ドライブのキーの項目を Get-Item します。
Rating0/0=0.00-0+
[ reply ]