Seperti judulnya, saya berpikir untuk bertarung di mana seseorang harus mendeteksi tepi seni ASCII.
Kode harus menerima seni B / W ASCII sebagai masukan. A B / W seni ASCII didefinisikan sebagai (oleh saya) sebuah seni ASCII dengan hanya satu jenis karakter non-putih-ruang (dalam kasus kami: sebuah asteriks *
). Dan sebagai output menghasilkan seni ASCII standar (semua karakter ASCII diterima) yang harus mengingat contourn yang pertama.
Tujuan menggunakan lebih dari satu karakter dalam output adalah untuk membuat beberapa sisi menjadi lebih baik. Misalnya, orang dapat membiarkan input ini
***
****
******
******
******
******
****
***
bisa menjadi:
___
_/ )
_/ /
/ |
| /
| \
\ |
`\ |
\___)
Input \n
memisahkan string sebagai input. Setiap baris memiliki maksimal 80
karakter. Jumlah baris tidak ditentukan.
Ini adalah contoh program Python3 saya:
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))
Memasukkan:
Di sini di bawah ini saya memasukkan kedua input dari program. Ini adalah 80x70 ASCII ART. Ini berarti memiliki 70 baris 80 karakter, masing-masing dipisahkan oleh \n
.
File input ini hanya berisi spasi dan tanda bintang *
, memiliki maksimum 80 kolom karena setiap ASCII seni .
Jika Anda menemukan seni yang lebih bagus, beri tahu saya!
*************
***** *****
****** ***
*** ****
********* **
*********** **
****** ******* **
***** ******* *** **
**** ******** ***** *
** ********* ***** ***** *
*** ********* ******* ****** **
** ********** ******* ****** **
** ********** ******* ******** *
* *********** ****** ******** *
** ************ ***** ******** *
* ************ *** ******** *
* ************* ****** *
* ************* *** *
** ************* *
* ************** *
** ************* **
* ************* **
** ************* ***
*** ************* ****
** ************ ****
** ************* ****
** ************* ***** ****
** ************* ** ** ** ****
** ************ * * ** ** ****
* ************ ** ** ** ** ****
* ************* ******* ** *** ****
* ************ ***** ******* ****
* ************ *** ***** ****
** * ************* **** *****
** *** ************** *****
* ***** ************* ******
** ******* ************** *******
********** *************** * *********
********** ***************** *** ***********
*********** ******************* **************
*********** ********************** ******************
************ ***************** ** ***********************
************* ****************** **** *******************
************** ****************** ********************
**************** ****************** *******************
*************** ******************* *******************
**************** ****************** ******************
****************** ****************** *******************
******************* ***************** *******************
********************* ****************** ********************
********************************************* *********************
********************************************** ***********************
************************ ***************** ************************
********************** ******************* **************************
********************* *********************************************
********************* **************************** ***************
******************** ************************** ***************
******************** ********************* ***************
******************* ******************** ****************
****************** ***************** ****************
***************** **************** ***************
***************** **************** ***************
***************** ***************** ***************
**************** ***************** ***************
************** ****************** ***************
**************** ****************
************** ***************
**************
************
Output yang mungkin:
Output yang mungkin adalah:
+++++ ++++
++++++ ++++++++++ +++
++ +++++ +++++ +++++
++++++++ +++++ ++++ ++
++++ ++ ++++ ++
++++++ ++ ++ ++
+++++ +++ + +++++ ++ ++
++++ +++++++ ++ ++ ++ ++ ++
++ +++++ ++ + + + +++++++ ++
+++ ++++ ++ + ++ ++ ++ ++ ++
++ ++ ++ ++ + + + ++ ++
++ +++ + + ++ + ++ +++ +
++ ++ ++ + ++ ++ + +++ +
++ +++ ++ + + +++ + + + ++
+ + + + + ++ + ++++ +
++ ++ ++ + ++ ++ ++ + + +
++ ++ + + +++++ ++ ++ + +
++ ++ + + +++ ++ + +
+ + ++ + +++++ + +
++ ++ + + ++ +
+ + + ++ + +
++ ++ ++ + + ++
++ + + ++ + ++
+ + + + + +
+ ++ ++ ++ + +
+ + + + +++++++ + +
+ + + + ++ ++ ++++ + +
+ + + + + +++ + ++ +++ + +
+ + ++ + + ++ ++ + ++ + ++ + +
+ ++ + ++ ++ +++ + + +++ ++ + +
+ + + + + ++ + +++ + + +
+ + + ++ ++ ++ ++ + + +
+ + +++ ++ ++ + +++ +++ + ++ +
+ ++ ++ + ++ +++++ + ++ ++ +
+ ++ ++ + + ++++++ ++ ++
++++ + ++ +++ ++ +
+ + ++ ++ +++ +++ +
+ + ++++ ++ ++ +++ +
++ ++ ++++ + + ++++ +
+ ++ +++++ +++++ +++++ +
++ ++ +++ ++++++ +
++ + +++++ +++++ +
++ + + +++ +++++ +
+++ + ++ ++++++ + +
+ ++ + ++ +
++ + + + +
+++ ++ + ++ ++
++ + + + +
+++ ++ + +++ +
++++++ + ++ ++
++ +++ +
+ ++ +
+++++ ++++++ +
+ ++ ++ + +
+ ++ + ++
+ + + ++ +
+ ++ + ++++ +
+ + + ++++++ ++ +
+ ++ + ++ + +
+ ++ + ++++ + +
+ ++ ++ + + ++
+ + + ++ + +
+ + + + + +
++ + + ++ + +
++ ++ + + + ++
++++++++++++++++ +++ + + +
++ ++ ++ +
++++++++++++++++ ++ +
++ ++
++++++++++++++
Ini juga merupakan output yang dihasilkan oleh skrip di atas. Tentu saja itu bukan output terbaik dan saya yakin orang dapat dengan mudah menghasilkan yang lebih halus.
Ini adalah kontes popularitas karena, saya berharap suara akan sebanding dengan keanggunan dan kualitas hasil! (Juga saya kira hasil yang baik dapat diperoleh dengan kombinasi aplay
dan gimp-cli
) Tidak ada aturan ketat tentang bagaimana output harus..hanya gunakan fantasi Anda!
sumber
Jawaban:
GolfScript
Saya pikir golf populer di situs ini, jadi pengiriman GolfScript selalu cocok untuk kontes popularitas.
Anda dapat mencoba kode dengan ascii art Anda sendiri di sini . Perhatikan bahwa semua garis harus memiliki panjang yang sama.
Contoh:
sumber
Kode Python, terutama bergantung pada regex untuk melakukan tugas.
*Keluaran
Yang lainnya
sumber
Python
Menggunakan operasi gradien untuk mengidentifikasi tepi:
Output untuk pisang dan panda:
Untuk membuat Output ASCII, bagian plot harus diganti dengan:
Output ASCII:
Pisang:
Panda:
sumber
Mathematica
Dengan asumsi yang
panda
berisi string asli, berikut ini memperoleh piksel dari tepi kontur dan menggantinya dengan "+".Bagaimana itu bekerja
Partition[Take[Characters@panda, {61, 5636}], 82]
memecah string menjadi beberapa baris karakter.Most
menghapus karakter baris baru.Image[t]]]
mengubah matriks 0 dan 1 menjadi gambar.EdgeDetect
menemukan tepi gambar.ImageData
memperoleh matriks biner dari gambar./. {1 -> "+", 0 -> " "}
mengganti setiap 0 dan 1 dengan karakter yang sesuai.Grid
menampilkan seni Ascii.sumber
Jawa
Ini memeriksa baris dan baris jika ada sesuatu di atas, kiri, kanan atau bawah dan berdasarkan itu mengambil nilai dari simbol holding array yang digunakan untuk menghasilkan seni baru menggunakan tepi!
Contoh output:
Kode:
Ps. timer pertama di sini, jangan kasar: D Pps. Panda itu terlihat seperti ini :(
sumber
Python (ascii -> image -> filter tepi -> ascii)
Saya agak curang, saya mengonversi teks ascii ke gambar dan menjalankan filter PIL deteksi tepi di atasnya. Kemudian, saya membalikkan gambar dan mengubahnya kembali menjadi teks ascii:
Inilah hasilnya:
Sumber dikutip (untuk gambar skala abu-abu untuk konversi ascii): http://stevendkay.wordpress.com/2009/09/08/generating-ascii-art-from-photographs-in-python/
sumber
convert
(untuk mengkonversi seni ASCII ke gambar);GIMP
-command-line (untuk melakukan deteksi tepi); danaplay
(untuk membuat gambar dalam seni ASCII). tetapi gagal: p (dan selamat datang di Codegolf)k4
ini adalah versi malas yang hanya menemukan tepinya, tidak mencoba menemukan bentuk yang ada dan memilih karakter yang sesuai
"algo" hanya untuk menemukan semua sel yang berbeda dari yang ke kiri atau di atas, kemudian menggunakan sihir bahasa array untuk mengubah matriks boolean kembali menjadi seni ASCII
ada peretasan kecil untuk mengawali segala sesuatu dengan ruang ekstra, atau ia akan menganggap kiri dan atas sebagai "tepian" - dengan cara ini masih demikian, tetapi saya hanya dapat mengembalikannya nanti
lebih atau kurang keluaran yang sama dengan sampel dalam spesifikasi
ini dia di bumerang / pisang:
sumber
Python
Ini adalah versi Python yang sangat sederhana dari filter "highpass" :). Ia memeriksa apakah sebuah piksel setidaknya dikelilingi oleh 4 sisinya. Ini adalah salah satu kode Python pertama saya, jadi silakan ...
Keluaran:
sumber
<!-- language: lang-py -->
R
Untuk setiap titik dalam matriks, sembunyikan karakter jika dikelilingi oleh tanda bintang di kanan, kiri, atas dan bawah. Ini naif tetapi bekerja dengan sangat baik.
Pemakaian:
Rscript script.r input_.txt
Keluaran
sumber