Phát hiện cạnh ASCII ART


19

Như tiêu đề đã nói, tôi đã suy nghĩ để cạnh tranh trong đó người ta phải phát hiện các cạnh của nghệ thuật ASCII.

Mã phải chấp nhận nghệ thuật B / W ASCII làm đầu vào. Một B / nghệ thuật ASCII W được định nghĩa là (theo tôi) một nghệ thuật ASCII với chỉ có một loại phi trắng-không gian nhân vật (trong trường hợp của chúng tôi: một dấu chấm câu *). Và vì đầu ra tạo ra một nghệ thuật ASCII tiêu chuẩn (tất cả các ký tự ASCII được chấp nhận) sẽ ghi nhớ phần đầu tiên.

Mục đích của việc sử dụng nhiều hơn một ký tự trong đầu ra là để làm cho một số cạnh trở nên gọn gàng hơn. Chẳng hạn, người ta có thể để đầu vào này

     *** 
   ****
 ******
******
****** 
 ******
   ****
     ***

có thể trở thành:

      ___
    _/   ) 
  _/    /
 /      |
|      /
|      \
 \      |
  `\     |
     \___)

Chuỗi đầu vào \ntách ra làm đầu vào. Mỗi dòng có tối đa các 80ký tự. Số lượng hàng không được chỉ định.

Đây là chương trình Python3 mẫu của tôi:

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))

Đầu vào:

Ở đây dưới đây tôi đặt cả đầu vào của các chương trình. Nó là NGHỆ THUẬT ASCII 80x70. Nó có nghĩa là nó có 70 dòng 80 ký tự, mỗi dòng cách nhau \n.

Tệp đầu vào này chỉ chứa khoảng trắng và dấu hoa thị *, nó có tối đa 80 cột như mọi nghệ thuật ASCII .

Nếu bạn tìm thấy một nghệ thuật đẹp hơn cho tôi biết!

                                              *************
                                          *****          *****                   
                                     ******                  ***                 
                                    ***                         ****             
                             *********                             **            
                          ***********                               **           
                     ******   *******                                **          
                 *****       *******      ***                         **         
              ****          ********     *****                          *        
             **            *********     *****                    *****  *       
           ***            *********     *******                  ******  **      
          **             **********     *******                  ******   **     
         **              **********    *******                  ********   *     
        *               ***********   ******                    ********   *     
       **              ************   *****                     ********    *    
       *               ************    ***                       ********   *    
      *               *************                               ******    *    
     *                *************                                 ***     *    
    **                *************                                         *    
    *                **************                                         *    
   **                *************                                         **    
   *                 *************                                         **    
  **                *************                                          ***   
 ***                *************                                          ****  
 **                 ************                                           ****  
 **                *************                                           ****  
 **                *************           *****                           ****  
 **                *************          **   **          **              ****  
 **                 ************          *     *         ** **            ****  
 *                  ************          **   **        **   **           ****  
 *                  *************        *******         **   ***          ****  
 *                  ************          *****           *******          ****  
 *                   ************         ***               *****          ****  
**     *             *************                          ****          *****  
**    ***            **************                                      *****   
*    *****            *************                                     ******   
** *******             **************                                  *******   
**********             ***************              *                *********   
**********              *****************          ***             ***********   
***********              *******************                    **************   
***********               **********************            ******************   
************              *****************     **     ***********************   
*************             ******************      ****     *******************   
**************            ******************              ********************   
****************           ******************              *******************   
***************           *******************              *******************   
****************           ******************              ******************    
******************         ******************             *******************    
*******************         *****************             *******************    
*********************      ******************           ********************     
*********************************************          *********************     
**********************************************       ***********************     
************************     *****************      ************************     
 **********************       ******************* **************************     
 *********************        *********************************************      
 *********************        ****************************  ***************      
 ********************         **************************    ***************      
 ********************         *********************         ***************      
 *******************          ********************         ****************      
 ******************           *****************            ****************      
 *****************             ****************            ***************       
 *****************             ****************            ***************       
 *****************             *****************           ***************       
  ****************             *****************           ***************       
   **************              ******************          ***************       
                                 ****************          ****************      
                                  **************            ***************      
                                                             **************      
                                                              ************       

Sản lượng có thể:

Một đầu ra có thể có thể là:

                                         +++++             ++++
                                    ++++++     ++++++++++     +++
                                   ++      +++++        +++++   +++++
                            ++++++++   +++++                ++++    ++
                         ++++         ++                       ++++  ++
                    ++++++           ++                           ++  ++
                +++++      +++       +   +++++                     ++  ++
             ++++     +++++++       ++  ++   ++                     ++  ++
            ++    +++++   ++        +   +     +                  +++++++ ++
          +++  ++++      ++         +  ++     ++                ++     ++ ++
         ++   ++        ++         ++  +       +                +      ++  ++
        ++  +++         +          +  ++       +               ++      +++  +
       ++  ++          ++          + ++       ++               +        +++ +
      ++ +++          ++           + +      +++                +        + + ++
      +  +            +            + +     ++                  +        ++++ +
     ++ ++           ++            + ++   ++                   ++        + + +
    ++ ++            +             +  +++++                     ++      ++ + +
   ++ ++             +             +                             +++   ++  + +
   +  +             ++             +                               +++++   + +
  ++ ++             +              +                                      ++ +
  +  +              +             ++                                      +  +
 ++ ++             ++             +                                       +  ++
++  +              +             ++                                       +   ++
+   +              +             +                                        +    +
+  ++             ++            ++                                        +    +
+  +              +             +         +++++++                         +    +
+  +              +             +        ++     ++        ++++            +    +
+  +              +             +        +  +++  +       ++  +++          +    +
+  +              ++            +        + ++ ++ +      ++  +  ++         +    +
+ ++               +            ++      ++  +++  +      +  +++  ++        +    +
+ +                +             +      +       ++      +  +++   +        +    +
+ +                +            ++      ++     ++       ++       +        +    +
+ +   +++          ++            ++      +   +++         +++     +       ++    +
  +  ++ ++          +             ++     +++++             +    ++      ++     +
  + ++   ++         +              +                       ++++++      ++     ++
 ++++     +         ++             +++                                ++      +
  +       +          ++              ++            +++              +++       +
          +           +               ++++        ++ ++           +++         +
          ++          ++                 ++++     +   +        ++++           +
           +           ++                   +++++ +++++    +++++              +
           ++           ++                      +++   ++++++                  +
            ++           +                 +++++  +++++                       +
             ++          +                  +  +++    +++++                   +
              +++        +                  ++   ++++++  +                    +
                +        ++                  +           ++                   +
               ++        +                   +            +                   +
                +++      ++                  +           ++                  ++
                  ++      +                  +           +                   +
                   +++    ++                 +         +++                   +
                     ++++++                  +        ++                    ++
                                             ++     +++                     +
                                              +    ++                       +
                        +++++                 ++++++                        +
+                      ++   ++                   +                          +
+                     ++     +                                             ++
+                     +      +                            ++               +
+                    ++      +                          ++++               +
+                    +       +                     ++++++ ++               +
+                   ++       +                    ++      +                +
+                  ++        +                 ++++       +                +
+                 ++         ++                +          +               ++
+                 +           +                ++         +               +
+                 +           +                 +         +               +
++                +           +                 ++        +               +
 ++              ++           +                  +        +               ++
  ++++++++++++++++            +++                +        +                +
                                ++              ++        ++               +
                                 ++++++++++++++++          ++              +
                                                            ++            ++
                                                             ++++++++++++++

Đây cũng là đầu ra được tạo bởi kịch bản trên. Tất nhiên nó không phải là đầu ra tốt nhất và tôi chắc chắn rằng người ta có thể dễ dàng tạo ra một sản phẩm mượt mà hơn.

Đó là một cuộc thi phổ biến vì, tôi hy vọng phiếu bầu sẽ tỷ lệ thuận với sự thanh lịch và chất lượng đầu ra! (Ngoài ra tôi đoán acan có được kết quả tốt aplaygimp-cli) Không có quy tắc nghiêm ngặt nào về việc đầu ra phải như thế nào..chỉ cần sử dụng trí tưởng tượng của bạn!


Vui lòng xác định đầu vào sẽ được sử dụng trong tất cả các câu trả lời để so sánh chúng. Con gấu trúc quá lớn IMHO.
AL

Có phải độ dài của mỗi dòng của đầu vào cần phải không đổi? Dòng đầu tiên của gấu trúc ngắn hơn các dòng khác (khoảng trống bị thiếu ở cuối).
AL

Tập tin đầu vào chỉ chứa một ký tự và khoảng trắng?
AL

Cảm ơn câu hỏi của bạn, tôi không nghĩ gấu trúc quá lớn: nó có 80 cột như mọi nghệ thuật ASCII. Tôi đã không nói điều đó, nhưng tối đa các cột phải là 80. Có, tệp đầu vào chỉ chứa dấu hoa thị và dấu cách. Cảm ơn một lần nữa, tôi đã thêm những thông tin này trong câu hỏi.
Antonio Ragagnin

Đó là một con gấu trúc? Tôi nghĩ đó là snoopy ....
Justin

Câu trả lời:


14

GolfScript

Tôi nghĩ rằng chơi golf là phổ biến trên trang web này, vì vậy một bài nộp GolfScript luôn phù hợp với một cuộc thi phổ biến.

n%.0=,' '[*]\1$++{0\0++{42=}%[{.}*]);2/}%{.}*]);2/{zip{~+2base' /\-\|/ /\| -   '=}%n+}%

Bạn có thể thử mã với nghệ thuật ascii của riêng bạn ở đây . Lưu ý rằng tất cả các dòng có cùng độ dài là bắt buộc.

Thí dụ:

                                              /------------\                      
                                          /---  ---------   --\                   
                                     /----  ---/         \---  -\                 
                                    /   ---/                 \--\---\             
                             /------   /                        \--  \            
                          /--         /                            \  \           
                     /----  --       |                              \  \          
                 /---  ----/ /       /    /--\                       \  \         
              /--  ---/     /       |    /    \                       \-\\        
             /  --/        /        |    |    |                   /----\\\\       
           /-  /          /         /   /      \                 /     | | \      
          /  -/          /         |    |      |                 |     | \  \     
         /  /            |         |   /       /                /       \ \ |     
        //-/            /          |  /      -/                 |       |  ||     
       / |             /           |  |     /                   |       |  \\\    
       | /             |           |  \    /                    \        \  ||    
      ///             /            |   \--/                      \       /  ||    
     ///              |            |                              \-    /   ||    
    / |               |            |                                \--/    ||    
    | /              /             |                                        ||    
   / |               |             /                                       / |    
   | /               |            |                                        | |    
  / |               /             /                                        |  \   
 /  |               |            |                                         |   \  
 |  /               |            /                                         |   |  
 | |               /            |                                          |   |  
 | |               |            |          /----\                          |   |  
 | |               |            |         /  --  \         /-\             |   |  
 | |               \            |         | /  \ |        /  \-\           |   |  
 | /                |           |         | \  / |       /  /\  \          |   |  
 ||                 |            \       /   --  /       | |  |  \         |   |  
 ||                 |            /       \      /        \  --   |         |   |  
 ||                 \            \        |   -/          \-     |         |   |  
/ |    /\            |            \       \--/              |    /        /    |  
| |   /  \           |             \                        \---/        /     /  
| /  /    \          \             |                                    /     |   
| \/-     |           \             -\                                 /      |   
|         |            |              \             /\               /-       |   
|         |            \               --\         /  \            /-         |   
|          \            \                 --\      \--/         /--           |   
|          |             \                   ---\           /---              |   
|           \             |                 ----\-\    /----                  |   
|            \            |                 \   \-\---\\---                   |   
|             \           |                 |     \---/   /                   |   
|              -\         \                  \            \                   |   
|               /         /                  |             |                  |   
|               \         \                  |             |                  /   
|                -\        |                 |            /                  |    
|                  \       \                 |            |                  |    
|                   -\     /                 |          /-                   /    
|                     -----                  |         /                    |     
|                                             \      /-                     |     
|                        ----                 |     /                       |     
\                       /    \                 --\/-                        |     
 |                     /      |                                             /     
 |                    |       |                            -               |      
 |                    /       |                          -/ |              |      
 |                   |        |                     ----/   |              |      
 |                   /        |                    /       /               |      
 |                  /         |                 --/        |               |      
 |                 /          \                |           |               /      
 |                |            |               |           |              |       
 |                |            |                \          |              |       
 \                |            |                |          |              |       
  \               /            |                 \         |              |       
   \-------------/             \-                |         |               \      
                                 \               /         \               |      
                                  \-------------/           \              |      
                                                             \             /      
                                                              \-----------/       

1
Golfscript luôn có liên quan.
Nit

Ha nó làm cho gấu trúc trông giận dữ +1 vì sử dụng nhiều hơn 1 ký tự.
Bạch tuộc ma thuật Urn

6

Mã Python, chủ yếu dựa vào regex để thực hiện nhiệm vụ.

def edge_detect(st): 
    width = len(max(st.split('\n'), key=len))       
    #Pad the image with extra blank lines above and below
    st = '{{0: <{0}}}\n{{1}}\n{{0: <{0}}}'.format(width).format('', st.rstrip('\n'))     
    return re.sub(r"""                     #Match a non space character
                      (?<=\s.{{{0}}})[^\s]|#When the char above is a space  
                      [^\s](?=.{{{0}}}\s) |#When the char below is a space       
                      (?<=\s)[^\s]|        #When the previous char is a space   
                      [^\s](?=\s)          #When the following char is a space   
                   """.format(width),                               
                   '+',                    #Replace it with edge character '+'
                   st,
                   flags=re.X|re.S).replace('*',' ')  # And finally replace all 
                                           # non-space character with spaces

* Đầu ra

>>> print edge_detect(st)
                                              +++++++++++++                      
                                          +++++          +++++                   
                                     ++++++                  +++                 
                                    +++                         ++++             
                             +++++++++                             ++            
                          ++++      +                               ++           
                     ++++++   +    ++                                ++          
                 +++++       ++    +      +++                         ++         
              ++++          ++     +     ++  +                          +        
             ++            ++     ++     +   +                    +++++  +       
           +++            ++      +     ++    +                  ++   +  ++      
          ++             ++       +     +    ++                  +    +   ++     
         ++              +        +    ++  +++                  ++     +   +     
        +               ++        +   ++  ++                    +      +   +     
       ++              ++         +   +  ++                     +      +    +    
       +               +          +    +++                       +     ++   +    
      +               ++          +                               +   ++    +    
     +                +           +                                 +++     +    
    ++                +           +                                         +    
    +                ++          ++                                         +    
   ++                +           +                                         ++    
   +                 +          ++                                         ++    
  ++                ++          +                                          + +   
 +++                +          ++                                          +  +  
 ++                 +          +                                           +  +  
 ++                ++          +                                           +  +  
 ++                +           +           +++++                           +  +  
 ++                +           +          ++   ++          ++              +  +  
 ++                 +          +          +     +         ++ ++            +  +  
 +                  +          +          ++   ++        ++   ++           +  +  
 +                  +          ++        ++  +++         ++   + +          +  +  
 +                  +          +          + +++           + +++ +          +  +  
 +                   +          +         +++               +  ++          +  +  
++     +             +           +                          ++++          ++ ++  
++    +++            +            +                                      ++  +   
+    ++  +            +           +                                     ++   +   
++ +++   +             +            +                                  ++    +   
+  +     +             +             +              +                +++     +   
+        +              +              ++          +++             +++       +   
+         +              +                ++                    ++++         +   
+         +               +               ++++++            +++++            +   
+          +              +               +     ++     ++++++                +   
+           +             +                +      ++++     +                 +   
+            +            +                +              ++                 +   
+             ++           +                +              +                 +   
+             +           ++                +              +                ++   
+              +           +                +              +                +    
+                +         +                +             ++                +    
+                 +         +               +             +                ++    
+                   +      ++               +           +++                +     
+                     ++++++                +          ++                  +     
+                      +++++                 +       +++                   +     
+                     ++     +               +      ++                     +     
 +                   ++       +                ++ +++                     ++     
 +                   +        +                   +      ++               +      
 +                  ++        +                        +++  +             +      
 +                  +         +                   ++++++    +             +      
 +                 ++         +                  ++         +             +      
 +                ++          +               ++++         ++             +      
 +               ++           +               +            +             ++      
 +               +             +              +            +             +       
 +               +             +              +            +             +       
 +               +             +               +           +             +       
  +             ++             +               +           +             +       
   ++++++++++++++              +                +          +             +       
                                 +             ++          +              +      
                                  ++++++++++++++            +             +      
                                                             +           ++      
                                                              ++++++++++++  

Một số khác

print edge_detect(st)
     +++
   ++ + 
 ++   + 
+    +  
+    +  
 ++   + 
   ++ + 
     +++ 

5

Con trăn

Sử dụng thao tác gradient để xác định các cạnh:

from numpy import gradient, zeros
import matplotlib.pylab as plt
b = open("file").readlines()
bi = zeros((len(b),len(b[0])))
e = enumerate
for i,l in e(b):
    for j,c in e(l):
        if(c=="*"): bi[i][j]=1
g = gradient(bi,.5,.5)
g = (abs(g[0])+abs(g[1]))>=1.
plt.subplot(2,1,1)
plt.imshow(bi,cmap='Greys'), plt.show()
plt.subplot(2,1,2)
plt.imshow(g*1,cmap='Greys'), plt.show()

Đầu ra cho chuối và gấu trúc:

Để tạo Đầu ra ASCII, một phần của các ô cần được thay thế bằng:

r = range
s = ""
for i in r(len(b)):
    for j in r(len(b[0])):
        if(g[i][j]!=0): 
            s+="*"
        else:
            s+=" " 
    s +="\n"
print s

Đầu ra ASCII:

Trái chuối:

   *** ** 
 **** **  
***   **  
*    **   
*    **   
***   **  
 **** **  
   *** ** 

Gấu trúc:

                                          *************** ****                    
                                     ******   *************  ***                  
                                    ***   *****          ***** *****              
                             ******** *****                  ****  **             
                          ********** **                         ******            
                     ******  *      **                             ****           
                 *****    *****     **    ***                       ****          
              ****   ****** **     **    *****                       ****         
             **  *****     **      **   **   **                   **** * *        
           *******        **       **   **   **                  **********       
          ** **          **       **   **     **                **    ******      
         *****          **        **   **     **                **    ** ****     
        ****            **        **  **    ***                **      ** * *     
       ****            **         ** **    ***                 **      ** ***     
      ****            **          ** **   **                   **      **  ***    
      ***             **          **  *****                     **      ** * *    
     * *             **           **   ***                       ***   **  * *    
    ***              **           **                              ******   * *    
   ****              **           **                                ***    * *    
   * *              **            **                                       * *    
  ****              **           **                                       ****    
  * *               **           **                                       ****    
 ****              **           **                                        ** **   
** **              **           **                                        **  **  
****               **          **                                         **  **  
****              **           **          *****                          **  **  
****              **           **         **   **          **             **  **  
****              **           **        *********        *****           **  **  
****               **          **        * *   * *       *******          **  **  
* *                **          **        *********      **** ****         **  **  
* *                **           **      **  *****       ******* **        **  **  
* *                **          **        **  ***         ** **  **        **  **  
* *    *            **          **       ******           ***   **        **  **  
***   ***           **           **       ***              ******        **   **  
 **  ** **          **            **                        ****        **   **   
** ***   **          **           ***                                  **    **   
 ****    **           **           ***              *                ***     **   
  *      **           **             ****          ***             ****      **   
         **            **             ******      *****         *****        **   
          **            **               *******   ***      *******          **   
          **             **                *   ***     *********             **   
           **            **               **************   *                 **   
            **           **                **   ***  *******                 **   
             ***         **                **     ****   **                  **   
              ***         **                **            **                 **   
              **         **                 **            **                 **   
               ***        **                **            **                **    
                ***       **                **           **                 **    
                  ***      **               **          ***                 **    
                   *********                **         ***                 **     
                     ******                 **       ***                   **     
                        *****                **     ***                    **     
*                      *******               **** ***                      **     
**                    **     **               ******                       **     
**                   **      **                  *        **              **      
**                   **      **                         *****             **      
**                  **       **                    ******* **             **      
**                  **       **                   ******   **             **      
**                 **        **                ****       **              **      
**                **         **               ****        **              **      
**               **           **              **          **             **       
**               **           **              **          **             **       
**               **           **               **         **             **       
 **              **           **               **         **             **       
  ****************            ***               **        **             **       
   **************              ***              **        **              **      
                                 ****************          **             **      
                                  **************            **            **      
                                                             **          **       

Một quả chuối? Đó là một boomerang đối với tôi. :)
AL

4

Toán học

Giả sử pandacó chứa chuỗi gốc, phần sau sẽ thu được các pixel của các cạnh đường viền và thay thế chúng bằng "+".

t = (Most /@ Partition[Take[Characters@panda, {61, 5636}], 82]) /. {"*" -> 1, " " -> 0};
Grid[ImageData[EdgeDetect[Image[t]]] /. {1 -> "+", 0 -> " "}, Spacings -> 0]

gấu trúc


Làm thế nào nó hoạt động

Partition[Take[Characters@panda, {61, 5636}], 82] phá vỡ chuỗi thành các dòng ký tự.

Most loại bỏ các ký tự dòng mới.

Image[t]]] chuyển đổi ma trận 0 và 1 thành hình ảnh.

EdgeDetect tìm các cạnh của hình ảnh

ImageData thu được ma trận nhị phân của hình ảnh.

/. {1 -> "+", 0 -> " "} thay thế mỗi 0 và 1 bằng ký tự thích hợp.

Grid trưng bày nghệ thuật Ascii.


4

Java

Điều này kiểm tra các dòng và hàng nếu có bất cứ thứ gì ở trên, bên trái, bên phải hoặc dưới cùng và dựa trên đó chọn một giá trị từ biểu tượng giữ mảng được sử dụng để tạo nghệ thuật mới bằng cách sử dụng các cạnh!

Ví dụ đầu ra:

                                              /^^^^^^^^^^^\                      
                                          /^^^/          \_^^\                   
                                     /^^^^/                  \^\                 
                                    / /                         /^^\             
                             /^^^^^^ /                             \\            
                          /^^_      |                               \\           
                     /^^^^/   |     /                                \\          
                 /^^^/       /     |      /^\                         \\         
              /^^/          /      |     /   \                          /        
             //            /       /     |   |                    /^^^\  /       
           /^/            /       |     /     \                  /    |  \\      
          //             /        |     |     /                  |    |   \\     
         //              |        |    /    _/                  /      \   |     
        /               /         |   /    /                    |      |   \     
       //              /          |   \   /                     \      |    /    
       \               |          |    \_/                       \      \   |    
      /               /           |                               \_   /    |    
     /                |           |                                 \_/     |    
    //                |           |                                         |    
    |                /            /                                         |    
   //                |           |                                         /|    
   |                 |           /                                         ||    
  /|                /           |                                          | \   
 / /                |           /                                          |  \  
 ||                 |          |                                           |  |  
 ||                /           |                                           |  |  
 ||                |           |           /^^^\                           |  |  
 ||                \           |          //   \\          /\              |  |  
 |/                 |          |          |     |         // /\            |  |  
 |                  |          |          |\   //        /|   |\           |  |  
 |                  |           \        /  ^^^/         \|   | \          |  |  
 |                  \          |          |  _/           \^^^  |          |  |  
 |                   |          \         \_/               |   /          |  |  
/|     /             |           \                          \__/          /   /  
|/    / \            \            \                                      /   |   
|    /   \            \           |                                     /    |   
|\ /^    |             |           ^\                                  /     |   
| ^      |             \             \              /                /^      |   
|        |              \             ^^\          /_\             /^        |   
|         \              \               ^^\                    /^^          |   
|         |               |                _^^^\            /^^^             |   
|          \              |               |     /\     /^^^^                 |   
|           \             |                \      /^^\     |                 |   
|            \            \                |              /                  |   
|             ^\           |                \              |                 |   
|             |           /                 |              |                 /   
|              \           |                |              |                |    
|               ^\         \                |             /                 |    
|                 \         |               |             |                 /    
|                  ^\      /                |           /^                 |     
|                    ^^^^^^                 |          /                   |     
|                       _____                \       /^                    |     
\                      /     \               |      /                      |     
 |                    /       |               ^^\ /^                       /     
 |                   |        |                  ^        __              |      
 |                   /        |                         _/  |             |      
 |                  |         |                    ____/    |             |      
 |                  /         |                   /         |             |      
 |                 /          |                __/         /              |      
 |                /           \               |            |              /      
 |               |             |              |            |             |       
 |               |             |              |            |             |       
 \               |             |               \           |             |       
  \              /             |               |           |             |       
   \____________/              \_               \          |             |       
                                 \              /          \              \      
                                  \____________/            \             |      
                                                             \            /      
                                                              \__________/       
     /^\
   /^ | 
 /^   / 
/    |  
\    |  
 \_   \ 
   \_ | 
     \_\

Mã số:

package com.ruuhkis.asciiedge;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class ASCIIEdge {

    public static void main(String[] args) {
        try {
            if (args.length > 0) {
                for (String arg : args) {
                    new ASCIIEdge().detach(new FileInputStream(new File(arg)));
                }
            } else {
                new ASCIIEdge().detach(new FileInputStream(new File("art.txt")));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private void detach(InputStream is) throws IOException {
        BufferedReader bw = new BufferedReader(new InputStreamReader(is));

        StringBuilder artBuilder = new StringBuilder(100);

        int longestLineLength = 0;
        int numLines = 0;

        String line = null;

        while ((line = bw.readLine()) != null) {
            artBuilder.append(line + System.getProperty("line.separator"));

            if (line.length() > longestLineLength) {
                longestLineLength = line.length();
            }

            numLines++;

        }

        bw.close();

        char[][] artBuffer = new char[numLines][longestLineLength];

        String[] lines = artBuilder.toString().split(
                System.getProperty("line.separator"));

        for (int i = 0; i < lines.length; i++) {
            lines[i].getChars(0, lines[i].length(), artBuffer[i], 0);
            for (int j = lines[i].length(); j < longestLineLength; j++) {
                artBuffer[i][j] = ' ';
            }
        }

        detach(artBuffer, longestLineLength, numLines);
    }

    private void detach(char[][] artBuffer, int longestLineLength, int numLines) {
        char[][] outputBuffer = new char[numLines][longestLineLength];
        for (int i = 0; i < numLines; i++) {
            for (int j = 0; j < longestLineLength; j++) {
                ;

                int horizontalEdge = isHorizontalEdge(artBuffer[i], j,
                        longestLineLength);
                int verticalEdge = isVerticalEdge(artBuffer, i, j, numLines);

                char[][] result = { { '/', '^', '\\' }, { '|', ' ', '|' },
                        { '\\', '_', '/' } };

                outputBuffer[i][j] = result[verticalEdge + 1][horizontalEdge + 1];
                ;

            }

            System.out.println(outputBuffer[i]);
        }
    }

    private int isVerticalEdge(char[][] chars, int row, int col, int numLines) {
        boolean canBeEdge = chars[row][col] != ' ';
        boolean upperEdge = row - 1 < 0 || chars[row - 1][col] == ' ';
        boolean lowerEdge = row + 1 >= numLines || chars[row + 1][col] == ' ';

        return (canBeEdge && (upperEdge || lowerEdge)) ? upperEdge ? -1 : 1 : 0;
    }

    private int isHorizontalEdge(char[] chars, int index, int length) {
        boolean canBeEdge = chars[index] != ' ';
        boolean leftEdge = index - 1 < 0 || chars[index - 1] == ' ';
        boolean rightEdge = index + 1 > length - 1 || chars[index + 1] == ' ';
        return (canBeEdge && (leftEdge || rightEdge)) ? leftEdge ? -1 : 1 : 0;
    }

}

Thi thiên bộ đếm thời gian đầu tiên ở đây, đừng thô bạo: D Pps. Panda trông giống như nó buồn :(


Tôi đảm bảo với bạn rằng không có con gấu trúc nào bị hại trong quá trình tạo ra nghệ thuật ASCII này
Antonio Ragagnin

2

Python (ascii -> hình ảnh -> bộ lọc cạnh -> ascii)

Tôi bị lừa, tôi đã chuyển đổi văn bản ascii thành hình ảnh và chạy bộ lọc phát hiện cạnh PIL trên đó. Sau đó, tôi đảo ngược hình ảnh và chuyển đổi lại thành văn bản ascii:

from PIL import Image, ImageFilter, ImageOps
import random
from bisect import bisect

greyscale = [" "," ",".,-","_ivc=!/|\\~","gjez2]/(YL)t[+T7Vf","mdK4ZGbNDXY5P*Q","W8KMA","#%$"]
zonebounds=[36,72,108,144,180,216,252]

f=open('input.txt', 'r')
lines=f.readlines()
f.close()

width=82
height=len(lines)

im = Image.new("RGB", (width,height), "white")
pixels = im.load()

y=0
for line in lines:
    x=0
    for px in line:
        if px != ' ' and x < width:
            pixels[x,y] = (0,0,0)
        x+=1
    y+=1

im=im.resize((width, height),Image.BILINEAR)
im=im.convert("L")
im=im.filter(ImageFilter.FIND_EDGES)
im=ImageOps.invert(im)

str=""
for y in range(0,im.size[1]):
    for x in range(0,im.size[0]):
        lum=255-im.getpixel((x,y))
        row=bisect(zonebounds,lum)
        possibles=greyscale[row]
        str=str+possibles[random.randint(0,len(possibles)-1)]
    str=str+"\n"
print str

Đây là kết quả:

$#$$#%$$$$$$%%$$$%$$$$%$###%%#%%%$##$$$%%#$#%#              $%%%%$$%$###$$%%%##%##
%                                   $%%$$$     %#$%$$$#$$     $%#               # 
%                                  %%      $%$#$        $$$$%   %#%#%           # 
%                           %$#$%%$$   #%$$%                %%%%    %$          # 
$                        #$$$         %$                       $###  #%         $ 
%                   #%$#$#           $%                           %#  #$        # 
#               #%$%#      $##       $   $%%$%                     $$  $%       # 
%            $%#%     $##%$%$       ##  $%   %#                     $$  %$      $ 
%           %$    %$%$$   %#        $   #     #                  $#$#$$$ $$     % 
%         $%#  $##%      ##         #  #%     %$                #$     #% %%    % 
%        #$   #$        %$         %$  #       %                $      $$  $$   # 
#       $%  $%#         %          #  ##       #               $%      %#%  $   # 
%      #%  #%          %#          # $$       $%               $        $$# $   % 
%     #% $$%          %%           % $      $%#                #        % $ ##  $ 
%     $  %            #            # %     %%                  %        #$#$ #  # 
%    $% $%           #%            % %$   #%                   %%        # $ %  % 
$   $$ %$            %             #  %#$%%                     ##      $$ # $  % 
#  $% #$             $             $                             #$$   $%  % $  $ 
%  %  %             #%             #                               %$#%#   $ $  % 
# $$ #%             $              #                                      ## #  % 
$ %  #              $             #$                                      #  $  % 
%$$ ##             %#             %                                       $  $$ # 
$$  %              #             $%                                       #   #$% 
$   $              %             %                                        %    $# 
$  %#             #%            $%                                        #    #$ 
%  %              #             $         #%$##%$                         %    %# 
$  $              #             $        $%     $#        %#%%            #    %% 
#  %              #             #        %  $%$  %       %%  %%#          %    $# 
%  #              #%            #        # ## $# #      %#  %  %$         $    #$ 
$ $%               %            $%      $%  $$$  %      $  #$#  %#        %    #$ 
# %                $             $      #       $%      $  #$%   %        $    $$ 
% %                $            $%      %#     ##       $$       $        #    ## 
% #   ###          %#            #%      $   %%$         #$%     #       %#    %% 
  #  %% $#          #             ##     ##%$#             #    %#      $$     %# 
  % %%   $$         %              %                       ##$%$#      %%     #%% 
 #%$%     #         #$             ##%                                %#      % % 
  %       %          %%              $#            %#%              $%$       $ % 
          $           #               $$$%        #$ %$           %##         $ # 
          #%          $%                 %$#%     %   $        %%$#           # $ 
           %           ##                   #%##$ #$#$$    %#%%%              % % 
           $%           $%                      $##   %##$$%                  # % 
            %#           %                 ##$##  ##$#$                       % # 
             $%          #                  %  %#$    $$#%#                   # % 
              #%%        %                  ##   %$##$%  #                    # $ 
                %        %$                  $           %$                   % % 
               %%        #                   $            %                   $ # 
                %%#      #%                  #           ##                  $$ $ 
                  %$      $                  %           #                   %  % 
                   %##    #%                 $         %#$                   #  # 
                     %#$##%                  $        #%                    %$  $ 
                                             $$     #%$                     $   # 
                                              #    ##                       #   $ 
                        #%%$%                 $%#%$%                        %   $ 
#                      $%   %$                   #                          %   $ 
#                     %#     #                                             $#   % 
%                     #      %                            $#               $    $ 
%                    %#      #                          #$#%               $    % 
$                    $       #                     %%%$#$ #$               %    # 
$                   $%       $                    %%      $                $    % 
#                  #$        %                 #%#%       %                $    % 
%                 $%         ##                #          %               #$    $ 
%                 #           #                %$         %               #     # 
$                 #           $                 #         #               %     % 
%$                #           $                 %$        %               $     # 
##%              #%           %                  #        $               %$    % 
# ##%#%$$#%#%$$#%#            #%$                #        %                #    % 
#                               ##              ##        $#               $    # 
%                                $##$#%$#$$$#$$%%          $$              #    % 
$#%#$#$$#$##$%#$%#$$$$%#$#%%#$%#$$#%%%%$%%$%$#%$##%%$#$$##%#$%            #$%$$$$$

Các nguồn được trích dẫn (đối với hình ảnh thang độ xám để chuyển đổi ascii): http://stevendkay.wordpress.com/2009/09/08/generating-ascii-art-from-ph họas-in-python /


Tôi thích nó! Tôi đã từng cố gắng làm điều đó chỉ bằng cách sử dụng các lệnh: convert(để chuyển đổi nghệ thuật ASCII thành hình ảnh); GIMP-command-line (để thực hiện phát hiện cạnh); và aplay(để hiển thị hình ảnh trong nghệ thuật ASCII). nhưng thất bại: p (và chào mừng bạn đến Codegolf)
Antonio Ragagnin

2
Cảm ơn! Tôi tự nghĩ, làm thế nào tôi có thể tận dụng tất cả các công việc đã được thực hiện trên tích chập hình ảnh với việc làm lại tối thiểu. Tôi cũng muốn xuất nhiều hơn một loại ký tự để "trộn" các dòng văn bản, điều này mang lại cảm giác retro hơn. Các họa sĩ Ascii thường vẽ bằng các chương trình vẽ văn bản và sử dụng các biểu tượng khác nhau để tạo ra các mẫu như thế này. Trên một ghi chú liên quan, cũng có một phiên bản Quake đã vẽ lại các pixel trong ascii. Nó rất siêu thực.
blakesteel

1

k4

Đây là một phiên bản lười biếng chỉ tìm thấy các cạnh, nó không cố gắng tìm hình dạng phổ biến và chọn một nhân vật thích hợp

"algo" chỉ là tìm tất cả các ô khác nhau từ bên trái hoặc bên trên, sau đó sử dụng phép thuật ngôn ngữ mảng để biến ma trận boolean trở lại nghệ thuật ASCII

có một hack nhỏ để bắt đầu mọi thứ với một không gian thừa, hoặc nó sẽ coi bên trái và trên cùng là "các cạnh" - cách này vẫn còn, nhưng tôi có thể bỏ nó sau

$ cat o.k
f:{(1_~~':" ",)'x}
g:{(f x)|+f@+x}
h:{-1" +"g@0:`$,/$x;}

