Wie der Titel schon sagt, dachte ich an einen Wettbewerb, bei dem man Kanten einer ASCII-Kunst erkennen muss.
Der Code sollte eine S / W-ASCII-Grafik als Eingabe akzeptieren. Eine S / W-ASCII-Grafik ist (von mir) eine ASCII- Grafik mit nur einer Art von Nicht-Leerzeichen (in unserem Fall: Sternchen *
). Und als Ausgabe erzeugen Sie eine Standard- ASCII- Grafik (alle ASCII- Zeichen werden akzeptiert), die sich an die Kontur der ersten erinnern soll.
Der Zweck der Verwendung von mehr als einem Zeichen in der Ausgabe besteht darin, einige Kanten weicher zu machen. Zum Beispiel könnte man diese Eingabe lassen
***
****
******
******
******
******
****
***
könnte werden:
___
_/ )
_/ /
/ |
| /
| \
\ |
`\ |
\___)
Die Eingabe \n
trennte die Zeichenfolge als Eingabe. Jede Zeile darf maximal 80
Zeichen enthalten. Die Anzahl der Zeilen ist nicht angegeben.
Dies ist mein Python3-Beispielprogramm:
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))
Eingang:
Hier unten stelle ich beide Eingaben der Programme. Es ist eine 80x70 ASCII ART. Dies bedeutet, dass es 70 Zeilen mit jeweils 80 Zeichen enthält, die durch voneinander getrennt sind \n
.
Diese Eingabedatei enthält nur Leerzeichen und das Sternchen. *
Wie bei jeder ASCII- Grafik sind maximal 80 Spalten zulässig .
Wenn Sie eine schönere Kunst finden, lassen Sie es mich wissen!
*************
***** *****
****** ***
*** ****
********* **
*********** **
****** ******* **
***** ******* *** **
**** ******** ***** *
** ********* ***** ***** *
*** ********* ******* ****** **
** ********** ******* ****** **
** ********** ******* ******** *
* *********** ****** ******** *
** ************ ***** ******** *
* ************ *** ******** *
* ************* ****** *
* ************* *** *
** ************* *
* ************** *
** ************* **
* ************* **
** ************* ***
*** ************* ****
** ************ ****
** ************* ****
** ************* ***** ****
** ************* ** ** ** ****
** ************ * * ** ** ****
* ************ ** ** ** ** ****
* ************* ******* ** *** ****
* ************ ***** ******* ****
* ************ *** ***** ****
** * ************* **** *****
** *** ************** *****
* ***** ************* ******
** ******* ************** *******
********** *************** * *********
********** ***************** *** ***********
*********** ******************* **************
*********** ********************** ******************
************ ***************** ** ***********************
************* ****************** **** *******************
************** ****************** ********************
**************** ****************** *******************
*************** ******************* *******************
**************** ****************** ******************
****************** ****************** *******************
******************* ***************** *******************
********************* ****************** ********************
********************************************* *********************
********************************************** ***********************
************************ ***************** ************************
********************** ******************* **************************
********************* *********************************************
********************* **************************** ***************
******************** ************************** ***************
******************** ********************* ***************
******************* ******************** ****************
****************** ***************** ****************
***************** **************** ***************
***************** **************** ***************
***************** ***************** ***************
**************** ***************** ***************
************** ****************** ***************
**************** ****************
************** ***************
**************
************
Mögliche Ausgabe:
Eine mögliche Ausgabe könnte sein:
+++++ ++++
++++++ ++++++++++ +++
++ +++++ +++++ +++++
++++++++ +++++ ++++ ++
++++ ++ ++++ ++
++++++ ++ ++ ++
+++++ +++ + +++++ ++ ++
++++ +++++++ ++ ++ ++ ++ ++
++ +++++ ++ + + + +++++++ ++
+++ ++++ ++ + ++ ++ ++ ++ ++
++ ++ ++ ++ + + + ++ ++
++ +++ + + ++ + ++ +++ +
++ ++ ++ + ++ ++ + +++ +
++ +++ ++ + + +++ + + + ++
+ + + + + ++ + ++++ +
++ ++ ++ + ++ ++ ++ + + +
++ ++ + + +++++ ++ ++ + +
++ ++ + + +++ ++ + +
+ + ++ + +++++ + +
++ ++ + + ++ +
+ + + ++ + +
++ ++ ++ + + ++
++ + + ++ + ++
+ + + + + +
+ ++ ++ ++ + +
+ + + + +++++++ + +
+ + + + ++ ++ ++++ + +
+ + + + + +++ + ++ +++ + +
+ + ++ + + ++ ++ + ++ + ++ + +
+ ++ + ++ ++ +++ + + +++ ++ + +
+ + + + + ++ + +++ + + +
+ + + ++ ++ ++ ++ + + +
+ + +++ ++ ++ + +++ +++ + ++ +
+ ++ ++ + ++ +++++ + ++ ++ +
+ ++ ++ + + ++++++ ++ ++
++++ + ++ +++ ++ +
+ + ++ ++ +++ +++ +
+ + ++++ ++ ++ +++ +
++ ++ ++++ + + ++++ +
+ ++ +++++ +++++ +++++ +
++ ++ +++ ++++++ +
++ + +++++ +++++ +
++ + + +++ +++++ +
+++ + ++ ++++++ + +
+ ++ + ++ +
++ + + + +
+++ ++ + ++ ++
++ + + + +
+++ ++ + +++ +
++++++ + ++ ++
++ +++ +
+ ++ +
+++++ ++++++ +
+ ++ ++ + +
+ ++ + ++
+ + + ++ +
+ ++ + ++++ +
+ + + ++++++ ++ +
+ ++ + ++ + +
+ ++ + ++++ + +
+ ++ ++ + + ++
+ + + ++ + +
+ + + + + +
++ + + ++ + +
++ ++ + + + ++
++++++++++++++++ +++ + + +
++ ++ ++ +
++++++++++++++++ ++ +
++ ++
++++++++++++++
Dies ist auch die Ausgabe des obigen Skripts. Natürlich ist es nicht die beste Ausgabe und ich bin sicher, dass man leicht eine glattere produzieren kann.
Es ist ein Beliebtheitswettbewerb, da ich hoffe, dass die Stimmen proportional zu Eleganz und Qualität der Ergebnisse sind! (Ich denke auch, dass gute Ergebnisse erzielt werden können, wenn man sie kombiniert aplay
und gimp-cli
) Es gibt keine strengen Regeln, wie die Ausgabe sein soll. Verwenden Sie einfach Ihre Fantasie!
quelle
Antworten:
GolfScript
Ich dachte, Golfen ist auf dieser Seite sehr beliebt, daher ist eine GolfScript-Einsendung immer für einen Beliebtheitswettbewerb geeignet.
Sie können den Code mit Ihrem eigenen ascii Kunst versuchen hier . Beachten Sie, dass alle Zeilen dieselbe Länge haben müssen.
Beispiel:
quelle
Der Python-Code basiert hauptsächlich auf Regex, um die Aufgabe zu erledigen.
*Ausgabe
Noch einer
quelle
Python
Verwenden der Verlaufsoperation zum Identifizieren von Kanten:
Output für die Banane und den Panda:
Um eine ASCII-Ausgabe zu erstellen, sollte der Teil der Diagramme durch Folgendes ersetzt werden:
ASCII-Ausgabe:
Banane:
Panda:
quelle
Mathematica
Unter
panda
der Annahme, dass die ursprüngliche Zeichenfolge enthalten ist, werden im Folgenden die Pixel der Konturkanten ermittelt und durch "+" ersetzt.Wie es funktioniert
Partition[Take[Characters@panda, {61, 5636}], 82]
Bricht die Zeichenfolge in Zeichenzeilen auf.Most
Entfernt die neuen Zeilenzeichen.Image[t]]]
wandelt die Matrix von Nullen und Einsen in ein Bild um.EdgeDetect
findet die Kanten des Bildes.ImageData
erhält die binäre Matrix des Bildes./. {1 -> "+", 0 -> " "}
Ersetzt jeweils 0 und 1 durch das entsprechende Zeichen.Grid
zeigt die Ascii Kunst.quelle
Java
Hiermit werden Linien und Zeilen überprüft, ob sich oben, links, rechts oder unten etwas befindet. Auf dieser Grundlage wird ein Wert aus dem Array-Haltesymbol ausgewählt, mit dem mithilfe von Kanten neue Grafiken erstellt werden.
Beispielausgabe:
Code:
Ps. erster Timer hier, sei nicht grob: D Pps. dass Panda sieht aus wie es ist traurig :(
quelle
Python (ASCII -> Bild -> Kantenfilter -> ASCII)
Ich habe betrogen, ich habe den ASCII-Text in ein Bild konvertiert und den PIL-Kantenerkennungsfilter darauf ausgeführt. Dann habe ich das Bild invertiert und wieder in ASCII-Text konvertiert:
Hier ist das Ergebnis:
Zitierte Quellen (für die Umwandlung von Graustufenbildern in ASCII-Bilder): http://stevendkay.wordpress.com/2009/09/08/generating-ascii-art-from-photographs-in-python/
quelle
convert
(um ASCII-Kunst in Bild umzuwandeln);GIMP
-Befehlszeile (zur Kantenerkennung); undaplay
(um das Bild in ASCII-Grafik zu rendern). aber fehlgeschlagen: p (und willkommen bei Codegolf)k4
Dies ist eine faule Version, die nur die Kanten findet, nicht versucht, die vorherrschende Form zu finden und einen geeigneten Charakter auszuwählen
Das "Algo" besteht nur darin, alle Zellen zu finden, die sich von den oben links oder oben unterscheiden, und dann die boolesche Matrix mithilfe von Magie in Array-Sprache wieder in ASCII-Kunst umzuwandeln
Es gibt einen kleinen Hack, um den Anfang von allem mit einem zusätzlichen Leerzeichen zu füllen, oder es würde bedeuten, dass der linke und der obere Rand "Kanten" sind - auf diese Weise funktioniert es immer noch, aber ich kann das später einfach weglassen
mehr oder weniger die gleiche Ausgabe wie die Probe in der Spezifikation
hier ist es auf dem Bumerang / Banane:
quelle
Python
Dies ist eine sehr einfache Python-Version des "Hochpass" -Filters :). Es wird geprüft, ob ein Pixel mindestens von seinen 4 Seiten umgeben ist. Dies ist einer meiner ersten Python-Codes überhaupt.
Ausgabe:
quelle
<!-- language: lang-py -->
R
Blenden Sie das Zeichen für jeden Punkt in der Matrix aus, wenn es rechts, links, oben und unten von Sternchen umgeben ist. Das ist naiv, funktioniert aber sehr gut.
Verwendung:
Rscript script.r input_.txt
Ausgabe
quelle