Модераторы: Alx, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PHP, Задачки 
:(
    Опции темы
Рыжий
Дата 22.6.2005, 00:22 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

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



И снова продолжаю тему Интерестных задач по программированию, на этот раз, PHP!
Помним правила: сюда можно, даже нужно, постить только задачки, прочий флейм неуместен.
Удачи!

Задачка №1
Цитата

Тебе необходимо написать голосование. Использовать базу данных

Для реализации голосования необходимо продумать детали:

1) Структура базы.
2) Логику скрипта (вывод результатов, само голосование, администрирование, архив).
3) Интерфейс пользователя.
4) Анти-флуд (для защиты от накрутки).
Вопрос задал IZ@TOP



Задача №2
Цитата

При регистрации многие из вас видели, что нужно ввести "контрольные цифры". Вам нужно реализовать этот скрипт - каждый раз контрольные цифры должны быть разные, должна быть проверка правильности данных.
Вопрос задал PHP-Script



Дальше решил запостить задания по регулярным выражениям:
Задача №3
Цитата

Пользователь ввел на форме данные в поле "Телефон". Надо проверить, подходит ли строка введенная пользователем под шаблон: (ХХХХ) ХХХ-ХХХХ, причем важный момент в том, что 78-9789 - является правильным адресом (т.е. маска не жесткая по кол-во цифр, но кол-во цифр не должно быть 1, к примеру). После ) может быть пробел, а может и нет, а может и несколько (это подсказка).



Задача №4
Цитата

Есть текст с списками цен. Надо вырезать (получить массива $matches) из него цены в USD, RUR или EU. ( как пример могут быть строка 23.78 USD ).



Задача №5
Цитата

Необходимо в тексте выделить доменные имена, сделав их ссылкам, в зонах com, net, org красным цветом, а ru, su, ua - синим, aero - зеленым  smile . Т.е. в тексте есть "зайди сюда ya.ru". Подсказка - выполнить надо через callback функцию. ЗЫ: ссылка может иметь вид: ya.ru?param1=param2&... или ya.ru/wer/wr/wr.



Это сообщение отредактировал(а) PHP-Script - 22.6.2005, 00:50
PM MAIL ICQ   Вверх
Irokez
Дата 22.6.2005, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



извините конечно... но чем они интересные smile
PM   Вверх
Рыжий
Дата 22.6.2005, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

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



Irokez
Ну во первых это не для тебя задачи smile Тебе уже не до задачек...
А во вторых - просто собираю коллекцию различных по тематике задач, чтобы расширить свой кругозор smile
PS с тебя штраф - 5 задач.
PM MAIL ICQ   Вверх
Irokez
Дата 22.6.2005, 01:25 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



Цитата(PHP @ 22.6.2005, 00:45)
Irokez
Ну во первых это не для тебя задачи smile Тебе уже не до задачек...
А во вторых - просто собираю коллекцию различных по тематике задач, чтобы расширить свой кругозор smile
PS с тебя штраф - 5 задач.

smile ок

Задача №1 - Транзакция
Цитата

Если не ошибаюсь, то в mysql 4 у движка таблицы MyISAM нету реализации транзакции, задача - реализовать такую возможность программнам путем. Например через отдельный класс.


Задача №2 - Шифрование текста
Цитата

Реализовать шифрование текста путем замены букв друг другом (напр. A => B, B=>X, итд). Каждая буква может представлять только одну другую букву. Написать три функции - первая генерирует ключ в виде нового алфавита. Вторая шифрует заданный текст по заданному ключу. Третья расшифровывает заданный зашифрованный текст по заданному ключу.
Еще интереснее, если кто-нибудь напишет функцию, которая будет расшифровывать текст без ключа smile


Задача №3 - Защита картинок
Цитата

Многие на форуме спрашивают - как можно защитить картинки от скачивания. На то получают ответ - что это невозможно. Чтож такое возможно, правда вряд ли применимо smile
Задача заключается в защите картики путем замены ее на соответствующий HTML код (напр каждый пиксель заменить на див шириной и высотой в 1 пиксель и такого же цвета)
У кого получится в итоге самый легкий HTML код, добавлю +


Задача №4 - Сравнение картинок
Цитата

Простая задача - даны две картинки, сравнить.


Задача №5 - Генератор регулярных выражений
Цитата

