From ae5df73e729c9fd61f520ef05e8317cb9373b327 Mon Sep 17 00:00:00 2001 From: Orkuncakilkaya Date: Mon, 28 Sep 2026 15:12:24 +0300 Subject: [PATCH] ludic.jobs jobs_posted_count, ludic.steps steps_my_shares_into - a count and a kept list for what a party asks every tick Co-Authored-By: Claude Opus 5.5 --- packages/ludic.jobs/posts.ludic | 7 +++++++ packages/ludic.jobs/tests/jobs_test.ludic | 2 ++ packages/ludic.steps/party.ludic | 6 ++++++ packages/ludic.steps/tests/steps_test.ludic | 6 ++++++ 4 files changed, 21 insertions(+) diff --git a/packages/ludic.jobs/posts.ludic b/packages/ludic.jobs/posts.ludic index a56ff4c9..dc17f34d 100644 --- a/packages/ludic.jobs/posts.ludic +++ b/packages/ludic.jobs/posts.ludic @@ -20,6 +20,13 @@ export function jobs_posted(jobs_st: JobsState, b: int) -> []int { return out } +# how many of a board's slots hold a post, without the list +export function jobs_posted_count(jobs_st: JobsState, b: int) -> int { + var n = 0 + for s in 0 .. jobs_slots(b) { if jobs_post_kind(jobs_st, b, s) >= 0 { n += 1 } } + return n +} + # how many of a board's posts are paid export function jobs_posts_done(jobs_st: JobsState, b: int) -> int { var n = 0 diff --git a/packages/ludic.jobs/tests/jobs_test.ludic b/packages/ludic.jobs/tests/jobs_test.ludic index 5e5b72b7..c749221d 100644 --- a/packages/ludic.jobs/tests/jobs_test.ludic +++ b/packages/ludic.jobs/tests/jobs_test.ludic @@ -162,6 +162,8 @@ program JobsTest { jobs_morning(jobs_st) expect_eq(len(jobs_posted(jobs_st, BOARD_DAILY)), 3) expect_eq(len(jobs_posted(jobs_st, BOARD_ADA)), 2) + expect_eq(jobs_posted_count(jobs_st, BOARD_DAILY), 3) + expect_eq(jobs_posted_count(jobs_st, BOARD_ADA), 2) let a = jobs_post_need(jobs_st, BOARD_DAILY, 0) * 100 + jobs_post_need(jobs_st, BOARD_DAILY, 1) * 10 + jobs_post_need(jobs_st, BOARD_DAILY, 2) fresh(jobs_st, jobs_test_st) jobs_test_st.day = 3 diff --git a/packages/ludic.steps/party.ludic b/packages/ludic.steps/party.ludic index d0a9812c..b1d3de5c 100644 --- a/packages/ludic.steps/party.ludic +++ b/packages/ludic.steps/party.ludic @@ -33,6 +33,12 @@ function steps__share(steps_st: StepsState, p: int, i: int) -> int { } # this machine's shares for the current chapter, to send to whoever owns the story +# the same into a list the caller keeps (a guest checks its shares every tick) +export function steps_my_shares_into(steps_st: StepsState, out: []int) -> void { + List.clear(out) + for i in 0 .. STEPS_PER_CHAPTER { push(out, steps__share(steps_st, 0, i)) } +} + export function steps_my_shares(steps_st: StepsState) -> []int { let out = new []int for i in 0 .. STEPS_PER_CHAPTER { push(out, steps__share(steps_st, 0, i)) } diff --git a/packages/ludic.steps/tests/steps_test.ludic b/packages/ludic.steps/tests/steps_test.ludic index e88b3353..a0f2cebc 100644 --- a/packages/ludic.steps/tests/steps_test.ludic +++ b/packages/ludic.steps/tests/steps_test.ludic @@ -154,6 +154,12 @@ program StepsTest { steps_share(steps_st, 1, 0, shares(2, 0)) expect(steps_met(steps_st, 0)) expect_eq(steps_party_got(steps_st, 0), 5) + let kept = new []int + steps_my_shares_into(steps_st, kept) + steps_my_shares_into(steps_st, kept) + let made = steps_my_shares(steps_st) + expect_eq(len(kept), len(made)) + for i in 0 .. len(made) { expect_eq(kept[i], made[i]) } steps_set_current(steps_st, 1) steps_test_st.vals[K_SIGNS] = 1 steps_share(steps_st, 1, 1, shares(2, 0))