更新されたCodebattle:プログラマー向けゲーム

こんにちは、Habr!







3週間前、私たち( Hexslet教育プロジェクトの友好的なチーム)は、私たちの新しいプロジェクトであるプログラマ向けCodebattleゲームについての投稿を公開しました。 ゲームのアイデアは非常にシンプルであるということを思い出させてください。あなたと対戦相手にはタスクが与えられ、選択した言語でそれを解決します。 対戦相手のコード、テストの実行結果がリアルタイムで表示され、対戦相手とチャットで観客とチャットできます。 最初に問題を解決する人(テストを満足する人)-彼が勝ちました。



記事の公開後、楽しい一日を過ごしました。 私たちはhabraeffectの下でいくつかのバグを見つけました。 嵐が落ち着くと、アリーナで再び命が吹き始めました。 次の2週間で、生産性、不正防止、新しい言語をすばやく追加する機能という3つの主要な問題を解決しました。 そして彼らは決めました!



会う- 更新されたCodebattle ! 要するに:



  1. Habraeffectは私たちにとってひどいものではありません(パパパ)
  2. 不正行為は機能しなくなります(テストにソリューションを適合させることはできません)
  3. 言語の追加が簡単になりました(現在、clojure、ruby、js、python、php、java、erlangが既に存在します)


カットの下の詳細→



なぜ嘘をついたのか、どうやって決めたのか



1分間に数千のリクエストを生成するポーリングを行いました。 これで、すべてがwebsocketを介して書き換えられました。 nkdockerライブラリにもバグがありました。



不正行為と言語



前のバージョンでは、このようなシステムがありました。

  1. Clojureで課題とテストを作成する
  2. マルチコードライブラリを使用してターゲット言語にブロードキャストします。
  3. 生成されたテストをプレーヤーに表示します


当然、問題自体を解決せずにテスト用のコードを単にカスタマイズした人もいました。 さらに、このようなスキームにより、新しい言語を追加することが難しくなりました。



更新されたバージョンには異なるスキームがあります。標準入力/出力ストリームstdin / stdoutを単純に処理し、特定の言語にバインドしません。 現在、検証中にテストを生成し、プレーヤーに表示しません。 システムは非常にシンプルになりました。生成されたデータをプログラムにフィードし、stdoutを確認するだけです。 これにより、新しい言語を簡単に追加できるようになり、Clojure、Java、Erlangを追加できました。



ささいなことから:たくさんの新しいタスクを追加し、すべてのタスクの説明を更新し、 Chrome拡張機能を更新しました。



新しいタスクを追加する方法


新しいタスクをデータベースに追加し、Clojureにアップグレードしますか? ;-) タスクリポジトリには、詳細なREADMEと実例があります。



Slackチャットには特別なチャンネル#codebattleがあり、ゲーム、問題、アイデアについて話し合うことができます。



All Articles