Написать функцию, которая генерирует перл-совместимое регулярное выражение, которое будет распознавать заданные строки (строки задаются в массиве). Можно также добавить строки - которые нужно отрицать.

ЗЫ если я дал эти задачи - это не значит что я знаю как их решить smile
PM   Вверх
mr.Anderson
Дата 29.6.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



smile smile smile smile Офигеть! Я из всех заданных тут задачек могу решить только №2 у PHP-Script.
Ну, давайте начнем. Но: на таких сайтах обычно выводится картиночка с циферками. Если надо так же, то я не знаю решения. А если просто генерация цифр (4 цифры), то пожалуйста:
Код

<?php

$vvedeno=$_POST['text'];
$generation=mt_rand(1,9).mt_rand(0,9).mt_rand(0,9).mt_rand(0,9);
function nextloc()
{
echo "<script>location.href='NEXT_LOCATION';</script>";
}
if(isset($_POST['sub']))
{

if(isset($_POST['vvedeno'])) $flag=($generation==$vvedeno)?true:false;
{
if($flag) nextloc();
else
{
?>
<form method=post>
Введите контрольные цифры: <?=$generation?>
<input type=text name='text'><br>
<input type=submit name='sub'>
</form>
<?
}
}

}

?>

Я код не проверял, написал только сейчас, с лету, так что могут быть ошибки.
Но скрипт мне нравится. Красивый. smile Даже если не работает.

Это сообщение отредактировал(а) sim7 - 29.6.2005, 17:37


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Irokez
Дата 29.6.2005, 17:09 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



Цитата(sim7 @ 29.6.2005, 16:55)

$generation="".mt_rand(0,1000)."".mt_rand(0,1000)."".mt_rand(0,1000)."".mt_rand(0,1000)."";

странная генерация =) число будет иметь от 0 до 20 знаков и зачем нужны пустые строки?
PM   Вверх
mr.Anderson
Дата 29.6.2005, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Млин, в самом деле, чего это я? Надо эту строчку во так подправить:
Код

$generation=mt_rand(1,9)."".mt_rand(0,9)."".mt_rand(0,9)."".mt_rand(0,9);

А пустые строки - а как вы предлагаете написать четыре раза подряд mt_rand? Что, безо всяких пробелов? Вот я и сделал пустые строки. Тип переменной будет string, как я понимаю...


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mal Hack
Дата 29.6.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



И так строкой будет,
Код
$generation=mt_rand(1,9).mt_rand(0,9).mt_rand(0,9).mt_rand(0,9);

PM ICQ   Вверх
Irokez
Дата 29.6.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



лучше было бы:
Код

$generation = mt_rand(0, 9999);
$generation = str_pad($generation, 4, '0', STR_PAD_LEFT);


Это сообщение отредактировал(а) Irokez - 29.6.2005, 20:41
PM   Вверх
mr.Anderson
Дата 29.6.2005, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Mal Hack, понял.
Irokez, а код не объясните? Что за strpad? И потом, почему лучше? Так получится в две строки, а у меня в одну. smile ;)
Добавлено @ 17:38
В общем, код, мной написанный 4 поста назад, я подправил. С учетом строчки у Mal Hack.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Mal Hack
Дата 29.6.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Irokez
ну имхо, это изврат...
Тогда уж проще сделать mt_rand( 10000 , 999999 );
Добавлено @ 20:24
PS:: str_pad(); http://php.net/str_pad
PM ICQ   Вверх
Irokez
Дата 29.6.2005, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



Цитата(Mal @ 29.6.2005, 20:23)
Irokez
ну имхо, это изврат...
Тогда уж проще сделать mt_rand( 10000 , 999999 );

да нет, совсем не изврат.
mt_rand( 10000 , 999999 ); - получим число от 10000 до 999999, в моем коде - то что и требовалось - число от 0 до 9999 с ведущими нулями

Цитата(sim7 @ 29.6.2005, 17:37)
Irokez, а код не объясните? Что за strpad? И потом, почему лучше? Так получится в две строки, а у меня в одну. smile ;)

генерируем случайное число от 0 до 9999, если число получилось не 4-х значное (<1000) дополняем недостающие нули функцией str_pad()
PM   Вверх
mr.Anderson
Дата 1.7.2005, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Что-то тут тихо...
А нельзя ли задать задачки попроще? А то я тут вообще ничего не могу выполнить... smile
Добавлено @ 20:43
Да, и еще: функция str_pad пишется через подчеркивание, а не вместе!
Код