h@*.z.x
\\
$ 

nhiều hơn hoặc ít hơn cùng một đầu ra như mẫu trong thông số kỹ thuật

đây là trên boomerang / chuối:

$ cat b.txt
     ***
   ****
 ******
******
******
 ******
   ****
     ***
$ q o.k -q b.txt
     +++
   ++  +
 ++    +
+     +
+     +
++    ++
 +++   +
   +++ +
$ 

1

Con trăn

Đây là phiên bản Python rất đơn giản của bộ lọc "highpass" :). Nó kiểm tra xem một pixel ít nhất được bao quanh bởi 4 cạnh của nó. Đây là một trong những mã Python đầu tiên của tôi từ trước đến giờ, vì vậy hãy tinh tế ...

import sys
s = open("ascii.txt",'r').read().split("\n")
def px(x,y):
  try:
    v = s[x][y]
  except IndexError:
    v = ' '
  return v
def r(x,y):
  return '{:<3}'.format(s[x][y-1:y+2])
def v(x,y):
  return (px(x,y)==' ' or r(x,y)=='***' and px(x-1,y)=='*' and px(x+1,y)=='*') and ' ' or '*'
for row in range(len(s)):
  for cell in range(len(s[row])):
    sys.stdout.write(v(row,cell))
  print

Đầu ra:

                                              *************
                                          *****          *****                   
                                     ******                  ***                 
                                    * *                         ****             
                             ******* *                             **            
                          ****      *                               **           
                     ******   *     *                                **          
                 *****       *     *      ***                         **         
              ****          *      *     *   *                          *        
             **            *       *     *   *                    *****  *       
           ***            *       *     *     *                  *    *  **      
          **             *        *     *     *                  *    *   **     
         **              *        *    *    **                  *      *   *     
        *               *         *   *    *                    *      *   *     
       **              *          *   *   *                     *      *    *    
       *               *          *    ***                       *      *   *    
      *               *           *                               **   *    *    
     *                *           *                                 ***     *    
    **                *           *                                         *    
    *                *            *                                         *    
   **                *           *                                         **    
   *                 *           *                                         **    
  **                *           *                                          * *   
 * *                *           *                                          *  *  
 **                 *          *                                           *  *  
 **                *           *                                           *  *  
 **                *           *           *****                           *  *  
 **                *           *          **   **          **              *  *  
 **                 *          *          *     *         ** **            *  *  
 *                  *          *          **   **        **   **           *  *  
 *                  *           *        *  ****         **   * *          *  *  
 *                  *          *          *  **           ****  *          *  *  
 *                   *          *         ***               *   *          *  *  
