Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 21:27

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - *преобразование табуляций в тексте
Автор Сообщение
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
Ethereal писал(а):
Теперь проделайте в Виндозной (MS-DOS-совместимой) среде :

type file1.txt | tb2sp.com > file2.txt

и вуаля ... табуляции текста из файла file1.txt преобразованы в пробелы
и результат находится в файле file2.txt

Решение заняло ... 20 байт кода !
Как говориццо даешь короче ! :D

Линукс:
expand < file1.txt > file2.txt
Сообщение Добавлено: Сб авг 13, 2011 19:31
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
Ethereal писал(а):
Причем, я сам не понимаю почему так получается. Просто обнаружил, что на входфильтра текст подается операционкой уже наготово с табуляциями преобразованнымив пробелы.

Возможно, это не во всех случаях так
Ethereal писал(а):
Удовольствие от решения задач можно получить только если решаешь задачи красиво.
вот эту никто не взялся
а эта : Нерешительный кенгуру
решена только на словах (Хищником) и на Прологе
Сообщение Добавлено: Сб авг 13, 2011 12:58
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
Хорошо, тогда я предложу самое оригинальное решение данной задачи.
Самое оригинальное в смысле краткости. Но не на Форте. Ибо на Форте
такую задачу решать - все равно, что гвозди микроскопом заколачивать.

Возьмите вот эти байты :

B4 0B CD 21 84 C0 74 0B B4 07 CD 21 92 B4 02 CD
21 EB ED C3

и преобразуйте их в двоичный файл. Пусть он называется tb2sp.com

Теперь проделайте в Виндозной (MS-DOS-совместимой) среде :

type file1.txt | tb2sp.com > file2.txt

и вуаля ... табуляции текста из файла file1.txt преобразованы в пробелы
и результат находится в файле file2.txt

Решение заняло ... 20 байт кода !
Как говориццо даешь короче ! :D

Причем, я сам не понимаю почему так получается. Просто обнаружил, что на вход
фильтра текст подается операционкой уже наготово с табуляциями преобразованными
в пробелы. Осталось только написать фильтр который ничего не делает. Главное,
чтобы был сам фильтр. Вот этот фильтр и получился длиной 20 байт.
Сообщение Добавлено: Сб авг 13, 2011 06:33
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
вопрос писал(а):
Забавно, что задача при этом всё-таки была решена