string str_pad(string strinput, int pad_length [, string pad_string [, int pad_type]])



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Bikutoru
Дата 6.7.2005, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


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

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



Цитата
Написать функцию, которая генерирует перл-совместимое регулярное выражение, которое будет распознавать заданные строки (строки задаются в массиве). Можно также добавить строки - которые нужно отрицать.


Irokez, помнится, ты сам грозился эту задачу решить... Как успехи? smile


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Irokez
Дата 6.7.2005, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

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



Цитата(Bikutoru @ 6.7.2005, 14:34)
Irokez, помнится, ты сам грозился эту задачу решить... Как успехи? smile

угу помню smile , сделал для массива строк с одинаковыми длинами, пока на этом остановился
PM   Вверх
Bikutoru
Дата 6.7.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


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

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



Irokez, значит я дальше продвинулся - для строк с разными длинами у меня что-то получается smile Правда ничего лучше такого
Цитата
/^a[bc][ce]{2}([b\.-]([d])?)?$/i

оно пока не генерит


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
AztEK
Дата 19.5.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хе-хе. Вот вам интересная задача.


Определите число и название файлов в директории, не прибегая к функциям для работы с директориями. Решение задачи основано на том факте, что PHP обладает несколькими видами кавычек, каждый из которых обладает своими свойствами.

Добавлено @ 13:04 
Хотел запостить ссылку на сайт с такими задачами, но вспомнил, что там есть решение этой smile 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Сумасшедший
Дата 16.7.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чилавек-Каропка
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 15.8.2004
Где: Москва

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



Irokez, Задача №3 - Защита картинок
два варианта: один с дивами, другой таблицей:
первый:
Код

<?
$DIV0="<DIV style='position:absolute;width:1;height:1;background-color:#";
$DIV1="'></DIV>";
$pict=ImageCreateFromPng("./100px-Coat_of_Arms_of_Vladivostok_%28Primorsky_krai%29_%282001%29.png");
list($width, $height, $type, $attr) = getimagesize("./100px-Coat_of_Arms_of_Vladivostok_%28Primorsky_krai%29_%282001%29.png");
for($i=0;$i<$width;$i++)
{
for($j=0;$j<$height;$j++)
    {
    $rgb = ImageColorAt($pict, $i, $j);
    $r = dechex(($rgb >> 16) & 0xFF);
    $g = dechex(($rgb >> 8) & 0xFF);
    $b = dechex($rgb & 0xFF);
    if(strlen($r)<2)
        {$r="0".$r;}
    if(strlen($g)<2)
        {$g="0".$g;}
    if(strlen($b)<2)
        {$b="0".$b;}
    echo $DIV0.$r.$g.$b."; top:".$j.";left: ".$i.";".$DIV1;
    }
}
?>


Второй:
Код

<TABLE border=0 cellspacing=0 cellpadding=0>
<?
$pict=ImageCreateFromPng("./100px-Coat_of_Arms_of_Vladivostok_%28Primorsky_krai%29_%282001%29.png");
list($width, $height, $type, $attr) = getimagesize("./100px-Coat_of_Arms_of_Vladivostok_%28Primorsky_krai%29_%282001%29.png");
for($i=0;$i<$height;$i++)
{
echo("<TR>");
for($j=0;$j<$width;$j++)
    {
    $rgb = ImageColorAt($pict, $j, $i);
    $r = dechex(($rgb >> 16) & 0xFF);
    $g = dechex(($rgb >> 8) & 0xFF);
    $b = dechex($rgb & 0xFF);
    if(strlen($r)<2)
        {$r="0".$r;}
    if(strlen($g)<2)
        {$g="0".$g;}
    if(strlen($b)<2)
        {$b="0".$b;}
    echo("<TD width=1 height=1 bgcolor=\"#");
    echo $r.$g.$b;
    echo("\"></TD>");
    }
echo("</TR>");
}
?>
</TABLE>

Картинка была: user posted image
Первый генерит 1 232 330
Второй: 559 997
байт только кода "рисунка"
Нормально отображается под ИЕ6СП2, Опера9 и ФайрФокс1.5.0.4
Есс-но ни о какой валидности для w3 я не думал.. я просто забыл про неё подумать, т.к. не было этого в условии smile smile 