**     *             *           *                          ****          *   *  
**    * *            *            *                                      *   *   
*    *   *            *           *                                     *    *   
** **    *             *           **                                  *     *   
* *      *             *             *              *                **      *   
*        *              *             ***          ***             **        *   
*         *              *               ***                    ***          *   
*         *               *                *****            ****             *   
*          *              *               *     **     *****                 *   
*           *             *                *      ****     *                 *   
*            *            *                *              *                  *   
*             **           *                *              *                 *   
*             *           *                 *              *                 *   
*              *           *                *              *                *    
*               **         *                *             *                 *    
*                 *         *               *             *                 *    
*                  **      *                *           **                 *     
*                    ******                 *          *                   *     
*                       *****                *       **                    *     
*                      *     *               *      *                      *     
 *                    *       *               *** **                       *     
 *                   *        *                  *        **              *      
 *                   *        *                         **  *             *      
 *                  *         *                    *****    *             *      
 *                  *         *                   *         *             *      
 *                 *          *                ***         *              *      
 *                *           *               *            *              *      
 *               *             *              *            *             *       
 *               *             *              *            *             *       
 *               *             *               *           *             *       
  *              *             *               *           *             *       
   **************              **               *          *             *       
                                 *              *          *              *      
                                  **************            *             *      
                                                             *            *      
                                                              ************   

