SECCON CTF 福岡大会に参加してきた。


 

\ておくれた/

 

IMG_0847

 

どうも、久しぶりにおかしいチームでがんばってきました。

ちょっと説明しておくと、

CTFとは、世界各地で開催されている著名な旗取り合戦競技(Capture The Flag)のことで、セキュリティ技術を競うコンテストの総称です。

http://www.seccon.jp/

ということ。

要は、セキュリティ方面を日本でも伸ばしましょう! ということで開催されたのが、
今回の SECCON CTF ということになるわけです。

 

チームのメンバは、ておくれなひと、イケメンなひと、お茶くみ担当 x2
わさお、まひるんちゃん、かーみーさん、私の4人組です。

チーム名は: wasamusume and mi17u

この記事の執筆時点で、チームメンバの記事としては、

まひるんちゃん : SECCON CTF 九州地区予選  – おもちゃ箱
http://toooybooox.blogspot.com/2012/02/seccon-ctf.html

かーみーさん : SECCON CTF 福岡大会に参加してきた – かーみーのチラ裏
http://diary.carme-ln.net/2012/02/22/seccon-ctf-fukuoka/

わさお:土日月まとめ
http://blog.twiwt.org/e/8a4267

たぶん、併せて読んでいただけると、おもしろい感じが伝わってきそうな。

 

結果は、
http://www.seccon.jp/2012/02/1seccon-ctf.html
ここに掲載されていますが、第4位。

ておくれていたのに、「実はておくれ度合いはそこまでひどくなかった」というのが結果でした。

このCTFは学生向けなので、学生のみランキングに並べられますが、
社会人チームがとてつもなく強かったです。

 

自分たちのチームの特徴としては、
本来妨害のために流される音楽やアナウンスに全力で乗るというところでしょうか。

もうそれ、普通の人ならば「妨害されている」と言うことになりますが、
むしろこっちのチームの場合、ああいう音があればあるほど、パフォーマンスが上がります。

ほかのチームは無音ならパフォーマンスが上がり、
うちのチームは無音だとパフォーマンスが下がる。

やっぱり、ておくれなんでしょうか。

 

とりあえず、もって行ったのはノートPC3台

まひるんちゃん用 VAIO と、私用VAIO と Mac

次回は是非とも VAIO 2台でお話がつくように構成したいものですね。
いあ、Mac がめちゃくちゃ重かった OTL

 

チームメンバでお風呂に入りに行ったり、夜通し問題解き続けるとか、

足くすぐってみるとか。お風呂でばしゃばしゃしてみたり。

まー、中学生の修学旅行みたいな感じがありましたが、
それはそれで好きなノリだったのでよかったかなと。

 

次回もこういうのがあったら、また突撃したいなと思います。

今回のCTFでは、
それぞれがそれぞれの利点を生かしてベストパフォーマンスを出せたんじゃないかなと。

終わった後にみんなでにっこにこしてるのが一番いいなぁと思います。

 

最後に。
公開しても問題ないであろう範囲で、解いた問題をひとつ。

https://gist.github.com/1862598

2以上30以下の素数は次の10個です。

2 3 5 7 11 13 17 19 23 29

これらの素数の中で一番多く出現する数字は1で、5個出現します。2番目に多く出現する数字は2と3がそれぞれ3個ずつ出現します。

2以上10000以下の素数は1229個あり、それらの素数の中で一番多く出現する数字の個数は1の681個です。また2番目は3の677個、3番目は7の652個です。

2以上1億以下の素数は5761455個ありますが、この中で3番目に多く出現する数字の個数はいくつでしょうか?

私はこれを C# で総当たりで求めました。

github に上がっているコードでは、既存のリストをもってきましょーね っていう形らしい。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        long[] counts = new long[10];

        foreach (char c in Primes(100000000).SelectMany<int, char>(x => x.ToString().ToCharArray()))
            counts[c - '0']++;

        for (int i = 0; i < counts.Length; i++)
            System.Console.WriteLine("" + i + " - " + counts[i]);
    }

    static IEnumerable<int> Primes(int maxnum)
    {
        int[] primes = Enumerable.Range(0, maxnum + 1).ToArray();
        primes[1] = -1;
        int squareroot = (int)Math.Sqrt(maxnum);
        for (int i = 2; i <= squareroot; i++)
        {
            if (primes[i] > 0)
                for (int n = i * 2; n <= maxnum; n += i)
                    primes[n] = -1;
        }
        return primes.Where(n => n > 0);
    }
}

エラトステネスのふるいで求めました。
http://gushwell.ifdef.jp/etude/PrimeNumber.html

よく RSA 暗号とかが話題に上るときに出てくる用語ですが。

 

とりあえず、実行すると、
image

ということで、1億までは5秒ほどで計算が完了するので、
あとは数え上げるだけー。

ってことで、今回の場合の回答は3つめということですから、

5443074

これが答えになるという感じです。

 

ということで、たのしかったです!


 

関連記事