Tugas:
Diberikan .txt
file dengan bingkai ASCII seni masing-masing dipisahkan oleh \n
(lihat contoh ini jika Anda tidak jelas) menghasilkan gambar bergerak dengan bingkai dengan 1 bingkai per detik.
Perhatikan bahwa ada jejak \n
di bingkai terakhir.
Setiap dimensi frame akan:
- X <80
- Y <20
Aturan
- Frame Sebelumnya harus dihapus sebelum yang berikutnya ditampilkan, jadi hanya mencetak setiap frame ke terminal bukan jawaban yang valid.
- Baru Anda dapat mengambil nama file seperti yang Anda inginkan, baik dari itu disimpan dalam variabel atau dari sys args.
- Baru Gambar harus diulang tanpa batas
- Ini adalah kode golf: program terkecil menang.
Contoh
Memasukkan
0 0
0 0
00000
0 0
0 0
00000
0
00000
0
00000
0 0
0 0
0
0
0
Keluaran
Tidak bermain golf
import curses, time
stdscr = curses.initscr()
Frames = file.read(file('Frames.txt')).split('\n')
while True:
y = 0
for i in range(len(Frames)):
stdscr.addstr(y,0,Frames[i])
stdscr.refresh()
y += 1
if Frames[i] == '':
y = 0
stdscr.clear()
time.sleep(1)
document.body.innerText
Jawaban:
Mathematica, 41 byte
Berharap nama file disimpan dalam variabel
f
.Ini adalah yang pertama kali diutamakan aturan Matematika untuk
@
dan.~.~.
persis seperti yang saya butuhkan.Btw, cuplikan ini bisa jadi sangat salah jika ekstensi file adalah hal lain selain
.txt
(karena Mathematica akan mencoba menebak cara melakukan impor berdasarkan itu), tetapi untungnya akhiran file itu adalah bagian dari spesifikasi tantangan.sumber
Bash, 82
Mengasumsikan nama file dari file .txt disediakan sebagai argumen pertama ke skrip.
Perhatikan bahwa baris kosong yang tertinggal harus ada di akhir file .txt agar ini berfungsi.
Terima kasih khusus kepada @professorfish dan @DigitalTrauma.
sumber
$IFS
kosong secara default? juga, gunakanfor ((;;)){ ... }
sebagai gantiwhile :;do ... done
''
agarread
dapat membaca beberapa spasi berurutan, seperti pada baris terakhir YIFS=
dan[ "$a" ]
bukannya[ -n "$a" ]
Ruby,
88865655 karakterProgram ini mengasumsikan nama file diberikan sebagai argumen pertama.
Terima kasih banyak kepada Ventero karena berbagi peningkatan hebat!
Tidak golf:
Program ini membaca file, membaginya menjadi potongan-potongan, dan mencetak setiap potongan secara terpisah setelah membersihkan layar.
cls
hanya berfungsi di Windows. Varian denganclear
adalah 57 karakter.sumber
;
dan menghilangkan tanda kurung saat memanggilsplit
.\n
tetap digunakan . Juga di sini di kode golf tidak ada yang akan membuat Anda menambahkan poin lain ke skor Anda untuk setiap jeda baris hanya karena Anda menggunakan Windows. ;)$*
adalah singkatanARGV
, yang akan menyimpan dua karakter. Dalam hal ini, Anda dapat menyimpan lebih banyak dengan menggunakanARGF
(atau$<
) meskipun:a=$<.read.split"\n\n"
.a.size
juga lebih pendek daria.length
. Dan karenasleep
mengembalikan argumennya setelah kembali, Anda dapat menggabungkan dua pernyataan terakhir ke dalam loop Andai+=sleep 1
.i
dengan menggunakanArray#cycle
, yang loop selamanya jika tidak ada argumen yang diberikan:a.cycle{|i|system"cls";$><<i;sleep 1}
. Dan membelah$/+$/
adalah karakter lain yang lebih pendek dari"\n\n"
.a
:$<.read.split($/+$/).cycle{...}
(Maaf tentang komentar rangkap tiga, saya selalu memikirkan peningkatan baru setelah periode edit komentar selesai :))Dyalog APL (64)
(Tidak dapat mengalahkan Mathematica kali ini. Tampaknya memiliki built-in untuk semuanya.)
Ini adalah fungsi yang menggunakan nama file sebagai argumennya. Diasumsikan file ada di Windows (
\r\n
format ).Penjelasan:
⎕ML←3
: setel level migrasi ke 3 (memungkinkan⊂
untuk digunakan sebagai fitur split APL2)M←80 ¯1⎕MAP⍵
: baca file yang diberikan oleh argumen yang tepat sebagai file ASCII, dan simpan konten dalamM
.M⊂⍨~(4/1)⍷⎕TC∊⍨M
: temukan semua kemunculan empat karakter kontrol terminal berturut-turut, dan bagiM
-bagi. Ini memberi setiap frame.{
...}¨
: untuk masing-masing ...⊂⊃⍵⊂⍨~⍵∊⎕TC
: pisahkan argumen (= satu frame) pada karakter kontrol terminal, dan kemudian ubah vektor-vektor menjadi sebuah matriks (sehingga akan menampilkan setiap baris pada baris yang terpisah, ini diperlukan karena⎕SM
tidak memahami karakter kontrol.)⎕SM←1 1,⍨
: lalu tampilkan di kiri atas menu⎕SM
jendela.⎕DL 1
: dan kemudian tunggu satu detik.sumber
Awk, 53Aturan baru:
Awk, 74
sumber
BEGIN{RS=z}{system("sleep 1;clear")}1
... Dalam awk,""
khusus sebagaiRS
catatan multiline yang berarti. Untuk mendukung aturan baru pengulangan tanpa batas, saya memiliki ini sejauh ini:BEGIN{RS=z}END{for(;!system("sleep 1;clear");)print a[i++%NR+1]}{a[NR]=$0}
di 74 karakter. gawk mendukung perubahanARGV
sehingga Anda dapat melakukannyaBEGIN{RS=z}{system("sleep 1;clear");ARGV[ARGC++]=ARGV[ARGC-1]}1
di 63 karakter.Perl, 40
jalankan sebagai
(yaitu file animasi dibaca melalui STDIN). 3 byte untuk
p00
ditambahkan ke hitungan. Ini 2 karakter lebih pendek yaitu 38 pada Windows karenacls
bukanclear
. Atau, untuk menjadi portabel:Atau, meregangkan aturan sedikit (dan kemudian 31 + 3 = 34 ):
sumber
Rebol, 74
Berharap nama file disimpan dalam variabel
f
. Di bawah ini adalah contoh yang tidak dipisahkan:sumber
Jawa, 678 karakter (saat golf)
Tentu saja dengan GUI, karena melakukan hal-hal di konsol sucks dengan Java, terutama jika Anda ingin menghapus layar ...
sumber
Cobra - 163
sumber
Python 117
Mengasumsikan nama file disimpan dalam variabel
f
.Catatan: ganti
'cls'
dengan'clear'
if pada sistem berbasis unix, tambahkan 2 chrs.ctl+C
berhentisumber
for i in F: s.addstr(y,0,i); ... if i=='': ...
open(f).read()
alih-alihfile.read(file(f))
, lebih pendek 4 byte.Groovy -
121119 karakterJawaban PortFO ProgramFOX untuk Groovy 2.2.1. "Konsol yang jelas" lemah.
sunting : diganti penutupan rekursif dengan loop sementara sederhana, yang lebih pendek dan tidak ada stack overflow
Tidak Disatukan:
sumber
GNU sed, 32
sumber
Groovy, 81
Ini adalah cara yang lebih asyik:
ungolfed
sumber
cls
untuk Windows saya rasa ... cobaclear
C # 226
Kenapa repot-repot ya?
Tidak golf :
Atau di LINQPAD (jadi C # dapat tetap semi-kompetitif dengan langs singkatan uber: D)
C # LINQPAD - 134
Saya merasa agak kotor, tapi hei, ini kode-golf.
sumber
SmileBASIC, 74 byte
F harus berupa nama file
sumber