Buat animasi teks di terminal Anda
Target
Tujuannya adalah untuk "menghidupkan" string "Halo dunia" di output Anda sehingga setiap karakter dikapitalisasi satu sama lain.
Program Anda dapat keluar setelah setiap huruf dikapitalisasi.
Sebagai contoh;
# Iteration 1
Hello world
# Iteration 2
hEllo world
# Iteration 3
heLlo world
# Iteration 4
helLo world
# Iteration 5
hellO world
# Iteration 6 (note: it should capitilize the space char (ie: a break between iteration 5 and iteration 7)
hello world
# Iteration 7
hello World
# Iteration 8
hello wOrld
# Iteration 9
hello woRld
# Iteration 10
hello worLd
# Iteration 11
hello worlD
Seharusnya hanya menghidupkan string sekali dan antara setiap negara harus ada penundaan 1 detik.
Memasukkan
Tidak diperlukan input, tetapi "Halo dunia" harus berupa string yang "animasi".
Keluaran
String "Hello world" harus dianimasikan. Output harus berupa 1 baris untuk membuat semacam animasi gelombang. Baris baru trailing kosong diperbolehkan. Contoh gif;
Saya melihat ini di video youtube metasploit dan berpikir efeknya cukup keren, dari sanalah saya merekam gif, jadi agak lamban, tapi saya harap ini menggambarkan output yang bagus
Ini adalah kode-golf , byte-count terendah akan dianggap sebagai pemenang.
Jawaban:
Vim 26 byte
Penjelasan (belum .gif):
Pertama, kita harus memasukkan teks 'hello world'. Ini sangat mudah. Hanya saja:
Pada titik ini, kursor berada di 'd' di 'dunia'. Lanjut:
Ada juga dua versi 26 byte lain yang saya temukan:
sumber
~
istirahat loop . Saya percaya itul
yang melakukan kerja kerasPython 2,
989490 byte-9-4 bytes berkat @ElPedro -4 bytes berkat @JonathanAllan dan @Rodsumber
-u
argumen dan menggunakanprint"\t"+s[:x]+s[x:].title(),;
(perhatikan koma yang tertinggal) . Dan ini tidak akan mengubah jumlah byte Anda (karena argumennya akan menambah +2 byte)python -c 'code here'
. Dengan bendera, doa akan menjadipython -uc 'code here'
, yang berbeda satu byte.Commodore 64,
168162137133 BASIC (dan tokenized) byte yang digunakanAnda perlu menggunakan singkatan kata kunci BASIC untuk memasukkan ini ke dalam C64 atau emulator yang sebenarnya (atau memasukkan program ke Commodore 128 dan memuatnya kembali dalam mode C64, meskipun ini juga bisa berfungsi pada 128). Hanya
{control+n}
akan bekerja / ditampilkan setelah kutipan pembukaan. Ini adalah singkatan untukchr$(14)
dan karenanya menyimpan beberapa byte dan mengalihkan karakter yang diatur ke mode bisnis atau karakter huruf besar / kecil.Saya telah menambahkan beberapa singkatan untuk Anda juga untuk Anda. The
{clear home}
karakter dibuat dengan menekanShift
danCLR/HOME
kunci setelah tanda pembukaan kutip.Untuk tujuan ilustrasi, daftar yang tidak diobservasi dapat dimasukkan sebagai berikut:
Ia bekerja dengan mengubah charset PETSCII ke mode bisnis (huruf besar / kecil), dan menulis string hello world ke baris atas layar yang terletak di lokasi memori $ 0400, kemudian akan mengambil nilai di setiap lokasi untuk selanjutnya 11 byte dari sana dan meningkatkan masing-masing nilai sebesar 64 (setara dengan huruf besar). Jika penghitung j adalah> 0, ia memanggil rutin di saluran 2 untuk mengurangi lokasi memori sebelumnya sebanyak 64 lagi.
Baris 3 adalah jeda, ia juga menulis spasi ke lokasi $ 0405 dan $ 040b, yang merupakan perbaikan bug (yang mungkin bisa dihapus untuk menghemat beberapa byte).
sumber
fori=0to1step0
...nexti
pada dasarnya membuat loop tak terbatas (kurang-goto), sepertiwhile(true){...}
dalam bahasa yang lebih modern.GO TO
diblokir, kan ;-) Seseorang dapat dengan mudah mengerjakan daftar dengan sendirinya denganCLR
sebelum mengerjakan byte gratis yang tetap denganFRE(0)
fungsi yang rusakC #,
230215193161135134130 byteIni C # jadi panjang kan! :-( Tapi setelah bantuan dan pencarian, saya (dan yang lainnya, benar-benar) berhasil menghapus 100 byte.
Golf
Tidak disatukan
Tangkapan layar
Meskipun terlihat jauh lebih baik saat perulangan dan lebih cepat ..
Pembaruan
Kehilangan 15 byte dengan menggunakan carriage return selain
Clear()
itu juga memungkinkan saya untuk mengganti penggunaan denganSystem.Console
suatu tempat inline.Program yang diganti dengan lambda menghemat 23 byte berkat @devRicher
new string(b)
denganb
danb[i]=char.ToUpper(b[i])
denganb[i]-=' '
, menyelamatkan saya 26 byte lagi!i++
berkat @Snowfirei<11
darifor
loop sayasumber
class P{static void Main(){ ... }}
ke()=>{ ... }
untuk memotong beberapa byte. PPCG menerima fungsi sebagai jawaban, sehingga lambda berfungsi dengan baik.void g(){ ... }
.char g = string j[x]
), untuk menghemat sekitar 50 byte:()=>{var s="Hello world";for(int i=1;i<11;i++){string h = s;h[i]=char.ToUpper(s[i]);System.Console.Write(h+"\r");System.Threading.Thread.Sleep(1000);}}
b[i++]-=' '
. Itu akan berguna, karena Anda juga dapat menghapus kondisi dalam for for dan hanya menulisfor(int i=0;;)
. OP menunjukkan dalam komentar, bahwa program dapat keluar dengan kesalahan, sehingga Anda dapat mengizinkan IndexOutOfRangeExceptionPowershell,
126119107104 BytesRevisi (kemungkinan akan ada banyak):
Ubah
$s.Length
ke const1110
Pembuat string yang direstrukturisasi, menghapus 1 pernyataan bergabung dan digunakan
++$s
sebagai ganti($s+1)
, untuk menyimpan beberapa byte berkat @AdmBorkBorkAdmBorkBork menunjukkan hanya menggunakan string dua kali sebenarnya lebih pendek dari enkapsulasi dan kemudian
.ToLower()
- yang mengatakan banyak tentang bagaimana verbose PowerShell, -3!pada dasarnya loop melalui panjang string, membentuk array dari tiga bagian, pra-kapital, modal, dan pasca-kapital, mengambil 32 dari huruf tengah, kemudian mengkonversi kembali ke char untuk mendapatkan huruf besar, untungnya ini tidak mengubah ruang menjadi karakter yang terlihat baik, saya harap ini dapat diterima?
sumber
$s
dan.ToLower()
memasangnya. -'Hello world';$s='hello world';
Perakitan CP-1610 , 50 DECLEs = 63 byte
Kode ini dimaksudkan untuk dijalankan pada Intellivision .
Sebuah opcode CP-1610 dikodekan dengan nilai 10-bit, yang dikenal sebagai 'DECLE'. Program ini panjangnya 50 DECLE, mulai dari $ 4800 dan berakhir pada $ 4831.
Keluaran
sumber
MATL , 30 byte
Cobalah di MATL Online!
sumber
PHP,
767471 byteTerima kasih @ hd atas keterlambatan satu detik penuh dan tanpa fraksi!
Terima kasih @ user63956 untuk 2 byte dan @aross selama 3 byte.
Jalankan dengan
-nr
.sumber
sleep(print"$s\r")
.C,
97ditarik106 bytedengan karakter yang lolos dihitung sebagai 1 byte
Catatan: Saya telah
berkomentar tentang keterlambatan waktu padaTIO yang tidak terhubung karena menunggu penyelesaian sebelum menampilkan output, juga sepertinya tidak mengenali carriage return dan menempatkan baris baru. Juga, jika Anda menggunakan Windows, tidur dalam milidetik alih-alih detik, jadisleep(1)
seharusnyasleep(1000)
.Catatan 2: Saya telah menarik entri ini untuk saat ini sampai bug keluaran telah disetrika.sumber
^C
untuk menghentikannya. (juga saya di mac)JavaScript (ES6),
141 139131 byte8B tersimpan berkat Apsillers
Penjelasan
Ini menciptakan fungsi tanpa argumen, yang memisahkan string
hello world
menjadi array karakter dan huruf kapitald+1
ke karakter th .d
adalah penghitung yang dimulai dengan0
dan meningkat setiap kali.Pemakaian
sumber
_=>
Anda lakukan memiliki program yang lengkap (misalnya, jika Anda terjebak dalam sebuah file, Node.js akan berjalan dengan sukses itu sampai selesai). Pemahaman saya tentang larangan "cuplikan kode" bertentangan dengan penulisan kode yang secara implisit menerima beberapa input sebagai variabel, seperti "jika kita menganggapi
sudah memiliki input, kita dapat melakukan ..." yang tidak terjadi di sini, karena ada secara eksplisit tidak ada input.Noodel , 22 byte
Cobalah:)
Bagaimana itu bekerja
Cuplikan menggunakan versi 25 byte yang loop terus menerus.
sumber
Bash + coreutils,
9998 bytesumber
Perl 6 ,
6561 byteGIF:
Bagaimana itu bekerja
Urutan melarikan diri ANSI
\ec
membersihkan layar.Setiap iterasi,
i
karakter th dari string hard-coded diganti dengan versi huruf besar.The
say
Fungsi selalu kembaliTrue
, yang diteruskan ke fungsi tidur yang menafsirkan sebagai1
kedua.sumber
Ruby,
8281 byte^ H adalah ascii 8 (backspace), dan hanya 1 byte.
sumber
C, 87 byte
Kompilasi dan berjalan di Linux.
sumber
Mathematica,
130128123110108 bytePenjelasan: Dari
i=1
ke 11, cetak dari karakter ke-1 ke (i-1) "hello world", gunakan huruf besar"hello world"[i]
, lalu cetak sisa string, tambahkani
pada saat yang sama.sumber
Java
215212204203 byteTidak Disatukan:
sumber
interface A
(dengan spasi)? Plus Anda dapat menghapus ruang antara,
danCharacter.toUpperCase
.R ,
106103 byteHanya loop sederhana, membersihkan konsol dengan
cat('\f')
tampaknya agak tergantung pada sistem tetapi saya tidak mengetahui cara yang lebih baik.sumber
utf8ToInt
. Ini tidak berhasil, ruang perlu ditangani sebagai kasus khusus. Dalam proses saya menemukan yangcat("\014")
tampaknya bekerja lebih baik daripada bekerja di tempat yangcat("\f")
tidak. tetapi tidak pada TIOC, 122 byte
Lebih pendek dari C #: D
sumber
i<11
alih - alihi<10
dalam for-loop AndaPerl, 75 byte
Menggunakan kode ANSI ESCcuntuk menghapus konsol dan memindahkan kursor ke kiri atas di setiap iterasi, tetapi masih perlu
\n
di akhir string ganti untuk menghindari seluruh animasi hilang di buffer baris.Panggilan yang berhasil untuk
print
mengembalikan nilai 1, yang dapat diteruskan langsung kesleep
.sumber
$`
dan$'
menyimpan beberapa byte pada itu(.{$_})(.)(.*)
(itu tidak akan bekerja di terminal, tapi itu tidak masalah). Hal ini membutuhkan memodifikasi sedikit yang menggigit sisa kode Anda meskipun:"hello world"=~s/./sleep print"\33c$`\U$&\E$'\n"/ger
. (Saya menulis hampir kode persis ini, lalu ketika mencari apakah ada yang telah memposting jawaban perl, saya menemukan milik Anda). Dan sedikit detail tentang bytecount: Anda dapat menggunakan baris baru litteral untuk menyimpan byte, dan mungkin beberapa jenis litteral\33c
(tidak terlalu yakin tentang yang terakhir).SmileBASIC,
9071 bytesumber
Jelly ,
2421 byteIni adalah tautan / fungsi niladik yang mencetak ke STDOUT. Itu tidak berfungsi sebagai program lengkap.
Kode tidak dapat diuji pada TIO; menggunakan karakter kontrol dan TIO tidak memiliki terminal emulator (belum).
Bagaimana itu bekerja
sumber
(Strings are cast to Boolean.)
Itu licik!C, 122 byte
Sebagai latihan, saya menulis ini untuk memberikan format output yang lebih optimal daripada beberapa jawaban lainnya. Itu juga berarti kursor duduk setelah huruf besar terakhir selama jeda.
(Baris baru dan lekukan kosmetik dan bukan bagian dari jumlah byte)
Sekarang, beberapa pembaca mungkin mencatat bahwa ini memerlukan beberapa pemijatan untuk bisa dijalankan pada mesin modern (mantra ajaib
-static -Wl,-N
), tetapi ini adalah bagaimana implementasi nyata dari C dulu berperilaku, jadi saya pikir itu valid. Itu juga mengasumsikan set karakter adalah ASCII, dan itu tidak mencetak baris tambahan.Bonus: Untuk versi EBCDIC, Anda dapat mengganti
8
dengan22
dan64
dengan32
, dan mengganti logika untukp[1]
danp[2]
. Untuk menguji pada sistem non-EBCDIC, Anda dapat mengompilasinya-funsigned-char -fexec-charset=cp037
.Output adalah 43 byte:
Hello world«H‹hE‹eL‹lL‹lO‹o ‹ W‹wO‹oR‹rL‹lD
sumber
Scala, 92 byte
Tidak disatukan
sumber
h(i)toUpper
Batch, 184 byte
Anehnya baris perintah untuk
timeout/t>nul 1
menjadi rusak jika tidak ada baris baru, jadi saya tidak bisa meletakkannya di akhir file.sumber
Ruby, 108 byte
Pertama kali, siswa tahun pertama. Bukan elang, tapi setidaknya aku sedikit bangga.
sumber
Pascal,
187152 byteBukan yang paling efisien atau yang terpendek, tetapi bekerja dengan sangat baik!
Diuji dan bekerja pada Free Pascal Compiler 2.6+.
Terima kasih kepada @manatwork karena telah menghemat 35 byte!
Saya telah menggunakan http://www.onlinecompiler.net/pascal untuk mengkompilasi file dan menjalankannya di Windows.
Belum melihat masalah dengan itu, sejauh ini.
sumber
UpCase
fungsi ada sejak zaman Turbo yang lama. (Di sana hanya ditanganiChar
, tetapi dalam Free Pascal juga menangani string.)Word
(atauByte
); membuat Pconst
jadi tipe ini dari nilai inisialisasi; sementara di sana, jadikan X konstanta yang diinisialisasi untuk menghilangkanvar
kata kunci yang terpisah (yang ini mungkin tidak berfungsi di semua varian Pascal, tetapi tentu saja dalam Free Pascal); gunakanClrScr
untuk melompat ke sudut kiri atas; menggantiif
dengan ekspresi tunggal:X:=X*Ord(X<11)+1
. pastebin.com/FfaixkESconst X:Word=1;P='hello world';
dan ituconst X:Word=1;P='hello world';
mungkin. Saya belajar Pascal di Turbo Pascal 7, yang mungkin tidak kompatibel dengan itu. Dan benar-benar lupaupcase
. Terima kasih banyak!C
12011010496 byteVersi tidak disatukan
@ Pakk Terima kasih telah menyimpan beberapa byte, ide bagus. :)
@Pakk @KarlNapf Terima kasih kawan atas masukan Anda.
masih bisa dipersingkat !? :)
sumber
-=
dan+=
. Juga, variabel pointer mungkin menyimpan[]
tetapi saya tidak yakin.char *j,s[]="hello world";
untuk menyimpan beberapa karakter lagi.f(){char*j,s[]="\rhello world";for(j=s;*++j;*j-=32,printf(s),*j+=32,fflush(0),sleep(1));}
89 bytePython 2,
220189179 byteSolusi tanpa menggunakan string dan
capitalize()
, jumlah byte seperti:Dan varian yang sedikit lebih lama (191 karakter) tanpa pengaturan ulang case:
sumber
C ++,
88125 BytesVersi tidak disatukan:
Dikompilasi dengan TDM-GCC pada mesin Windows 10 dengan Dev-C ++.
Sunting: Saya lupa menyertakan dalam versi pertama saya.
sumber
for
loop saya dengan memindahkan carriage return ke awal string .. Saya juga akan membantu Anda: Melakukannyafor(int c=1;;c++)
akan menghemat 1 byte.for(int c=1;;)
kemudiana[c++]-=32;
menyimpan byte lain.