Deskripsi Tantangan
Anda harus menunjukkan simulasi hujan di terminal.
Dalam contoh yang diberikan di bawah ini menambahkan 100 tetesan hujan secara acak (gunakan fungsi acak default yang ditawarkan bahasa Anda) koordinat, menunggu 0,2 detik dan kemudian menggambar kembali sampai waktu yang diberikan berakhir. Karakter apa pun dapat digunakan untuk mewakili tetesan hujan.
Parameter
- Tunggu waktu antara menggambar ulang dalam hitungan detik.
- Waktu dimana hujan akan terlihat. Ini hanya bilangan bulat yang mewakili jumlah iterasi. [Jadi, waktu bersih dimana hujan akan terlihat adalah bilangan bulat ini dikalikan dengan waktu tunggu]
- Pesan yang akan ditampilkan saat hujan berakhir. (Ini harus dipusatkan)
- Jumlah tetesan hujan yang akan ditampilkan di layar.
Aturan
- Satu byte harus digunakan untuk mewakili tetesan hujan, dan itu bisa apa saja, bahkan kucing dan anjing.
- Itu tidak harus responsif terhadap ukuran terminal yang berarti Anda tidak harus menangani bug untuk ukuran terminal yang bervariasi. Anda dapat menentukan sendiri lebar dan tinggi terminal.
- Aturan standar bermain golf berlaku.
Contoh dan Output Kode
Ini adalah versi yang tidak ditandai yang ditulis dalam python 2.7 menggunakan ncurses.
import curses
import random
import time
myscreen = curses.initscr()
curses.curs_set(0) # no cursor please
HEIGHT, WIDTH = myscreen.getmaxyx()
RAIN = '/' # this is what my rain drop looks like
TIME = 10
def make_it_rain(window, tot_time, msg, wait_time, num_drops):
"""
window :: curses window
time :: Total time for which it rains
msg :: Message displayed when it stops raining
wait_time :: Time between redrawing scene
num_drops :: Number of rain drops in the scene
"""
for _ in range(tot_time):
for i in range(num_drops):
x,y=random.randint(1, HEIGHT-2),random.randint(1,WIDTH-2)
window.addstr(x,y,RAIN)
window.refresh()
time.sleep(wait_time)
window.erase()
window.refresh()
window.addstr(HEIGHT/2, int(WIDTH/2.7), msg)
if __name__ == '__main__':
make_it_rain(myscreen, TIME, 'IT HAS STOPPED RAINING!', 0.2, 100)
myscreen.getch()
curses.endwin()
Keluaran -
Jawaban:
MATL , 52 byte
Inputnya adalah, dalam urutan ini: jeda antara pembaruan, jumlah tetes, pesan, jumlah pengulangan. Monitor memiliki ukuran 80 × 25 karakter (hard-coded).
GIF atau itu tidak terjadi! (Contoh dengan input
0.2
,100
,'THE END'
,30
)Atau coba di MATL Online .
Penjelasan
sumber
why
:)JavaScript (ES6),
268261 byteSetidaknya di browser saya, output dirancang agar sesuai dengan area Stack Snippet tanpa harus pergi "Halaman penuh", jadi jika Anda meminta lebih dari 702 tetesan air hujan, itu akan crash.
Sunting: Disimpan 7 byte dengan menggunakan simpul teks sebagai area output saya.
sumber
setInterval
. Juga, mengapa Anda menggunakantextContent
bukaninnerHTML
?R,
196 192185 byteHanya versi tiruan yang saya tulis berdasarkan deskripsi. Semoga ini yang OP cari.
Menyimpan beberapa byte berkat @plannapus.
Argumen:
w
: Tunggu waktu antar framet
: Jumlah total framem
: Pesan khususn
: Jumlah tetesan hujanContoh
Mengapa terlihat seperti hujan ke atas?
Sunting: Saya harus menyebutkan bahwa ini adalah konsol R-studio karakter 23x100 saya yang dapat disesuaikan. Dimensi hardcoded ke dalam fungsi tetapi seseorang pada prinsipnya dapat digunakan
getOption("width")
untuk membuatnya fleksibel untuk ukuran konsol.Tidak diikat dan dijelaskan
sumber
rep()
lantai secara otomatistimes
sehingga tidak perlu untuk itu juga. Disimpan 7 byte lagi!runif
daripadasample
secara acak mengisi matriks. Seperti itu:f=function(w,t,m,n,x,y){for(i in 1:t){r=matrix(" ",x,y);r[runif(n)*x*y]="/";cat("\f",rbind(r,"\n"),sep="");Sys.sleep(w)};cat("\f",g<-rep("\n",y/2),rep(" ",(x-nchar(m))/2),m,g,sep="")}
C 160 byte
Versi tidak disatukan:
sumber
R, 163 karakter
Dengan indentasi dan baris baru:
Ini disesuaikan dengan ukuran terminal 24 baris dengan 80 kolom.
w
adalah waktu tunggu,t
jumlah bingkai,n
jumlah tetesan air hujan danm
pesan terakhir.Ini berbeda dari jawaban @ billywob dalam penggunaan berbeda
sample
: jika ukuran output dihilangkan,sample
memberikan permutasi dari vektor input (di sini vektor berisi jumlah hujan yang diperlukan dan jumlah ruang yang sesuai, berkat fakta bahwa argumentimes
dari (fungsirep
vektor). Karena ukuran vektor sesuai persis dengan ukuran layar, tidak perlu menambahkan baris baru, atau memaksa-bentuknya ke dalam matriks.sumber
NodeJS:
691158148 BytesEdit
Seperti yang diminta, fitur tambahan dihapus dan golf.
Aturan menentukan mengabaikan ukuran, tetapi versi ini termasuk kesalahan untuk beberapa frame pertama. Itu adalah 129 byte.
Jawaban sebelumnya
Mungkin bukan golf terbaik, tapi aku agak terbawa suasana. Ini memiliki arah angin dan faktor hujan opsional.
node rain.js 0 0.3
Lihat webm yang berfungsi di sini
sumber
Noodel , 44 byte tidak bersaing
Saya memiliki teks yang terpusat pada daftar hal yang harus saya lakukan sejak saya membuat bahasa ... Tapi, saya malas dan tidak menambahkan sampai setelah tantangan ini. Jadi, di sini saya tidak bersaing, tetapi bersenang-senang dengan tantangan :)
Konsol berukuran sulit dikodekan ke 25x50 yang tidak terlihat bagus di editor online, tetapi tidak untuk potongan.
Cobalah:)
Bagaimana itu bekerja
sumber
Ruby + GNU Core Utils, 169 byte
Parameter ke fungsi adalah waktu tunggu, jumlah iterasi, pesan, dan jumlah tetesan hujan, dalam urutan itu. Baris baru untuk keterbacaan.
Core Utils dibutuhkan untuk
tput
danclear
.sumber
Python 2.7,
254251 byteIni adalah percobaan saya sendiri tanpa menggunakan ncurses.
Terima kasih kepada @ErikTheOutgolfer untuk mengoreksi dan menyelamatkan saya byte.
sumber
for
lingkaran dalam satu baris (seperti yang Anda lakukan pada40)];for i in u(
). Anda juga perlu char ESC di'[2J'
saya pikir. Juga, ada ruang ekstra diu(n): r[y
. Saya tidak tahu bagaimana Anda menghitung 249. Semua masalah yang saya temukan sudah diperbaiki di sini .<esc>
menunjukkan byte ESC 0x1B literal. Hitungan Byte adalah 242 , bukan 246.SmileBASIC, 114 byte
Ukuran konsol selalu 50 * 30.
sumber
Perl 5, 156 byte
154 byte kode + 2 untuk
-pl
.Menggunakan ukuran tetap 160x50.
Lihat online!
Perl 5, 203 byte
201 byte kode + 2 untuk
-pl
.Penggunaan
tput
untuk menentukan ukuran terminal.sumber