Решена путем замены символа табуляции на 8 символов пробелов. Именно так я понимал табуляцию. :(
Сообщение Добавлено: Пн июл 25, 2011 21:33
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
dynamic-wind писал(а):
chess писал(а):
Ага, оказывается я не знал что такое табуляция(никогда не пользовался). Сейчас знаю.

:mrgreen:

Забавно, что задача при этом всё-таки была решена :shock:
Сообщение Добавлено: Пн июл 25, 2011 21:26
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
chess писал(а):
Ага, оказывается я не знал что такое табуляция(никогда не пользовался). Сейчас знаю.

:mrgreen:
Сообщение Добавлено: Пн июл 25, 2011 18:54
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
Ethereal писал(а):
Так табуляции должны заменяться не на 8 пробелов, а на от одного до восьми пробелов (точнее от одного до ОТСТУП пробелов, согласно условию mOleg-а) в зависимости от позиции в которой встретилась табуляция.

Ага, оказывается я не знал что такое табуляция(никогда не пользовался). Сейчас знаю.
Программа немного усложнилась из-за фиксации начала строк.
Код:
\ Табуляции заменяются на от 1-8-мь пробелов, рез. строка помещается во временный буфер
: tabs>spaces ( src us tab# --> res ur )
  tab! us! src! ntab) 0. ntab ! sr! 0 os!
  src us + src DO   I C@ tab = IF ntab 1+! THEN LOOP
  ntab @ 7 * us + DUP ur! ALLOCATE THROW res!
  res ur + res DO BL I C! LOOP
  src us + src DO I C@ DUP tab =
                  IF DROP 8 os 8 MOD - DUP sr + is sr os + is os
                  ELSE 0xA 0xD 3\112=13=| IF -1 is os THEN
                       res sr + C! sr 1+ is sr os 1+ is os
                  THEN LOOP res sr 1- ;
Ethereal писал(а):
З.Ы. Видимо я один такой. Если программирование не даёт удовольствия, то зачем тогда вообще программировать ?

Для меня программа только промежуточный этап. Главное конечный результат, а это корректно работающее железо.
Программа должна работать в отведенных рамках объема кода и времянок. И загнать ее туда надо как правило побыстрее.
Сообщение Добавлено: Пн июл 25, 2011 14:27
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
Так табуляции должны заменяться не на 8 пробелов, а на от одного до восьми пробелов (точнее от одного до ОТСТУП пробелов, согласно условию mOleg-а) в зависимости от позиции в которой встретилась табуляция.

З.Ы. Видимо я один такой. Если программирование не даёт удовольствия, то зачем тогда вообще программировать ? Я когда пишу программы на ассемблере не прекращаю оптимизацию пока программу можно ужать ещё хотя бы на байт. Когда уже никак не ужимается, то начинает так переть от того кода который сотворил, так переть, аж в зобу дыхание спирает. Только поэтому программированием и занимаюсь. Код получается такой, что в нём ничего стронуть нельзя - сразу всё развалится. Один кусок программы использует побочные эффекты другого и всё так переплетено друг с другом, что невыносимо как для прочтения так и для модификации (кем-либо кроме меня). Зато так прёт ! Так прёт ! ;)
Помню давно уже одна местная организация сделала программу на Клиппере, а на компьютере заказчика она как начнет делить на ноль... Выяснилось, что на медленных компьютерах программа работает, а на быстрых - Divide by Zero. Ну не посоветуешь-же заказчику купить более медленный компьютер. И вот тогда они мне заказали написать патчилку ко всем своим программам на Клиппере. И я тогда за эту работу попросил по рублю за байт моей программы. Согласились, однако. Знали уже, что будет написано на ассемблере и пока ещё можно хотя-бы байт умять, я не успокоюсь. ;)
Ещё помню как в GoldWafer уминал алгоритм который в него вроде бы невозможно вогнать в принципе. На уминание последних десяти слов ушла неделя, причем самое последнее слово я искал как вогнать в адресное пространство GoldWafer-а аж два дня. Но таки вогнал. И до сих пор прусь. И люди этим программистским безумием долго пользовались. ;)
Сообщение Добавлено: Пн июл 25, 2011 09:22
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
Табуляции заменяются на 8-мь пробелов, рез. строка помещается во временный буфер

Код:
: tabs>spaces ( src us tab# --> res ur )
  tab! us! src! ntab) 0. ntab ! sr!
  src us + as DO I C@ tab = IF ntab 1+! THEN LOOP
  ntab @ 7 * us + DUP ur! ALLOCATE THROW res!
  res ur + res DO BL I C! LOOP
  src us + src DO I C@ DUP tab = IF  DROP 8  ELSE res sr + C! 1 THEN sr + is sr LOOP
  res ur ;

Ps. Решение тривиальное, не требует отладки и не дает никакого удовольствия. :)
Сообщение Добавлено: Пн июл 25, 2011 08:06
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
О задаче про замену табуляций в тексте пробелами.

Удовольствие от решения задач можно получить только если решаешь задачи красиво.
Красиво (на мой вкус) - это без переменных, т.е. когда все данные, которыми
оперирует алгоритм присутствуют только на стеке, причем располагать их на
стеке нужно так, чтобы не приходилось их изымать по PICK или вращать по ROLL.
Ибо PICK и ROLL - это некрасиво.
Код:
Входной текст расположен с адреса c-addr1 и он длиной u1.
c-addr2 - адрес буфера для приёма преобразованного текста.
u2 - длина получившегося преобразованного текста

