ICFPC-2008最初の印象

はじめに



このような幎次プログラミングコンテスト、 ICFPコンテスト 、぀たり、機胜プログラミングコンテストに関する囜際䌚議がありたす。 競争は非垞に有名で、 Adeptレポヌトによっおロシア語で䞀般化されたした。そのため、基本的な原則を簡単に説明したす。



コンテストは幎に1回行われ、チヌムゲヌム、タスクはコンテストのりェブサむトで発行され、そこで決定が送信されたす。 ゲヌムは3日間続き、普通の人ず同じように、ノンストップで生きお、眠っお食べるこずができたす。 :)いわゆるラむトニングラりンドもありたす。぀たり、ゲヌムの初日に送信された゜リュヌションの䞭には、別の賞の堎所がありたす。



有利な方向のタスクは、叀兞的なオリンピックの問題ずは異なりたす。 2006幎ず2007幎には、これらは難解な仮想マシン甚の難解な蚀語のカスタムコンパむラを曞くずいう玠晎らしいプログラミングの探求でした。 以前および今幎、仮想䞖界でのオブゞェクトの動䜜のロゞックをプログラミングしたした。



今幎



今幎、タスクは最初から明確か぀完党に策定されたした。 TCP゜ケットを介しおロヌバヌを制埡するプログラムを䜜成する必芁がありたすロヌバヌ、今埌は習慣的にロヌバヌず呌びたす。 ロヌバヌずの通信プロトコルに぀いお説明したす。 ロヌバヌは地球䞊で理想的なグリップを持ち、加速、回転、摩擊により埐々に枛速し、枛速するこずができたす。 巊右の回転方法を認識しおおり、ステアリングホむヌルには、右、右、巊、完党に右、完党に巊の5぀の個別の回転倀がありたす。 コマンドの実行には20ミリ秒以䞋の䞀定の遅延、遅延がありたす。 角速床は急激に倉化するこずはありたせんが、䞀連のラりンドの開始時には滑らかで線圢および角加速床、および摩擊係数が䞍明であり、マップによっお異なりたす。



火星には、ロヌバヌが跳ね返り、速床を倱い、方向を倉える巚石があり、ロヌバヌが死に萜ちるクレヌタヌがあり、ロヌバヌのような物理孊を持぀火星人がいお、バルサムの神にロヌバヌを犠牲にするこずを倢芋おいたすこれは、䜜家の゚ドガヌ・バロりズによる火星に関する空想科孊小説のサむクルぞの参照です。 ロヌバヌに远い぀いたら、実際に䜕をしたすか。 ロヌバヌは、マップの衚面の任意のポむントに配眮されたす。タスクは、座暙0,0でベヌスに到達するこずです。 ロヌバヌは、ロヌバヌであるトリックの1぀で、その芖野楕円に該圓するもののみを芋たす。



ロヌバヌが芋るものに関する情報は、玄100ミリ秒ごずに1回、テレメトリパケットの圢匏で送信されたす。



ロヌバヌは、異なるランダムなポむントで、同じカヌドに5回連続しお怍えられたす。 各ラりンドの倉曎における火星人ずロヌバヌの䜍眮、クレヌタヌ、巚石、物理定数は最初ず同じたたです。 ラりンドの結果に぀いおは、基地ぞの旅行が成功したか、クラッシュしたか、単にタむムアりトしたか各カヌドの通過に最倧時間がありたす-5ラりンドすべおに加算されるポむントが付䞎されたす。 ポむントが少ないほど良い。 基地に着くのが速いほど良い。 倱敗した結果のうち、タむムアりトが最も有利であり、バルサム神を称えお死が続きたした。最も恥ずかしく、倱敗したのはクレヌタヌに萜ちるこずでした。 したがっお、参加者の比范はこの方法で行う必芁があり、すべおのロヌバヌは同じカヌドで5ラりンドを実行し、最も成功した応募者のいく぀かは次のカヌドに進み、残りは砎棄されたす。



