Как следует из названия, я думал о соревновании, в котором нужно обнаружить грани искусства ASCII.
Код должен принимать B / W ASCII art в качестве входных данных. B / W ASCII искусство определяется как (мной) в ASCII искусства только один вид небелых-пространств характера (в нашем случае: Астерикс *
). И в качестве выходных данных производят стандартное искусство ASCII (все символы ASCII принимаются), которое должно помнить контур первого.
Цель использования более одного символа в выводе - сделать некоторые ребра более гладкими. Например, можно позволить этот вход
***
****
******
******
******
******
****
***
мог бы стать:
___
_/ )
_/ /
/ |
| /
| \
\ |
`\ |
\___)
Ввод \n
разделенной строки в качестве ввода. Каждая строка имеет максимум 80
символов. Количество строк не указано.
Это мой пример программы на Python3:
import fileinput as f
import re as r
import copy as c
a,s,p='*',' ','+'
def read(n):
s=[list(' '*n)]
for l in f.input():
if(len(l)>n):l=l[:n]
k=list(r.sub('[^ ^\%c]'%a,'',' '+l+' '))
s.append(k+[' ']*(n-len(k)))
s.append([' ']*n)
return s
def np(s):
s=c.deepcopy(s)
for l in s[1:-1]:
for w in l[1:-1]: print(w,end='')
print()
def grow(i):
o=c.deepcopy(i)
for x in range(1,len(o)-1):
for y in range(1,len(o[x])-1):
if(i[x][y]==a): o[x-1][y-1]=o[x-1][y+1]=o[x-1][y]=o[x+1][y]=o[x+1][y-1]=o[x+1][y+1]=o[x][y+1]=o[x][y-1]=a
return o
def diff(i,o):
c=[]
for x in range(0,len(i)):
l=[]
for y in range(0,len(i[x])):
if(i[x][y]==a and o[x][y]==s): l.append(p)
else: l.append(s)
c.append(l)
return c
I=read(80)
np(diff(grow(I),I))
Входные данные:
Здесь ниже я помещаю оба ввода программ. Это 80x70 ASCII ART. Это означает, что он имеет 70 строк по 80 символов, каждая из которых разделена \n
.
Этот входной файл содержит только пробелы и звездочку *
, он имеет максимум 80 столбцов, как и все изображения ASCII .
Если вы найдете более приятное искусство, дайте мне знать!
*************
***** *****
****** ***
*** ****
********* **
*********** **
****** ******* **
***** ******* *** **
**** ******** ***** *
** ********* ***** ***** *
*** ********* ******* ****** **
** ********** ******* ****** **
** ********** ******* ******** *
* *********** ****** ******** *
** ************ ***** ******** *
* ************ *** ******** *
* ************* ****** *
* ************* *** *
** ************* *
* ************** *
** ************* **
* ************* **
** ************* ***
*** ************* ****
** ************ ****
** ************* ****
** ************* ***** ****
** ************* ** ** ** ****
** ************ * * ** ** ****
* ************ ** ** ** ** ****
* ************* ******* ** *** ****
* ************ ***** ******* ****
* ************ *** ***** ****
** * ************* **** *****
** *** ************** *****
* ***** ************* ******
** ******* ************** *******
********** *************** * *********
********** ***************** *** ***********
*********** ******************* **************
*********** ********************** ******************
************ ***************** ** ***********************
************* ****************** **** *******************
************** ****************** ********************
**************** ****************** *******************
*************** ******************* *******************
**************** ****************** ******************
****************** ****************** *******************
******************* ***************** *******************
********************* ****************** ********************
********************************************* *********************
********************************************** ***********************
************************ ***************** ************************
********************** ******************* **************************
********************* *********************************************
********************* **************************** ***************
******************** ************************** ***************
******************** ********************* ***************
******************* ******************** ****************
****************** ***************** ****************
***************** **************** ***************
***************** **************** ***************
***************** ***************** ***************
**************** ***************** ***************
************** ****************** ***************
**************** ****************
************** ***************
**************
************
Возможный вывод:
Возможный вывод может быть:
+++++ ++++
++++++ ++++++++++ +++
++ +++++ +++++ +++++
++++++++ +++++ ++++ ++
++++ ++ ++++ ++
++++++ ++ ++ ++
+++++ +++ + +++++ ++ ++
++++ +++++++ ++ ++ ++ ++ ++
++ +++++ ++ + + + +++++++ ++
+++ ++++ ++ + ++ ++ ++ ++ ++
++ ++ ++ ++ + + + ++ ++
++ +++ + + ++ + ++ +++ +
++ ++ ++ + ++ ++ + +++ +
++ +++ ++ + + +++ + + + ++
+ + + + + ++ + ++++ +
++ ++ ++ + ++ ++ ++ + + +
++ ++ + + +++++ ++ ++ + +
++ ++ + + +++ ++ + +
+ + ++ + +++++ + +
++ ++ + + ++ +
+ + + ++ + +
++ ++ ++ + + ++
++ + + ++ + ++
+ + + + + +
+ ++ ++ ++ + +
+ + + + +++++++ + +
+ + + + ++ ++ ++++ + +
+ + + + + +++ + ++ +++ + +
+ + ++ + + ++ ++ + ++ + ++ + +
+ ++ + ++ ++ +++ + + +++ ++ + +
+ + + + + ++ + +++ + + +
+ + + ++ ++ ++ ++ + + +
+ + +++ ++ ++ + +++ +++ + ++ +
+ ++ ++ + ++ +++++ + ++ ++ +
+ ++ ++ + + ++++++ ++ ++
++++ + ++ +++ ++ +
+ + ++ ++ +++ +++ +
+ + ++++ ++ ++ +++ +
++ ++ ++++ + + ++++ +
+ ++ +++++ +++++ +++++ +
++ ++ +++ ++++++ +
++ + +++++ +++++ +
++ + + +++ +++++ +
+++ + ++ ++++++ + +
+ ++ + ++ +
++ + + + +
+++ ++ + ++ ++
++ + + + +
+++ ++ + +++ +
++++++ + ++ ++
++ +++ +
+ ++ +
+++++ ++++++ +
+ ++ ++ + +
+ ++ + ++
+ + + ++ +
+ ++ + ++++ +
+ + + ++++++ ++ +
+ ++ + ++ + +
+ ++ + ++++ + +
+ ++ ++ + + ++
+ + + ++ + +
+ + + + + +
++ + + ++ + +
++ ++ + + + ++
++++++++++++++++ +++ + + +
++ ++ ++ +
++++++++++++++++ ++ +
++ ++
++++++++++++++
Это также вывод, произведенный сценарием выше. Конечно, это не лучший результат, и я уверен, что можно легко получить более гладкий.
Это конкурс популярности, так как, я надеюсь, голоса будут пропорциональны элегантности и качеству продукции! (Также я предполагаю, что хорошие результаты могут быть получены в сочетании aplay
и gimp-cli
) Нет строгих правил относительно того, каким должен быть результат. Просто используйте свою фантазию!
источник
Ответы:
GolfScript
Я думал, что игра в гольф популярна на этом сайте, поэтому представление GolfScript всегда подходит для конкурса популярности.
Вы можете попробовать код с вашим собственным ascii art здесь . Обратите внимание, что требуется, чтобы все строки имели одинаковую длину.
Пример:
источник
Код Python, прежде всего, полагается на регулярное выражение для выполнения задачи.
*Выход
Еще один
источник
питон
Использование градиентной операции для определения ребер:
Выход для банана и панды:
Чтобы сделать вывод ASCII, часть графиков должна быть заменена на:
Выход ASCII:
Банан:
Панда:
источник
Mathematica
Предполагая, что он
panda
содержит исходную строку, следующий получает пиксели краев контура и заменяет их на «+».Как это устроено
Partition[Take[Characters@panda, {61, 5636}], 82]
разбивает строку на строки символов.Most
удаляет символы новой строки.Image[t]]]
преобразует матрицу 0 и 1 в изображение.EdgeDetect
находит края изображения.ImageData
получает двоичную матрицу изображения./. {1 -> "+", 0 -> " "}
заменяет каждые 0 и 1 на соответствующий символ.Grid
отображает искусство Ascii.источник
Джава
Это проверяет строки и строки, если есть что-нибудь сверху, слева, справа или снизу, и на основе этого выбирает значение из массива, содержащего символ, который используется для создания нового искусства с использованием ребер!
Пример вывода:
Код:
Ps. Первый таймер здесь, не будь груб: D Pps. эта панда выглядит грустно :(
источник
Python (ascii -> image -> edge filter -> ascii)
Я вроде как обманул, я преобразовал текст ascii в изображение и запустил фильтр обнаружения краев PIL. Затем я перевернул изображение и преобразовал обратно в текст ascii:
Вот результат:
Приведенные источники (для преобразования серого изображения в ascii): http://stevendkay.wordpress.com/2009/09/08/generating-ascii-art-from-photographs-in-python/
источник
convert
(чтобы преобразовать ASCII art в изображение);GIMP
-командная строка (для обнаружения края); иaplay
(для рендеринга изображения в искусстве ASCII). но не получилось: p (и добро пожаловать в Codegolf)k4
это ленивая версия, которая просто находит края, она не пытается найти преобладающую форму и выбрать подходящий символ
«алгоритм» - это просто найти все ячейки, которые отличаются от одной слева или выше, а затем использовать магию языка массивов, чтобы превратить булеву матрицу обратно в искусство ASCII
есть небольшой хак, чтобы дополнить начало всего лишним пробелом, или он будет считать левый и верхний края "ребрами" - так оно и есть, но я могу просто опустить это позже
более или менее тот же результат, что и образец в спецификации
вот оно на бумеранге / банане
источник
питон
Это очень простая версия Python фильтра "highpass" :). Он проверяет, окружен ли пиксель хотя бы четырьмя сторонами. Это один из моих первых кодов Python, поэтому будьте осторожны ...
Выход:
источник
<!-- language: lang-py -->
р
Для каждой точки в матрице скройте символ, если он окружен звездочками справа, слева, сверху и снизу. Это наивно, но работает очень хорошо.
Использование:
Rscript script.r input_.txt
Выход
источник