Entri untuk tantangan ini akan menampilkan gambar Lissajous berputar yang beranimasi . Tampilan rotasi 3d terjadi ketika parameter x berturut-turut dialihkan fase di setiap frame.
Memasukkan:
The a
dan b
parameter (sesuai artikel wikipedia ) akan ditentukan pada baris perintah, atau membaca dari stdin.
Keluaran:
Ini ascii-art , jadi output akan ditampilkan di jendela emulator terminal atau yang setara. Ukuran output mungkin hardcoded, tetapi angka Lissajous harus setidaknya cukup besar untuk mengisi jendela 80x24.
Kecepatan bingkai animasi sekitar 50fps. Tidur selama 20 ms antara masing-masing frame baik-baik saja, selama waktu untuk menghitung setiap frame kecil dibandingkan dengan waktu tidur tetap. Jika pilihan bahasa Anda tidak dapat menghitung cukup cepat pada platform yang Anda pilih, maka Anda harus menghitung waktu untuk tidur secara dinamis.
Setiap frame tidak akan ditampilkan sampai semua perhitungan untuk frame itu selesai. Tidak perlu menghapus layar di antara setiap bingkai.
Angka tersebut akan membuat 2*Pi
rotasi penuh kira-kira setiap 4 detik.
Untuk setiap frame, kurva tertutup penuh harus dihasilkan. Setidaknya 1000 poin harus dihitung di sepanjang kurva. Tidak perlu menggambar garis di antara titik.
Poin kurva akan diplot sebagai #
karakter. Sisa area tampilan akan kosong / kosong.
Ini adalah kode-golf , jadi jawaban terpendek dalam byte (dianggap dapat diterima oleh saya) akan menjadi pemenang yang diterima satu minggu setelah posting ini.
Jawaban referensi tidak disatukan .
Jawaban:
Perl - 177
Koefisien diteruskan melalui argumen. Gif di atas dihasilkan dari
perl % 2 3
sumber
C (jawaban referensi - tidak golf)
Output dengan
./lissajous 2 3
:C, 257 byte
Oke, saya sendiri tidak bisa menahan diri untuk tidak bermain golf. Saya pikir ada banyak lagi golf yang harus dilakukan dalam hal ini:
sumber
usleep
20.000 ms, mengapa tidak hanyasleep
untuk 20s?usleep(2e4);
?Python 3 - 280
Tidak punya salah satu dari gif animasi mewah itu untuk Anda, maaf. Konsol Windows lambat saat mencetak: P.
Tidak yakin ini memenuhi persyaratan 50fps meskipun saya tidak yakin itu benar-benar mungkin dengan Python. Anda dapat menyesuaikan 1000 pada baris kedua untuk jumlah titik yang akan dihitung (daftar adalah lebar keluaran, tinggi keluaran, poin yang akan ditemukan, progresi per frame (pi * 2 / n) dan titik awal). Atau Anda dapat menghapusnya dan menentukan dalam input juga.
EDIT LEBIH PENTING: Masukan melalui stdin, dipisahkan oleh ruang, baris dihentikan. Akan menunggu input Anda.
EDIT: Screenshot. Tinggi badan diubah menjadi 40 untuk yang satu ini.
sumber
lissajous.py
, lalu jalankanpython3 lissajous.py 2 3
harus memadai, bukan?stdin
, bukan args (gagal menentukan bahwa ... oops). Terpisah ruang.input()
dan menebak itu. Sekarang berfungsi dengan baik bagi saya dengan 3.2.3. +1C # -
360352 (lintas platform - 332 hanya untuk Windows)Diedit setelah micro-golfing dan pembulatan bug + saran oleh Ypnypn
Tidak persis pesaing pada panjang itu - dan itu cukup banyak salinan kata demi kata referensi - tapi oh well. :)
Memory hog, membuat larik baru untuk setiap penyegaran - awalnya (kembali) menggunakan StringBuilder, tetapi mengorbankannya untuk mempersingkat. Tapi setidaknya refresh membutuhkan waktu kurang dari 1 ms pada Core2 lama saya.
Setelah menghapus beberapa - lama-menyakitkan - golf lama, sehingga mengurangi dengan 8 karakter, saya mencoba untuk mengembalikannya ke "puitis" 360 dengan kembali ke menggandakan daripada int parsing, dan kembali ke 80 * 24 bukannya 1920. Itu masih hanya 359, meskipun - dan tidak ada penambahan karakter tunggal lain yang dapat saya pikirkan benar-benar menambah nilai pada kode. Jadi kita hanya akan tetap dengan 352. :-)
Belum dibuka (kehilangan kode pra-golf):
Konsol Windows sebenarnya menerima mengeluarkan banyak karakter nol yang menghasilkan output yang (secara grafis) identik dengan menggunakan karakter ruang aktual - yang memungkinkan beberapa karakter lebih sedikit untuk menginisialisasi array karakter.
sumber
using C = Console
benar-benar menyimpan karakter?Python 2.7 - 214
Saya pikir saya akan melihat ini lagi. Saya punya perasaan ini bisa diturunkan lebih jauh, tetapi akan sulit untuk mencapai hitungan byte Perl. Matematika tampaknya menjadi batasan terbesar saya di sini.
Peringatan: mungkin macet terminal apa pun yang Anda gunakan. Saya menguji ini pada command prompt Windows dengan
lissajous.py 2 3
. Karena penulisan cepat ke command prompt, mengharapkan frame untuk melompat sedikit. Ini sebagian besar dapat diselesaikan (dengan biaya kecepatan) dengan menggunakan yang lebih besars
dirange(s)
dant=2*pi*i
.Saya tidak menggunakan
\r
atau di\b
sini dengan sengaja karena saya menjalankannya di Windows dan itu akan memerlukan karakter tambahan.sumber