ЗЫ: Есть еще мысли во втором варианте подключить css, тогда можно будет вроде сократить строку 
Код

<TD width=1 height=1

до строки
Код

<TD class="q"

Но это потом проверюsmile 

Это сообщение отредактировал(а) teplik - 16.7.2006, 10:31


--------------------
Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас!
PM MAIL WWW Jabber   Вверх
skyboy
Дата 16.7.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



teplik, ты размер картинки не уменьшал? В смысле, если именно этого размера картинку тыобрабатывал скриптами? 
PM MAIL   Вверх
Сумасшедший
Дата 16.7.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чилавек-Каропка
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 15.8.2004
Где: Москва

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



Именно этого размера размера, именно эту картинку и брал для тестов.
Для второго варианта как раз примерно так и должно получиться:
strlen('<TD width=1 height=1 bgcolor="#9b9b9b"></TD>') == 44;
strlen("<TR></TR>") == 9;
Размер кода одной строки
L_STR_ONE=strlen("<TR>")+W*strlen("<TD width=1 height=1 bgcolor="#9b9b9b"></TD>")+strlen("</TR>")
Размер кода всех строк:
L_WH=L_STR_ONE*H
Полный код:
SIZE=strlen("<TABLE border=0 cellspacing=0 cellpadding=0>")+L_WH+strlen("</TABLE>");
Подставляем значения:
L_STR_ONE=4+100*44+5==4409
L_WH=4409*127==559943
SIZE=44+559943+8==559995
Хм.. рядовой Код, за вами замечен косяк.. - появилось два лишних байта..
Можно списать на символ окончания файла)
Есть варианты с меньшим объемом html?) 
  

Это сообщение отредактировал(а) teplik - 16.7.2006, 19:43


--------------------
Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас!
PM MAIL WWW Jabber   Вверх
skyboy
Дата 16.7.2006, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(teplik @  16.7.2006,  19:12 Найти цитируемый пост)
Есть варианты с меньшим объемом html?) 

стопудова smile например, картинка в виде красного прямоугольника одного размера может быть записана в виде одной ячейки/одного слоя. А шахматная доска любого размера 8х8 - при помощи 25 полосок. Получается, всё сводится к написанию компрессора на строне сервера и декомпрессора на стороне клиента(опционально)smile Даёшь рукотворный JPEG  на javascript smile 
Оптимизация, как на меня, возможна двумя путями: с привлечением мощностей клиента и без. Без привлечения - это такая разбивка на полосы разной ширины и разного цвета. Тут, опять же, два пути: слои(размер уменьшится за счет возможности наложения слоёв друг на друга при помощи позиционирования, но увеличится за счёт указания этого самого позиционирования - например, синий прямоугольник с красным крестом рисуется трёмя слоями - одним синим большим и двумя узкими красными) или таблицы(размер уменьшается только при подряд идущих горизонтально пикселях(или ячейки можно группировать и по строкам?)). И алгоритмов находжения оптимального наложения может быть несколько. Кроме этого, можно привлечь javascript и передавать каким-либо образом кодированную и сжатую информацию. Хотя бы тот же jpeg smile
А потом восстанавливать в последовательность div'ов. При этом уже не надо будет искать "наложения слоёв с минимальным размером" - ведь на размер передаваемой информации это не повлияет... Хотя, нет, повлияет... Потому код надо будет хоть как-то сжимать... 
Кста, вот утвердят на уровне стандарта объект canvas, реализованный(насколько мне известно) в firefox - и не надо будет огород с div'ами или таблицами воротить.... 
Как идеи? smile 
PM MAIL   Вверх
skyboy
Дата 17.7.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



ещё идея: проиндексировать цвета, используя классы для стилей. Если цвет всетрчается чаще одного раза, есть смысл описать класс и накладывать на ячейки/слои. Если же цвет встречается только единожды, то лучше задать  явно...  

Это сообщение отредактировал(а) skyboy - 17.7.2006, 11:17
PM MAIL   Вверх
Сумасшедший
Дата 17.7.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чилавек-Каропка
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 15.8.2004
Где: Москва

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



