|
Модераторы: Alx, Fixin |
|
Рыжий |
|
||||||||||
Помешанный Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: 1 Всего: 20 |
И снова продолжаю тему Интерестных задач по программированию, на этот раз, PHP!
Помним правила: сюда можно, даже нужно, постить только задачки, прочий флейм неуместен. Удачи! Задачка №1
Задача №2
Дальше решил запостить задания по регулярным выражениям: Задача №3
Задача №4
Задача №5
Это сообщение отредактировал(а) PHP-Script - 22.6.2005, 00:50 |
||||||||||
|
|||||||||||
Irokez |
|
|||
индеец Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: 1 Всего: 53 |
извините конечно... но чем они интересные
|
|||
|
||||
Рыжий |
|
|||
Помешанный Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: 1 Всего: 20 |
Irokez
Ну во первых это не для тебя задачи Тебе уже не до задачек... А во вторых - просто собираю коллекцию различных по тематике задач, чтобы расширить свой кругозор PS с тебя штраф - 5 задач. |
|||
|
||||
Irokez |
|
||||||||||||
индеец Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: 1 Всего: 53 |
ок Задача №1 - Транзакция
Задача №2 - Шифрование текста
Задача №3 - Защита картинок
Задача №4 - Сравнение картинок
Задача №5 - Генератор регулярных выражений
ЗЫ если я дал эти задачи - это не значит что я знаю как их решить |
||||||||||||
|
|||||||||||||
mr.Anderson |
|
|||
iOS Lead Developer Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Офигеть! Я из всех заданных тут задачек могу решить только №2 у PHP-Script.
Ну, давайте начнем. Но: на таких сайтах обычно выводится картиночка с циферками. Если надо так же, то я не знаю решения. А если просто генерация цифр (4 цифры), то пожалуйста:
Я код не проверял, написал только сейчас, с лету, так что могут быть ошибки. Но скрипт мне нравится. Красивый. Даже если не работает. Это сообщение отредактировал(а) sim7 - 29.6.2005, 17:37 |
|||
|
||||
Irokez |
|
|||
индеец Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: 1 Всего: 53 |
странная генерация =) число будет иметь от 0 до 20 знаков и зачем нужны пустые строки? |
|||
|
||||
mr.Anderson |
|
|||
iOS Lead Developer Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Млин, в самом деле, чего это я? Надо эту строчку во так подправить:
А пустые строки - а как вы предлагаете написать четыре раза подряд mt_rand? Что, безо всяких пробелов? Вот я и сделал пустые строки. Тип переменной будет string, как я понимаю... |
|||
|
||||
Mal Hack |
|
|||
Мудрый... Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
И так строкой будет,
|
|||
|
||||
Irokez |
|
|||
индеец Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: 1 Всего: 53 |
лучше было бы:
Это сообщение отредактировал(а) Irokez - 29.6.2005, 20:41 |
|||
|
||||
mr.Anderson |
|
|||
iOS Lead Developer Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Mal Hack, понял.
Irokez, а код не объясните? Что за strpad? И потом, почему лучше? Так получится в две строки, а у меня в одну. ;) Добавлено @ 17:38 В общем, код, мной написанный 4 поста назад, я подправил. С учетом строчки у Mal Hack. |
|||
|
||||
Mal Hack |
|
|||
Мудрый... Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Irokez
ну имхо, это изврат... Тогда уж проще сделать mt_rand( 10000 , 999999 ); Добавлено @ 20:24 PS:: str_pad(); http://php.net/str_pad |
|||
|
||||
Irokez |
|
||||
индеец Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: 1 Всего: 53 |
да нет, совсем не изврат. mt_rand( 10000 , 999999 ); - получим число от 10000 до 999999, в моем коде - то что и требовалось - число от 0 до 9999 с ведущими нулями
генерируем случайное число от 0 до 9999, если число получилось не 4-х значное (<1000) дополняем недостающие нули функцией str_pad() |
||||
|
|||||
mr.Anderson |
|
|||
iOS Lead Developer Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Что-то тут тихо...
А нельзя ли задать задачки попроще? А то я тут вообще ничего не могу выполнить... Добавлено @ 20:43 Да, и еще: функция str_pad пишется через подчеркивание, а не вместе!
|
|||
|
||||
Bikutoru |
|
|||
Увлекающийся Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: нет Всего: 22 |
Irokez, помнится, ты сам грозился эту задачу решить... Как успехи? -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
Irokez |
|
|||
индеец Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: 1 Всего: 53 |
угу помню , сделал для массива строк с одинаковыми длинами, пока на этом остановился |
|||
|
||||
Bikutoru |
|
|||
Увлекающийся Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: нет Всего: 22 |
Irokez, значит я дальше продвинулся - для строк с разными длинами у меня что-то получается Правда ничего лучше такого
оно пока не генерит -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
AztEK |
|
|||
Опытный Профиль Группа: Участник Сообщений: 723 Регистрация: 4.1.2005 Репутация: нет Всего: 18 |
Хе-хе. Вот вам интересная задача.
Определите число и название файлов в директории, не прибегая к функциям для работы с директориями. Решение задачи основано на том факте, что PHP обладает несколькими видами кавычек, каждый из которых обладает своими свойствами. Добавлено @ 13:04 Хотел запостить ссылку на сайт с такими задачами, но вспомнил, что там есть решение этой -------------------- Linux is like wigwam -- no windows, no gates, apache inside. |
|||
|
||||
Сумасшедший |
|
||||||||
Чилавек-Каропка Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 15.8.2004 Где: Москва Репутация: нет Всего: 107 |
Irokez, Задача №3 - Защита картинок
два варианта: один с дивами, другой таблицей: первый:
Второй:
Картинка была: Первый генерит 1 232 330 Второй: 559 997 байт только кода "рисунка" Нормально отображается под ИЕ6СП2, Опера9 и ФайрФокс1.5.0.4 Есс-но ни о какой валидности для w3 я не думал.. я просто забыл про неё подумать, т.к. не было этого в условии ЗЫ: Есть еще мысли во втором варианте подключить css, тогда можно будет вроде сократить строку
до строки
Но это потом проверю Это сообщение отредактировал(а) teplik - 16.7.2006, 10:31 -------------------- Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас! |
||||||||
|
|||||||||
skyboy |
|
|||
неОпытный Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
teplik, ты размер картинки не уменьшал? В смысле, если именно этого размера картинку тыобрабатывал скриптами?
|
|||
|
||||
Сумасшедший |
|
|||
Чилавек-Каропка Профиль Группа: Завсегдатай Сообщений: 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 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас! |
|||
|
||||
skyboy |
|
|||
неОпытный Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
стопудова например, картинка в виде красного прямоугольника одного размера может быть записана в виде одной ячейки/одного слоя. А шахматная доска любого размера 8х8 - при помощи 25 полосок. Получается, всё сводится к написанию компрессора на строне сервера и декомпрессора на стороне клиента(опционально) Даёшь рукотворный JPEG на javascript Оптимизация, как на меня, возможна двумя путями: с привлечением мощностей клиента и без. Без привлечения - это такая разбивка на полосы разной ширины и разного цвета. Тут, опять же, два пути: слои(размер уменьшится за счет возможности наложения слоёв друг на друга при помощи позиционирования, но увеличится за счёт указания этого самого позиционирования - например, синий прямоугольник с красным крестом рисуется трёмя слоями - одним синим большим и двумя узкими красными) или таблицы(размер уменьшается только при подряд идущих горизонтально пикселях(или ячейки можно группировать и по строкам?)). И алгоритмов находжения оптимального наложения может быть несколько. Кроме этого, можно привлечь javascript и передавать каким-либо образом кодированную и сжатую информацию. Хотя бы тот же jpeg А потом восстанавливать в последовательность div'ов. При этом уже не надо будет искать "наложения слоёв с минимальным размером" - ведь на размер передаваемой информации это не повлияет... Хотя, нет, повлияет... Потому код надо будет хоть как-то сжимать... Кста, вот утвердят на уровне стандарта объект canvas, реализованный(насколько мне известно) в firefox - и не надо будет огород с div'ами или таблицами воротить.... Как идеи? |
|||
|
||||
skyboy |
|
|||
неОпытный Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
ещё идея: проиндексировать цвета, используя классы для стилей. Если цвет всетрчается чаще одного раза, есть смысл описать класс и накладывать на ячейки/слои. Если же цвет встречается только единожды, то лучше задать явно...
Это сообщение отредактировал(а) skyboy - 17.7.2006, 11:17 |
|||
|
||||
Сумасшедший |
|
|||
Чилавек-Каропка Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 15.8.2004 Где: Москва Репутация: нет Всего: 107 |
Мысль:
Передать JavaScript рисунок как бинарник, на стороне JavaScript выполнить преобразование со сжатием в дивы, и вывести эту штуку на экран Комментарии к мысли: Слишком большая нагрузка на клиентский компьютер: и поиск дивов, и их вывод.. А если прийдется выводить изображение, которое в jpg весит около метра.. Сначала загрузка, потом обработка, потом вывод... слишком долго.. Что-то вроде on-line Xnview=) Мысль: Выполнить преобразование изображения в формат дивов на стороне сервера Сжать преобразованный массив данных Записать сжатый массив данных в файл При выводе изображения PHP передает файл в JavaScript, который уже выполняет распаковку и и прорисовку дивов на стороне клиента. Кстати.. гкхмпредставляю глазки юзера ползающего по сети с отключенной графикой и увидевшего вдруг рисунки.. гкхм.. =) Комментарии к мысли: Шифрование... в-принципе можно, вот только пока мое мнение, что это бессмысленно, ибо расшифровывающая функция будет доступна клиенту, а уж переделать ее в любом другом языке для вывода в тот-же canvas слишком просто Хотя и по этому поводу мысли есть: можно шифровать файл преобраованного рисунка, потом перед передачей его в JavaScript выполнять дешифровку. А то вдруг кто скачает файлик преобразованно-сжатого дивовского формата, разожмет его, и напишет программку, которая будет читать такой формат и выполнять обратное преобразование. Плюс создать несколько разных форматов файлов, и соответственно им – различных функций на JavaScript, которые будут соответственно распаковывать по-разному сжатые файлы. Чтобы снизить вероятность отлавливания функции, и ее преобразования в что-то рисующее Мысль зародилась.. теперь нуно не дать ей умереть!) В первую очередь ее носителю с голода Думаем дальше.. Сначала будем думать без сжатия файла:-) Для упрощения жизни Создаем свой формат файла для того, чтобы можно было читать оттуда дивы. Например: 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 пиксела, то смысл описывать класс для каждых двух пикселов будет теряться. Стоит подумать еще Это сообщение отредактировал(а) teplik - 17.7.2006, 21:02 -------------------- Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас! |
|||
|
||||
Сумасшедший |
|
||||
Чилавек-Каропка Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 15.8.2004 Где: Москва Репутация: нет Всего: 107 |
Реализация чтения простого формата
ver3.php
ver3.div
Добавлено @ 21:22 Это чтобы потом не забыть:-) Теперь можно думать и про реализацию сжатия:-) Есть вопрос: можно сжимать при выводе страницы, а можно каждое изображение только по одному разу. Второй вариант ихмо лучше - не будет сильной нагрузки на сервер + более высокая скорость показа изображения. Но тогда возникает вопрос, а не стоит ли использовать какой-либо другой язык программирования для выполнения сжатия? -------------------- Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас! |
||||
|
|||||
skyboy |
|
||||||||||
неОпытный Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
Зато нет ограничения на время выполнения скрипта. Да и "отрисовка" одного рисунка - меньше, чем просчёт 2035 рисунков одновременно. Впрочем, мне тоже такой подход не по душе...
потенциально - ничего страшного. хоть 28 Мб. сколько будет занимать черный прямоугольник 20000х20000 пикселей в формате jpeg? а один div с атрибутами ширины и высоты?
А простые div'ы и таблицы не "разожмёт"?
Постановка задачи была о PHP, правильно? |
||||||||||
|
|||||||||||
Сумасшедший |
|
||||||
Чилавек-Каропка Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 15.8.2004 Где: Москва Репутация: нет Всего: 107 |
К примеру цветовая гамма
неправильно выше написал: к примеру диагональные линии различных цветов.
Правильно Будем мучать PHP) -------------------- Однажды ты спросишь, а я отвечу: "Время ожидания специалиста - 10 минут". Ты бросишь трубку, так и не узнав, что Ваш звонок очень важен для нас! |
||||||
|
|||||||
skyboy |
|
|||
неОпытный Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
||||
|
||||
rMaveric |
|
|||
Опытный Профиль Группа: Участник Сообщений: 375 Регистрация: 18.7.2003 Репутация: нет Всего: 6 |
2 Модераторы
Давайте, ребята, чистить тему. И выкладывать суда только задачи. Или еще лучше для каждой задачи по топику. 2 Irokez Твои задачи немного интересней, но не на много Задача с шифрованием вообще элементарная, особенно криптографическая. Но функцию авторасшифровки без ключа можно написать только зная тип передаваемых сообщений. Так например html расшифровать труда не составит даже без ключа. -------------------- |
|||
|
||||
euginewm |
|
||||||
Drupal Development Профиль Группа: Участник Сообщений: 28 Регистрация: 25.9.2006 Где: Zaporozhye Репутация: нет Всего: нет |
Решение второй задачи (PHP-Script)
страница с формой
страница проверки формы:
И собственно генерация самого изображения
Вот Это сообщение отредактировал(а) euginewm - 1.10.2006, 18:40 |
||||||
|
|||||||
gta4kv |
|
|||
Walking around mad. Профиль Группа: Завсегдатай Сообщений: 1868 Регистрация: 25.7.2006 Репутация: нет Всего: 91 |
Совсем простая задача:
Что должно быть в $string? ;) Умников попрошу - помолчать. Это сообщение отредактировал(а) gta4kv - 19.1.2008, 16:59 |
|||
|
||||
WildField |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 10.2.2008 Репутация: нет Всего: нет |
Задача про шифрофку:
P.S. подскажите как сгенерировать сам алфавит функцией
|
|||
|
||||
linuxoid |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
Задача
|
|||
|
||||
linuxoid |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 180 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
Еще интересная задача (которая сгодится для решения на любом языке): Пересекаются ли 2 линии? Вы задаете 2 точки, которые определяют линию на плоскости и 2 точки, которые определяют 2-ую линию. Нужно вывести на экран "Линии пересекаются", если они пересекаются. Я делал это на Java (т.к. можно наглядно нарисовать линию + там есть встроенная функция, чтобы узнать о пересечении линий, т.е. я сравнивал показания встроенной со своими - все сходится при различных вариантах расположения линий). В общем не знаю на сколько быстро вы эту задачу решите, но я мучился с ней целый день (хотя с самого начала написал на бумаге правильный алгоритм, в котором всего около 3-х шагов, но на деле - код не так уж очевиден). Так что друзья советую вам размять мозг и написать такую прогу. При этом, разумеется, не подсматривая в готовые решения. По идее все что вам нужно - знать все координаты, а рисовать линии не обязательно.
Это сообщение отредактировал(а) linuxoid - 26.9.2010, 17:57 |
|||
|
||||
Elerond |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 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 минут --------------------
Мой блог |
|||
|
||||
awerny |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 15.2.2012 Репутация: нет Всего: нет |
Еще одна задачка (сам придумал, публикуеться впервые):
Условие: Кондуктор в начале смены на пачке с талончиками отметила порядковый номер текущего билета как 219007 К концу смены, номер билета в пачке был 219625. Задача: 1. Создать инструмент для кондукторов для подсчета количества счастливых билетиков проданых во время смены в виде файла с формой из 2-х полей и кнопкой. 2. Циклом должны выводиться все номера билетов проданых кондуктором, красным цветом подсветить счастливые билеты. 3. Принимать диапазон чисел по маске хххххх с разницой между числами в 5000. 4. В конце вывести процент счастливых билетов проданых пассажирам, номера счастлывых билетов. Все вывести в диве с прокруткой. Задачка простенькая, но очень занимательная для тех, кто только начал учить РНР. Как то давно сам делал, билетов счастливых получаеться около 4%, у кого есть желание попробуйте. ЗЫ: Анекдот в догонку: В больницу был доставлен кондуктор с острым отравлением счасливыми билетиками! Это сообщение отредактировал(а) awerny - 15.2.2012, 02:37 |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |