parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Результаты отладки

G_Z 25.05.2004 22:16

Итак.

1. Переименовал метод в @random_[]
Всё как работало так и работает.

2. Добавил предложенные Вами строки и получил лог.
Цитирую:
29
37
9
14
25

3. Набросал метод отладки, по принципу random_'а.
Привожу код.
@random_test[table_limit;random_limit][table_limit;random_limit]

$random_digits_hash[^hash::create[]]
$random_digits[^table::create{number}]
$all_generated_digits[^table::create{digit}]

^while($random_digits_hash < $table_limit){
	$random_digit(^math:random($random_limit))
	^if(!def $random_digits_hash.[$random_digit]){
		^all_generated_digits.append{$random_digit}
		$hash_add[$.$random_digit(1)]
		^random_digits_hash.add[$hash_add]
		числа ($random_digit) ещё не было, надо бы добавить!<br>
	}{
		было уже ($random_digit), было, а не пошло бы оно уже?..<br>
	}

}
<br>
^$random_digits_hash[<br>
^random_digits_hash.foreach[key;value]{
	$this_digit_counter[^all_generated_digits.select($all_generated_digits.digit == $key)]
	&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;^$.$key^[$value] (^this_digit_counter.count[])<br>
}
]
Вызывать как
^random_test[table_limit;random_limit]
, у меня
^random_test[25;100]
(тут предвижу яростный пинок, за что - смотреть ниже)

Метод выводит сгенерированное число, проверяет есть ли такой ключ в хэше, пишет о результате проверки.
В конце выводит вид полученного хэша (в круглых скобках справа от ключа - частота выпадания такого числа при случайной генерации).
У меня на вызов
^random_test[25;100]
вывел:
числа (72) ещё не было, надо бы добавить!
числа (62) ещё не было, надо бы добавить!
числа (36) ещё не было, надо бы добавить!
числа (84) ещё не было, надо бы добавить!
числа (28) ещё не было, надо бы добавить!
числа (98) ещё не было, надо бы добавить!
числа (57) ещё не было, надо бы добавить!
числа (10) ещё не было, надо бы добавить!
числа (29) ещё не было, надо бы добавить!
было уже (62), было, а не пошло бы оно уже?..
числа (8) ещё не было, надо бы добавить!
числа (81) ещё не было, надо бы добавить!
числа (48) ещё не было, надо бы добавить!
числа (30) ещё не было, надо бы добавить!
числа (51) ещё не было, надо бы добавить!
числа (94) ещё не было, надо бы добавить!
числа (0) ещё не было, надо бы добавить!
числа (64) ещё не было, надо бы добавить!
числа (42) ещё не было, надо бы добавить!
числа (97) ещё не было, надо бы добавить!
числа (39) ещё не было, надо бы добавить!
было уже (72), было, а не пошло бы оно уже?..
было уже (8), было, а не пошло бы оно уже?..
числа (82) ещё не было, надо бы добавить!
было уже (28), было, а не пошло бы оно уже?..
числа (26) ещё не было, надо бы добавить!
было уже (8), было, а не пошло бы оно уже?..
числа (71) ещё не было, надо бы добавить!
числа (53) ещё не было, надо бы добавить!
числа (4) ещё не было, надо бы добавить!

$random_digits_hash[
      $.28[1] (2)
      $.29[1] (1)
      $.62[1] (2)
      $.64[1] (1)
      $.51[1] (1)
      $.53[1] (1)
      $.42[1] (1)
      $.30[1] (1)
      $.0[1] (1)
      $.57[1] (1)
      $.4[1] (1)
      $.94[1] (1)
      $.81[1] (1)
      $.48[1] (1)
      $.82[1] (1)
      $.10[1] (1)
      $.36[1] (1)
      $.71[1] (1)
      $.97[1] (1)
      $.84[1] (1)
      $.26[1] (1)
      $.39[1] (1)
      $.72[1] (2)
      $.8[1] (3)
      $.98[1] (1)
]
Выводы:
1. Числа выпадают по нескольку раз как и положено, при этом if работает.
2. Причина пинка в мою честь - я перепутал лимиты. Т.е. при буквальном их задании, например
^random_test[100;25]
конечно endless loop.