Мысль:
Передать JavaScript рисунок как бинарник, на стороне JavaScript выполнить преобразование со сжатием в дивы, и вывести эту штуку на экран
Комментарии к мысли:
Слишком большая нагрузка на клиентский компьютер: и поиск дивов, и их вывод.. А если прийдется выводить изображение, которое в jpg весит около метра.. Сначала загрузка, потом обработка, потом вывод... слишком долго.. Что-то вроде on-line Xnview=)
Мысль:
Выполнить преобразование изображения в формат дивов на стороне сервера
Сжать преобразованный массив данных
Записать сжатый массив данных в файл
При выводе изображения PHP передает файл в JavaScript, который уже выполняет распаковку и и прорисовку дивов на стороне клиента.
Кстати.. гкхмsmileпредставляю глазки юзера ползающего по сети с отключенной графикой и увидевшего вдруг рисунки.. гкхм.. =)
Комментарии к мысли:
Шифрование... в-принципе можно, вот только пока мое мнение, что это бессмысленно, ибо расшифровывающая функция будет доступна клиенту, а уж переделать ее в любом другом языке для вывода в тот-же canvas слишком просто Хотя и по этому поводу мысли есть: можно шифровать файл преобраованного рисунка, потом перед передачей его в JavaScript выполнять дешифровку. А то вдруг кто скачает файлик преобразованно-сжатого дивовского формата, разожмет его, и напишет программку, которая будет читать такой формат и выполнять обратное преобразование. Плюс создать несколько разных форматов файлов, и соответственно им – различных функций на JavaScript, которые будут соответственно распаковывать по-разному сжатые файлы. Чтобы снизить вероятность отлавливания функции, и ее преобразования в что-то рисующееsmile
Мысль зародилась.. теперь нуно не дать ей умереть!) В первую очередь ее носителю с голодаsmile
Думаем дальше.. Сначала будем думать без сжатия файла:-) Для упрощения жизниsmile
Создаем свой формат файла для того, чтобы можно было читать оттуда дивы.
Например:
00000
00800
08880
00800
00000
(0 - зеленый 8-черный)
x y width height color через табуляцию
0\t0\t5\t5\n00FF00\n
2\t1\t1\t3\t000000\n
1\t2\t3\t1\t000000
Правда с прозрачностью такой фокус не пройдет=( Прийдется делать иначе.
Например построчно:
0\t0\t5\t1\t00FF00\n
0\t1\t2\t1\t00FF00\n
3\t1\t2\t1\t00FF00\n
0\t2\t1\t1\t00FF00\n
4\t2\t1\t1\t00FF00\n
0\t3\t2\t1\t00FF00\n
3\t3\t2\t1\t00FF00\n
0\t4\t5\t1\t00FF00

Добавлено @ 19:45 
Про классы.. Можно для немногоцветных рисунков! А то если в рисунке много градиентных линий, например по 2 пиксела, то смысл описывать класс для каждых двух пикселов будет теряться. Стоит подумать ещеsmile    

Это сообщение отредактировал(а) teplik - 17.7.2006, 21:02


--------------------
Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас!
PM MAIL WWW Jabber   Вверх
Сумасшедший
Дата 17.7.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чилавек-Каропка
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 15.8.2004
Где: Москва

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



Реализация чтения простого формата
ver3.php
Код

<?$f_content=file_get_contents("./ver3.div");?>
<script language='JavaScript'>
img_txt="<?echo($f_content);?>";
arr=img_txt.split('\t');
document.write(arr);
document.write("<BR>");
document.write(arr.length/5);
document.write("<HR>");

$k=0;
for(i=0;i<arr.length;i++)
{
document.write("<DIV style='position:absolute;background-color:#");
//document.write("color:");
document.write(arr[i+4]);
document.write(";left:");
document.write(arr[i]);
document.write(";top:");
document.write(arr[i+1]);
document.write(";width:");
document.write(arr[i+2]);
document.write(";height:");
document.write(arr[i+3]);
document.write(";'></DIV>");
//document.write("<B>Hall");
//document.write("</B>");
document.write("<BR>");
i=i+4;
}
</SCRIPT>

ver3.div
Код

0    0    50    50    00FF00    20    10    10    30    000000    10    20    30    10    000000


Добавлено @ 21:22 
Это чтобы потом не забыть:-) Теперь можно думать и про реализацию сжатия:-)
Есть вопрос: можно сжимать при выводе страницы, а можно каждое изображение только по одному разу.
Второй вариант ихмо лучше - не будет сильной нагрузки на сервер + более высокая скорость показа изображения. Но тогда возникает вопрос, а не стоит ли использовать какой-либо другой язык программирования для выполнения сжатия? 