Bạn có thể vui lòng thêm đầu ra?
AL

1
Wow, cảm ơn vì định dạng. Không thể tìm thấy tô sáng Python. Đầu ra được thêm vào.
avall

Không có gì. :) AFAIK, phần tô sáng yêu cầu sử dụng phần mở rộng tệp của ngôn ngữ:<!-- language: lang-py -->
AL

1

R

Đối với mỗi điểm trong ma trận, ẩn nhân vật nếu nó được bao quanh bởi các dấu sao ở bên phải, bên trái, trên cùng và dưới cùng. Điều này là ngây thơ nhưng hoạt động rất tốt.

text = scan(commandArgs(T)[1], what='raw', sep="\n", quiet=T)

height = length(text); width = max(sapply(text, nchar))

mat_2 = mat = matrix(unlist(strsplit(text, '')), height, width, byrow=T)

for (y in 1:nrow(mat_2)) {
    for (x in 1:ncol(mat_2)) {
        if (
            ((x < ncol(mat)) && (mat[y, x + 1] == '*')) # right
            &&
            ((x > 1) && (mat[y, x - 1] == '*')) # left
            &&
            ((y > 1) && (mat[y - 1, x] == '*')) # top
            &&
            ((y < nrow(mat)) && (mat[y + 1, x] == '*')) # bottom
        ) {
            mat_2[y,x] = ' '
        }
    }
}

