Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「農家は Replace() されました」で始める競技プログラミング!

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for nagise nagise
January 06, 2026

「農家は Replace() されました」で始める競技プログラミング!

Burikaigi 2026 Day2 余興のモブプログラミング。
プログラミングゲーム「農家は Replace() されました」のエンドコンテンツであるリーダーボードを会場のみんなとモブプログラミングしてスコアを競います。

Avatar for nagise

nagise

January 06, 2026
Tweet

More Decks by nagise

Other Decks in Technology

Transcript

  1. 1 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 「農家は Replace()

    されました」   で始める競技プログラミング! 2026.01.10 Burikaigi day2 株式会社クレディセゾン エンタープライズ開発センター なぎせゆうき @nagise
  2. 2 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 自己紹介 富山県出身 富山市在住

     株式会社 クレディセゾン  株式会社 凪瀬アーキテクツ 主なジャンル • Java言語仕様 ◦ https://docs.oracle.com/javase/specs/index.html • 書籍 Effective Java の解説ポッドキャスト Tsundokanai Radio ◦ https://podcasters.spotify.com/pod/show/dokanai/ • Javaのジェネリクス • 日本の旧暦のライブラリ (開発中) • Blog : プログラマーの脳みそ • Burikaigi (富山で1月~2月頭で行われるカンファレンス ) なぎせゆうき X (Twitter) @nagise
  3. 3 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 今日やること •

    モブプログラミングをやります ◦ 複数人のメンバーが同じ場所、同じコンピュータ・ 画面でプログラミングを行う開発手法 • 対象はゲーム「農家は Replace() されました」のリー ダーボード ◦ ドローンにPython風コードで指示を出し農業(?) をするゲーム ◦ リーダーボードはエンドコンテンツで課題を如何 に速く解けるコードを書くことができるかを競う ◦ いわゆる競技プログラミング • モブプログラミングでワールドレコードに迫ろう!
  4. 4 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL ルール •

    課題 : Leaderboards.Hay_Single ◦ Hay = 干草を100,000,000集める時間を競います ◦ マップサイズは8x8 ◦ ドローンの個数は1個限定 ◦ 一番シンプルな課題 • 会場にいる「農家は Replace() されました」のHay_Singleのランカーの人は、会場の みんなで書いたコードのスコアが自己ベストを上回るまで ネタバレ厳禁 ◦ アルゴリズムや高速化のアイデアは口出し厳禁 ◦ 一般的な質問、ゲームシステムについての質問への回答は可 ◦ 経験者、ランカーの人は名乗り出るように
  5. 5 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL ランキング状況 2025年12月18日にゲームバランスの調整が行わ

    れてリーダーボードがリセットされた 2026年01月06日現在のHay Single の状況 トップタイムは 02:48.619
  6. 6 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 主要な組み込み関数 •

    harvest() ◦ ドローンの下にあるエンティティを収穫します ◦ 収穫成功時は True それ以外の場合は False を返す ◦ 収穫成功時は 200 tick、それ以外の場合は 1tick • can_harvest() ◦ 植物が完全に成長したかどうかを調べるために使用 ◦ ドローンの下が収穫可能時 True それ以外の場合は False を返す ◦ 実行に 1tick • move(direction) ◦ direction = East | West | North | South ◦ 移動成功時は True それ以外の場合は False を返す ◦ 移動成功時は 200 tick、それ以外の場合は 1tick
  7. 7 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 主要な組み込み関数 •

    get_companion() ◦ コンパニオンプラントを取得する ◦ 1 tick ◦ plant_type, (x, y) = get_companion() • Polyculture(混植、混作) ◦ 指定座標に指定植物が植えてあると収穫量が 160倍になる ◦ 指定植物は Grass、Bush、Tree、Carrot のいずれか ▪ ただし、同種は除く。 Grassの混植対象は他の3種 ◦ 座標は3手以内で移動できる範囲 ◦ 指定植物が育ち切っていなくても OK ◦ Leaderboards.Hay_Single では重要なゲーム要素
  8. 8 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 主要な組み込み関数 •

    plant(entity) ◦ 植物を植える。植える際には事前に耕す必要があるものがある ◦ 成功時は True それ以外の場合は False を返す ◦ 成功時は 200 tick、それ以外の場合は 1tick • till() ◦ ドローンの下の地面を耕し Grounds.Soil にする ◦ Grounds.Soil を till() すると Grounds.Grassland に戻る ◦ 200 tick • 耕していない状態では勝手に Grass が生える • Grounds.Grassland で植えることができる植物 ◦ Bush、Tree • Grounds.Soil で植えることができる植物 ◦ Carrot、 Cactus、Pumpkin、Sunflower
  9. 9 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 主要な組み込み関数 •

    use_item(item, n=1) ◦ 指定された item の使用を n 回試みます ◦ Items.Water、Items.Fertilizer などの一部のアイテムでのみ使用できます ◦ 成功時は True それ以外の場合は False を返す ◦ 成功時は 200 tick、それ以外の場合は 1tick • 水やり ◦ 植物は水をやると成長が早くなります ◦ 地面には 0 から 1 までの水位があります(小数値) ◦ 植物の成長速度は、水位 0の1倍速から水位1の5倍速まで直線的に変化 ◦ 地面は時間とともに乾きます:平均して、毎秒現在の水分の 1%を失いますが、 これにはランダムなばらつきがあります • 肥料 ◦ ドローンの下の植物の残りの成長時間を 2秒短縮 ◦ 肥料を用いると感染する ◦ 感染した植物は収穫量の半分が Items.Weird_Substance になる
  10. 10 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 時間について •

    リーダーボードの環境では 1秒 = 6000 tick • 主要なアクションは 200 tick かかる • 計算などは 1 tick かかる ◦ +、-、*、/、//、%、and、or、... のような2つの値を組み合わせる操作 ◦ if の分岐の実行 ◦ for、while は開始に 1tick かかるが、ループ自体は 0 tick ◦ 関数定義 ◦ データ構造へのインデックス参照 ▪ 辞書やセットの場合は、キーのサイズに応じて追加の tickがかかる • コストが無料のもの ◦ 関数の呼び出し(ただし関数を変数として受け取り実行する場合は 1tick) ◦ 変数の読み込み、書き込み