Aryadev Chavali
ec31844ee7
helper: new ExactSizedArr adaptor for ExactSizedIterators
...
Given an ExactSizedIterator and a compile time known size (N), we
should be able to generate stack allocated arrays of the contents of
an iterator as long as the iterator has at least the required size.
2026-04-07 12:36:48 +01:00
Aryadev Chavali
9b1db4382d
modes:single:tests: refactor footstool_deck_irrelevance via a combinatory argument
2026-04-07 12:36:48 +01:00
Aryadev Chavali
a1d0d72b1e
modes:single|pair:tests: some adjustments based on prev refactors
2026-04-07 12:36:48 +01:00
Aryadev Chavali
b4cd7e8ea9
card:default: implemented defaults for every card type
2026-04-07 12:36:48 +01:00
Aryadev Chavali
967374d688
card:*: small changes
2026-04-07 12:36:48 +01:00
Aryadev Chavali
29e310a470
card:mod: split implementations of methods into impls.rs
2026-04-07 12:36:48 +01:00
Aryadev Chavali
285d816707
card: split up into its own module.
2026-04-07 12:36:48 +01:00
Aryadev Chavali
0d2eed5369
card: delete
2026-04-07 12:36:48 +01:00
Aryadev Chavali
c6858dbd51
big-c: tag refactor_cards as WIP
2026-04-07 12:36:48 +01:00
Aryadev Chavali
fbbabc1ce7
big-c: organise and setup tasks
2026-04-05 04:52:17 +01:00
Aryadev Chavali
9706a39152
modes:triples: deleted
...
Way more work needs to be put into the internals of this codebase
before I can continue work on the classifier, so I'm going to focus on
that. Might be time for a merge.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
4b8ac90a1d
modes:pair: implement hashing for pairs
...
Once again trivial.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
3168ce1ef0
modes:pair:footstool: refactored for better playability
...
Full footstools only proc on equivalence, otherwise high cards must
proc some form of footstool to get a half footstool.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
072159399d
modes:pair:tests: refactor using new Card/PlayingCard methods
2026-04-05 04:45:51 +01:00
Aryadev Chavali
f1d6b36cd9
modes:single:tests: Utilise PlayingCard::next and PlayingCard::prev
2026-04-05 04:45:51 +01:00
Aryadev Chavali
7b5a6eb255
card: implement PlayingCard|Card::{prev,next}
...
Returns the next or previous card based on deck ordering. Respects
the deck of the current card (i.e. will return a card from the same
deck) but will return None on the boundaries of the deck (3(D) and
2(S)).
2026-04-05 04:45:51 +01:00
Aryadev Chavali
3b8bdc5df9
modes:single: Implemented hashing on Singles (trivial).
2026-04-05 04:45:51 +01:00
Aryadev Chavali
abf638e869
modes:single:tests: major refactor
...
Better exhaustive testing, addition of messages on asserts as well.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
b796156ea5
modes:single|pair: make default struct construction private
...
If all fields are public, users are allowed to use the default struct
constructor. Obviously we want users to only use the static ::new
method.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
fa4d8efb78
modes:mod:tests: test_footstool revert to basic pattern
...
My previous impl was based on some testing for different Pair
footstool implementations. However, I've decided to fix it to this
set of patterns:
1) any half footstool must come from a more dominant hand.
2) full footstools are symmetric and require both hands to be
equivalent
2026-04-05 04:45:51 +01:00
Aryadev Chavali
dce4279af2
card: make_decks -> Card::iter_all, PlayingCard::iter_deck -> iter_all
2026-04-05 04:45:51 +01:00
Aryadev Chavali
e054921462
modes:single:footstool: allow half footstools to loop
...
3 of Diamonds can now half-footstool 2 of Spades. We need to fix
ordering to allow 3 of Diamonds to beat 2 of Spades specifically.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
df79488cec
modes:pair:tests: refactor ordering test.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
8bacbfbde3
modes:pair: adjust Pair::Ord
...
Instead of our more complicated interpretation before where we'd care
about whether something is proper or not, here we're just using a form
of reverse lexicographical on the Pair.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
9690fb2bf3
modes:pair:tests: refactor for name change
2026-04-05 04:45:51 +01:00
Aryadev Chavali
b7e511cbe8
modes:single:tests: rename for test_footstool
2026-04-05 04:45:51 +01:00
Aryadev Chavali
c2842c02e4
modes:mod: refactor Hand
...
Hand now requires Ord to be implemented, and test_footstool is a bit
more precise than test_footstool_non_reflexivity.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
fa6ce21fce
modes:triple: start impl for triples
...
implemented Triple::new
2026-04-05 04:45:51 +01:00
Aryadev Chavali
f4cab01195
modes:*: cleanup
2026-04-05 04:45:51 +01:00
Aryadev Chavali
892c112433
helper: ordered now takes a fixed sized array of type T
...
I wanted to abstract ordered to any size instead of just binary
tuples - but tuples have a strange issue where you can't be generic
about them past like a limit of 12. With this setup, ordered takes
ownership of some fixed array, sorts it, then returns it back.
modes:pair and modes:single have been refactored to utilise this new
form of ordered - it's basically the exact same in these cases.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
f8f5c12316
game: deleted
...
This branch is purely for creating a working classifier for hands of
cards.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
ad4057e890
modes:pair:tests: refactor for more functional style tests
...
Nested iteration in the form presented before was quite bad - while
it's a bit more efficient to iterate once and do all the tests in that
one go, it can be kinda hard to preserve the context in ones head.
This style makes it easier to see the flow of data and what is being
tested.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
d0de81231e
modes:mod:tests: test_non_reflexivity -> test_footstool_non_reflexivity
2026-04-05 04:45:51 +01:00
Aryadev Chavali
f088915a60
modes:pair:tests: refactor for cleanliness
2026-04-05 04:45:51 +01:00
Aryadev Chavali
3cdfde07fe
game: module for gameplay
...
Skeleton currently, not much
2026-04-05 04:45:51 +01:00
Aryadev Chavali
e4af8c1812
modes:mod: make pair and single public modules.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
c39d6afd89
modes:pair:tests: footstool implemented
2026-04-05 04:45:51 +01:00
Aryadev Chavali
83ab81a569
modes:pair:tests: ordering implemented
2026-04-05 04:45:51 +01:00
Aryadev Chavali
555b82d671
modes:pair:tests: refactor exhaustive_deck
2026-04-05 04:45:51 +01:00
Aryadev Chavali
8a2cbf1bc9
modes:pair:ord: Remove useless case
2026-04-05 04:45:51 +01:00
Aryadev Chavali
2d179f0316
modes:single: make Single::new public
2026-04-05 04:45:51 +01:00
Aryadev Chavali
11d5149d35
modes:single:tests: refactor make_deck uses
2026-04-05 04:45:51 +01:00
Aryadev Chavali
47bb6c171e
card: make_decks yields an iterator instead of a vector
2026-04-05 04:45:51 +01:00
Aryadev Chavali
555c8e127b
card: make Rank|Suit::cards yield an iterator instead of a vector
2026-04-05 04:45:51 +01:00
Aryadev Chavali
d9cc67d3d1
modes:single:tests: refactor
2026-04-05 04:45:51 +01:00
Aryadev Chavali
0f97422722
card: iter_all_deck -> iter_deck
2026-04-05 04:45:51 +01:00
Aryadev Chavali
c61626f2d0
card: PlayingCard::iter_all_deck
...
Given a deck number, create an iterator over all Playing Cards in that
deck.
2026-04-05 04:45:51 +01:00
Aryadev Chavali
8e6e11e5be
card: slight clean up
2026-04-05 04:45:51 +01:00
Aryadev Chavali
e035f53234
modes:pair: refactor tests to utilise Rank::iter_all and Rank::cards
2026-04-05 04:45:51 +01:00
Aryadev Chavali
503ad53721
card: Rank|Suit::{iter_all, cards}
...
iter_all generates an iterator over every valid rank in order. cards
generates an iterator over all cards for a given suit/rank.
2026-04-05 04:45:51 +01:00