LoginSignup
3
2

More than 5 years have passed since last update.

PowerShell 勉強会の成果物

Last updated at Posted at 2017-03-05

勉強会の成果物です。

お題は以下の Q6 です。

【問題のみ】第25回もう4年もやってんのかシェル芸勉強会 – 上田ブログ

Q6.日本語のメッセージから作った次の文字列を復元してください。
$ cat crypt
b730a730eb30b8820a00

ヒントになるのは末尾の 0a00 です。
0a は ASCII における改行コードなので文字列終端と予測できます。
また、改行コードに続き 00 があるので、おそらく 2byte の LittleEndian であることが想像できます。
ASCII 互換で LittleEndian な文字コードといえば Unicode です。
エンコード方式は UTF-8, UTF-16, もしくは UTF-32 辺りがメジャーですが、 2byte なので UTF-16LE であることが想像できます。

というわけでハイ、ドーン

Q6
"b730a730eb30b8820a00" `
    | % { for($i=0; $i -lt $_.Length; $i+=2) { $_.SubString($i, 2) } } `
    | % { [byte][Convert]::ToInt32($_, 16) } `
    | % { $b = New-Object Collections.ArrayList } `
        { $b.Add($_) > $null } `
        { [Text.Encoding]::Unicode.GetString($b) }

一番苦労したのは文字列を 2 文字ずつに SubString するところでした。
sed 's/../& /g' とか grep -o .. | xargs とか頭にあると難しい。


せっかく作ったのでこれも。

Q2次のような出力を作ってください。
ひらけ!ポンキッキ
らけ!ポンキッキひ
け!ポンキッキひら
!ポンキッキひらけ
ポンキッキひらけ!
ンキッキひらけ!ポ
キッキひらけ!ポン
ッキひらけ!ポンキ
キひらけ!ポンキッ

一度シェル芸勉強会で作ったことがあったのであっさりでした。

"ひらけ!ポンキッキ" `
    | % { $a=$_;1..$_.Length | %{$a+$a} } `
    | % {$i=0}{ $_.Substring($i,($_.Length/2));$i++ }
3
2
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
3
2