ASCII ART边缘检测

19

``````     ***
****
******
******
******
******
****
***
``````

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

``````import fileinput as f
import re as r
import copy as c
a,s,p='*',' ','+'
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
np(diff(grow(I),I))``````

输入：

``````                                              *************
*****          *****
******                  ***
***                         ****
*********                             **
***********                               **
******   *******                                **
*****       *******      ***                         **
****          ********     *****                          *
**            *********     *****                    *****  *
***            *********     *******                  ******  **
**             **********     *******                  ******   **
**              **********    *******                  ********   *
*               ***********   ******                    ********   *
**              ************   *****                     ********    *
*               ************    ***                       ********   *
*               *************                               ******    *
*                *************                                 ***     *
**                *************                                         *
*                **************                                         *
**                *************                                         **
*                 *************                                         **
**                *************                                          ***
***                *************                                          ****
**                 ************                                           ****
**                *************                                           ****
**                *************           *****                           ****
**                *************          **   **          **              ****
**                 ************          *     *         ** **            ****
*                  ************          **   **        **   **           ****
*                  *************        *******         **   ***          ****
*                  ************          *****           *******          ****
*                   ************         ***               *****          ****
**     *             *************                          ****          *****
**    ***            **************                                      *****
*    *****            *************                                     ******
** *******             **************                                  *******
**********             ***************              *                *********
**********              *****************          ***             ***********
***********              *******************                    **************
***********               **********************            ******************
************              *****************     **     ***********************
*************             ******************      ****     *******************
**************            ******************              ********************
****************           ******************              *******************
***************           *******************              *******************
****************           ******************              ******************
******************         ******************             *******************
*******************         *****************             *******************
*********************      ******************           ********************
*********************************************          *********************
**********************************************       ***********************
************************     *****************      ************************
**********************       ******************* **************************
*********************        *********************************************
*********************        ****************************  ***************
********************         **************************    ***************
********************         *********************         ***************
*******************          ********************         ****************
******************           *****************            ****************
*****************             ****************            ***************
*****************             ****************            ***************
*****************             *****************           ***************
****************             *****************           ***************
**************              ******************          ***************
****************          ****************
**************            ***************
**************
************
``````

可能的输出：

``````                                         +++++             ++++
++++++     ++++++++++     +++
++      +++++        +++++   +++++
++++++++   +++++                ++++    ++
++++         ++                       ++++  ++
++++++           ++                           ++  ++
+++++      +++       +   +++++                     ++  ++
++++     +++++++       ++  ++   ++                     ++  ++
++    +++++   ++        +   +     +                  +++++++ ++
+++  ++++      ++         +  ++     ++                ++     ++ ++
++   ++        ++         ++  +       +                +      ++  ++
++  +++         +          +  ++       +               ++      +++  +
++  ++          ++          + ++       ++               +        +++ +
++ +++          ++           + +      +++                +        + + ++
+  +            +            + +     ++                  +        ++++ +
++ ++           ++            + ++   ++                   ++        + + +
++ ++            +             +  +++++                     ++      ++ + +
++ ++             +             +                             +++   ++  + +
+  +             ++             +                               +++++   + +
++ ++             +              +                                      ++ +
+  +              +             ++                                      +  +
++ ++             ++             +                                       +  ++
++  +              +             ++                                       +   ++
+   +              +             +                                        +    +
+  ++             ++            ++                                        +    +
+  +              +             +         +++++++                         +    +
+  +              +             +        ++     ++        ++++            +    +
+  +              +             +        +  +++  +       ++  +++          +    +
+  +              ++            +        + ++ ++ +      ++  +  ++         +    +
+ ++               +            ++      ++  +++  +      +  +++  ++        +    +
+ +                +             +      +       ++      +  +++   +        +    +
+ +                +            ++      ++     ++       ++       +        +    +
+ +   +++          ++            ++      +   +++         +++     +       ++    +
+  ++ ++          +             ++     +++++             +    ++      ++     +
+ ++   ++         +              +                       ++++++      ++     ++
++++     +         ++             +++                                ++      +
+       +          ++              ++            +++              +++       +
+           +               ++++        ++ ++           +++         +
++          ++                 ++++     +   +        ++++           +
+           ++                   +++++ +++++    +++++              +
++           ++                      +++   ++++++                  +
++           +                 +++++  +++++                       +
++          +                  +  +++    +++++                   +
+++        +                  ++   ++++++  +                    +
+        ++                  +           ++                   +
++        +                   +            +                   +
+++      ++                  +           ++                  ++
++      +                  +           +                   +
+++    ++                 +         +++                   +
++++++                  +        ++                    ++
++     +++                     +
+    ++                       +
+++++                 ++++++                        +
+                      ++   ++                   +                          +
+                     ++     +                                             ++
+                     +      +                            ++               +
+                    ++      +                          ++++               +
+                    +       +                     ++++++ ++               +
+                   ++       +                    ++      +                +
+                  ++        +                 ++++       +                +
+                 ++         ++                +          +               ++
+                 +           +                ++         +               +
+                 +           +                 +         +               +
++                +           +                 ++        +               +
++              ++           +                  +        +               ++
++++++++++++++++            +++                +        +                +
++              ++        ++               +
++++++++++++++++          ++              +
++            ++
++++++++++++++
``````

AL

AL 2014年

AL

Antonio Ragagnin 2014年

14

高尔夫脚本

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

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

1
Golfscript 总是很重要。
Nit 2014年

Magic Octopus Urn'8

6

Python代码主要依靠正则表达式来完成任务。

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

*输出

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

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

5

蟒蛇

``````from numpy import gradient, zeros
import matplotlib.pylab as plt
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 = (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()
``````

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

ASCII输出：

``````   *** **
**** **
***   **
*    **
*    **
***   **
**** **
*** **
``````

``````                                          *************** ****
******   *************  ***
***   *****          ***** *****
******** *****                  ****  **
********** **                         ******
******  *      **                             ****
*****    *****     **    ***                       ****
****   ****** **     **    *****                       ****
**  *****     **      **   **   **                   **** * *
*******        **       **   **   **                  **********
** **          **       **   **     **                **    ******
*****          **        **   **     **                **    ** ****
****            **        **  **    ***                **      ** * *
****            **         ** **    ***                 **      ** ***
****            **          ** **   **                   **      **  ***
***             **          **  *****                     **      ** * *
* *             **           **   ***                       ***   **  * *
***              **           **                              ******   * *
****              **           **                                ***    * *
* *              **            **                                       * *
****              **           **                                       ****
* *               **           **                                       ****
****              **           **                                        ** **
** **              **           **                                        **  **
****               **          **                                         **  **
****              **           **          *****                          **  **
****              **           **         **   **          **             **  **
****              **           **        *********        *****           **  **
****               **          **        * *   * *       *******          **  **
* *                **          **        *********      **** ****         **  **
* *                **           **      **  *****       ******* **        **  **
* *                **          **        **  ***         ** **  **        **  **
* *    *            **          **       ******           ***   **        **  **
***   ***           **           **       ***              ******        **   **
**  ** **          **            **                        ****        **   **
** ***   **          **           ***                                  **    **
****    **           **           ***              *                ***     **
*      **           **             ****          ***             ****      **
**            **             ******      *****         *****        **
**            **               *******   ***      *******          **
**             **                *   ***     *********             **
**            **               **************   *                 **
**           **                **   ***  *******                 **
***         **                **     ****   **                  **
***         **                **            **                 **
**         **                 **            **                 **
***        **                **            **                **
***       **                **           **                 **
***      **               **          ***                 **
*********                **         ***                 **
******                 **       ***                   **
*****                **     ***                    **
*                      *******               **** ***                      **
**                    **     **               ******                       **
**                   **      **                  *        **              **
**                   **      **                         *****             **
**                  **       **                    ******* **             **
**                  **       **                   ******   **             **
**                 **        **                ****       **              **
**                **         **               ****        **              **
**               **           **              **          **             **
**               **           **              **          **             **
**               **           **               **         **             **
**              **           **               **         **             **
****************            ***               **        **             **
**************              ***              **        **              **
****************          **             **
**************            **            **
**          **
``````

AL

4

Mathematica

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

怎么运行的

`Partition[Take[Characters@panda, {61, 5636}], 82]` 将字符串分成字符行。

`Most` 删除换行符。

`Image[t]]]` 将0和1的矩阵转换为图像。

`EdgeDetect` 查找图像的边缘。

`ImageData` 获取图像的二进制矩阵。

`/. {1 -> "+", 0 -> " "}` 用适当的字符替换每个0和1。

`Grid` 显示Ascii艺术。

4

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

``````package com.ruuhkis.asciiedge;

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

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 {

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;
}

}``````

Antonio Ragagnin 2014年

2

Python（ascii->图片->边缘滤镜-> 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')
f.close()

width=82
height=len(lines)

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

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

``````\$#\$\$#%\$\$\$\$\$\$%%\$\$\$%\$\$\$\$%\$###%%#%%%\$##\$\$\$%%#\$#%#              \$%%%%\$\$%\$###\$\$%%%##%##
%                                   \$%%\$\$\$     %#\$%\$\$\$#\$\$     \$%#               #
%                                  %%      \$%\$#\$        \$\$\$\$%   %#%#%           #
%                           %\$#\$%%\$\$   #%\$\$%                %%%%    %\$          #
\$                        #\$\$\$         %\$                       \$###  #%         \$
%                   #%\$#\$#           \$%                           %#  #\$        #
#               #%\$%#      \$##       \$   \$%%\$%                     \$\$  \$%       #
%            \$%#%     \$##%\$%\$       ##  \$%   %#                     \$\$  %\$      \$
%           %\$    %\$%\$\$   %#        \$   #     #                  \$#\$#\$\$\$ \$\$     %
%         \$%#  \$##%      ##         #  #%     %\$                #\$     #% %%    %
%        #\$   #\$        %\$         %\$  #       %                \$      \$\$  \$\$   #
#       \$%  \$%#         %          #  ##       #               \$%      %#%  \$   #
%      #%  #%          %#          # \$\$       \$%               \$        \$\$# \$   %
%     #% \$\$%          %%           % \$      \$%#                #        % \$ ##  \$
%     \$  %            #            # %     %%                  %        #\$#\$ #  #
%    \$% \$%           #%            % %\$   #%                   %%        # \$ %  %
\$   \$\$ %\$            %             #  %#\$%%                     ##      \$\$ # \$  %
#  \$% #\$             \$             \$                             #\$\$   \$%  % \$  \$
%  %  %             #%             #                               %\$#%#   \$ \$  %
# \$\$ #%             \$              #                                      ## #  %
\$ %  #              \$             #\$                                      #  \$  %
%\$\$ ##             %#             %                                       \$  \$\$ #
\$\$  %              #             \$%                                       #   #\$%
\$   \$              %             %                                        %    \$#
\$  %#             #%            \$%                                        #    #\$
%  %              #             \$         #%\$##%\$                         %    %#
\$  \$              #             \$        \$%     \$#        %#%%            #    %%
#  %              #             #        %  \$%\$  %       %%  %%#          %    \$#
%  #              #%            #        # ## \$# #      %#  %  %\$         \$    #\$
\$ \$%               %            \$%      \$%  \$\$\$  %      \$  #\$#  %#        %    #\$
# %                \$             \$      #       \$%      \$  #\$%   %        \$    \$\$
% %                \$            \$%      %#     ##       \$\$       \$        #    ##
% #   ###          %#            #%      \$   %%\$         #\$%     #       %#    %%
#  %% \$#          #             ##     ##%\$#             #    %#      \$\$     %#
% %%   \$\$         %              %                       ##\$%\$#      %%     #%%
#%\$%     #         #\$             ##%                                %#      % %
%       %          %%              \$#            %#%              \$%\$       \$ %
\$           #               \$\$\$%        #\$ %\$           %##         \$ #
#%          \$%                 %\$#%     %   \$        %%\$#           # \$
%           ##                   #%##\$ #\$#\$\$    %#%%%              % %
\$%           \$%                      \$##   %##\$\$%                  # %
%#           %                 ##\$##  ##\$#\$                       % #
\$%          #                  %  %#\$    \$\$#%#                   # %
#%%        %                  ##   %\$##\$%  #                    # \$
%        %\$                  \$           %\$                   % %
%%        #                   \$            %                   \$ #
%%#      #%                  #           ##                  \$\$ \$
%\$      \$                  %           #                   %  %
%##    #%                 \$         %#\$                   #  #
%#\$##%                  \$        #%                    %\$  \$
\$\$     #%\$                     \$   #
#    ##                       #   \$
#%%\$%                 \$%#%\$%                        %   \$
#                      \$%   %\$                   #                          %   \$
#                     %#     #                                             \$#   %
%                     #      %                            \$#               \$    \$
%                    %#      #                          #\$#%               \$    %
\$                    \$       #                     %%%\$#\$ #\$               %    #
\$                   \$%       \$                    %%      \$                \$    %
#                  #\$        %                 #%#%       %                \$    %
%                 \$%         ##                #          %               #\$    \$
%                 #           #                %\$         %               #     #
\$                 #           \$                 #         #               %     %
%\$                #           \$                 %\$        %               \$     #
##%              #%           %                  #        \$               %\$    %
# ##%#%\$\$#%#%\$\$#%#            #%\$                #        %                #    %
#                               ##              ##        \$#               \$    #
%                                \$##\$#%\$#\$\$\$#\$\$%%          \$\$              #    %
\$#%#\$#\$\$#\$##\$%#\$%#\$\$\$\$%#\$#%%#\$%#\$\$#%%%%\$%%\$%\$#%\$##%%\$#\$\$##%#\$%            #\$%\$\$\$\$\$
``````

Antonio Ragagnin 2014年

2

blakesteel 2014年

1

44

“算法”只是查找所有与左侧或左侧不同的单元格，然后使用数组语言魔术将布尔矩阵转换回ASCII格式

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

