Forth http://fforum.winglion.ru/ |
|
Оставить среднее http://fforum.winglion.ru/viewtopic.php?f=19&t=2805 |
Страница 4 из 6 |
Автор: | Hishnik [ Сб фев 11, 2012 15:54 ] |
Заголовок сообщения: | Re: Оставить среднее |
Alex писал(а): нет, трудностей в удержании не испытал, просто надо было глянуть в табличку, Имена переменных, как и другие объекты программы, должны быть легкочитаемыми. С тем же успехом можно зашифровать команды символами псевдографики и утверждать, что достаточно посмотреть в таблицу. Alex писал(а): удивило то что для решения нажал 68 раз клавиши и ни разу забой, дел, и клавиши навигации и не двигал-манипулировал мышой. и ощущение было что решение получилось само-сабой в потоке И на адреналине, нет?... Alex писал(а): вот гляньте как из темы выстроилось вспомагательное слово 3DUP Проще реализовать в ядре. |
Автор: | gudleifr [ Сб фев 11, 2012 16:34 ] |
Заголовок сообщения: | Re: Оставить среднее |
Методологическое замечание. Не слишком ли часто современные программисты пишут не то, что нужно, но то, что легко написать? P.S. Кстати, Alex, Ваше решение, насколько я понял, как раз свидетельствует против манипуляторов, там слишком много избыточных сравнений. |
Автор: | Hishnik [ Сб фев 11, 2012 16:46 ] |
Заголовок сообщения: | Re: Оставить среднее |
gudleifr писал(а): Методологическое замечание. Не слишком ли часто современные программисты пишут не то, что нужно, но то, что легко написать. На форуме - регулярно. Форт предоставляет весьма хорошую возможность улизнуть от практических задач. Потому что когда человек пишет на С++, его можно сразу ткнуть носом в то, что полно людей пишут гораздо более серьезные вещи и с лучшим качеством. А с Фортом (как и с другими экзотическими языками) легко оправдать низкое качество кода элитарностью языка и необходимостью вести постоянную нелегкую борьбу с недоброжелателями. |
Автор: | VoidVolker [ Сб фев 11, 2012 17:37 ] |
Заголовок сообщения: | Re: Оставить среднее |
При наличии определенной квалификации и желания на форте можно писать очень даже качественный код. |
Автор: | Alex [ Сб фев 11, 2012 18:36 ] |
Заголовок сообщения: | Re: Оставить среднее |
gudleifr писал(а): P.S. Кстати, Alex, Ваше решение, насколько я понял, как раз свидетельствует против манипуляторов, там слишком много избыточных сравнений. избыточные сравнения против манипуляций на стеке и вызова вспомогательного слова не удивлюсь, если выйдет баш на баш это не единственное решение на манипуляторах, могу привести аналог решения от forther |
Автор: | gudleifr [ Сб фев 11, 2012 18:43 ] |
Заголовок сообщения: | Re: Оставить среднее |
Alex писал(а): это не единственное решение на манипуляторах, могу привести аналог решения от forther Т.к. решение от forther красиво, то я бы сильнее повелся на манипуляторы, если бы Ваши механистические преобразования дали бы в пределе его решение автоматически. Мол, выкинул парные цифири, привел в нормальную форму и в сухом остатке...
|
Автор: | Alex [ Сб фев 11, 2012 19:00 ] |
Заголовок сообщения: | Re: Оставить среднее |
действительно, решение от forther красиво. в манипуляторах я вижу так: (работоспособность не проверял) Код: \ x=DROP : ?min ( a b -- -1 | a b 0 ) 2|=i[-1];t12>i21e12t`0 ; : med ( a b c -- m | _ ) 3\23[?min]i;t1[?min]ix;tx[?min]i;t[NIP] ; Я думаю спустя некоторое время (может будут еще варианты) chess приведет цифры байтов / тактов ( у него это здорово получается) |
Автор: | dynamic-wind [ Сб фев 11, 2012 19:23 ] |
Заголовок сообщения: | Re: Оставить среднее |
Код: return a<b? (b<c? b : (c<a? a : c)) : (a<c? a : (c<b? b : c)); А форт в решении этой задачи выглядит просто ужасно. |
Автор: | Alex [ Сб фев 11, 2012 20:23 ] |
Заголовок сообщения: | Re: Оставить среднее |
подправленный 1 вариант-быстрый выход если какая-либо пара равна и группировка условий по ИЛИ Код: : middle ( a b c -- middle | _ ) 3\12=13=23=||i;t12>13<&12<13>&|i1;t21>23<&23>21<&|i2;t31>32<&31<32>&|i3;t ;
|
Автор: | gudleifr [ Сб фев 11, 2012 20:35 ] |
Заголовок сообщения: | Re: Оставить среднее |
Alex писал(а): подправленный 1 вариант Очевидно, необходимо заведомо не больше 3 сравнений на больше и двух на равно, так что есть куда расти.
|
Автор: | Alex [ Сб фев 11, 2012 22:00 ] |
Заголовок сообщения: | Re: Оставить среднее |
действительно можно еще проще, словами алгоритм таков если первое число меньше второго и третьего то ответ минимальное число из второго и третьего если первое число больше второго и третьего то ответ большее из второго и третьего, иначе - ответ первое число. Код: : middle ( a b c -- middle | _ ) 3\12=13=23=||i;e12<13<&i23m;e12>13>&i23M;t1tt ;
|
Автор: | forther [ Сб фев 11, 2012 23:31 ] |
Заголовок сообщения: | Re: Оставить среднее |
dynamic-wind писал(а): Код: return a<b? (b<c? b : (c<a? a : c)) : (a<c? a : (c<b? b : c)); А форт в решении этой задачи выглядит просто ужасно. Лукавите. Нет проверки на "отсутствие" среднего. Да и заголовок в функцию не мешало б добавить. |
Автор: | gudleifr [ Сб фев 11, 2012 23:33 ] |
Заголовок сообщения: | Re: Оставить среднее |
Alex писал(а): Код: : middle ( a b c -- middle | _ ) 3\12=13=23=||i;e12<13<&i23m;e12>13>&i23M;t1tt ; Код: : sort 2dup < if swap then ; ?
: mid sort >r sort r> sort ; : equ? swap >r r@ = if rdrop drop 0 else r@ = if rdrop 0 else r> -1 then then ; : middle-norm mid equ? ; : middle-chess middle-norm drop ; |
Автор: | вопрос [ Вс фев 12, 2012 00:24 ] |
Заголовок сообщения: | Re: Оставить среднее |
gudleifr писал(а): Код: : sort 2dup < if swap then ; ?: mid sort >r sort r> sort ; : equ? swap >r r@ = if rdrop drop 0 else r@ = if rdrop 0 else r> -1 then then ; : middle-norm mid equ? ; : middle-chess middle-norm drop ; Кстати, говорил об арифметическом IF (когда больше-меньше-равно - разные результаты) и всех интересовал пример - так вот при наличии такой операции нам потребуется всего 2 сравнения |
Автор: | gudleifr [ Вс фев 12, 2012 00:29 ] |
Заголовок сообщения: | Re: Оставить среднее |
вопрос писал(а): Кстати, говорил об арифметическом IF (когда больше-меньше-равно - разные результаты) и всех интересовал пример - так вот при наличии такой операции нам потребуется всего 2 сравнения Меньше, чем три сравнения не получится, но арифметический IF я, действительно, опять чуть не начал писать...А теперь давайте найдем медиану для 5-и чисел... |
Страница 4 из 6 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |