Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тестирование с поледовательностью 
:(
    Опции темы
Win MK 32
Дата 27.5.2009, 05:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

Репутация: нет
Всего: нет



Берем из базы исходный код. Разбиваем его на строки. Строки с ключами 0,1,2,3,... Перемешиваем массив строки местами поменялись, а ключи нет. Предоставляем пользователю возможность расставить строки массива в нужной последовательности. Далее проверяем.

Эталон не должен быть выведен в коде HTML/JS, иначе пользователь может узнать как правильно выполнить задание.

Что-то я запутался как это сделать. Если я случайным образом все перемешал(ключи при этом 0,1,2,3,...) и отправил результат ajax'ом на сервер, то с чем там на сервере я буду сравнивать? Всюду натуральный ряд чисел.
PM   Вверх
bars80080
Дата 27.5.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



как с чем сравнивать? с самими строками. ты же можешь вновь повторить выборку и сравнить итоговые результаты с пришедшими?
если не хочется гонять туда-сюда большие объёмы, то можно аяксом назад слать хэши строк
PM MAIL WWW   Вверх
Win MK 32
Дата 27.5.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

Репутация: нет
Всего: нет



bars80080, не получится так smile

Ладно, а как можно перемешать массив в PHP чтобы ключи оставались прежние, но переместились куда надо? А не так, что после микста они стали 0,1,2,3, ... .
PM   Вверх
Win MK 32
Дата 27.5.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

Репутация: нет
Всего: нет



В базе хранится текст:
Цитата(1 в базе)

1:строка1
2:строка2
3:строка3
4:строка4

Сервер загружает это из базы, преобразует в массив и отправляет клиенту, предварительно перемешав:
Цитата(2 после микста)

1:строка4
2:строка2
3:строка1
4:строка3


Пользователь раставляет все в таком порядке:
Цитата(3 от пользователя (после микста))

3:строка1
2:строка2
1:строка4
4:строка3

и отправляет на сервер такой массив:
3,2,1,4

Дальше как на сервере я проверю и с чем сравню? С вариантом 2? Так там не эталон, там же уже микст.

По идее надо сравнивать пользовательский 3,2,1,4 с 3,2,4,1 (как видно из третьего варианта такая последовательность верная). Но как сервер узнает о таком эталоне?

Не понимаю, товарищи! Не понимаю! 
PM   Вверх
bars80080
Дата 27.5.2009, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



обычно делают так:

id | text | rang
1 | строка1 | 3
2 | строка2 | 1
3 | строка3 | 2
4 | строка4 | 4

мешает массив, отсылаешь клиенту id и text, где он их должен расставить. но передаёт он тебе обратно чистые id, т.к. не имеет смысла гонять текст. на сервере уже выясняешь, совпадает ли с рангом
PM MAIL WWW   Вверх
NLspieler
Дата 27.5.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Вот вам функция тасования массива. Именно это и нужно?

Код

<?php

//Это тот самый массив, который ты береш из базы данных.  
$array[0] = array ('id' => 3 ; 'wopros' => 'Что это такое') ;
$array[1] = array ('id' => 5 ; 'wopros' => 'Другой вопрос') ;
//и т.д.

$array = mixer ($array , 66) ; //запускаешь функцию смешивания. Текст приводится ниже.




function mixer ($array , $how_long)
{
    $count = count ($array) ;  //Вычисляем длину массива
    
    for ($n = 0 ; $n < $how_long ; $n++)
    {
        $array = mix ($array , $count) ;  //Производим смешивания массива $how_long раз
    }
    
    return $array ;
}

function mix ($array , $count)
{
    $x = 0 ;
    $y = 0 ;
    
    while ($x==$y)
    {
        $x = rand ( 0 , $count - 1 ) ;  //случайно подбираем два числа в пределах ключей нашего массива
        $y = rand ( 0 , $count - 1 ) ;  //пока они не будут различатся
    }
    
    $bufer = $array[$x] ;               //меняем местами элементы массива
    $array[$x] = $array[$y] ;
    $array[$y] = $bufer ;
    
    return $array ;
}

?>


Она работает, но как мне кажется, при больших массивах может тормозить. А может и не тормозит. 
Попробую придумать оптимизированный вариант...

Это сообщение отредактировал(а) NLspieler - 27.5.2009, 19:44
PM MAIL   Вверх
enof
Дата 27.5.2009, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



NLspieler, http://php.net/shuffle  ?

PM MAIL ICQ Skype   Вверх
NLspieler
Дата 27.5.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



enof, да, это именно то, что нужно топикстартеру.

Код

shuffle ( $array ) ;

после этого массив перетусуется. 

Так даже не интересно, я уже 5 или 10 раз "переписываю" стандартную функцию. 

Это сообщение отредактировал(а) NLspieler - 27.5.2009, 21:34
PM MAIL   Вверх
bars80080
Дата 27.5.2009, 21:45 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(NLspieler @  27.5.2009,  21:31 Найти цитируемый пост)
это именно то, что нужно топикстартеру.

это не нужно топикстартеру, так как спрашивал он совершенно про другое, а именно: каким образом определить исходный массив

(хотя задача, имхо, надумана)
PM MAIL WWW   Вверх
enof
Дата 27.5.2009, 21:46 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



NLspieler, книжку какую-нибудь прочитайте по пхп.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.