Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу Написать простой транслятор способный переводить римские цифры
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
OyBlya OyBlya вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.07.2009
По умолчанию Написать простой транслятор способный переводить римские цифры - 21.07.2009, 10:46

Всем привет. Есть одна незамысловатая задачка. Думайте, выкладывайте ваши решения, хочу найти наиболее оптимальный код.
Задача: "Написать простой транслятор способный переводить римские цифры в арабские и наоборот в диапазоне от 0 до 100."
Ну попробуйте, посмотрим что у вас получится.
Ответить с цитированием
  (#2 (permalink)) Старый
IL_Agent IL_Agent вне форума
Member
 
Аватар для IL_Agent
 
Сообщений: 2,015
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.07.2005
По умолчанию 21.07.2009, 13:52

У самого, видимо, нихрена не получается ?
http://www.progz.ru/forum/index.php?showforum=69
Ответить с цитированием
  (#3 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 21.07.2009, 13:53

Код:
(defun F (roman &optional (table '((I . 1)(V . 5)(X . 10)(L . 50)(C . 100)(D . 500)(M . 1000))))
  (if roman
   ((lambda (curr tail)
     (if (null tail) curr
      ((lambda (next result)
        (funcall (if (< curr next) '- '+) result curr))
       (cdr (assoc (car tail) table))
       (F tail))))
    (cdr (assoc (car roman) table))
    (cdr roman))))
Аргумент вызова функции (F) - список символов, представляющий римское числительное: (F '(M C M X C I I))
Ответить с цитированием
  (#4 (permalink)) Старый
IL_Agent IL_Agent вне форума
Member
 
Аватар для IL_Agent
 
Сообщений: 2,015
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.07.2005
По умолчанию 21.07.2009, 14:27

Чёрт. Удовлетворили халявщика.
Ответить с цитированием
  (#5 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 21.07.2009, 14:35

Не жалко: десять минут активного мышления - и снова дремота на жаре.
Впрочем, есть еще половина задачи "...и наоборот".
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
OyBlya OyBlya вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.07.2009
По умолчанию 21.07.2009, 14:49

VH, спасибо, интересное решение. Есть еще у кого какие попытки?
Ответить с цитированием
  (#7 (permalink)) Старый
AD AD вне форума
Member
 
Сообщений: 575
Сказал(а) спасибо: 7
Поблагодарили 3 раз(а) в 3 сообщениях
Регистрация: 15.07.2009
По умолчанию 21.07.2009, 15:28

Цитата:
Есть еще у кого какие попытки?
Если для того, чтобы сдать только. Разве одного решения мало? )))
Ответить с цитированием
  (#8 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 21.07.2009, 15:58

Код:
(defun F (arabic &optional (table '((1000 M)(900 C M)(500 D)(400 C D)(100 C)(90 X C)(50 L)(40 X L)(10 X)(9 I X)(5 V)(4 I V)(1 I))))
  (if (< arabic 4000)
   (if table
    ((lambda (num sym)
      (if (>= arabic num)
       (append sym (F (- arabic num)))
       (F arabic (cdr table))))
     (caar table)
     (cdar table)))))
Неэлегантно.
Ответить с цитированием
  (#9 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 524
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 21.07.2009, 16:59

Код:
(defun ar (w)
  (mapcar #'(lambda (a) (format nil "~@r" a)) w))
(ar '(123 456 789))
("CXXIII" "CDLVI" "DCCLXXXIX")
Ответить с цитированием
  (#10 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 524
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 21.07.2009, 17:04

Код:
defun ar (w)
  (mapcar #'(lambda (a) (intern (format nil "~@r" a))) w))
(ar '(123 456 789))
(CXXIII CDLVI DCCLXXXIX)
Ответить с цитированием
  (#11 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 524
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 21.07.2009, 17:24

Цитата:
... хочу найти наиболее оптимальный код. Задача: "Написать функцию, которая берет список в качестве аргумента и возвращает обращенный список качестве результата. В качестве последнего элемента списка аргумента допускается использовать NTL. Пример: '(a b c)->'(c b a), '(a(b)c(d))->'((d)c(b)a).
Код:
(defun rv (w)
  (reverse w))
(rv '(a(b)c(d)))
((D) C (B) A)

Цитата:
... представить аналогичную рекурсивную функцию.
Код:
(defun rv (w &optional ac)
  (cond ((null w) ac)
        ((rv (cdr w) (cons (car w) ac)))))
(rv '(a b c))
(C B A)
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод арабских цифр в римские студентка Алгоритмы 3 19.12.2014 17:23
Перевод арабских чисел в римские valigur Prolog 64 12.05.2012 16:23
Класс Римские числа imported_Gear Задания за деньги 8 09.05.2012 01:18
Необходимо написать макрос, способный вставить нужный символ aryumin Софт и программы 5 10.12.2010 22:55
Как написать транслятор в С++ loxmatii Вопросы начинающих программистов 5 30.12.2008 19:15
Float TO Int как переводить данные Horror С/С++ 3 28.02.2008 01:40
Как на Delphi переводить формулы математические dazenita Delphi 2 19.12.2006 10:22
Как написать транслятор си-паскаль bam С/С++ 9 11.06.2006 09:27
Как написать простой 2D движок Sonechko Вопросы начинающих программистов 7 17.02.2005 08:09
Перевод арабских чисел в римские MadMan|x Алгоритмы 5 25.10.2004 08:28
Как переводить цифры в текст в Excel Anonymous Вопросы начинающих программистов 1 09.06.2004 16:07
Как переводить 8 байт в другое числовое значение vendim Delphi 1 11.11.2002 16:44



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов