<?php
/*
* This file is part of Chevere.
*
* (c) Rodolfo Berrios <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Rodber\Wordle;
use Stringable;
use function Chevere\Parameter\string;
final class Word implements Stringable
{
public const CHAR_MATCH_NONE = -1;
public const CHAR_MATCH_PARTIAL = 0;
public const CHAR_MATCH_EXACT = 1;
private int $length;
private array $split;
private array $countValues;
public function __construct(
private string $string
) {
string('/^(?!\s*$).+/')($string);
$this->length = mb_strlen($string);
$this->split = mb_str_split($string, 1);
$this->countValues = array_count_values($this->split);
}
public function __toString(): string
{
return $this->string;
}
public function length(): int
{
return $this->length;
}
public function split(): array
{
return $this->split;
}
public function countValues(): array
{
return $this->countValues;
}
public function getPosMatch(int $pos, string $letter): int
{
switch (true) {
case $this->split[$pos] === $letter:
return self::CHAR_MATCH_EXACT;
break;
case str_contains($this->string, $letter):
return self::CHAR_MATCH_PARTIAL;
break;
default:
return self::CHAR_MATCH_NONE;
break;
}
}
}
|