for (a in 1:nrow(mat_2)) {
    cat(paste(mat_2[a,], collapse=""), "\n")
}

Sử dụng: Rscript script.r input_.txt

Đầu ra

                                              *************                       
                                          *****          *****                    
                                     ******                  ***                  
                                    * *                         ****              
                             ******* *                             **             
                          ****      *                               **            
                     ******   *     *                                **           
                 *****       *     *      ***                         **          
              ****          *      *     *   *                          *         
             **            *       *     *   *                    *****  *        
           ***            *       *     *     *                  *    *  **       
          **             *        *     *     *                  *    *   **      
         **              *        *    *    **                  *      *   *      
        *               *         *   *    *                    *      *   *      
       **              *          *   *   *                     *      *    *     
       *               *          *    ***                       *      *   *     
      *               *           *                               **   *    *     
     *                *           *                                 ***     *     
    **                *           *                                         *     
    *                *            *                                         *     
   **                *           *                                         **     
   *                 *           *                                         **     
  **                *           *                                          * *    
 * *                *           *                                          *  *   
 **                 *          *                                           *  *   
 **                *           *                                           *  *   
 **                *           *           *****                           *  *   
 **                *           *          **   **          **              *  *   
 **                 *          *          *     *         ** **            *  *   
 *                  *          *          **   **        **   **           *  *   
 *                  *           *        *  ****         **   * *          *  *   
 *                  *          *          *  **           ****  *          *  *   
 *                   *          *         ***               *   *          *  *   
