{"_id":"27-lowball-evaluator","_rev":"2-411131f0798702664c5be4b8edd59d39","name":"27-lowball-evaluator","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"27-lowball-evaluator","version":"1.0.0","keywords":["poker","lowball","2-7","deuce-to-seven","hand-evaluator","triple-draw","cards"],"author":{"name":"cyberfyed"},"license":"MIT","_id":"27-lowball-evaluator@1.0.0","maintainers":[{"name":"cyberfyed","email":"cyberfyed@gmail.com"}],"homepage":"https://github.com/cyberfyed/27-lowball-evaluator#readme","bugs":{"url":"https://github.com/cyberfyed/27-lowball-evaluator/issues"},"dist":{"shasum":"1f7fb1af99ca61e7bfa0f2dc2eb8f84a11b81644","tarball":"https://registry.npmjs.org/27-lowball-evaluator/-/27-lowball-evaluator-1.0.0.tgz","fileCount":6,"integrity":"sha512-ombBMWmpNzm0owHKior+1kTS47LyKexdCyDKU5e1s9O0hV4Cq664fgPutaLULtjjm2gUt1CeYO9PSPXFasLU+Q==","signatures":[{"sig":"MEYCIQCtkqcdzCjBjUTRm0ekD8MJxgRoZh5YxbnLYweC9wXGtwIhAM6NVGVlLhT7alb50x5ivz90SS9VxpKMQP1CPT2syW39","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23565},"main":"index.js","gitHead":"5877aceb8c236f93f9629d0610d76253d2b51959","scripts":{"test":"jest"},"_npmUser":{"name":"cyberfyed","email":"cyberfyed@gmail.com"},"repository":{"url":"git+https://github.com/cyberfyed/27-lowball-evaluator.git","type":"git"},"_npmVersion":"10.9.0","description":"2-7 (Deuce-to-Seven) Lowball poker hand evaluator. Correctly handles aces high, straights/flushes count against you.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/27-lowball-evaluator_1.0.0_1769691446144_0.6938933581833537","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"27-lowball-evaluator","version":"1.0.1","description":"2-7 (Deuce-to-Seven) Lowball poker hand evaluator. Correctly handles aces high, straights/flushes count against you.","main":"index.js","scripts":{"test":"jest"},"keywords":["poker","lowball","2-7","deuce-to-seven","hand-evaluator","triple-draw","cards"],"author":{"name":"cyberfyed"},"license":"MIT","devDependencies":{"jest":"^29.7.0"},"_id":"27-lowball-evaluator@1.0.1","gitHead":"b1e2768bdb324de49c2f3b4d1a4e3da8bc480575","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-pCY7Yp8liiaVyEUIKNdUJJtdwUNbJQUWCFWCR5oOpUv4+P5uYhHk3mJkuSFlYUv1iYLE2pBiPdljj93ER1+SpQ==","shasum":"8d5e4cdb8e26c0cdb714c7b14251dd696cc90ccb","tarball":"https://registry.npmjs.org/27-lowball-evaluator/-/27-lowball-evaluator-1.0.1.tgz","fileCount":6,"unpackedSize":23460,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBBBVpfx4z+VjZifAGgXtuD6q7qGqzA+6/aoK4JfSPxgAiEA7oUnImt5V1eJF70ekwWDjhKrdJbg36z6Q5kuwNqLZvo="}]},"_npmUser":{"name":"cyberfyed","email":"cyberfyed@gmail.com"},"directories":{},"maintainers":[{"name":"cyberfyed","email":"cyberfyed@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/27-lowball-evaluator_1.0.1_1769777216759_0.2851714445589466"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-29T12:57:26.143Z","modified":"2026-01-30T12:46:56.998Z","1.0.0":"2026-01-29T12:57:26.296Z","1.0.1":"2026-01-30T12:46:56.892Z"},"author":{"name":"cyberfyed"},"license":"MIT","keywords":["poker","lowball","2-7","deuce-to-seven","hand-evaluator","triple-draw","cards"],"description":"2-7 (Deuce-to-Seven) Lowball poker hand evaluator. Correctly handles aces high, straights/flushes count against you.","maintainers":[{"name":"cyberfyed","email":"cyberfyed@gmail.com"}],"readme":"# 2-7 Lowball Hand Evaluator\n\nA JavaScript poker hand evaluator for **2-7 (Deuce-to-Seven) Lowball** variants including Triple Draw and Single Draw.\n\n## Features\n\n- Correctly handles **aces as high** (not low like A-5 lowball)\n- **Straights and flushes count against you** (as per 2-7 rules)\n- Identifies special hands: Number One (7-5-4-3-2), Number Two, etc.\n- Compare hands and find winners\n- Zero dependencies\n\n## Installation\n\n```bash\nnpm install 27-lowball-evaluator\n```\n\n## Usage\n\n### Evaluate a Single Hand\n\n```javascript\nconst { LowballHand } = require('27-lowball-evaluator');\n\nconst hand = LowballHand.solve(['7h', '5c', '4d', '3s', '2h']);\n\nconsole.log(hand.descr);      // \"7-5-4-3-2 (Number One)\"\nconsole.log(hand.name);       // \"Seven Low\"\nconsole.log(hand.handTypeName); // \"High Card\"\nconsole.log(hand.rank);       // Lower is better\n```\n\n### Compare Two Hands\n\n```javascript\nconst { LowballHand } = require('27-lowball-evaluator');\n\n// Returns: -1 if first wins, 1 if second wins, 0 if tie\nconst result = LowballHand.compare(\n  ['7h', '5c', '4d', '3s', '2h'],  // Number One\n  ['8h', '6c', '4d', '3s', '2h']   // 8-low\n);\nconsole.log(result); // -1 (first hand wins)\n```\n\n### Find Winner(s) from Multiple Hands\n\n```javascript\nconst { LowballHand } = require('27-lowball-evaluator');\n\nconst hands = [\n  LowballHand.solve(['7h', '5c', '4d', '3s', '2h']),\n  LowballHand.solve(['8h', '6c', '4d', '3s', '2h']),\n  LowballHand.solve(['9h', '7c', '5d', '3s', '2h']),\n];\n\nconst winners = LowballHand.winners(hands);\nconsole.log(winners[0].descr); // \"7-5-4-3-2 (Number One)\"\n```\n\n### Instance Methods\n\n```javascript\nconst hand1 = LowballHand.solve(['7h', '5c', '4d', '3s', '2h']);\nconst hand2 = LowballHand.solve(['8h', '6c', '4d', '3s', '2h']);\n\nhand1.beats(hand2);    // true\nhand1.ties(hand2);     // false\nhand1.compareTo(hand2); // negative (hand1 is better)\n```\n\n## Card Format\n\nCards are represented as strings: `rank + suit`\n\n- **Ranks**: `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `T` (or `10`), `J`, `Q`, `K`, `A`\n- **Suits**: `h` (hearts), `d` (diamonds), `c` (clubs), `s` (spades)\n\nExamples: `'7h'`, `'As'`, `'Td'`, `'2c'`\n\n## 2-7 Lowball Rules\n\nIn 2-7 (Deuce-to-Seven) Lowball:\n\n1. **Aces are always HIGH** - A-2-3-4-5 is NOT a straight, it's A-high\n2. **Straights count against you** - 6-5-4-3-2 is a straight (bad)\n3. **Flushes count against you** - All same suit is bad\n4. **Best possible hand**: 7-5-4-3-2 unsuited (called \"Number One\" or \"the wheel\")\n\n### Hand Rankings (Best to Worst)\n\n1. High Card (no pair, no straight, no flush) - **BEST**\n2. One Pair\n3. Two Pair\n4. Three of a Kind\n5. Straight\n6. Flush\n7. Full House\n8. Four of a Kind\n9. Straight Flush - **WORST**\n\n### Top 10 Hands\n\n1. 7-5-4-3-2 (Number One)\n2. 7-6-4-3-2 (Number Two)\n3. 7-6-5-3-2 (Number Three)\n4. 7-6-5-4-2 (Number Four)\n5. 8-5-4-3-2\n6. 8-6-4-3-2\n7. 8-6-5-3-2\n8. 8-6-5-4-2\n9. 8-6-5-4-3\n10. 8-7-4-3-2\n\n## API Reference\n\n### `LowballHand.solve(cards)`\nCreate and evaluate a hand from an array of 5 card strings.\n\n### `LowballHand.compare(cards1, cards2)`\nCompare two hands. Returns `-1` if first wins, `1` if second wins, `0` for tie.\n\n### `LowballHand.winners(hands)`\nFind winner(s) from an array of LowballHand instances. Returns array (can have multiple for ties).\n\n### Instance Properties\n- `hand.rank` - Numeric rank (lower is better)\n- `hand.handType` - Hand type constant (HIGH_CARD, ONE_PAIR, etc.)\n- `hand.handTypeName` - Human-readable type (\"High Card\", \"One Pair\", etc.)\n- `hand.name` - Short name (\"Seven Low\", \"One Pair\")\n- `hand.descr` - Detailed description (\"7-5-4-3-2 (Number One)\")\n- `hand.cards` - Original card array\n- `hand.sortedRanks` - Ranks sorted high to low\n\n## License\n\nMIT\n","readmeFilename":"README.md"}