Доброго времени суток, случайные и не случайные читатели.
Пользуясь случаем, поздравляю вас с уже наступившим Новым Годом. Дабы немного поднять вам (и себе) новогоднее настроение, публикую исходный код программы на Emacs Lisp, которая рисует замечательную новогоднюю ACSII-ёлку.
;;;
;;; Copyright (C) 2011 Artyom Poptsov
;;;
;;; This program is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or
;;; (at your option) any later version.
;;;
;;; For more information, see http://www.gnu.org/licenses/
;;;
;; Result of running this program sends to other buffer
(with-output-to-temp-buffer "*tree*"
;; Get height of the tree from stdin
(setf HIGHT (read))
;; There are symbols that I will use for drawing the tree
(setq C_BG ":")
(setq C_TREE "^")
(setq C_TRUNK "#")
;; A few variables
(setq PADDING 2) ; Padding from edges of the "canvas".
(setf TRUNK_H (/ HIGHT 4))
;; I'm using this funtions for printing empty strings filled with BG
(defun print-bg-for-picture ()
"This function prints out a few strings filled with background"
(loop for i from 1 to PADDING do
(loop for j from 0 to (+ (* HIGHT 2) (* PADDING 3)) do
(princ C_BG))
(princ "\n")))
(print-bg-for-picture)
;; Main loop
(loop for i from 0 to (+ HIGHT TRUNK_H (* PADDING 2)) do
(loop for j from 0 to PADDING do
(princ C_BG))
(if (< i HIGHT)
;; Top of the tree
(loop for j from 0 to (* HIGHT 2) do
(if (or (< j (- HIGHT i))
(> j (+ HIGHT i)))
(princ C_BG)
(princ C_TREE)))
;; Trunk of the tree
(loop for j from 0 to (* HIGHT 2) do
(if (or (< j (- HIGHT (/ HIGHT 10)))
(> j (+ HIGHT (/ HIGHT 10))))
(princ C_BG)
(princ C_TRUNK))))
(loop for j from 0 to PADDING do
(princ C_BG))
(princ "\n"))
(print-bg-for-picture))
Вы можете вычислить (выполнить) эту программу следующим образом: запустите текстовый редактор Emacs (предположим, что он у вас уже установлен), скопируйте исходный код в буфер *scratch*, поместите точку (курсор) после последней скобки в конце программы и нажмите C-x C-e (Ctrl+x Ctrl+e). Далее вы можете ввести размер ёлки.
В результате, если вы всё сделали правильно, у вас откроется новое окно, в котором отобразится результат работы программы:
:::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::^:::::::::::::::::::::::
::::::::::::::::::::::^^^::::::::::::::::::::::
:::::::::::::::::::::^^^^^:::::::::::::::::::::
::::::::::::::::::::^^^^^^^::::::::::::::::::::
:::::::::::::::::::^^^^^^^^^:::::::::::::::::::
::::::::::::::::::^^^^^^^^^^^::::::::::::::::::
:::::::::::::::::^^^^^^^^^^^^^:::::::::::::::::
::::::::::::::::^^^^^^^^^^^^^^^::::::::::::::::
:::::::::::::::^^^^^^^^^^^^^^^^^:::::::::::::::
::::::::::::::^^^^^^^^^^^^^^^^^^^::::::::::::::
:::::::::::::^^^^^^^^^^^^^^^^^^^^^:::::::::::::
::::::::::::^^^^^^^^^^^^^^^^^^^^^^^::::::::::::
:::::::::::^^^^^^^^^^^^^^^^^^^^^^^^^:::::::::::
::::::::::^^^^^^^^^^^^^^^^^^^^^^^^^^^::::::::::
:::::::::^^^^^^^^^^^^^^^^^^^^^^^^^^^^^:::::::::
::::::::^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^::::::::
:::::::^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^:::::::
::::::^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^::::::
:::::^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^:::::
::::^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^::::
:::::::::::::::::::::#####:::::::::::::::::::::
:::::::::::::::::::::#####:::::::::::::::::::::
:::::::::::::::::::::#####:::::::::::::::::::::
:::::::::::::::::::::#####:::::::::::::::::::::
:::::::::::::::::::::#####:::::::::::::::::::::
:::::::::::::::::::::#####:::::::::::::::::::::
:::::::::::::::::::::#####:::::::::::::::::::::
:::::::::::::::::::::#####:::::::::::::::::::::
:::::::::::::::::::::#####:::::::::::::::::::::
:::::::::::::::::::::#####:::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::
Happy New Year and happy coding!
Комментариев нет:
Отправить комментарий