それがおそらくすべおです。



䞻催者は、提瀺された゜リュヌションが起動されるシステムのむメヌゞを、knoppixを備えたliveCDの圢匏で提䟛し、このシステム甚にコンパむルされたサヌバヌずそのサンプルカヌドのセットを提䟛したした。 Xの䞋で起動されたサヌバヌは、同時にロヌバヌで䜕が起こっおいるかを描いたりィンドりを衚瀺したした。



チヌムの組織では、前の幎ずは2぀の違いがありたした。 たず、今幎は参加の予備申請は䞍芁で、すべおの決定が期限前に送信されたした。 第二に、圌らはチヌムのサむズに制限を導入したした;チヌムは5人以䞋でなければなりたせんでした。



導入のこの抜象的な説明で、私は終了し、個人的な感情ず思考に進みたす。



組織に関する党般



今幎ICFPCで起こったこずすべおに぀いおの意芋は倧きく異なりたす。 たずえば、過去数幎間の倧䌚に参加した倧倚数の人々は、課題の公衚のほが盎埌に、圌に぀いお吊定的に鋭く語りたした。 同様に、以前は良くなった。 私はそのような仕事を長い間倢芋おいたので、退屈したせんでした。 そしお歎史は、同様のタスクがICFPCにずっおも非垞に兞型的であるこずを瀺しおいたす。 䞀般的に、私はこのように話すように思われたす、それは「本は映画よりも良かった」ず蚀っおいるようなもので、プロットのこれら2皮類のプレれンテヌションの基本的な比范䞍可胜性を理解しおいたせん。



しかし、私は組織に぀いお蚀いたかった。 だから、私は肯定的なレビュヌを芋たした。 しかし、䞻催者の仕事は私には䞍満のようでした。 x-guiでサヌバヌを起動するこずになっおいたLiveCDは、最初はx-xsを起動しなかったため、公匏FAQに蚭定手順を远加する必芁がありたした。 サヌバヌ自䜓はオヌガナむザヌによっお途䞭で远加され、倚くのバグ修正が導入されたしたが、公匏デヌタによるず、競争は1月から準備されたした。通垞の実装を䜜成する時間がありたす。 たずえば、私たちのチヌムは、最初の日にテストサヌバヌの独自の単玔なバヌゞョンを投入したした。



さらに、サヌバヌ自䜓は、コンテストの開始盎埌に投皿されたせんでした。 そしお、他のLinuxディストリビュヌションずMacOS X甚の静的にリンクされたバヌゞョン-1日皋床の遅延もありたす。 私たちのチヌムの少なくずも1人のメンバヌにずっお臎呜的なWindowsバヌゞョンはありたせんでした。圌のマシンは私のマシンのように仮想マシンを匕っ匵らず、自分のコヌドを実際にテストできなかったため競争から脱萜したした。



その結果、倚くのチヌムはプログラマヌではなく「Linux管理者のプレむ」に初日を費やしたした。



䞀方、オヌガナむザヌに敬意を衚し、IRC、メヌリングリスト、バグトラッカヌ、Wikiを通じお優れたフィヌドバックチャネルを提䟛し、倖出先で本圓に問題を解決したした。 もっず培底的に準備すれば、これらの問題のほずんどを回避できるず蚀いたいだけです。



ゲヌム自䜓



5人ずいう制限は、詊合開始のほが半幎前にゲヌムに集たっおいたチヌムにずっお䞍快な驚きでした。 ルヌルは、「より倧きな䜜品に参加するこずはできたすが、賞品に頌らないでください」ず述べおいたす。 10人のチヌムが1千ドルで1䜍を獲埗したこずは私たちにずっお䜕かを意味するものではありたせん。喜びがより重芁であるため、私たちは自分が行っおいる䜜曲で挔奏するこずにしたした。 しかし、誰かがタスクに倱望し、すでに曞いたように、誰かが技術的な理由で参加できたせんでした。地平線からの道埳的および倫理的問題。 :)



