どのようにサプカコンテストを襲ったか、パート1

数日前、Sapkaのニュースを逃した人々のために、Sapkaコンテストの週は終了しました-これはICFPCコンテストの類似物として作成されたプログラマーの競争ですが、ネットワークのロシアとウクライナのセグメントのためです。



ICFPCの意思決定プロセスについて読むことは常に非常に興味深いので、このような一人称レポートを書く機会を逃すことはできません。コンテストで7位になった小さなけれど誇らしい最小チームからのコンテストの高さの嵐についてのストーリーの最初の部分に会ってください:)







初日

ミニムチームがコンテストルールを理解し、最初のステップを実行します



したがって、サイトstanfy.com.ua/contestの 19-00 GMT + 3には、コンテストに関する情報が表示されます。 参加を開始するには、変更されたJavaコードで記述されたサーバーをダウンロードし、最初にキーのセットを受け取ってから、sapkaデバイスロジックを実装してみてください。 sapkaとは何か、キーを取得する方法と場所、キーが必要な理由は完全に理解不能です。



サーバーがゆっくりダウンロードしている間に、IRCクライアントを開き、sapkaチャネルに接続します。sapkaチャネルでは、サーバー内部の議論が既に活発に行われています。 サーバーを開梱して起動し、指示に従って、telnetでポート20015に接続し、サーバーの招待とチームチーム名の形式でチーム名を示す要求を確認します。

すぐに言ってやった。 結果はゼロです。 さらにいくつかの試み-同様に。 そこでIRCに切り替えますが、この問題はすでに活発に議論されています。各コマンドの先頭にセミコロンを追加する必要があることがわかりました。 システムが登録の成功を報告し、別れのメッセージを発行すると、 memconfigコマンドを使用してデバイスのメモリの構成を開始することを提案することを示します

そして、これが最初のタスクです。起動用のmemconfigはパスワードを要求します。 それをどこから手に入れるか、サプカ、神、性別、愛、パスワードなどがどこで戦うかは完全に理解できません。 結果はゼロです-そのような速いプラグで硬くなる。 実りのない試みでは、パスワードも「 ; 」で始まる必要があることが突然明らかになると、ほぼ1時間が経過します。 さて、すべてのパスワードを新しいものと繰り返し、 パスワードが適切です。 まあ、完全に論理的なパスワード。 失われた時間は非常に哀れです。 「新しく壊れた」システムでは、 enginelexinterprの 2つのタスクを試してみることができます。



ここに悲しいニュースがあります。 Javaに精通した参加者は、元の(つまり、非標準の)Javaコードを通常のブートローダーに置き換え、トークン(つまりキー)のセット全体を受け取り、競技の最初の1時間ですべての問題を実際に解決しました。 もちろん、これは非常に残念なことでした。Javaのプログラマーのコンテストではなく、プログラマーのコンテストに参加したかったからです。 競争をやめたいという願望がありましたが、...タスクが面白そうだったので、何かが止まりました。 しかし、気持が良いから-キーの総数が明らかになりました。



ブートサーバーをバージョン1.1に更新し、 lexinterprに進みます。 明らかになったように、これは、sapka-gameモードで実行した場合にサーバーから送信された情報を解読できるユーティリティであり、解読されたデータの量は、既にアクティブになっているトークンの数にも依存します。 さらに、復号化の現在のデータとして、膨大な数のビリヤードがロードされます。 幸いなことに、行の最後の部分には明確な情報が含まれています。 この行から、最後に記号でマークされた理解可能な部分を順番に切り出す必要があることが明らかになります! および*および指定された変換を実行します。 最初のステップでは、これは3文字ごとに実行されます。



操作を実行する10行のpythonプログラムがすぐに作成されます。次のタスクは出力ですが、重要な文字を取得するためのルールが変更されました。 繰り返し、6回または7回繰り返し、トークンの最初のペアの出力と、ルールを異なる方法で解釈できるというメッセージが表示されます。 これは実際には間違っていることが判明したが、多くの参加者がかなりの時間を費やした伝説的な目に見えない2番目のトークンペアを引き起こしたことに注意する価値があります(そして私たちは:)を含みます)。



インタープリターのソリューションにより、 dnalabsattelitefiveaarclockのタスクセット全体にアクセスできます。