--------------------
Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас!
PM MAIL WWW Jabber   Вверх
skyboy
Дата 17.7.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(teplik @  17.7.2006,  19:41 Найти цитируемый пост)
Слишком большая нагрузка на клиентский компьютер: и поиск дивов, и их вывод..

Зато нет ограничения на время выполнения скрипта. Да и "отрисовка" одного рисунка - меньше, чем просчёт 2035 рисунков одновременно. Впрочем, мне тоже такой подход не по душе...
Цитата(teplik @  17.7.2006,  19:41 Найти цитируемый пост)
 А если прийдется выводить изображение, которое в jpg весит около метра.. 

потенциально - ничего страшного. хоть 28 Мб. сколько будет занимать черный прямоугольник 20000х20000 пикселей в формате jpeg? а один  div с атрибутами ширины и высоты?
Цитата(teplik @  17.7.2006,  19:41 Найти цитируемый пост)
представляю глазки юзера ползающего по сети с отключенной графикой и увидевшего вдруг рисунки..

 smile 
Цитата(teplik @  17.7.2006,  19:41 Найти цитируемый пост)
А то вдруг кто скачает файлик преобразованно-сжатого дивовского формата, разожмет его, и напишет программку, которая будет читать такой формат и выполнять обратное преобразование.

А простые div'ы и таблицы не "разожмёт"? smile
Цитата(teplik @  17.7.2006,  19:41 Найти цитируемый пост)
если в рисунке много градиентных линий, например по 2 пиксела, то смысл описывать класс для каждых двух пикселов будет теряться.

Цитата(skyboy @  17.7.2006,  11:12 Найти цитируемый пост)
ещё идея: проиндексировать цвета, используя классы для стилей. Если цвет всетрчается чаще одного раза, есть смысл описать класс и накладывать на ячейки/слои. Если же цвет встречается только единожды, то лучше задать  явно...  

Цитата(teplik @  17.7.2006,  21:12 Найти цитируемый пост)
 Но тогда возникает вопрос, а не стоит ли использовать какой-либо другой язык программирования для выполнения сжатия? 

Постановка задачи была о PHP, правильно? smile 
PM MAIL   Вверх
Сумасшедший
Дата 17.7.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чилавек-Каропка
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 15.8.2004
Где: Москва

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



Цитата

сколько будет занимать черный прямоугольник 20000х20000 пикселей в формате jpeg? а один  div с атрибутами ширины и высоты

К примеру цветовая гамма
Цитата

ещё идея: проиндексировать цвета, используя классы для стилей. Если цвет всетрчается чаще одного раза, есть смысл описать класс и накладывать на ячейки/слои. Если же цвет встречается только единожды, то лучше задать  явно...

неправильно выше написал: к примеру диагональные линии различных цветов.
Цитата

Постановка задачи была о PHP, правильно?

Правильноsmile
Будем мучать PHP) 


--------------------
Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас!
PM MAIL WWW Jabber   Вверх
skyboy
Дата 18.7.2006, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(teplik @  17.7.2006,  22:37 Найти цитируемый пост)
К примеру цветовая гамма

Цитата(teplik @  17.7.2006,  22:37 Найти цитируемый пост)
к примеру диагональные линии различных цветов.

будут много занимать. Ты про это? А какие есть ещё идеи по уменьшению размера? 
PM MAIL   Вверх
rMaveric
Дата 9.8.2006, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 Модераторы
Давайте, ребята, чистить тему. И выкладывать суда только задачи. Или еще лучше для каждой задачи по топику.

2 Irokez 
Твои задачи немного интересней, но не на много smile Задача с шифрованием вообще элементарная, особенно криптографическая. Но функцию авторасшифровки без ключа можно написать только зная тип передаваемых сообщений. Так например html расшифровать труда не составит даже без ключа.


--------------------
Моя благодарность не будет иметь границ. в определенных рамках конечно ;)
---
Веду IT блог
PM MAIL WWW ICQ   Вверх
euginewm
Дата 1.10.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Drupal Development



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

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



