Extract numbers to package

This commit is contained in:
myrmidex 2026-08-30 23:38:24 +02:00
parent 89b0f808bd
commit ae11ea6a56
6 changed files with 97 additions and 5122 deletions

View file

@ -0,0 +1 @@
{"version":2,"defects":[],"times":{"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Dto\\NumbersBagTest::test_replace_numbers with data set #0":0.006,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Dto\\NumbersBagTest::test_replace_numbers with data set #1":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Dto\\NumbersResultTest::test_to_array with data set #0":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Dto\\NumbersResultTest::test_log_step with data set #0":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_find_results with data set #0":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_get_closest_result with data set #0":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_get_closest_result with data set #1":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_get_closest_result with data set #2":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_get_closest_result with data set #3":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_get_closest_result with data set #4":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\PairServiceTest::test_get_pairs with data set #0":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\PairServiceTest::test_get_pairs with data set #1":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\PairServiceTest::test_get_pairs with data set #2":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\PairServiceTest::test_get_pairs with data set #3":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\StepTest::test_to_array with data set #0":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\StepTest::test_to_string with data set #0":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\OperationsServiceTest::test_process_operation with data set #0":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\OperationsServiceTest::test_process_operation with data set #1":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\OperationsServiceTest::test_process_operation with data set #2":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\OperationsServiceTest::test_process_operation with data set #3":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\StepTest::test_to_array with data set #1":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\StepTest::test_get_result with data set #0":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\StepTest::test_get_result with data set #1":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\StepTest::test_to_string with data set #1":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\OperationsServiceTest::test_process_operation with data set #4":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\OperationsServiceTest::test_process_operation with data set #5":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_find_results with data set #1":0.001,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_find_results with data set #2":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_find_results with data set #3":0.001,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_find_results with data set #4":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_find_results with data set #5":1.38,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_find_results with data set #6":1.364,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\NumbersServiceTest::test_process_step":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\PairServiceTest::test_get_pairs with data set #4":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\PairServiceTest::test_get_pairs with data set #5":0,"Lvl0\\AnagramFinder\\TUI\\Tests\\Unit\\Services\\PairServiceTest::test_get_pairs with data set #6":0}}

12
bin/numbers Executable file
View file

@ -0,0 +1,12 @@
#!/usr/bin/env php
<?php
require __DIR__ . '/../autoload.php';
use Lvl0\AnagramFinder\TUI\Commands\FindNumbersCommand;
use Symfony\Component\Console\Application;
$application = new Application('Countdown numbers Finder', '1.0.0');
$application->addCommand(new FindNumbersCommand());
$application->setDefaultCommand('find-numbers');
$application->run();

View file

@ -1,9 +1,10 @@
{ {
"name": "anagram-finder/tui", "name": "countdown/tui",
"description": "A TUI anagram finder in PHP", "description": "A TUI anagram finder in PHP",
"type": "project", "type": "project",
"require": { "require": {
"anagram-finder/core": "^0.1.0", "countdown/letters": "^0.1.2",
"countdown/numbers": "^0.1.0",
"illuminate/collections": "^13.26", "illuminate/collections": "^13.26",
"laravel/prompts": "^0.3.23" "laravel/prompts": "^0.3.23"
}, },
@ -27,7 +28,11 @@
"repositories": [ "repositories": [
{ {
"type": "vcs", "type": "vcs",
"url": "ssh://git@forge.lvl0.xyz:2222/anagram-finder/core.git" "url": "ssh://git@forge.lvl0.xyz:2222/countdown/letters-core.git"
},
{
"type": "vcs",
"url": "ssh://git@forge.lvl0.xyz:2222/countdown/numbers-core.git"
} }
] ]
} }

5119
composer.lock generated

File diff suppressed because it is too large Load diff

27
phpunit.xml Normal file
View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
cacheDirectory=".phpunit.cache"
colors="true"
displayDetailsOnTestsThatTriggerDeprecations="true"
displayDetailsOnTestsThatTriggerErrors="true"
displayDetailsOnTestsThatTriggerNotices="true"
displayDetailsOnTestsThatTriggerWarnings="true"
failOnDeprecation="true"
failOnNotice="true"
failOnWarning="true">
<testsuites>
<testsuite name="Unit">
<directory>tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory>tests/Feature</directory>
</testsuite>
</testsuites>
<source>
<include>
<directory>src</directory>
</include>
</source>
</phpunit>

View file

@ -0,0 +1,49 @@
<?php
namespace Lvl0\AnagramFinder\TUI\Commands;
use Lvl0\AnagramFinder\TUI\Dtos\NumbersBag;
use Lvl0\AnagramFinder\TUI\Dtos\Step;
use Lvl0\AnagramFinder\TUI\Services\NumbersService;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use function Laravel\Prompts\callout;
use function Laravel\Prompts\clear;
use function Laravel\Prompts\intro;
use function Laravel\Prompts\spin;
use function Laravel\Prompts\text;
#[AsCommand(name: 'find-numbers')]
class FindNumbersCommand extends Command
{
public function __invoke(): int
{
clear();
intro("NUMBERS FINDER");
$numbers = NumbersBag::fromArray(explode(" ", text("Enter the numbers", required: true)));
$target = text(label: "Enter the target number", required: true);
$result = spin(
callback: fn() => new NumbersService($numbers)->solve($target),
message: 'Calculating...',
);
$stepsStr = $result->getSteps()->map(fn(Step $s) => $s->toString());
// var_dump($stepsStr->toArray());
$distance = (abs($target - $result->getResult()));
callout(
label: $distance === 0 ? 'Found!' : "Off by {$distance}",
content: $result->getSteps()->map(fn(Step $s) => $s->toString())->all(),
type: $distance === 0 ? 'success' : 'warning',
info: 'Steps needed to get to the solution',
);
return self::SUCCESS;
}
}