Сразу прошу прощения если не в ту ветку вопрос, сделайте скидку на то, что это первое мое сообщение на этом форуме
Находясь в поисках работы решил отправить повторно резюме в одну компанию, куда в феврале уже обращался. В тот раз как и в этот мне прислали тестовое задание из 4 задач. И как и в первый раз так и во второй, мне кажется, что программист, проверяющий решение, меня "прокатил". Что бы разобраться, прошу глянуть на код задание и код.
Задача:
Цитата:
Дан массив:
array (
'a' => 1/3,
'b' => 1/6,
'c' => 1/2
);
Необходимо написать класс или функцию, реализующую следующие требования:
- на вход подается массив указанного формата,
- на выход обязательно возвращается один ключ переданного массива,
- при многократном вызове функции ключи массива должны возвращаться с пропорциями,
указанными в значениях.
Пример:
На вход подается массив a=>1/8, b=>1/2, при запуске функции большое количество раз, в 20%
случаев должен вернуться ключ a, в остальных – b.
array (
'a' => 1/3,
'b' => 1/6,
'c' => 1/2
);
Необходимо написать класс или функцию, реализующую следующие требования:
- на вход подается массив указанного формата,
- на выход обязательно возвращается один ключ переданного массива,
- при многократном вызове функции ключи массива должны возвращаться с пропорциями,
указанными в значениях.
Пример:
На вход подается массив a=>1/8, b=>1/2, при запуске функции большое количество раз, в 20%
случаев должен вернуться ключ a, в остальных – b.
Код:
CODE (htmlphp):
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?php
- $Array = array(
- 'a' => 1/2,
- 'b' => 1/8,
- );
- $Chances = new Chances($Array);
- $Result = array();
- for ($i = 0; $i < 1001; $i++){
- $index = $Chances->call();
- if (!isset($Result[$index])){
- $Result[$index] = 0;
- }
- $Result[$index]++;
- }
- echo '<pre>';
- var_dump($Result);
- echo '</pre>';
- class Chances{
- private $__Data;
- private $__calls = 0;
- public function __construct($Data){
- if (empty($Data)){
- throw new Exception('Передан пустой массив');
- }
- $sum = array_sum($Data);
- foreach ($Data as $key => $chance){
- $this->__Data[$key] = array(
- 'chance' => $chance,
- 'calls' => 0,
- 'percent' => $chance/$sum*100,
- );
- }
- }
- public function call(){
- $this->__calls++;
- foreach ($this->__Data as $key => $Data){
- if ($Data['calls'] < $this->__calls/100*$Data['percent']){
- $Result[] = $key;
- }
- }
- $this->__Data[$index]['calls']++;
- return $index;
- }
- }
- ?>