銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Microsoft Q# Coding Contest Summer の解説が公開されています

先週土曜から月曜にかけて開催された Microsoft Q# Coding Contest — Summer 2018 が終了しました。自分は2問しかとけなかったのですが、解説が公開されています。

codeforces.com

解説本体はPDFで公開されています。

https://assets.codeforces.com/rounds/997-998/main-contest-editorial.pdf

Microsoft Q# Coding Contest warmupラウンドの自分の回答を公開しています

Microsoft Q# Coding Contest warmupラウンドが終了して結果として私は107位でした。自分にとってはたぶんこれが初めてのオンラインプログラミングコンテスト参加だったと思います。

f:id:tanaka733:20180704190050p:plain

また問題も公開されているようです。 codeforces.com

というわけで自分が提出した回答をGitHubに公開してみました。 github.com

問題そのものの解説はすでにあるようなので、

smijake3.hatenablog.com

最初の問題を例にどうやって実行したかを説明してみます。問題としては、状態{|0 \rangle}であるQubit型の引数qと1か-1であるInt型の引数signに与えられ、signが1であればqを{| + \rangle = \frac{1}{\sqrt{2}}(|0 \rangle + |1 \rangle)}、-1であればqを{| - \rangle = \frac{1}{\sqrt{2}}(|0 \rangle - |1 \rangle)}に変化させるoperationを記述するというものです。引数で渡された状態を変化させるため、このoperationは返り値を持ちません。

先日のエントリで書いた通り、QubitはC#のDriverクラスでは生成できないので、もうひとつQ#のoperationを作成し、その中でQubitを生成、operationを実行、実行した結果を確認、という手順を踏みます。というわけで、テスト用のQ#コードはこのようになります。

namespace Solution
{
    open Microsoft.Quantum.Primitive;
    open Microsoft.Quantum.Canon;
    open Microsoft.Quantum.Extensions.Diagnostics;

    operation Test() : () 
    {
        body 
        {
            using (register = Qubit[1])
            {
                let q = register[0];
                DumpMachine("dump-initial.txt");

                Solve(q,-1);
                DumpMachine("dump-0.txt");
                Reset(q);

                Solve(q,1);
                DumpMachine("dump-1.txt");
                Reset(q);
            }
        }
    }
}

usingでQubitを初期化、(必要はないですが)配列のindex0のQubitを変数qとしています。DumpMachineは引数にファイルパスをとって、そのパスにQubitの状態を出力します。Solve operationを実行したあと、DumpMachineで状態を出力、Resetで再度初期化を行っています。DumpMachineの出力結果は次のようになって、期待通りのoperationを記述できたことがわかります。

dump-initial.txt

Ids: [0;]
Wavefunction:
0:  1   0
1:  0   0

dump-0.txt

Ids: [0;]
Wavefunction:
0:  0.707107    0
1:  -0.707107   0

dump-1.txt

Ids: [0;]
Wavefunction:
0:  0.707107    0
1:  0.707107    0

まじめに測定するコードを書いてもいいと思うのですが、デバッグ目的ではDumpMachineがかなり便利でした。 Microsoft Q# Coding Contestの本戦は土曜1時(金曜深夜25時)からなので、W-cup観戦の合間にいかがでしょうか。

Microsoft MVP を再受賞して、カテゴリがAzureになりました

TwitterやFacebookではすでに報告してお祝いのコメントももらっていますが、今年もMicrosoft MVPを更新できました。この場を借りてお礼させていただきます。MVPとはなんぞやというのはこちらにあります。

Microsoft MVP Award

最近になって、MVPの新規受賞は毎月(申請も毎月)なので、定期的に受賞された方が増えているのですが、すでに受賞している人の更新はまとめて7月に発表されるため、SNSで大量に言及される事態になっています。

私自身は、ここ1~2年は .NET Core/C# に加えて、コンテナ関連技術やLinuxを中心にAzureまわりの技術をテーマにしたブログや登壇もしていたので、AzureとVisual Studio and Development Technologies(VSDT)という2つのカテゴリで申請しました。審査の結果、去年まで受賞していたVSDTは申請が通らなかったため、更新した上でVSDTからAzureに移動という形になりました。カテゴリわけについてはこちら。

MVP Award Update - Oct 2015

とはいえ一番好きな言語はC#ですし、コンテナ上やLinux上での利用を中心に.NET Core/C#の技術情報も引き続き発信していければと思います。仕事上の必要にせまられてというケースがほとんどなんですが、最近は次のような技術を追いかけています。

  • .NET Core/ ASP.NET Core (コンテナ上での利用を中心に)
  • kubernetes on Azure (あるいはOpenShift on Azure)
  • Linux on Azure (仮想マシン管理を中心に)
  • SQL Server on Linux (特にRHEL、Azure上のRHELやkubernetes上でのAlwaysOn AGも)
  • Linux/kubernetes on Azure Stack (Linux/kubernetes管理者視点でどのようにAzure Stackを利用するか)
  • Windows Server Node in kubernetes
  • Q# (Microsoft Quantum/トポロジカル量子コンピューター)

(これらはさっきのカテゴリ分類みると、ばらばらなカテゴリなので来年どうなることやら)

活動内容は去年に引き続き、ブログでの情報発信やコミュニティイベントでの登壇ですので、もしこれらの技術について話してほしいという要望があればぜひお声掛けください。去年福岡に行ったので、首都圏以外も機会があればぜひ登壇したいと思っています。大きめのイベントでの登壇もやってみたいなあと思い、CFPも出していたりします。 それ以外の例えば雑誌や書籍の執筆なども機会があれば(もらえれば)ぜひやりたいですね(というのを毎年言っている気がする)

今年も一年よろしくお願いします。