ザ・ファースト・スーパー・ゴルファー

はじめに

RubyKaigi 2013 の TRICK を見てたら、leonid さんが「The 1st super Ruby golfer」と紹介されてました。「ザ・ファースト・スーパー・ゴルファー」なんて名乗れたらかっこいいですよね。

「The 1st super Ruby golfer」のリンク先を見てみると Anarchy Golf の User ranking。というわけで、Anarchy Golf の User ranking でトップならザ・ファースト・スーパー・ゴルファーを名乗ってもよさそうなので、各言語のザ・ファースト・スーパー・ゴルファーを調べました。

コード

#!/usr/bin/python
# coding: UTF-8

from urllib import urlopen
import re

print '| Language | User | Score | Entries | Avg | # of 10000 |'
print '|----------|------|-------|---------|-----|------------|'
LangAll = re.findall(r'<dt>(.*?) \((.*?)\)</dt>', urlopen('http://golf.shinh.org/version.rb').read())
for Lang in LangAll:
    try:
        RankHtml = urlopen('http://golf.shinh.org/u.rb?' + Lang[1]).read()
        TheFirst = re.search(r'<tr><td>1</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td><td>(.*)</td></tr>', RankHtml).groups()
        print '| ' + Lang[0] + ' | ' + ' | '.join(TheFirst) + ' |'
    except:
        pass

ザ・ファースト・スーパー・ゴルファー

Language User Score Entries Avg # of 10000
A+ teebee 558979 56 9981 55
Ada D 661916 67 9879 62
Arc youz 1283203 131 9795 109
Asymptote teebee 800000 80 10000 80
AWK nn 2500488 251 9962 236
Bash eban 1882445 205 9182 136
BASIC pooq 2743557 289 9493 183
bc teebee 819155 82 9989 80
Befunge kaki 766984 80 9587 62
Brainfuck g33k 490000 49 10000 49
Burlesque clock 1030000 103 10000 103
C inaniwa 2893640 306 9456 161
C# teebee 619055 62 9984 58
C++ nn 384529 39 9859 32
CLC-INTERCAL @tttttanaka 50000 5 10000 5
Clojure murky-satyr 939380 95 9888 80
COBOL *yuko* 1080000 108 10000 108
Common LISP kozima 3365842 340 9899 297
Curry pooq 229310 23 9970 22
Cyan pooq 403462 43 9382 26
D 51b 1844169 185 9968 174
D-compile-time 51b 255439 26 9824 23
dc tails 716177 72 9946 68
DOS *yuko* 280000 28 10000 28
Erlang 51b 1377880 138 9984 132
Euphoria clock 390000 39 10000 39
FerNANDo primo 126060 13 9696 11
fish teebee 438000 44 9954 43
FlogScript milieu 874258 88 9934 83
Forth 51b 955853 96 9956 91
Fortran *yuko* 2809454 281 9998 280
gas breadbox 60000 6 10000 6
gnuplot @tttttanaka 101250 11 9204 10
Go uru 575464 58 9921 51
GolfScript tails 1802642 182 9904 166
goruby murky-satyr 1725865 176 9806 142
Grass irie 64250 7 9178 6
Groovy nn 4309792 440 9794 327
Haskell notogawa 3666047 370 9908 323
Icon clock 1258190 126 9985 123
Io pooq 2792552 286 9764 226
J pooq 3537548 371 9535 275
Java teebee 1367159 137 9979 130
JavaScript nn 4400300 447 9844 359
JVM teebee 50000 5 10000 5
K twobit 1223332 124 9865 104
Kite teebee 529249 53 9985 49
Lazy-K irori 313335 35 8952 21
LilyPond KirarinSnow 390000 39 10000 39
LMNtal pooq 200000 20 10000 20
Logo teebee 1313322 132 9949 126
Lua twobit 1674140 169 9906 139
m4 51b 432846 45 9618 42
Malbolge test1 50000 5 10000 5
Maxima pooq 2834479 292 9707 235
Mind pooq 449342 45 9985 44
Minus flagitious 163724 17 9630 13
Nemerle clock 510000 51 10000 51
ObjC teebee 140000 14 10000 14
OCaml m.ukai 1952889 208 9388 134
Octave inaniwa 776944 78 9960 72
PARI/GP clock 898619 90 9984 86
Pascal uru 2310517 237 9749 182
Pefunge kt3k 46923 5 9384 4
Perl teebee 2902302 293 9905 250
Perl6 murky-satyr 423697 43 9853 39
PHP clock 1590435 163 9757 130
Postscript yshl 2586072 264 9795 206
Prolog pooq 1319575 133 9921 121
Python hallvabo 5038798 521 9671 328
Python3 teebee 70000 7 10000 7
QCL pooq 572082 60 9534 46
R pooq 2031577 212 9582 155
REBOL clock 959733 96 9997 95
REXX clock 903215 91 9925 83
Ruby leonid 4686062 475 9865 403
Scala murky-satyr 964080 98 9837 86
Scheme kaki 2547117 257 9910 228
sed eban 1295561 139 9320 95
Smalltalk murky-satyr 1265845 129 9812 104
SNOBOL clock 830000 83 10000 83
Tcl clock 930000 93 10000 93
Universal Lambda hinoe 290000 29 10000 29
Unlambda irori 623630 65 9594 57
VHDL mskzzzz 167508 17 9853 13
vi nn 2268696 239 9492 146
wake clock 868857 87 9986 86
Whirl yowa 89846 9 9982 8
Whitespace flagitious 189583 19 9978 18
x86 shinh 70281 8 8785 6
xgawk teebee 788324 79 9978 77
Xtal pooq 1631760 168 9712 123
z80 *yuko* 1854981 186 9973 181
Zsh teebee 479549 48 9990 47

