Language detail: PowerShell

Coverage: 24.62%
number of '+' ratings
contribution for coverage

Unsolved challenges

codes

Feed

Used modules

next >>

環境変数の取得 (Nested Flatten)

env: ドライブを ls します。 ls は Get-ChildItem のエイリアスですので Get-ChildItem と書くほうがよいですね。 キーを指定する場合には env: ドライブのキーの項目を Get-Item します。

1
2
3
Get-ChildItem env:

Get-Item env:HOME
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)
1
Write-Output "Hello, world!"
音声合成で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)")}
指定されたフォルダ以下のゴミ掃除 (Nested Flatten)

	
1
dir * -recurse -include *~ | rm
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)
おっと。$itemが抜けた
1
2
$item = "ダイコン150円、ハクサイ120円、ジャガイモ30円"
$item.split("、") | %{$_ -match "(^.+[^\d])(\d+)(.+$)"} | %{([int]$matches[2]) * 1.05} | %{$matches[1]+[int]($_-0.5)+$matches[3]}
next >>

Index

Feed

Other

Link

Pathtraq

loading...