**     *             *           *                          ****          *   *   
**    * *            *            *                                      *   *    
*    *   *            *           *                                     *    *    
** **    *             *           **                                  *     *    
* *      *             *             *              *                **      *    
*        *              *             ***          ***             **        *    
*         *              *               ***                    ***          *    
*         *               *                *****            ****             *    
*          *              *               *     **     *****                 *    
*           *             *                *      ****     *                 *    
*            *            *                *              *                  *    
*             **           *                *              *                 *    
*             *           *                 *              *                 *    
*              *           *                *              *                *     
*               **         *                *             *                 *     
*                 *         *               *             *                 *     
*                  **      *                *           **                 *      
*                    ******                 *          *                   *      
*                       *****                *       **                    *      
*                      *     *               *      *                      *      
 *                    *       *               *** **                       *      
 *                   *        *                  *        **              *       
 *                   *        *                         **  *             *       
 *                  *         *                    *****    *             *       
 *                  *         *                   *         *             *       
 *                 *          *                ***         *              *       
 *                *           *               *            *              *       
 *               *             *              *            *             *        
 *               *             *              *            *             *        
 *               *             *               *           *             *        
  *              *             *               *           *             *        
   **************              **               *          *             *        
                                 *              *          *              *       
                                  **************            *             *       
                                                             *            *       
                                                              ************  
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.