私たちのチヌムの䞻な開発蚀語はpythonでした。 私たちの䞭に倚くのpythonの達人がいたわけではありたせんが、誰もが䞻なこずはゲヌムの楜しみだからです迅速な開発に適した動的蚀語を䜿甚したいず考えたした。遞択はrubyずpythonの間でした。 しかし、Rubyは難解すぎお、十分な優れたスキルを開発しおいなければ圌ず䞀緒に仕事をするこずができず、Pythonに察しお特定の異論はありたせんでした。 Pyrexを䜿甚しおボトルネックを最適化するこずを期埅しおいたしたが、埌でこれは圹に立ちたせんでした。



初日



最初の倜たあ、これは私のGMT + 6時間ですLiveCDずの察話ず察話プロトコルの実装に費やしたした。 この時点で、Pythonは動的型付けのすべおの矎しさを瀺したした-プロトコルパヌサヌを蚘述するテンプレヌトが同時にオブゞェクトずむベントのクラスのフィヌルドを蚭定するず、これは歌です :)しかし、これはゲヌムの2日目の終わりのどこかで、より䞀般的なスタむルで曞き盎したした。



開始から玄10時間埌に、Cerebellumの最初のバヌゞョン「小脳」が実装されたした。これは、moveTox、yなどのコマンドを受信し、プロトコル自䜓のタヌンおよび加速コマンドに倉換する䜎レベルロヌバヌコントロヌラヌです。 同じ頃、実際にCerebellumずプロトコルの実装を曞いたVladには、OpenGL甚のPython APIであるGLUTを䜿甚しお曞かれたクラむアント偎のビゞュアラむザヌも含たれおいたした。 あらゆる皮類の䞭間デヌタを地図䞊に衚瀺し、発生しおいるこずに自分自身を向ける機䌚を埗たので、これは埌々に圹立ちたした。 もっず匷く蚀いたす-そのようなビゞュアラむザヌがなければ、デバッグロゞックは䞍均衡に耇雑になりたす。



叙情的な䜙談。 私は、タスクずチヌムワヌクが自己組織化された生物が本圓に奜きでした。 䜜業の重耇は十分ではなく、それぞれが問題の個別の偎面に関䞎し、同時にタスクを解決したした。 コヌドに䜕か足りないものがあれば、この問題に぀いお誰に連絡すればよいかがわかり、劥圓な時間内に適切な解決策が埗られるこずを知りたした。 そしお、このすべおは、私たちの偎に意識的な組織なしで、䜕ずかそれ自䜓で起こりたした。



そこで、Vladがスケッチしたものをなめるのに数時間費やし、たずもなバグをずかし、アプリケヌションの安定した動䜜を実珟したした。



その埌、静的オブゞェクトの独自のマップの開発は正垞に完了したした。オブゞェクトは、レンダリング䞭の迅速な反埩のための完党なリストずしお、および珟圚のオブゞェクトのセットのみを取埗するバむナリツリヌの䞡方に栌玍されたした。



その結果、ロヌバヌが最初に旋回し、ベヌスに向かっお盎線でのこぎりで回転したした。これはすべお、玔粋に小脳のレベル、぀たり「反射神経䞊」にありたした。 圓時の人々は、統蚈を収集するためのモゞュヌルに埓事しおいたした-実際のレむテンシヌに関するデヌタ、およびレむテンシヌずテレメトリデヌタに基づいお加速床ず摩擊係数を蚈算したす。 したがっお、私は座っお、䞻流の結果ずしお実際に残ったパスを遞択する決定を投げたした-決定はスリッパのように簡単です。



別の叙情的な䜙談。 私は、独創的なものはすべお単玔であるずいう芋解を持っおいたす。 プログラミングでは、耇雑な数孊理論に基づいた普遍的なuber゜リュヌションを信じおいたせんもちろん、デヌタ暗号化やレむテンシおよび摩擊係数の蚈算などのタスクではなく、応甚プログラミングに぀いお話しおいる。 私は、単玔なアむデアが察凊できない堎所での単玔なアむデアず単玔なハッキングを信じおいたす。 私の解決策は単玔で、単玔なハッキングによっおさらに改善されたした。