h@*.z.x
\\
\$
``````

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

1

蟒蛇

``````import sys
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``````

``````                                              *************
*****          *****
******                  ***
* *                         ****
******* *                             **
****      *                               **
******   *     *                                **
*****       *     *      ***                         **
****          *      *     *   *                          *
**            *       *     *   *                    *****  *
***            *       *     *     *                  *    *  **
**             *        *     *     *                  *    *   **
**              *        *    *    **                  *      *   *
*               *         *   *    *                    *      *   *
**              *          *   *   *                     *      *    *
*               *          *    ***                       *      *   *
*               *           *                               **   *    *
*                *           *                                 ***     *
**                *           *                                         *
*                *            *                                         *
**                *           *                                         **
*                 *           *                                         **
**                *           *                                          * *
* *                *           *                                          *  *
**                 *          *                                           *  *
**                *           *                                           *  *
**                *           *           *****                           *  *
**                *           *          **   **          **              *  *
**                 *          *          *     *         ** **            *  *
*                  *          *          **   **        **   **           *  *
*                  *           *        *  ****         **   * *          *  *
*                  *          *          *  **           ****  *          *  *
*                   *          *         ***               *   *          *  *
**     *             *           *                          ****          *   *
**    * *            *            *                                      *   *
*    *   *            *           *                                     *    *
** **    *             *           **                                  *     *
* *      *             *             *              *                **      *
*        *              *             ***          ***             **        *
*         *              *               ***                    ***          *
*         *               *                *****            ****             *
*          *              *               *     **     *****                 *
*           *             *                *      ****     *                 *
*            *            *                *              *                  *
*             **           *                *              *                 *
*             *           *                 *              *                 *
*              *           *                *              *                *
*               **         *                *             *                 *
*                 *         *               *             *                 *
*                  **      *                *           **                 *
*                    ******                 *          *                   *
*                       *****                *       **                    *
*                      *     *               *      *                      *
*                    *       *               *** **                       *
*                   *        *                  *        **              *
*                   *        *                         **  *             *
*                  *         *                    *****    *             *
*                  *         *                   *         *             *
*                 *          *                ***         *              *
*                *           *               *            *              *
*               *             *              *            *             *
*               *             *              *            *             *
*               *             *               *           *             *
*              *             *               *           *             *
**************              **               *          *             *
*              *          *              *
**************            *             *
*            *
************
``````

AL 2014年

1

2014年

AL 2014年

1

[R

``````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")
}``````

输出量

``````                                              *************
*****          *****
******                  ***
* *                         ****
******* *                             **
****      *                               **
******   *     *                                **
*****       *     *      ***                         **
****          *      *     *   *                          *
**            *       *     *   *                    *****  *
***            *       *     *     *                  *    *  **
**             *        *     *     *                  *    *   **
**              *        *    *    **                  *      *   *
*               *         *   *    *                    *      *   *
**              *          *   *   *                     *      *    *
*               *          *    ***                       *      *   *
*               *           *                               **   *    *
*                *           *                                 ***     *
**                *           *                                         *
*                *            *                                         *
**                *           *                                         **
*                 *           *                                         **
**                *           *                                          * *
* *                *           *                                          *  *
**                 *          *                                           *  *
**                *           *                                           *  *
**                *           *           *****                           *  *
**                *           *          **   **          **              *  *
**                 *          *          *     *         ** **            *  *
*                  *          *          **   **        **   **           *  *
*                  *           *        *  ****         **   * *          *  *
*                  *          *          *  **           ****  *          *  *
*                   *          *         ***               *   *          *  *
**     *             *           *                          ****          *   *
**    * *            *            *                                      *   *
*    *   *            *           *                                     *    *
** **    *             *           **                                  *     *
* *      *             *             *              *                **      *
*        *              *             ***          ***             **        *
*         *              *               ***                    ***          *
*         *               *                *****            ****             *
*          *              *               *     **     *****                 *
*           *             *                *      ****     *                 *
*            *            *                *              *                  *
*             **           *                *              *                 *
*             *           *                 *              *                 *
*              *           *                *              *                *
*               **         *                *             *                 *
*                 *         *               *             *                 *
*                  **      *                *           **                 *
*                    ******                 *          *                   *
*                       *****                *       **                    *
*                      *     *               *      *                      *
*                    *       *               *** **                       *
*                   *        *                  *        **              *
*                   *        *                         **  *             *
*                  *         *                    *****    *             *
*                  *         *                   *         *             *
*                 *          *                ***         *              *
*                *           *               *            *              *
*               *             *              *            *             *
*               *             *              *            *             *
*               *             *               *           *             *
*              *             *               *           *             *
**************              **               *          *             *
*              *          *              *
**************            *             *
*            *
************
``````