|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как создать изменяемое имя переменной.
Регистрация: 30.05.2014
Сообщений: 20
|
||
Просмотров: 10063
|
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Формально в автолиспе такое можно сделать - но я даже не буду говорить как, ибо даю 100% гарантию, что Вы пытаетесь что-то простое сделать через **** неправильно. Какова общая задача.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 30.05.2014
Сообщений: 20
|
Задача заключается в следующем. Написаная мной програма считает стоимость спроектированной столешницы из искуственного камня исходя из площади изделия(например для кухни). Но само изделие может иметь несколько вырезов (под мойку или варочную поверхность или еще под што либо. Необходимо отрисовывать каждый вырез и присваевать ему имя (как описано выше) дальше определяем площади каждого выреза по очеред и вычитаем их площади из общей площади изделия. В итоге окончательно получаем итоговую площадь изделия и стоимость его.
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
И зачем тебе городить переменные с разными именами. Заноси в ассоциативный список например - '((название площадь координата ...)).
Попробуй сам понять для чего тебе в данной задачи такая сущность как имя переменной да еще и однотипное (element_1,.._2...) - в них нет никакого смысла.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Прости друг - но по моему это не самые твои плодородные годы - т.к. массивов в автолиспе нет (есть vla представления массива с которым он кое-как умеет работать). Я не знаю что тебе больше подойдет в твоей задаче, но как один из вариантов - это ассоциативный список - то есть список списков, у которого каждый элемент начинается с "ключа"), в твоем случае это может быть например имя "отверстия", либо какое-либо другое уникальное ключевое свойство. Для работы с ними предусмотрены функции assoc и subst + стандартные вещи для работы с обычными списками.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
После приобретения навыков работы с ассоциативным списком можно обратить внимание на Расширенные данные + LDATA. Расширенные данные позволяют с помощью функции ssget быстро выбрать нужные примитивы. Возможно, не нужен даже ассоциативный список (так как площадь - это свойсто, но нужно будет разобраться что такое набор. Почитать и попробовать можно здесь с #27 по #41
Цитата:
Вычесленные значения хранятся в соотвествующих переменных AREA и PERIMETER. Получение сведений о площади и свойствах массы
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
... нет, но почему то же человек выбрал именно такой путь решения ....
![]() что то вроде (setq i -1) (while (< n 10) (setq (read (strcat "element" (itoa (setq n (1+ n))))) (entlast)) ) интересно, а как такой человек чай, например, заваривает... |
|||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
перед циклом создаем пустой список: (setq spisok nil) В цикле пополняем список: (setq spisok(append spisok(list(entlast)))) После цикла извлекаем 5-й элемент списка: (nth 4 spisok) 4 потому, что счет с нуля, т.е. первый элемент: (nth 0 spisok) , другие номера аналогично. Последний раз редактировалось 480725, 19.06.2014 в 01:49. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Это первая конструкция за которую надо оторвать руки лишить доступа к компьютеру.
За эту можно вначале попросить пояснить почему в качестве индексации элемента списка выбран его порядковый номер, затем скорее всего опять-таки, лишить доступа до сдачи экзамена по теоретической части.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
М.б., типа, "название площадь координата-1" .. "название площадь координата-N", или запрашивать в диалоге как подписать очередной (entlast)? Человек обратился с вопросом. Скорее всего он просто некорректно поставлен и его бы устроило создание набора данных и извлечение из него примитивов по номеру. И первоначальная формулировка вопроса, и буквальный ответа, который прислал kakt00z подталкивают к тому, чтобы советовать работу со списком (в конкретной задаче набор данных лучше, но список универсальнее), Ассоциативный список автор вопроса не понимает, а сами списки ему вроде знакомы, хоть он и называет их массивом. Так в данном случае ни в каком ассоциативном списке и нет никакой нужды ни по сути, ни методически, т.к. речь идет только о помощи человеку максимально просто решить поставленную им задачу. По поводу комментариев к чужим сообщениям - вы просто, похоже, переутомились стучать своим молотком, за все посещения форума мне еще ни разу не попадались столь откровенные проявления, мягко говоря, неуважения как в ваших 2 последних сообщениях в этой теме. Или в Питере сейчас это принято? Среди Продуманов? |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Это чем-же я Вас так "откровенно неуважаю"? Вы даете совет человеку в виде кода который 1 - просто не будет работать - да да Ваша конструкция (setq spisok(append spisok(entlast))) просто не "переварит" транслятор автолиспа если есть хоть 1 примитив в чертеже, 2 - является "алгоритмичиеским некоректным" т.к. даже в исправленном виде использоовать для добавления одного элемента append, да еще и в цикле логарифмически увеличивает время выполнения, ну и по мелочи - учите использовать список как массив (nth для справки будет cdr'ить список до обнуления аргумента индекса), (setq spisok nil), (nth 0 spisok) - это тоже показатель "уровня". И как Вы считаете надо коментировать если во всех примерах приведенных Вами содержатся либо синтаксические, либо алгоритмические ошибки. По предыдущему посту, да я действительно считаю, что три года изучения автолиспа прошли в очень "сыром" виде, о чем собственно и пишет сам автор, Вас насколько я помню, даже заинтересовало как он чай заваривает - я при этом не сомневаюсь - что "с чаем" у него все в порядке - но Вы в отличие от автора, который спрашивает как сделать правильно, пишите делаете так, при том даже не удосужившись проверить будет-ли оно работать, не говоря уже о том, что предложенным Вами вариант мягко говоря спорен и в моем личном понимании не далеко ушел от создания "кучки однотипноназванных" переменных.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
То что код работать не будет я увидел, а вот эти "перлы" проглядел:
![]() 480725, рано пытаешься советы давать другим по программированию на лиспе. Ну а уж если так невтерпеж, то будь готов к такой критике. Она еще довольно мягкая, уж поверь ![]()
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) Последний раз редактировалось Do$, 20.06.2014 в 09:14. |
||||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
Остальные рассуждения в цитируемом тексте прокомментирую на этот раз протестированным текстом программы. Цикл 9999 повторений занял ~ 7 секунд и создал список из 9999 элементов. В теме речь идет об отверстиях в столешнице (см. #4). Обычно их 2 - мойка и плита. В вопросе не формулируется необходимость разделять отверстия по назначению, но даже если бы такая необходимость существовала - никакого смысла в ассоциативном списке все равно не было бы т.к. никакой потребности раздельно извлекать "отверстие под мойку-N" т.е. отдельно нумеровать отверстия по назначению - из описания задачи не возникает. А если не ставить N -потеряется ассоциативность. Привожу текст из файла, т.е. прошедший проверку (вместо отверстий строил отрезок): (setQ spisok nil) (Repeat 9999 (command "_Line" (list 0 0)(list 1 1)"") (setQ spisok(appenD spisok(list (entlast)))) );repeat (Princ (strcat"\nL="(itoa(length spisok)))); это проверка на предмет логарифмического увеличения (Princ (nth 9998 spisok)) (prin1) Результат (скопирован из текстового окна Автокада): L=9999<Имя объекта: 7e55cad8> PS Не смог найти в GOOGLE никаких данных про Логарифмическое увеличение - звучит красиво, но непонятно.. Разъясните, пожалуйста, заодно и и как все-таки nth будет cdr'ить список до обнуления аргумента индекса, а то я пользуюсь этим оператором лет 10, значит немеренноее число списков заcdr'ил - их ведь надо будет как-то расcdr'ивать... Последний раз редактировалось 480725, 19.06.2014 в 03:00. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
Список, в отличие от массива, состоит из двух частей (если он не пустой) головы (то что мы получаем функцией car) и хвоста(cdr) - все. Весь остальной доступ формируется через эти функции. То есть когда Вы задаете (nth x ...) функция cdr'ит список x раз - поэтому в лиспе доступ по индексу практически не используеться в виду неэффективности (максимум '(X Y Z) координаты, причем прошу не путать индекс с порядком - то есть что за чем следует) - структуры формируются по иным правилам - в зависимости от задачи, но в любом случае подразумеваеться "однократная" пробежка по списку для формирования результата. Про append - логику функции append на лиспе можно выразить так (внутри лиспа на c++ написанно, алгоритмически то-же самое т.к. структура та-же): Код:
з.ы. то что за 10 лет пользования вы теорию даже не открывали - это очень грустно...
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
1) Хотелось бы знать, идет ли здесь речь об С++, Лиспе вообще или именно об Автолиспе, и являются ли изреченные здесь гипотезы плодом личных размышлений, или почерпнуты из каких-то официальных источников именно по Автолиспу. 2) Хотелось бы, что гораздо проще, проверить приведенную в цитате теорию на практике. (В этом вопросе наш спор хорошо иллюстрирует ссылка: http://ru.wikisource.org/wiki/%D0%94...D0%B8%D0%BD%29) Текст программы приводить не стану, просто повторяю ранее написанный набор команд, получаю 9999 линий, а затем второй программой в цикле выполняю 9999 раз (command"_erase"(nth(setq number(1+ number))spisok)"") - и линий больше нет И этот цикл работает более чем в 10 раз быстрее чем первоначально опубликованный, т.е менее секунды. То ли чтение из списка идет быстрее запиcи, то ли команда _Erase быстрее команды _Line. Мне, собственно это по барабану. Реальные списки у меня до 10000 элементов не дотягивают, время обработки списков ни меня ни пользователей не напрягало никогда. (Наборы данных - другая песня, если надо анализировать буквально все примитивы в чертеже, например при обработке планов здания выполненных в Архикаде - тут доходило до 15 минут и приходилось писать на экране процент выполненного) И последнее. Я второй раз подкрепляю свою точку зрения экспериментом на 9999 повторений. Хотелось бы узнать сколько времени займет извлечение 9999 значений из ассоциативного списка, и как его формировать в Автолиспе без append, не приведенной же в последнем сообщении функцией. Хотя бы для тех-же линий. Я думаю, эту дискуссию надо на форуме заканчивать, через личку можно провести сравнение именно по времени, время для описанной в теме задачи не критично. Про логарифмическое увеличение посмотрите ссылку: https://www.google.ru/?gfe_rd=cr&ei=...B0%D0%B5%D1%82 если в поиск добавить время выполнения то результаты будут только более засоренными. Я попробую про это в личку написать, вдруг опять не догадаетесь... |
|||
![]() |
|
||||
Вместо ввода кучи букв уже давно самостоятельно проверил бы.
Для начала вот это в своем коде Код:
Код:
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
Код:
Код:
Цитата:
с моей точки зрения у Вас в корне не верное представление о принципах работы лиспа (что авто, что не авто - в данном случае не важно), то что Вы советуете алгоритмически крайне не эффективно - Ваши алгоритмы подойдут например для VB - пишите на нем, или прочитайте хоть одну книжку по лиспу - ну или хотя-бы посмотрите как там реализованы примеры функций (хотя я встречал пару методичек для студентов от которых мне просто хотелось плакать) перед тем как спорить и просить примеры. Хотите пример - дайте ТЗ с примером чертежа того что занимает 15 минут у Ваших пользователей, за сколько Вы купите решение которое будет делать то-же за 5 секунд - если мне "вдруг" удастся его реализовать - причем готов всю сумму безвозмездно перевести на счет dwg.ru (то есть Вы сами и переведете - но естественно если мы договоримся).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Есть benchmark Michael Puckett'a. На theswamp'e требуется регистрация. Алексей выложил на autolisp.ru benchmark.lsp
Статья "how to do" - Сравнение скорости выполнения кода В первом комментарии есть вариант решения и от Евгения с помощью _vl-times (по моему даже недокументированная функция)
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
Команда: (make-list 19997) Возникла серьезная ошибка *** достигнут внутренний предел стека (смоделирован) 19996 у меня еще работает, а как у вас? Вы действительно проверяли 100000? 2) Создание списка без append - второй из двух вопросов, на первый Хотелось бы узнать сколько времени займет извлечение 9999 значений из ассоциативного списка (т.е через оператор assoc) вы почему-то не ответили. А он был основным. И про механизм извлечения данных из ассоциативного списка не написали. И про то, зачем вы предлагаете ассоцитивный список там, где предполагается обработка перебором подряд - т.е. о том, именно против чего я и возражал, у вас нигде нет ни слова. 3) Вы пишете Ваши алгоритмы - где вы увидели алгоритмы? Был просто пример как делать список, для человека, который назвал его массивом. 4)Хоть и не по делу, но т.к. частично сам виноват - вот вам ТЗ: Есть такая программа АРХИКАД, со своими форматами данных и у нее есть экспорт в DWG. Двухмерный экспорт дает набор блоков, часть из которых представляют собой участки стен с проемами - окнами и дверями - все эти блоки индивидуальные и, в общем случае, ни разу не повторяются. Для работы смежников на этом DWG надо все разблокировать (оставив сблокированными только проемы, и не относящиеся к стенам блоки (мебель сантехнику и т.д.)) привести стены к заданному цвету и слою, найти оси здания и тоже привести их к заданным цвету и слою, по возможности привести к заданному цвету и слою размеры, разделив их на осевые и прочие. Количество примитивов после завершения несколько сотен тысяч все они проанализированы и треть из них изменена. Можете задавать в программе разумное количество вопросов, но отвечать на них будет не создававший чертеж архитектор (он в другой организации работает), а проектировщик-сантехник. И последнее. Есть несколько версий Архикада (я сейчас помню про 7-ю, 9-ю, 11-ю на момент создания) но за это время появились новые я их просто не отслеживаю. Организация экспортированного DWG у разных версий может меняться, т.е. префиксы блоков не могут служить средством для распознавания стен. Работа делается для сантехников, если у них появятся чертежи из другой, возможно не существующей в момент создания вашей программы версии Архикада и с ними программа откажется работать - вы будете должны в пожарном порядке бесплатно обеспечить ее работоспособность, иначе будет считаться, что вы подвели пользователей. Это тоже входит в ТЗ. Лет 7 последняя версия работает без необходимости вносить изменения в связи с новыми версиями Архикада, поэтому фактор 15 минут на файл с планами 7 разных этажей и 3-мя разрезами сложного здания ничтожен на фоне надежности программы. Да и последующая работа по проектированию сантехники занимает несоизмеримо больше для описанного случая - дни... Деньги платить не стану, т.к. такой тест на надежность как годы реальной эксплуатации моей программы провести не смогу, и вы не сможете... Файл, если захотите, пошлю, но у меня нет под рукой достаточного количества файлов разных версий Архикада, чтобы обеспечить тестирование их именно для произвольной версии. Я слишком давно закрыл проблему.. |
|||
![]() |
|
||||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
Цитата:
Цитата:
Цитата:
Люди в этой теме спрашивают, как сделать, если и советовать кривые методы, то только в случае, что либо их реализация действительно на порядок проще для автора, либо если другого ничего нет. Предлагать вместо стандартных решений чехорду и еще говорить, а давайте сравним - это не верное решение. з.ы. ТЗ меня впечатлило - платить не станете, Вам это не надо (т.к. тест на надежность не пройден), но я ее должен пожизненно поддерживать и критерии определения я должен придумать сам - а они естественно не совпадут с Вашими - в общем, в любом случае будет, что это я "не справился". Уверяю Вас на такое ТЗ согласиться только жулик, работа которого закончится когда Вы переведете ему деньги. Цитата:
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 20.06.2014 в 14:43. |
|||||
![]() |
|
||||
Регистрация: 06.10.2007
Москва
Сообщений: 132
|
Цитата:
В отечественных описания Автолиспа упор делается на Cons как на основной инструмент создания точечного списка (у Полещука в обоих книгах), про преимущества Сons не пишут не только отечественные описания (известные мне) но и разработчики в AutoLISP Reference Guide, как минимум в А2008. Так что немудрено не знать что он намного быстрее чем append, который все-таки добавляет новый элемент в конец, а не в начало, что, будучи более естественным, провоцирует применять его. В этом смысле для меня спор был полезен, возможно он станет полезен и кому-то кто сможет реально этой скоростью воспользоваться, я, если представится случай - воспользуюсь обязательно. 2) Про отсутствие смысла циклического извлечения из ассоциатитивного списка предложенного вами #5 я как раз постоянно и говорю. По формулировке задачи понадобится именно циклическое извлечение. И поэтому ассоциативный список не нужен. У нас идет разговор глухих. 3) Зачем предлагать в #5 использовать ассоциативный список, если он без уникальных ключей, об чем я и толковал все это время? См. выше.. 4) Цитата:
Не я полез с этим спором, мне он сто лет не нужен, но и отказался от него не я. Участие в теме прекращаю, готов вернуться, только чтобы потвердить принятие участия в споре, ведь весь его интерес для вас в его публичном характере. Если вы не догадались, я больше делаю ставку на то, что не выйдет сделать программу работоспособной на разных версиях Архикада, и вполне допускаю, что быстрее будет ваш вариант (если решите основную задачу). Я бы подобный спор никому не предлагал и никогда в него не влез бы (в качестве разработчика конкурирующей версии сложной программы). Но вы предложили, я согласен. Теперь в случае спора без денег вы можете не опасаться прослыть жуликом, я, слава Богу, себе в случае победы в споре денег не просил, программа мне заведомо не нужна, так что пока под такое подозрение не попадаю. Переговоры по спору только в личке. 4) Насчет ее либо нет, либо Вы на нее просто положили Сейчас проблемы нет, но она была раньше. Примерно через версию Архикада структура файла менялась, приходилось вникать, и переделывать программу, пока однажду не осенило... А потом конечно положил - сделал алгоритм, который закрыл вопрос и положил. У меня Симферопольский друг сантехник, он мне покоя жизни не даст, если программа не работает.. Да и заказчиков подводить не резон.. Во многих регионах архитекторы предпочитают работать на Архикаде, и для сантехников на Автокаде нужна подработка. ----- добавлено через ~19 мин. ----- Я предпочел считать до семи. Про что и написал. Примерно семь секунд на 10000 операций. При всем уважении к Евгению, чтобы померить программно интервал времени, обойдусь своими силами, чего и вам желаю. Поскольку реально цикл будет в 25 и более раз меньше - не критично. В этих условиях мне больше нравится дописывать в конец а не в начало списка. Спасибо, вы первый привели текст этого варианта в этой теме. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ну вот, мне приятно что у Вас начали появляться логически обоснованные рассуждения и выводы. Раз уж Вы (если я правильно понял) принимаете, что я кое-что да смыслю в лиспе - с Вашего позволения продолжу:
Цитата:
Цитата:
Код:
Про спор - спорить я ни о чем не предлагал - это Вы "ловко" вывернули. Мотивации публичного характера у меня нет (здесь меня и так не плохо знают). Уверяю Вас - что пользователей устраивает 15 минут - только от отсутствия других вариантов (кроме еще делать руками). Да, я полагал, что Вы вряд-ли "заинтересуетесь", но "отвертываться" бы не стал - сделал (мне бы, как Вы помните от этого ничего не перепало) просто предложить хотите сделаю Вам без Вашего участия - это типо сам себе придумал работу - которая никому не нужна (такая проверка на необходимость), но быть может, все-же, у Вас появятся мысли в "правильном" направлении - для меня это будет лучшим моральным результатом всей этой переписки. Если интересует литература по лиспу - погуглите SICP - шикарная книга для "начала" - как правила она "раскрывает" глаза на лисп как таковой (автолисп потом будет казаться детской игрушкой - простой и понятной). Искренне желаю Вам удачи и эффективности во всех делах. з.ы. если закрались сомнения по поводу "слабых" сторон в Вашем алгоритме можете выслать его мне личкой (можно и публично - это на Ваше усмотрение) - свои соображения безвозмездно выскажу.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 21.06.2014 в 01:55. |
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
тож люблю так делать
![]() всёж, пока что, не могу "дочуствовать". (именно "голову" списка) попутно, по лиспософии, возник еще вопрос - возможно ли (как если да) написать функцию на динамическое количество переменных? Offtop: кстати, думаю, не плохо было бы даже отдельный топик сделать на тему мудрости |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
А теперь Ваша очередь объяснить, что Вы подразумеваете под словом переменная (на всякий случай, по крайней мере с точки зрения лиспа, в вышепреведенном коде их нет ни одной). А Вобще для создания "произвольной динамической переменной" есть функция (set ....) - не рекомендую ее использовать - ихмо больше "вредная" функция.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Я уже про это писал - не всегда функцию обрабатывающею список с произвольным количество элементов можно безболезненно заменить на "многоаргументную функцию".
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как правильно создать расчетную схему фундамента мельницы в Лире? | tanaka | Лира / Лира-САПР | 15 | 27.02.2013 05:45 |
SolidWorks 2009 x64 SP4 значение переменной в заметке - как? Перенос переменной из детали в сборку - как? | sommer78 | SolidWorks | 6 | 13.09.2012 13:00 |
LISP - как переменной присвоить бесконечно большое значение?(не поверите, такое возможно) | cj_lex | LISP | 7 | 23.03.2012 20:25 |
Как в SCAD создать группу нагружений из загружений? | МишаИнженер | SCAD | 1 | 21.08.2011 05:30 |
Перевод имени блока в имя переменной и обратно | Supermax | Программирование | 11 | 14.12.2009 23:26 |