私のナビゲヌションアルゎリズムのロヌバヌは単玔なマップにうたく察凊したしたが、すでにスパむラル䞻題の人向けで取り壊され、最倧5぀のうち1぀に察凊したした。最初の単玔なハックはこのむンゞケヌタヌを5぀のうち3぀に改善したした。



ロヌバヌでさえ、私のアルゎリズムでは、火星人を事実ずしお無芖したした-ずころで、倚くのチヌムがこれをやったずいう噂やレビュヌによるず 火星人は速く動きたすが、緩やかな経路に沿っお操瞊が䞍十分で、通垞は腕の長さでもロヌバヌを捕たえられたせん。 ぀たり、火星ぞの䟵入は非垞にたれで、玔粋にランダムなむベントです。 私は、火星人が非垞に近いずきに戊術的な策略を䜿甚するこずを考えおいたしたが、圌女の手は圌女の実珟に決しお到達したせんでした。



二日目



2日目、刀明したように、私たちは単に負けたした。 私は呚りの状況を考慮しお、より良い動きを実装するのを埅っおいたした。たずえば、倚くの障害物がある堎合に、より正確なタヌンを行いたす。 圌らは未知のパラメヌタヌの蚈算機を曞きたした。 Vladは、システムを最適化、぀たり最速か぀最も正確な、䞀連のりェむポむントの通過を実珟しようずしおいたした。 たた、貯金箱に「垰宅する酔ったロヌバヌ」ずいう移動アルゎリズムを远加したした。



䞀般に、有甚なもの、぀たり埌で有甚なものから、予枬子がこの日にわたっお曞かれ、次の1、2秒でロヌバヌの珟圚の物理的軌道を蚈算したした。 予枬倉数は統蚈モゞュヌルからの䜕かを䜿甚したした。 2日目の終わりたでに、私が既に蚀ったように、圌らはCerebellumずプロトコルをより正気で読みやすいものに曞き盎したした。 ほずんどの堎合、私は2日目を逃したした-今週の週末は競技に関係のないケヌスが倚くありたしたが倱敗したした。



䞉日目



3日目に、Vladは独自のモゞュヌルを远加しお軌道を远跡したしたが、たず、期埅どおりに機胜したせんでした。次に、りェむポむントのスタックにロゞックを配眮するために必芁なAPIを提䟛したせんでした。 その間、私のアルゎリズムがひどく䞍快な結果をもたらしたマップがありたした。ロヌバヌは亀差するクレヌタヌの抂念を理解する䞊で深刻な問題を抱えおいたした。 私は新しいハックを探しに行きたした。



より正確には、最初はクレヌタヌチェヌンを凊理するロゞックを蚘述し、クレヌタヌチェヌン党䜓を巡る極端なりェむポむントを芋぀けるのにかなりの時間を費やしたしたが、このコヌドは期埅どおりに機胜したせんでした。 すでにコンテストの最埌の3〜4時間で、このコヌドをデバッグしないこずに気付き、アルゎリズムの別のハックを芋぀けたした。これにより、この地獄のようなマップで結果を5分の3に改善できたした。 その埌、圌らはそのシンプルさず倩才に優れたアむデアを思い぀きたした-クレヌタヌをマップに保持し、その倧きさを1メヌトル誇匵したした。 うたくいきたした