まとめ

私は「The 1st super C golfer」と「The 1st super Octave golfer」を名乗ってもいいことになりました。 最近、CodeIQ というサイトでも「上級ショートコーダー」バッジをもらったので、いろいろ名乗り放題です。

まあ

This ranking is not fair (especially for new comers). Please don't consider this so seriously, the intention of this ranking is to show how eager you are golfing :)

なので、参考までに。

羽生さんが駒を一度も後退させずに勝った対局

はじめに

先日、第2回電王戦の第1局を見に、ニコファーレに行ってきました。

そのとき、聞き手の矢内さんが「羽生さんが駒を一度も後退させずに勝った対局ある」というお話をされていて、 会場は90へぇくらいの雰囲気になっていました。

ただ、具体的にどの対局という話はなく、矢内さんも「間違ってたらごめんね☆」という感じだったので、 実際に調べてみました。

使ったもの

2ちゃんねる棋譜

Blunder.Converter

Python 2.6.8 (Cygwin)

方法

駒が後退したかどうかを判定するのにはCSA形式が都合がよさそうだったので、 Blunder.Converterを使用して、2ちゃんねる棋譜のKI2形式をCSA形式に変換しました。

その後、最近勉強中のPython棋譜を抽出するコードを書きました。

コード

#!/usr/bin/python
# coding: UTF-8

import os
CSA_DIR = './2chkifu.csa/'

for csaFile in os.listdir(CSA_DIR):

    # ファイルの読み込み
    csaStr = open(CSA_DIR + csaFile).read()

    # 羽生さんの棋譜か
    if 'N+羽生' in csaStr:
        habuMove =  1   # 羽生さんが先手
    elif 'N-羽生' in csaStr:
        habuMove = -1   # 羽生さんが後手
    else:
        continue

    # 羽生さんの勝ちか
    csaLines = csaStr.split('\n')
    if '%TORYO' not in csaLines:
        continue
    toryoIndex = csaLines.index('%TORYO')
    preToryo = csaLines[toryoIndex - 1][0]
    if (habuMove == 1 and preToryo == '-') or (habuMove == -1 and preToryo == '+'):
        continue   # 羽生さんの負け

    # 駒が後退していないか
    if '+' in csaLines:
        startIndex = csaLines.index('+')
    else:
        continue
    startIndex = startIndex + 1 + (1 - habuMove) / 2
    backFlag = 0
    for n in xrange(startIndex, toryoIndex, 2):
        if csaLines[n][2] != '0' and int(csaLines[n][2]) * habuMove < int(csaLines[n][4])* habuMove:
            backFlag = 1   # 駒が後退した
            break

    # 結果の表示
    if backFlag == 0:
        print csaFile

出力結果

00311.csa
00685.csa
01600.csa
06521.csa
07639.csa
35267.csa
45018.csa

結果を詳しく

まとめ

見つかっても1局くらいなのかなと思っていたのですが、意外と多かったです。 結果を見てそりゃそうかと思ったのは、比較的短手数の対局が多かったことです。

追記 (2013-04-10)

駒落ち(CSA形式で手番が'-')の棋譜の処理が間違っていたので、その棋譜は無視するようにコードを修正しました。 結果は変わりません。

■■■株式会社を退職しました

ご報告

 この度、■■■■■■■■■、■■■■■■■■■■■■■を退職しました。

振り返って

 入社したのは■■■■■■■■■、■■■■■■■■■■■■■■■■■■■■■でした。また、■■■■■■■■■■■■■■■■■■■■■■■■■、■■■、■■■■■■■■■■。■■■■■■■■■■■■■■■■■■■■■■■■■。

 その後、■■■■■■■■■■■■■■■■■■■■■■■。■■■■■■■■■配属になり、■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■、■■■■■■■■■■■■■。■■■、開発の■■■■■■■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■■■…。

 ■■■■■■■■■■、■■■■■■■■■■■■■■■■■■■。ところが、■■■■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■■■■■■(笑)。■■■■■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■。■■■■■■■■■、■■■■■■■■■■■■■■■。

 ■■■! ■■■! ■■■! 

 ■■■■、■■■■■■■■■■■■■■。■■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■? ■■■■■、■■■■■■■■■■■■■■■思い出です。

退職の理由

 やはり、■■■■■■、■■■■■■■■■■、■■■■■■■■■■■■■。■■■、■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■。やはり、■■■■■■■■■■■■■■■■■■■■■。■■■■■■■■■■■■■■。

 ■■■。やはり、■■■■■■■■■■■■■■■■。■■■■■■■■■■■■■■■■■■■■■■■■■■、■■■■■■■■■■。■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■。やっぱり、■■■■■■■■■■、■■■■■■■■■■■■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■■■■■■。

■■■■■■

  • ■■■■■■■■■■■■■■■■■■■■
  • お~い■■■■■■■■■■■■■■■、■■■■■■■
  • ■■■■■■■■■■、■■■■■■■■■■■■■■■■■■■■■

これから

 既に、■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■■■■■■■■■■。■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■。

 「■■■■、■■■■■■■■■■■■■■■■。」

 ■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■■■■、と。■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■、■■■■■■■■■■■■■■■■■■。今後とも、よろしくお願いいたします。

お断り

退職時に秘密保持に関する誓約書を提出しているため、一部伏字にしてあります。