Решение второй задачи (PHP-Script)

страница с формой
Код

<?php

/** string sum_text(int min, int max)
    возвращает случайный текст длиной от int min до int max символов
*/
function sum_text($min, $max) {
    // получить хеш случайного числа 40 символов
    $text = sha1(rand(1000, 9999));

    // обрезать до длинны  от 0 до (min  max)
    $text = substr($text, 0, rand($min, $max));

    return $text;
}

/** генерация случайного текста

    sum_text(int min, int max)
    возвращает случайный текст длиной от int min до int max символов
*/
session_start();
$_SESSION['img_str'] = sum_text(6, 8);

?>

<a href='index.php'>На главную</a>

<form action='register.php' method='POST'>

  <!-- случайное число/текст -->
Введите текст, который видите на изображении: 
    <img src='img.php' /><br />
    <input type='text' name='img_text' />

<!-- submit -->
<input type='submit' name='sub'>

</form>



страница проверки формы:
Код

<?php

// инициализация сессий
session_start();

// ПРОВЕРКА ФОРМЫ

// если есть данные из формы регисрации - проверить правильность заполнения полей
if(isset($_POST['sub'])) {

    // проверка случайного числа
    if ( !isset($_POST['img_text']) or $_POST['img_text'] != $_SESSION['img_str'] ) {
        $err ++;
        $error_form .= "число введено неверно <br />";
    }
    else {
    // на случай верности данных
    echo "число введено верно";
    }

}

// ОБРАБОТКА ОШИБОК
if($err > 0) {
    echo "Форма заполнена с ошибками:";
    echo "<p>$error_form</p>";
    exit;
}
?>


И собственно генерация самого изображения

Код

<?php

// генерируемое изображение

// указатель на сессию

session_start();
$string = &$_SESSION['img_str'];

header("Content-type: image/png");

define('IMG_X', 145); // высота
define('IMG_Y', 37); // ширина

// создать изображение
$img = imagecreate(IMG_X, IMG_Y);

// цвета
$white     = imagecolorallocate($img, 255, 255, 255); // фон
$silver    = imagecolorallocate($img, 192, 192, 192); // фон
$dark_gray = imagecolorallocate($img, 126, 126, 126); // сетка

// случайные темные цвета для символов
for ($i = 0; $i <= 8; $i ++) $color[] = imagecolorallocate($img, rand(0, 100), rand(0, 100), rand(0, 100));

// прорисовка сетки
for ($i = 1; $i <= IMG_X; $i += rand(6, 7)) imageline($img, $i, 0, $i, IMG_Y, $dark_gray);
for ($i = 1; $i <= IMG_Y; $i += rand(6, 7)) imageline($img, 0, $i, IMG_X, $i, $dark_gray);

$x = 0; // x расстояние между символами

// вывод текста
for($i = 0; $i < strlen($string); $i ++) {
    imagestring($img, 5, rand(1, 8)+$x, rand(0, (IMG_Y - IMG_Y/2)), $string{$i}, $color[rand(0, 8)]);
    $x += IMG_X / strlen($string);
}

// несколько линий-помех
for ($i = 0; $i < rand(5, 8); $i ++) {
    imageline($img, rand(0, IMG_X-(IMG_X/3)), rand(0, IMG_Y), rand(0, IMG_X), rand(0, IMG_Y), $dark_gray);
}

// генерация изображения
imagepng($img);

// освободить память
imagedestroy($img);
unset($string);

?>



Вот  smile 

Это сообщение отредактировал(а) euginewm - 1.10.2006, 18:40
PM MAIL Skype   Вверх
gta4kv
Дата 19.1.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

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



Совсем простая задача:

Код


if( preg_match( '/([а-яА-Я]{3})(\s)([а-яА-Я]{4})(\s)([а-яА-Я]{2})(\s)([а-яА-Я]{5})(\W{1})/is', $string, $p ) ) 
{
    echo $p[0];
}
else 
{
    exit('Не правильный формат строки');
}



Что должно быть в $string? ;) Умников попрошу - помолчать.

Это сообщение отредактировал(а) gta4kv - 19.1.2008, 16:59
PM MAIL   Вверх
WildField
Дата 24.2.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 Задача про шифрофку:
P.S. подскажите как сгенерировать сам алфавит функцией

Код