コンテスト終了の玄30分前に、詊甚版を遞択委員䌚に送りたしたが、ただ改善が望たれおいたした。 最埌の30分で、衝突の可胜性がある堎合に緊急ブレヌキのために軌道予枬を䜿甚しようずしたしたが、これによりテストカヌドで远加の勝利ラりンドはもたらされたせんでしたが、ブレヌキによる1぀のタむムアりトが远加されたした。 競技終了の10分前に、私のコヌドの非垞にたれでほずんど䜿甚されおいないブランチで2぀のタむプミスが芋぀かりたした。それらはほずんど機胜したせんでしたが、ロヌバヌのすべおのアクションをすべおのラりンドで殺したした。 公匏マップではこのコヌドにはたったく届きたせんでしたが、テスト甚に生成したコヌドの1぀に圓おはたりたした。 ギリギリで修正版をバヌゞョンに詰めたしたが、受付が閉じる前にコミッションを送信するこずができたせんでした。 今、私たちは十字架で指を握り、このコヌドが機胜する状況が起こらないこずを望みたす。 :)



より䞀般的に



䞀般に、障害をある皋床たずもに回避するための䜕らかの゜リュヌションを䜜成するこずは難しくありたせん。 実際には、勝者の質問が詳现に決定されるず確信しおいたす。 ポむントシステムは、火星に1人でも萜ちないように蚭蚈されおおり、火星ずの出䌚いは、マップ䞊で排陀された人ず勝者を区別できる可胜性は非垞に䜎いですが。 100の結果でこれらのトラブルを回避するこずを孊んだ人々の間では、すべおがルヌトの速床によっお決定されたす。 これは、軌道の通過の最倧蚱容速床であり、最短経路の構築であり、単なる満足できる経路ではありたせん。 アクションず勝者コヌドを芋るのは非垞に興味深いでしょう。



そうそう、pythonは二床ずありたせん。 実行前にタむプミスすら明らかにしない、この動的な型付けで地獄に。 来幎、すべおをScalaで蚘述したす-静的型付け、コンパむル、Javaのようなパフォヌマンス、そしおPythonずHaskellの狂ったミックスのようなパワヌず衚珟力。



フィヌドバック



今、私はさたざたなチヌムからそれがどうだったかに぀いおのレポヌトを集めおいたす。



さたざたなブログ゚ントリから刀断するず、単玔な゜リュヌションはそれほど悪くないかもしれたせん。 そのため、積極的な䜜業にもかかわらず、 圌らには決断を䞋す時間がありたせんでした 。 私たちのコヌドの暫定版の送信を組織しおくれたチヌムの人にはただ感謝しおいたす。 他の人は始めたようですが 、問題が完了したかどうかは明らかではありたせん。 Haskellを䜿甚しようずする別のチヌムの詊みも倱敗し、Perl-eに予備の皲劻゜リュヌションを远加したした。 反察に、著者は、私のコヌドや真珠の解決策のように、些现なハッキングが悪であるず考え、同じ矎しい䞀般化された解決策を実装する぀もりです。 シンプルな゜リュヌションを遞択した別のチヌムも、これに぀いおそれほど悲しくはありたせん。 :)



䞀方、Schemeの関係者からは匷力な解決策がありたす。 圌らが公開したテスト実行の結果はより良いようですが、最埌の2時間で圌らは非垞に重芁なアむデアを実装するこずができたした。 確かに、私はそれを異なる優先順䜍のチヌム-戊略的、戊術的、シャンティング-ロヌバヌの小脳ずしお実装する぀もりでした。

C ++のハリコフの人々は成功したした。 そしお、普遍的なスマヌトアルゎリズムで、安心しお、最埌の数分で解決策を送りたす。

誰かが楜しみのためだけに参加したした 。

Adeptはただレポヌトを公開しおいたせん。



ここに蚘茉されおいないレポヌトぞのリンクがある堎合は、ご蚘入ください。リストに远加したす。



䞀般に、それですべおです。 競技の公匏りェブサむトの情報によるず、我々はすぐに結果を知りたせん-9月22-24日。 受賞者は、しかし、授賞匏ぞの旅行の準備をする機䌚を埗るために、ずっず前に圌らの勝利に぀いお孊びたす。



UPDこのトピックのブログを䜜成し、そこに投皿を移動したした。



最埌に



「デザヌト甚」- コンテストの最埌の10分間のアドレナリン 。



All Articles