Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
Ethereal писал(а): Ты бы пояснил, что за версией Форта ты пользуешься, что он вот это Исходники под расширение spf я давал( http://chess2007.nm.ru/~chess.zip) Ethereal писал(а): По сравнению с твоим оно на Форте. Точнее на исходном spf. У меня решение на расширенном spf. Основная цель моих расширений - ввести средства для исключения оперативного инструментального контекста из форта и тем самым поднять планку сложности решаемых задач. Да, еще замечание по вашему решению. Много лишней работы по перебору ненужных(невыводимых) значений чисел. Проще ввести понятие переноса и напрямую формировать из предыдущего числа последующее.
[quote="Ethereal"]Ты бы пояснил, что за версией Форта ты пользуешься, что он вот это[/quote] Исходники под расширение spf я давал([url]http://chess2007.nm.ru/~chess.zip[/url])[quote="Ethereal"]По сравнению с твоим оно на Форте.[/quote] Точнее на исходном spf. У меня решение на расширенном spf. Основная цель моих расширений - ввести средства для исключения оперативного инструментального контекста из форта и тем самым поднять планку сложности решаемых задач. Да, еще замечание по вашему решению. Много лишней работы по перебору ненужных(невыводимых) значений чисел. Проще ввести понятие переноса и напрямую формировать из предыдущего числа последующее.
|
|
|
|
Добавлено: Вт сен 20, 2011 09:44 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
А то так и просится вырваться ворчалка : chess писал(а): По сравнению с моим более сложное из наличия инструментального контекста(из-за манипуляций с параметрами на стеке). По сравнению с твоим оно на Форте.
А то так и просится вырваться ворчалка : [quote="chess"]По сравнению с моим более сложное из наличия инструментального контекста(из-за манипуляций с параметрами на стеке). [/quote]По сравнению с твоим оно на Форте.
|
|
|
|
Добавлено: Вт сен 20, 2011 00:07 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
Ты бы пояснил, что за версией Форта ты пользуешься, что он вот это chess писал(а): 0 a! 0 c! \ служебные переменные 10 b] 10 e] 10 t] \ место в памяти для цифр нач. кон. и текущего чисел q>s( is a is c 10 0 DO c 10 /MOD is c c IF I a + C! ELSE I a + C! I LEAVE THEN LOOP ) распознает как нечто осмысленное.
Ты бы пояснил, что за версией Форта ты пользуешься, что он вот это[quote="chess"] 0 a! 0 c! \ служебные переменные 10 b] 10 e] 10 t] \ место в памяти для цифр нач. кон. и текущего чисел q>s( is a is c 10 0 DO c 10 /MOD is c c IF I a + C! ELSE I a + C! I LEAVE THEN LOOP )[/quote]распознает как нечто осмысленное.
|
|
|
|
Добавлено: Пн сен 19, 2011 23:59 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
Ethereal писал(а): Кстати, мой алго выдает тоже :
0 111 SEQ 0 1 10 11 100 101 110 111 Ok Это корректное решение. По сравнению с моим более сложное из наличия инструментального контекста(из-за манипуляций с параметрами на стеке). Не знаю как вы, а я написал его за один раз (не отлаживая) и сразу получил верный результат. Кстати можно решение модифицировать для числа не из одной цифры в каждой позиции исходных чисел, а из двух цифр в каждой позиции. И на тех же входных числах оно даст другой результат. Решение, например, ваше чуть изменится: Код: : SEQ ( u1 u2 -- ) 2DUP 1+ SWAP DO 2DUP I BEGIN DUP 100 MOD 2OVER 100 MOD SWAP 100 MOD SWAP 1+ WITHIN WHILE 100 / ROT 100 / ROT 100 / ROT DUP 0= UNTIL I . THEN DROP 2DROP LOOP 2DROP ;
STARTLOG 0 111 SEQ лог. Код: 0 1 2 3 4 5 6 7 8 9 10 11 100 101 102 103 104 105 106 107 108 109 110 111 Ok
[quote="Ethereal"]Кстати, мой алго выдает тоже :
0 111 SEQ 0 1 10 11 100 101 110 111 Ok[/quote]
Это корректное решение. По сравнению с моим более сложное из наличия инструментального контекста(из-за манипуляций с параметрами на стеке). Не знаю как вы, а я написал его за один раз (не отлаживая) и сразу получил верный результат. Кстати можно решение модифицировать для числа не из одной цифры в каждой позиции исходных чисел, а из двух цифр в каждой позиции. И на тех же входных числах оно даст другой результат. Решение, например, ваше чуть изменится: [code]: SEQ ( u1 u2 -- ) 2DUP 1+ SWAP DO 2DUP I BEGIN DUP 100 MOD 2OVER 100 MOD SWAP 100 MOD SWAP 1+ WITHIN WHILE 100 / ROT 100 / ROT 100 / ROT DUP 0= UNTIL I . THEN DROP 2DROP LOOP 2DROP ;
STARTLOG 0 111 SEQ [/code] лог. [code]0 1 2 3 4 5 6 7 8 9 10 11 100 101 102 103 104 105 106 107 108 109 110 111 Ok[/code]
|
|
|
|
Добавлено: Пн сен 19, 2011 09:25 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
Кстати, мой алго выдает тоже :
0 111 SEQ 0 1 10 11 100 101 110 111 Ok
Кстати, мой алго выдает тоже :
0 111 SEQ 0 1 10 11 100 101 110 111 Ok
|
|
|
|
Добавлено: Вс сен 18, 2011 02:22 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
Даже можно чуток соптимизировать : : SEQ ( u1 u2 -- ) 2DUP 1+ SWAP DO 2DUP I BEGIN DUP 10 MOD 2OVER 10 MOD SWAP 10 MOD SWAP 1+ WITHIN WHILE 10 / ROT 10 / ROT 10 / ROT DUP 0= UNTIL I . THEN DROP 2DROP LOOP 2DROP ;
Даже можно чуток соптимизировать :
[pre]: SEQ ( u1 u2 -- ) 2DUP 1+ SWAP DO 2DUP I BEGIN DUP 10 MOD 2OVER 10 MOD SWAP 10 MOD SWAP 1+ WITHIN WHILE 10 / ROT 10 / ROT 10 / ROT DUP 0= UNTIL I . THEN DROP 2DROP LOOP 2DROP ;[/pre]
|
|
|
|
Добавлено: Сб сен 17, 2011 19:04 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
Лог :
123 456 SEQ 123 124 125 126 133 134 135 136 143 144 145 146 153 154 155 156 223 224 225 226 233 234 235 236 243 244 245 246 253 254 255 256 323 324 325 326 333 334 335 336 343 344 345 346 353 354 355 356 423 424 425 426 433 434 435 436 443 444 445 446 453 454 455 456 Ok
Лог :
123 456 SEQ 123 124 125 126 133 134 135 136 143 144 145 146 153 154 155 156 223 224 225 226 233 234 235 236 243 244 245 246 253 254 255 256 323 324 325 326 333 334 335 336 343 344 345 346 353 354 355 356 423 424 425 426 433 434 435 436 443 444 445 446 453 454 455 456 Ok
|
|
|
|
Добавлено: Сб сен 17, 2011 18:59 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
Вот, решение интуитивного понимания той задачи, которую chess имел ввиду : : SEQ ( u1 u2 -- ) 2DUP 1+ SWAP DO 2DUP I BEGIN DUP 10 MOD 2OVER 10 MOD >R 10 MOD OVER > R> ROT < OR INVERT WHILE 10 / ROT 10 / ROT 10 / ROT DUP 0= UNTIL I . THEN DROP 2DROP LOOP 2DROP ;
Вот, решение интуитивного понимания той задачи, которую chess имел ввиду :
[pre]: SEQ ( u1 u2 -- ) 2DUP 1+ SWAP DO 2DUP I BEGIN DUP 10 MOD 2OVER 10 MOD >R 10 MOD OVER > R> ROT < OR INVERT WHILE 10 / ROT 10 / ROT 10 / ROT DUP 0= UNTIL I . THEN DROP 2DROP LOOP 2DROP ;[/pre]
|
|
|
|
Добавлено: Сб сен 17, 2011 18:41 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
chess писал(а): Задачка решается корректно и при условии, что любое количество цифр начального и конечного числа совпадают. Кроме этого начальное число можно задавать в свободном формате. Все отсутствующие старшие цифры будут восприниматься как нули. И выводится числа будут с ведущими нулями. Например: Код: 0 111 seq лог. Код: 000 001 010 011 100 101 110 111 ps. Впрочем ведущие нули можно убрать изменив процедуру вывода.
[quote="chess"]Задачка решается корректно и при условии, что любое количество цифр начального и конечного числа совпадают.[/quote] Кроме этого начальное число можно задавать в свободном формате. Все отсутствующие старшие цифры будут восприниматься как нули. И выводится числа будут с ведущими нулями. Например: [code]0 111 seq[/code] лог. [code]000 001 010 011 100 101 110 111[/code] ps. Впрочем ведущие нули можно убрать изменив процедуру вывода.
|
|
|
|
Добавлено: Чт сен 15, 2011 12:21 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
Код: : seq ( n1 n2 -- ) 0 a! 0 c! \ служебные переменные 10 b] 10 e] 10 t] \ место в памяти для цифр нач. кон. и текущего чисел q>s( is a is c 10 0 DO c 10 /MOD is c c IF I a + C! ELSE I a + C! I LEAVE THEN LOOP ) \ процедура - цифры числа положить в память e q>s 1+ d! \ цифры кон. числа положить в память b q>s DROP \ цифры нач. числа положить в память b t d MOVE \ текущему значению цифр числа в памяти присвоить цифры нач. числа .t( 0 d 1- DO I t + C@ 1 .0 -1 +LOOP SPACE ) \ процедура - вывод текущего числа next( 0 is c \ с - перенос \ процедура - из цифр текущего числа сформировать цифры следующего текущего числа d 0 DO I 0= IF t C@ e C@ = IF b C@ t C! 1 is c ELSE t C@ 1+ t C! 0 is c LEAVE THEN ELSE c IF I t + C@ I e + C@ = IF I b + C@ I t + C! 1 is c ELSE I t + C@ 1+ I t + C! 0 is c THEN ELSE LEAVE THEN THEN LOOP ) BEGIN .t next t d e d COMPARE 0= UNTIL .t ;
STARTLOG 123 456 seq лог Код: 123 124 125 126 133 134 135 136 143 144 145 146 153 154 155 156 223 224 225 226 233 234 235 236 243 244 245 246 253 254 255 256 323 324 325 326 333 334 335 336 343 344 345 346 353 354 355 356 423 424 425 426 433 434 435 436 443 444 445 446 453 454 455 456 Ok Ps. Задачка решается корректно и при условии, что любое количество цифр начального и конечного числа совпадают.
[code]: seq ( n1 n2 -- ) 0 a! 0 c! \ служебные переменные 10 b] 10 e] 10 t] \ место в памяти для цифр нач. кон. и текущего чисел q>s( is a is c 10 0 DO c 10 /MOD is c c IF I a + C! ELSE I a + C! I LEAVE THEN LOOP ) \ процедура - цифры числа положить в память e q>s 1+ d! \ цифры кон. числа положить в память b q>s DROP \ цифры нач. числа положить в память b t d MOVE \ текущему значению цифр числа в памяти присвоить цифры нач. числа .t( 0 d 1- DO I t + C@ 1 .0 -1 +LOOP SPACE ) \ процедура - вывод текущего числа next( 0 is c \ с - перенос \ процедура - из цифр текущего числа сформировать цифры следующего текущего числа d 0 DO I 0= IF t C@ e C@ = IF b C@ t C! 1 is c ELSE t C@ 1+ t C! 0 is c LEAVE THEN ELSE c IF I t + C@ I e + C@ = IF I b + C@ I t + C! 1 is c ELSE I t + C@ 1+ I t + C! 0 is c THEN ELSE LEAVE THEN THEN LOOP ) BEGIN .t next t d e d COMPARE 0= UNTIL .t ;
STARTLOG 123 456 seq[/code] лог [code]123 124 125 126 133 134 135 136 143 144 145 146 153 154 155 156 223 224 225 226 233 234 235 236 243 244 245 246 253 254 255 256 323 324 325 326 333 334 335 336 343 344 345 346 353 354 355 356 423 424 425 426 433 434 435 436 443 444 445 446 453 454 455 456 Ok[/code] Ps. Задачка решается корректно и при условии, что любое количество цифр начального и конечного числа совпадают.
|
|
|
|
Добавлено: Чт сен 15, 2011 09:29 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
chess писал(а): от цифры в соответствующей позиции меньшего входного числа до цифры в соответствующей позиции большего входного числа. Вот этого в первоначальном условии просто нет и НЕ ВИДНО абсолютно.
[quote="chess"]от цифры в соответствующей позиции меньшего входного числа до цифры в соответствующей позиции большего входного числа.[/quote]
Вот этого в первоначальном условии просто нет и НЕ ВИДНО [color=#FF0000]абсолютно[/color].
|
|
|
|
Добавлено: Ср сен 14, 2011 20:03 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
chess писал(а): Я даже не запускал ваше решение. Видно сразу - алгоритм некорректный. В нем вы не учитываете, что разрядность входных чисел может быть произвольной. Аа, ну да. Я почему-то решил, что числа строго двузначные.
[quote="chess"]Я даже не запускал ваше решение. Видно сразу - алгоритм некорректный. В нем вы не учитываете, что разрядность входных чисел может быть произвольной.[/quote] Аа, ну да. Я почему-то решил, что числа строго двузначные.
|
|
|
|
Добавлено: Ср сен 14, 2011 13:38 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
вопрос писал(а): для чисел произвольной разрядности возможно регшение только в виде строки цифр В принципе, да. Но для чисел меньше чем 2 в 32-ой можно обойтись и без строки цифр. Это естественное ограничение для 32-х разрядной форт-системы, поэтому такие решения тоже засчитываются.
[quote="вопрос"]для чисел произвольной разрядности возможно регшение только в виде строки цифр[/quote] В принципе, да. Но для чисел меньше чем 2 в 32-ой можно обойтись и без строки цифр. Это естественное ограничение для 32-х разрядной форт-системы, поэтому такие решения тоже засчитываются.
|
|
|
|
Добавлено: Ср сен 14, 2011 12:22 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
для чисел произвольной разрядности возможно регшение только в виде строки цифр
для чисел произвольной разрядности возможно регшение только в виде строки цифр
|
|
|
|
Добавлено: Ср сен 14, 2011 11:30 |
|
|
|
|
|
Заголовок сообщения: |
Re: Вывод последовательности чисел. |
|
|
Хищник писал(а): А какие из выведенных чисел неверны? Многие. Я даже не запускал ваше решение. Видно сразу - алгоритм некорректный. В нем вы не учитываете, что разрядность входных чисел может быть произвольной. А так, пожалуйста: Код: 123 234 seq лог Код: 123 124 133 134 143 144 153 154 163 164 173 174 183 184 193 194 203 204 213 214 223 224 233 234 Ok
[quote="Хищник"]А какие из выведенных чисел неверны?[/quote] Многие. :) Я даже не запускал ваше решение. Видно сразу - алгоритм некорректный. В нем вы не учитываете, что разрядность входных чисел может быть произвольной. А так, пожалуйста: [code]123 234 seq[/code]лог [code]123 124 133 134 143 144 153 154 163 164 173 174 183 184 193 194 203 204 213 214 223 224 233 234 Ok[/code]
|
|
|
|
Добавлено: Ср сен 14, 2011 08:19 |
|
|
|