Автор Тема: Скорее всего проблема в алгоритме %(  (Прочитано 2543 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Пишу бота викторины на перле
собственно вот кусок кода:

sub blabla
{
my ......
	
$obj->{hint}++;
	
@
allchars=split(\'\',$obj->{cur_answer});
	
for($i2=1;$i2<$length;++$i2){
	
$char=$allchars[$i2];
	
if( $i==$obj->{hint} && $i<=$maxhint ){
	
	
$chars[$i2]=$char;
	
	
}else{
	
	
$chars[$i2]="*";
	
	
}
	
++$i;
	
if( $i % 6==0 ){$i=0;}
	
}
	
$obj->{curhint}=join(\'\',@chars);
}

Что он должен делать: из ответа по очереди заменять незасвеченные буквы на *, при этом  циклируясь на 6 символах (извините за ломаный русский - сами мы не местные)
В общем если ответ "сембернар", то вот что он должен последовательно выводить:
c*****н**
*е*****а*
**м*****р
***б*****

А вот что он сейас выдает(правильный ответ "кричать"):
*и*****
**ч*****
***а****
****т***
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Скорее всего проблема в алгоритме %(
« Ответ #1 : 31 Марта 2003, 09:19:13 »
Цитировать
for($i2=1;$i2<$length;++$i2)


Вообще, насколько я помню, массив начинается с нуля а не с единицы, поэтому:
for($i2=0;$i2<$length;++$i2)

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Скорее всего проблема в алгоритме %(
« Ответ #2 : 31 Марта 2003, 10:31:48 »
Phoinix
только все равно разное кол-во букв
Скрипт просто торчит:
Цитировать

Вопрос: Место для слуги на задке кареты, кипажа. букв -9
Атвет: запятки
Подсказка 1: з*****и**
Подсказка 2: *а*****
Подсказка 3: **п*****
Подсказка 4: ***я*****
Вопрос: Значение женского имени (исп.) ласкательное к Лола. букв -8
Атвет: -лолита
Подсказка 1: л*****
Подсказка 2: *о*****
Подсказка 3: **л*****
Подсказка 4: ***и****
Вопрос: Цинковая обманка. букв -10
Атвет: -сфалерит
Подсказка 1: с*****и***
Подсказка 2: *ф*****т**
Подсказка 3: **а*****
Подсказка 4: ***л*****


package trivia
blabla
sub update_hint
{
	
my $obj=shift;
	
my $length=length($obj->{cur_answer});
	
my $char="";
	
my ($i,$i2,$maxhint)=0;
	
my @chars=();
	
my @allchars=();
	
$obj->{hint}++;
	
if(
$obj->{hint}>4){$obj->{curhint}="";return 0;}
	
if(
$length>2){$maxhint=1;}
	
if(
$length>3){$maxhint=2;}
	
if(
$length>4){$maxhint=3;}
	
if(
$length>5){$maxhint=4;}
	
@
allchars=split(\'\',$obj->{cur_answer});
	
foreach $char (@allchars){
	
	
++$i;++$i2;
	
	
if($i==$obj->{hint} && $i<=$maxhint){
	
	
	
$chars[$i2]=$char;else{
	
	
	
$chars[$i2]="*";
	
	
}
	
	
if( $i % 6==0 ){$i=0;}
	
}
	
$obj->{curhint}=join(\'\',@chars);
	

}

сам скрипт

blabla
requri trivia
;
$trivia = new Trivia;
$conn->{trivia}=$trivia;
blabla
sub repeat_question 
{
	
my $conn shift;
	
if(!
$conn->{trivia}->{flag}){
	
	
	
$conn->privmsg($conn->{channel}, "3Вопрос: 12".$conn->{trivia}{cur_question}." букв -".length($conn->{trivia}{cur_answer}));
	
	
	
$conn->privmsg($conn->{channel}, "3Атвет: 12-".$conn->{trivia}{cur_answer}."----");
	
}
	
$conn->{trivia}->{flag}=1;
	

}
sub repeat_hint{
	
if(
$conn->{trivia}->{curhint}){$conn->privmsg($conn->{channel}, "3Подсказка ".$conn->{trivia}->{hint}.": 4".$conn->{trivia}->{curhint});}
}
« Последнее редактирование: 31 Марта 2003, 10:57:18 от AlieN »
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Скорее всего проблема в алгоритме %(
« Ответ #3 : 31 Марта 2003, 11:57:53 »
Ну если через foreach то


    foreach $char (@allchars){
        ++$i;
        if (($i==$obj->{hint} && $i<=$maxhint) || ($i==($obj->{hint}+6)){
            $chars[$i]=$char;}
        else{
            $chars[$i]="*";
        }
    }

По идее так, проверь...
$i2 - не нужен, а просто делаешь сравнение соответствия $i одному из первых четырех символов или одному из первых четырех после первой шестерки... (надеюсь понятно изложил... ;-)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28