1 回答

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
我重寫了代碼,因?yàn)槲艺J(rèn)為類和類之外的代碼組合太多,這會(huì)產(chǎn)生很多依賴(恕我直言)。
在這段代碼中,您創(chuàng)建一個(gè)類并說出您想要生成多少個(gè)數(shù)字,然后調(diào)用該generate()方法為您完成所有工作。
為了檢查之前是否使用過這些數(shù)字,我將數(shù)字編碼到一個(gè)位字段并存儲(chǔ)它(該encode()方法只是根據(jù)使用的數(shù)字添加二進(jìn)制數(shù)字)。如果同樣的模式再次發(fā)生,它只會(huì)嘗試另一個(gè)模式。
class NumberGenerator{
private $numbersUsed = [];
private $basket = [];
private $numbersToGenerate = 0;
public function __construct( int $numbersToGenerate ) {
$this->numbersToGenerate = $numbersToGenerate;
}
public function generate(){
$numbers = range(0,9);
for ( $i = 0; $i < $this->numbersToGenerate; $i++ ) {
do {
shuffle($numbers);
$number = array_slice($numbers, 0,3);
$encoded = $this->encode($number);
}
while ( in_array($encoded, $this->numbersUsed) );
$this->basket[] = implode($number);
$this->numbersUsed[] = $encoded;
}
return $this->basket;
}
protected function encode(array $num) {
$numbers = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512];
$sum = 0;
foreach ( $num as $digit ) {
$sum += $numbers[$digit];
}
return $sum;
}
}
$generator = new NumberGenerator(120);
print_r($generator->generate());
- 1 回答
- 0 關(guān)注
- 183 瀏覽
添加回答
舉報(bào)