Aku lelah, tapi sepertinya aku tidak bisa tidur. Bantu saya menghitung domba.
Diberikan input N (bilangan bulat positif), buat N domba melompati pagar ascii, seperti contoh di bawah ini. Hanya satu bingkai yang harus ditampilkan sekaligus:
o |-|
──|-|── 0
o|-|
──|-|── 0
o
|-|
──|-|── 0
|-|o
──|-|── 0
|-| o
──|-|── 0
o |-|
──|-|── 1
o|-|
──|-|── 1
o
|-|
──|-|── 1
Hitungan harus disimpan di sisi kanan bawah 'tanah'. Trailing dan memimpin spasi putih dan baris baru diizinkan. Jika bahasa pilihan Anda mengalami kesulitan membersihkan layar untuk setiap bingkai, Anda dapat menambahkan baris baru yang cukup untuk menghapus layar - sebutkan berapa banyak baris yang Anda tambahkan untuk ini dalam jawaban Anda. Program ini harus berakhir ketika domba ke-N berada di lantai lima.
Saya harus bangun pagi-pagi besok, jadi kode terpendek dalam byte menang. Silakan kirimkan fungsi atau program lengkap. Celah standar berlaku.
N=3
frame terakhir akan berisi domba di ujung kanan dan counter akan tetap berkata2
. Apakah itu benar?Jawaban:
MATL ,
605653 byteAnimasi dengan kode di atas berjalan sangat cepat. Versi berikut mencakup jeda untuk membuat animasi lebih lambat dan karenanya lebih mudah dilihat (tidak diharuskan oleh tantangan), dengan biaya 4 byte lebih:
Cobalah di MATL Online! Penerjemahnya adalah beta; segarkan halaman jika tidak berhasil.
Atau lihat rekaman dari kompiler offline:
Penjelasan
sumber
JavaScript (ES6),
120124 byteFrame terakhir yang dihitung ditampilkan terlebih dahulu. Berkat ini nomor lompatannya adalah
n-1
In
alert
, karakter memiliki lebar yang berbeda sehingga sepertinya rusak.Tampilkan cuplikan kode
Jawaban sebelumnya:
120 byte, nomor lompatan salah karena dimulai pada 1 bukan 0
sumber
alert
. Saya memiliki hasil yang sama dari chrome dengan tepi, dan lebih buruk dengan firefox.JavaScript (ES6),
144142 byteMengosongkan output dan menunggu 300ms antara setiap frame:
Anda dapat mengujinya di sini (pastikan untuk membuka konsol).
sumber
4
ke5
) setelah domba terakhir telah melompat pagar ...Ruby, 83 byte
Mencetak ke stdout. Output dipisahkan oleh baris baru. Mengurangi ketinggian layar menjadi 3 hanya membuat satu gambar terlihat pada satu waktu.
sumber
C #, 234 Bytes
sumber
string[] args
dan difor (int
.Int32.Parse
bisa jadiint.Parse
.Program
menjadi hanyaP
atau sesuatustring
bisa jadivar
. Integer di dalam for loop dapat diinisialisasi pada saat yang sama saat Anda menguraikanargs[0]
integer.Action<string[]>
dan Anda dapat menghapus tanda kurung di luar untuk loop jadi saya percaya saya mendapatkan 200 byte:using C=System.Console;a=>{for(int n=0;n-1+""!=a[0];++n)foreach(int p in new[]{5,6,3,10,11}){C.Clear();C.Write(" \n |-| \n──|-|── ".Remove(p,1).Insert(p,"o")+n);for(var w=3e7;w>0;--w);}};
PHP + JavaScript, 168 byte
Simpan ke file
s.php
, panggil di browser dengans.php?n=<n>
.Panggilan sendiri dengan parameter baru untuk setiap frame, tanpa penundaan.
Saya bisa menghemat 5 lebih banyak dengan
index.php
; tapi saya tidak ingin sejauh itu.sumber
C AB|─|DE ──|─|── $c",EABCD,$s),($c+=!$f)<$n?"
.short_open_tag
menonaktifkan. Aktifkan (default) atau tambahkanphp
+ spasi setelah<?
.Tcl, 168 byte
Versi menggunakan layar 10-baris-tinggi. (Ganti di
7
bawah ini dengan tinggi layar Anda dalam kolom minus empat.)Itu berjalan sangat cepat, sehingga Anda dapat menambahkan jeda pada baris dua:
Tcl, 177 byte
Ini berfungsi dengan menggunakan kembali string di atas untuk dua hal berbeda:
Template itu sendiri adalah gambar string untuk ditampilkan. Pertama-tama kita memetakan (ganti string) digit posisi domba saat ini (loop dalam) ke 'o'. Lalu kami memetakan digit yang tersisa ke spasi. Kemudian kami mencetak string yang dihasilkan.
(String itu sendiri dimulai setelah {terakhir di baris ketiga dan berakhir dengan paling kiri} di baris terakhir.)
sumber
QBasic, 110 byte
Loops over
5*n
ticks. Pada setiap centang, bersihkan layar, cetak hitungan stile dan domba, dan kemudian gunakanLOCATE
untuk mencetako
di tempat yang sesuai. Denganx
menjadi kode posisi antara 0 dan 4:(x=2)+2
x=2
benar,-1+2
=1
x=2
salah,0+2
=2
1+x-(x>1)+x\3
x
adalah0
atau1
,x>1
salah danx\3
adalah0
:1+x-0+0
=1
atau2
x
is2
,x>1
true danx\3
is0
:1+x-(-1)+0
=4
x
benar3
atau4
,x>1
benar danx\3
adalah1
:1+x-(-1)+1
=6
atau7
Akhirnya,
SLEEP
selama 1 detik dan loop. Jika Anda tidak keberatan menekan enter di setiap frame, saya dapat mencukur dua byte dengan menghapus argumenSLEEP
.sumber
PHP,
132131 byteSuntingan setelah komentar (terima kasih!):
Yang ungolfed:
Pos asli
Diuji di ubuntu (tidak tahu, apakah
system("clear")
berfungsi di windows)Tidak Disatukan:
sumber
clear
tidak perlu kutipan.cls
di DOS.$i=0;
, peringatan biasanya tidak ditampilkan dalam kode golf (-5 byte). Untuk alasan yang sama, Anda tidak perlu tanda kutip sekitarclear
dano
(-4 byte). Ganti\n
s dengan baris baru nyata (-2 byte). Karena Anda hanya memiliki ekspresi, bukan pernyataan apa pun, Anda bisa meletakkan semuanya kecuali yang terakhir difor
loop Anda , memungkinkan Anda untuk menghapus tanda kurung (for(;;system(clear),$c=…)sleep(1);
) (-2 byte). Dan akhirnya, Anda lupa menambahkan kondisinya$i<$argv[0]
(+ 11 byte).node.js + sleep , 169 byte
Solusi asli
node.js,
146142185 byteDiuji hanya dengan terminal ubuntu (dan sekarang dengan n domba):
Ya, itu frame setiap 9 ms. Versi yang lebih menenangkan tidur (bingkai setiap 1s):
Dan ungolfed:
sumber
05AB1E ,
666059 byteMenggunakan pengodean CP-1252 .
Penjelasan
Iterasi mengacu pada iterasi dalam (0 -> 4) dari perjalanan domba.
Loop utama
Hasilkan baris atas
Hasilkan baris tengah
Hasilkan baris bawah
sumber
Jelly ,
55 5453 byteTryItOnline
Mencetak bingkai yang dipisahkan oleh umpan garis.
Bagaimana?
sumber
Python 2,
171159144 byte,163151136 karakterSolusi menggunakan fungsi rekursif. Sebut sebagai f (int)
EDIT
-12 setelah membaca ulang komentar dan melihat bahwa jumlah tidak harus bertambah ketika domba mencapai ujung ladang
-15 dengan mengulangi daftar indeks secara langsung dan kehilangan variabel
Catatan
Asumsikan pengkodean UTF-8
Menggunakan - alih-alih ─ (seperti pada @Luis MATL jawaban) akan menurunkan jumlah byte hingga 8 agar sesuai dengan jumlah karakter dan akan kehilangan ketergantungan UTF-8
50 baris baru ditambahkan - output berada di bagian bawah pada konsol (lebih murah daripada mengimpor dan menggunakan sistem os.s ("jelas") dan bekerja pada Windows dan Linux)
Versi dengan jeda waktu 1 detik antara keluaran (170 byte, 162 karakter)
sumber
Bash + utilitas Linux standar (339 byte)
sumber