HEX
8 VALUE ОТСТУП

: TABS>SPACES ( c-addr1 c-addr2 u1 - c-addr2 u2 )
  OVER >R 2>R 0 SWAP 2R>
  0 ?DO
    OVER C@ ROT CHAR+ >R 2>R
    R@ 9 =
    IF
      RDROP BEGIN
        1+ BL R@ C! R> CHAR+ >R
        DUP ОТСТУП MOD 0=
      UNTIL 2R>
    ELSE
      R@ D = R@ A = OR IF DROP TRUE THEN
      1+ R> R@ C! 2R> CHAR+
    THEN
  LOOP
  NIP NIP R> TUCK -
;
Входные параметры тут как у CMOVE CMOVE> MOVE , а выходные готовы для TYPE
Сообщение Добавлено: Пн июл 25, 2011 06:46
  Заголовок сообщения:  Re: *преобразование табуляций в тексте  Ответить с цитатой
Тогда не ответил, сейчас отвечу.

Вот пример того, как можно сформулировать условие задачи так, что его можно понять
с точностью наоборот. Предположим вы вызвали текст алгоритма по EVALUATE.

Тогда в моем понимании :
Если возврата из EVALUATE нет, то алгоритм остановился, ибо завис (например, впав в бесконечный цикл). Если возврат есть, то алгоритм не остановился, ибо не завис и успешно завершился.

В понимании dynamic-wind :
Если возврата из EVALUATE нет, то алгоритм не остановился ибо ещё продолжает что-то считать. Если возврат есть, то алгоритм остановился ибо завершил свою работу.

Мораль :
А формулируйте-ка условия задач так, чтобы их нельзя было понять ИНАЧЕ.
Сообщение Добавлено: Пн июл 25, 2011 02:56
  Заголовок сообщения:  Re: Re:  Ответить с цитатой
А вот так правильно
Код:
: ?ALGO_STOP ( addr len -- ) \ addr - адрес текста алгоритма, len - его длина
  ." Не знаю, ждите... "
  EVALUATE
  ." Останавливается !"
;
Сообщение Добавлено: Вт мар 15, 2011 11:42
  Заголовок сообщения:  Re:  Ответить с цитатой
yz писал(а):
WingLion писал(а):
Все задачи имеют решение.

Ну вот вам задача: составить алгоритм, определяющий, останавливается ли данный конкретный алгоритм.

Универсальное решение :
Код:
: ?ALGO_STOP ( addr len -- ) \ addr - адрес текста алгоритма, len - его длина
  ." Останавливается. "
  EVALUATE
  ." Нет, ошибся ! Ни хрена не останавливается !"
;
:))
Сообщение Добавлено: Вт мар 15, 2011 03:52
  Заголовок сообщения:  преобразование табуляций в тексте  Ответить с цитатой
Если я правильно понял, речь идет о преобразовании одного объекта - точки Line в другой - фрагмент Cell.
Может я ошибаюсь, но стандартными средствами этого сделать нельзя.
Какой в этом смысл? Не проще просто поставить новый фрагмент на эту точку?
Сообщение Добавлено: Ср июн 03, 2009 18:51
  Заголовок сообщения:   Ответить с цитатой
yz писал(а):
Не из спортивного, а из педагогического. Я понимаю, что и постановка задачи, и ее решение должны быть образцовыми.

Для тренировки навыков это подойдет. Но для целостного понимания проблем разработки - не очень. Новый язык - это совершенно объективное время на его освоение, затраты на приобретение, косвенные затраты на интеграцию. Почему-то слова "я не знаю языка XXX" вызывают реакцию "так иди и изучи!", а не "хм, да, извините, что предложили вариант, который потребует дополнительного повышения квалификации".
Сообщение Добавлено: Сб май 19, 2007 22:55

Часовой пояс: UTC + 3 часа [ Летнее время ]


cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB