Tantangan
Diberi kisi persegi panjang karakter ascii yang dapat dicetak sebagai string atau melalui input standar, tulis fungsi atau program yang memecah karakter non-spasi menjadi tumpukan di bagian bawah.
Aturan:
- Output memiliki dimensi dan karakter yang sama dengan input.
- Karakter non-spasi di
(row a,column b)
tidak dapat memiliki karakter spasi' '
di(a-1, b)
,(a-1,b-1)
atau(a-1,b+1)
, di mana baris dinomori dari paling bawah. Ini memiliki konsekuensi bahwa semua tumpukan vertikal harus runtuh ke samping. - Karakter non-ruang dapat melakukan perjalanan di sebagian besar
(initial height - final height)
tempat ke kiri atau ke kanan (lihat Gambar 1). - Anda dapat mengasumsikan gambar memiliki cukup ruang untuk runtuh tanpa karakter jatuh dari layar.
Gambar 1: lokasi akhir yang mungkin untuk karakter yang @#$
ditampilkan x,y,z
masing-masing.
..............
...@..........
..xxx.........
.xxxxx...#....
xxxxxxx.yyy.$.
Urutan di mana karakter runtuh dapat dipilih secara bebas. Mengejar spasi tidak apa-apa tetapi mengikuti baris baru.
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang!
Contoh
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
..."Have you mooed today?"...
Satu kemungkinan keluaran:
--(_
/----|/|(o_)
/|/~\---~\\/o)
..."Have*you~mooed~today?"...
Jawaban:
JavaScript (ES6),
1009088 byteMembutuhkan string untuk memiliki setidaknya dua garis dan semua garis padded dengan panjang yang sama Output untuk gambar contoh:
Perhatikan bahwa ketika mencoba untuk memindahkan elemen ke kanan jika memungkinkan,
*
tidak jatuh antaraHave
danyou
.Sunting: Disimpan 10% berkat @ETHproductions. Disimpan 2 byte lagi berkat @DanielIndie.
Retina 0.8.2 , 50 byte
Cobalah online! Pendekatan yang sedikit berbeda dengan jawaban JavaScript saya, ini menggunakan grup penyeimbang untuk mencocokkan ruang di bawah karakter non-spasi; yang
(?<-1>)?
memungkinkan ruang untuk menjadi satu kolom ke kiri sementara.?
memungkinkan ruang untuk menjadi salah satu kolom di sebelah kanan.Retina , 40 byte
Cobalah online! Port jawaban JavaScript saya. Tahap
0L$
atom mengambil input dan mengganti dua panjang ke baris kedua menghasilkan perintah yang benar-benar melakukan penggantian, yang kemudian dievaluasi pada input asli oleh~
tahap senyawa.sumber
\n
dengan baris baru literal untuk menurunkannya menjadi dua digit ;-)l=s.search`\n`
menghemat beberapa byte.f=
Diperlukan untuk rekursi, tetapi masih menyelamatkan saya 2 byte, terima kasih!Python 2, 298 byte
Mengambil input sebagai daftar string (satu per baris)
Contoh: Input:
Keluaran:
sumber
C, 252 byte
Kode tes tidak digabungkan:
Hasil tes:
sumber
Algodoo (tidak bersaing)
Input - contoh degenerasi yang digunakan.
Runnning - gravitasi default dan memantul.
Keluaran - akurasi dapat disesuaikan melalui pengaturan Gesekan dan Kepadatan pada objek.
Algodoo adalah programmable yang logis .
sumber
JavaScript, 286 byte
Contohnya
Keluaran:
Contoh lain:
Keluaran:
Fungsi tidak disatukan
sumber
c>" "
di manac
mewakili karakter Anda menguji.