Extract numbers to package
This commit is contained in:
parent
89b0f808bd
commit
ae11ea6a56
6 changed files with 97 additions and 5122 deletions
1
.phpunit.cache/test-run-history
Normal file
1
.phpunit.cache/test-run-history
Normal 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
12
bin/numbers
Executable 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();
|
||||||
|
|
@ -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
5119
composer.lock
generated
File diff suppressed because it is too large
Load diff
27
phpunit.xml
Normal file
27
phpunit.xml
Normal 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>
|
||||||
49
src/Commands/FindNumbersCommand.php
Normal file
49
src/Commands/FindNumbersCommand.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue