import random as r
i=input()
l=len(i)
a=range(-l,l+1)
g=[(y,x)for y in a for x in a]
p=[(y,x)for y,x in g if abs(x+y*1j)<=l and x|y]
m=i[l//2]
d=[*i.replace(m,"",1).center(len(p))]
r.shuffle(d)
o=""
for c in g:
o+=m if c==(0,0)else d.pop()if c in p else" "
if c[1]==l:o+="\n"
print(o)
Mencoba secara online adalah suatu pilihan.
Ups, tersandung pada ini karena aktivitas baru-baru ini, tidak menyadari itu lebih dari dua tahun sampai saya menghabiskan waktu yang baik untuk hal ini. Nah, dua jawaban agak menyedihkan, jadi ini mungkin ide yang bagus untuk dikirim. Saya yakin ada lusinan cara untuk memperbaiki hal ini — tidak menyadarinya sampai saat ini bahwa inputnya selalu aneh, yang pasti sangat membantu untuk diketahui.
Penjelasan
i=input()
input, tentu saja, l=len(i)
menghemat panjang string karena digunakan beberapa kali.
a=range(-l,l+1)
- Alat cepat untuk membuat iterator mulai jarak yang tersedia jauh dari asal dua arah sepanjang satu dimensi.
g=[(y,x)for y in a for x in a]
membangun daftar koordinat tuple yang membentuk seluruh kisi terakhir.
p=[(y,x)for y,x in g if abs(x+y*1j)<=l and x|y]
membuat himpunan bagian dari daftar yang hanya berisi koordinat yang dapat diletakkan di tengah-tengah huruf non-tengah.
m=i[l//2]
menetapkan karakter pusat.
d=[*i.replace(m,"",1).center(len(p))]
- karakter tengah dikeluarkan, meninggalkan kita bersama puing-puing lainnya. The center()
fungsi sangat bagus di sini, karena memungkinkan kita untuk pad keluar garis (dengan default spasi) sampai itu sejumlah karakter. Di sini, itulah jumlah ruang tempat surat dapat mendarat, sehingga mencerminkan distribusi yang kita butuhkan.
r.shuffle(d)
secara alami mengocok distribusi menjadi benar-benar ... didistribusikan.
Lingkaran,, for c in g: o+=m if c==(0,0)else d.pop()if c in p else" "
melihat ke seluruh kuadrat ubin yang layak, terlepas dari apa pun yang mungkin mendarat di atasnya atau tidak, dan jika perlu, menambahkan karakter ke string keluaran kami o
. Karakter muncul dari sampel puing-puing kami sehingga hanya muncul sekali.
if c[1]==l:o+="\n"
- Menambahkan jeda baris juga. Kembali