しかし、私はこれらのタスクを翌日まで延期し、 エンジンの解決策を進めます。 エンジンは 、起動後に「 Caesar-1-3ci.5p5-h.23e.r ''-'〜'」のバージョンを通知し、別の暗号化されたテキストを発行します。 Caesar暗号ラインは、バージョンから表示されます。 シーザーの暗号と記憶は、これがシフト暗号化であることを示唆しており、ウィキペディアによって確認されました。 わかりました、さらに10分、次のpythonスクリプトがすべての可能なシフトでテキストを実行します。 ここでは、すべてがそれほど単純ではないことが明らかになります-大文字のみが解読され、テキストには1行しかありません。 プログラムまたは作業のロジックでエラーを見つけようとするのにさらに1時間かかります。答えは見つかりません。また、何らかの方法でエンコードされた文字Yの形のヒントでさえも役に立ちません。 残りのテキストを頻度分析で調べ、独自の翻訳辞書を用意して、文字ごとにテキストを収集し始めます。 頻繁に発生する文字の代わりに、「a」と「e」を置き換えて一般的な単語を推測しようとするのではなく、作業は高速になりません。 それから文字を置換し、単語が正しく認識され、より多くの単語を解決できるように、テキストを介してスクリプトを実行します。 ほぼ2時間後、テキストは降伏して、さらに2、3個のトークンと、起動中のゲームのルールを公開します。



各チームの最終タスクは、ボンバーマンのクローンのAIを作成することであることがわかりました。 テキストには、爆弾でオブジェクトを爆発させるための受信ポイントと、爆弾の移動/設置のためのコマンドが含まれています。



これで、最初の日は時計の4時に終わります。



二日目

ミニムチームは、悪意のあるウイルスのチェッカーを失い、ブレインウォッチとクロックで頭を壊します



だから、私は衛星の通過を侵害している -衛星は邪悪なウイルスを捕獲し、 それでチェッカーをプレイする必要があります。 必要な場合は、プレイします。唯一の問題は、最初の動きの後に競技場が視覚化されないことで、その動きをエクセルでマークする必要があります。 一方、ゲームが独自のキャッチを持っていることが明らかになります(ウイルスの悲惨な叫びから)。 しばらくして、 魔法使いの指揮官はそうであると報告し、ウイルスに勝つことは何ももたらさず、おそらく景品をプレイする必要があります。 私はExcelでの私の方法がフラッシュチェッカーほど効果的ではないことを理解しており、 時計を解決し続けています。



後で明らかになるように、 クロックは 、多くの参加者が長い間、悪意を持って誓ったタスクの1つです。 本質的に単純で、多くの人が意思決定に1時間以上費やすことを余儀なくされました。



そのため、タスクはベースクロックと拡張クロックルーチンの2つの問題を解決することです。 2番目から、XORが何らかの形でタスクに表示されることが明らかになります。 初期データは、 \ 0 \ 39 \ 34 \ 20 ... (明らかにASCII文字コードをエンコード)という形式の文字列と「私が来た、見た、征服した」というフレーズです。

Caesarの声明で元の行を代理化する最初の試みは成功につながりません。 これに続いて、アルファベットのすべての文字をプロキシ化する試みが行われます。 次に、「Veni、vidi、vici」というフレーズ。 その後、42。すべての結果なし。 IRCでは、問題を解決する人々は、進行中の人々をゆっくりからかい、完全に単純なキーについて話します。



夕方までに、タスクは単純ではありますが、解決方法を理解することが不可能であることが明らかになります。 次に、素晴らしいアイデアが生まれます。異なる名前のチームに与えられた行を取り(そしてトークンはチームの名前に依存します)、異なる部分を見つけ、すべてのトークンがCFGで始まり固定長であるという事実に基づいて、XORの最初の3文字を決定します。



5分後、私はヒステリーで戦い始めました。 コードワード「 Cae 」の最初の3文字。 Xorの不運なラインCaesarと別のトークンを取得します。 基本部分は解かれていますが、解読された行には分析用の別の行が含まれています。 幸いなことに、すべてがすぐに非常に簡単になります-長さはトークンと等しく、最初の3文字は0です。受け取ったトークンで行を詐欺し、2番目のトークンを取得します(最初の3つの0はCFGであることが示唆されています。 xor 000 = CFG)。 時計は解かれ、IRCに行き、未定の苦痛をたどることができます。



時計による苦痛の終わりの少し前に、 魔法使いは2番目の良いニュースをもたらします-邪悪なウイルスはあきらめました、そして、 arも解決されました。 これを行うには、衛星からウイルスのアドバイスを受けてオペレーターを交換し、インタープリターインタープリターで結果のプログラムを実行し、別のプログラムを取得して実行し、最後にトークンを見つける必要がありました。 実際、このタスクはウイルスの助けを借りなくても簡単に解決でき、多くの人にとっては不要であると思われました。 言語演算子に精通した人のための最初の頭脳のコードは、最初の演算子の許容記憶を海外に行くという形ですぐにヒントを与えるでしょう。



真夜中過ぎに再び時計の上で、私たちは眠りにつく。



All Articles