<?php
   $GLOBALS["alphabet"] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYZ";
   $GLOBALS["pass"] = "jVOFkp29sZq14zR5Bhor7mxvw3dnMYb6JtuyKi0EceSXHCPNTGQUaIf8LADgl";

//function createPass () {
    //return str_shuffle($GLOBALS["alphabet"]);
//}

function encode($text) {
    $length = strlen($text);
    $result = "";
    for ($i = 0; $i < $length; $i++) {
     $tempStr = $text{$i};
     $pos = strpos($GLOBALS["alphabet"], $tempStr);
     $result = $GLOBALS["pass"]{$pos}.$result;
    }
    return $result;
}

function decode($text) {
    $length = strlen($text);
    $result = "";
    for ($i = 0; $i < $length; $i++) {
     $tempStr = $text{$i};
     $pos = strpos($GLOBALS["pass"], $tempStr);
     $result = $GLOBALS["alphabet"]{$pos}.$result;
    }
    return $result;
}
?>

PM MAIL   Вверх
linuxoid
Дата 20.12.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Задача
Цитата

Число прописью. Советую сделать, если вы с этим не сталкивались. И не смотрите предварительно на аналогичные коды, чтобы было интересней. Попробуйте сами smile После того, как все заработает постарайтесь максимально оптимизировать код. Думаю при подробном рассмотрении появится такая возможность. К тому же надо продумать момент, что бывает одна копейка, но и 1 сантим или 1 рубль или 1 йена. Ну и разный язык. Т.е. код должен быть максимально гибким и оптимальным.

PM MAIL   Вверх
linuxoid
Дата 26.9.2010, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Еще интересная задача (которая сгодится для решения на любом языке): Пересекаются ли 2 линии? Вы задаете 2 точки, которые определяют линию на плоскости и 2 точки, которые определяют 2-ую линию. Нужно вывести на экран "Линии пересекаются", если они пересекаются. Я делал это на Java (т.к. можно наглядно нарисовать линию + там есть встроенная функция, чтобы узнать о пересечении линий, т.е. я сравнивал показания встроенной со своими - все сходится при различных вариантах расположения линий). В общем не знаю на сколько быстро вы эту задачу решите, но я мучился с ней целый день (хотя с самого начала написал на бумаге правильный алгоритм, в котором всего около 3-х шагов, но на деле - код не так уж очевиден). Так что друзья советую вам размять мозг и написать такую прогу. При этом, разумеется, не подсматривая в готовые решения. По идее все что вам нужно - знать все координаты, а рисовать линии не обязательно.

Это сообщение отредактировал(а) linuxoid - 26.9.2010, 17:57
PM MAIL   Вверх
Elerond
Дата 20.10.2010, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



linuxoid, думаю задача решается очень просто. Две первые точки определяют вектор a{xa, ya} вторая пара точек вектор b{xb, yb} ... векторы параллельны если a=cb или a=-cb где c - вещественное число.

Значит просто достаточно найти с: c=xb/xa и посмотреть равенство c=yb/ya или -с=yb/ya

PS: решение заняло 5 минут
--------------------
Мой блог
PM MAIL WWW   Вверх
awerny
Дата 15.2.2012, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Еще одна задачка (сам придумал, публикуеться впервые):

Условие:
Кондуктор в начале смены на пачке с талончиками отметила порядковый номер текущего билета как 219007
К концу смены, номер билета в пачке был 219625.

Задача:
1. Создать инструмент для кондукторов  smile   для подсчета количества счастливых билетиков проданых во время смены
в виде файла с формой из 2-х полей и кнопкой. 

2. Циклом должны выводиться все номера билетов проданых кондуктором, красным цветом подсветить счастливые билеты.

3. Принимать диапазон чисел по маске хххххх с разницой между числами в 5000.

4. В конце вывести процент счастливых билетов проданых пассажирам, номера счастлывых билетов. Все вывести в диве с прокруткой.




Задачка простенькая, но очень занимательная для тех, кто только начал учить РНР.
Как то давно сам делал, билетов счастливых получаеться около 4%, у кого есть желание попробуйте.



ЗЫ: Анекдот в догонку: В больницу был доставлен кондуктор с острым отравлением счасливыми билетиками!  smile 

Это сообщение отредактировал(а) awerny - 15.2.2012, 02:37
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема »


 




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


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

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