pengantar
Ingat raungan 80-an? Maksud saya, Anda tahu, seperti 30 tahun yang lalu? Tidak ada ponsel, tidak ada internet, tidak ada ATM, pakaian neon (apa itu ?!) dan scrolling marqee ! Tidak tidak Tidak! Bukan yang online, tapi yang asli, Dengan lampu LED.
Karena saya dalam suasana nostalgia, saya ingin Anda membuat tenda bergulir.
Tantangan
Buat program di mana Anda dapat memasukkan string satu baris. Program Anda perlu membuat tenda gulir dengan lebar 80 karakter, mengulangi teks jika perlu.
Aturan
- Pengguna harus dapat memasukkan string ke program Anda sebagai input. String dapat berupa parameter baris perintah atau string yang dimasukkan saat menjalankan program.
- Program Anda harus terus mencetak string yang persis 80 karakter (terlihat).
- String harus diperbarui setiap 0,1 detik (lebih atau kurang; saya tidak akan menghitung waktu), menggeser karakter setiap iterasi satu posisi ke kiri.
- String "berputar". Di akhir string yang disediakan pengguna, instance string lain harus muncul.
- Program Anda harus mencetak outputnya pada satu baris, tanpa baris baris (gunakan '\ r' alih-alih '\ n')
- Program Anda harus menjalankan infinitum iklan , hingga seorang pengguna menyela.
- Ini adalah codegolf, jadi kode terpendek dalam byte menang.
- Ada 10% bonus (dibulatkan sampai ke integer berikutnya) untuk mencetak merah pada latar belakang hitam.
- Celah standar berlaku.
Implementasi referensi dalam Python 2.7
Program ini tidak golf, tetapi menyediakan implementasi referensi (dan karenanya batas atas untuk ukuran).
import time,sys
s=raw_input()*99
while 1:
for i in range(80):
print s[i:i+80]+'\r',
sys.stdout.flush()
time.sleep(0.1)
1 2 3 4 5 6 7 8 9 10 11 ... 300
cut off setelah sekitar 56.Jawaban:
CJam, 31 byte
Menunggu tepat 100 ms.
Ini hanya akan bekerja dengan penerjemah resmi Java , karena penerjemah online hanya menampilkan keluaran setelah keluar dari program.
Teks merah dengan latar belakang hitam dimungkinkan dalam 40 (atau 39) byte, dengan skor 36:
Bagaimana itu bekerja
sumber
;
penjelasannya tidak selarasPowerShell,
118 113 112 108 102 101 9996 - 10% = 86Kode
Dengan peringatan bahwa sekarang dimulai lingkaran pertama dengan karakter kedua; Aturannya tidak mengatakan itu harus dimulai dari depan string, dan yang pertama disertakan secara keseluruhan, jadi tidak masalah bagi saya. Saya akan mendapatkannya ke 100 karakter entah bagaimana - edit: terima kasih @ConnorLSW untuk hasil edit untuk mendapatkan di bawah 100.
Instruksi
Keluaran
Catatan
Versi yang lebih mudah dibaca dengan nama dan parameter variabel terisi sedikit:
-F R
cukup unik untuk menetapkan ForegroundColor Merah, misalnya.-B 0
set ke warna Enum nilai 0 yang ditafsirkan sebagai Hitam.Alternatif, tenda yang lebih 'benar':
Kode referensi tidak menangani string lebih dari 80 karakter dengan baik, melewatkan apa pun dalam pesan yang melewati ~ 160 karakter, dan kesalahan-reset setiap 99 * len (string) karakter. mis. jika lebar tanda adalah 5 karakter, itu artinya:
Versi ini mengindeks modulo panjang teks, bukan lebar tanda, sehingga berjalan melalui seluruh string. 106 - 10% = 95 karakter.
Alternatif: tandatangani siklus seperti .gif dalam pertanyaan, 118-10% = 106
Karena terlihat lebih baik.
sumber
Bla
untuk0
-Write-Host
akan menafsirkan angka menjadi warna.while(1)
untukfor()
menyimpan beberapa byte :)for()
, Anda dapat menyimpan satu byte lagi yang diubah$s=(Read-Host)*180;for(){
menjadifor($s=(Read-Host)*180){
Matlab, 76 byte
Apa yang saya pikir bagus di sini adalah bahwa Anda dapat memiliki vektor sebagai indeks array. Ini mengembalikan vektor entri array yang sesuai, yang membuatnya sangat mudah untuk menambahkan string yang diberikan secara terpisah dari panjangnya.
Hasil:
sumber
clc
. Anda lupa untuk menambahkan's'
diinput
a=input('','s')
'
string yang dibatasi sebagai input. Banyak bahasa membutuhkan pembatas string atau mereka akan menafsirkan argumen baris perintah dalam bentuk kalimat (kata-kata dipisahkan oleh spasi) sebagai argumen berganda pula.QBasic,
116113 byte - 10% =105102Ini versi terformat dengan beberapa komentar:
Beberapa catatan:
PRINT
setelahFOR
loop diperlukan.CLS
harus mengatur ulang kursor ke sudut kiri atas setiap kali. Tetapi pada QB64, setidaknya, jika saya tidak memasukkan ekstraPRINT
, tenda berakhir di baris kedua, bukan yang pertama. Jika ada yang memasang QBasic di DosBox atau semacamnya, saya akan tertarik untuk mengetahui apakah hal yang sama terjadi di sana atau apakah itu bug QB64.TIMER
(jumlah detik sejak tengah malam) untuk penundaan. Jika kode berjalan pada tengah malam, tenda akan macet karenaTIMER
akan diatur ulang0
dan selalu kurang darit
itu.sumber
PRINT
tetapi denganCLS
--setelahCLS
, tidak peduli apa yang dicetak sebelumnya,PRINT
pernyataan berikutnya harus menghasilkan 1,1; tetapi sebaliknya, saya mengalami situasi di mana output di 2,1.Perl,
9998 byte (-10% = 89)Mengambil input dari parameter baris perintah.
sumber
pb , ⌈ (216 + 3) * 0.9⌉ = 198
+3 byte untuk bendera juru bahasa
d=1
Skor yang cukup mengerikan, tetapi mengingat betapa sulitnya melakukan apa pun dalam bahasa ini, bisa jadi lebih buruk. Rasio jawaban ini dari (byte yang digunakan untuk mendapatkan teks merah) ke (bonus dari memiliki teks merah) benar-benar baik, seluruh output berubah menjadi merah hanya dengan
c
di awal!Waktu antara setiap centang bervariasi tergantung pada panjang string input tetapi sekitar 0,1 detik.
Omong-omong, output program ini terlihat seperti sampah total karena penerjemahnya sangat buruk. Setiap milidetik membersihkan terminal dan menggambar semuanya, sehingga benar-benar berkedip.
Dengan komentar:
sumber
Perl - 120 byte (-10% = 108)
sumber
Matlab, ⌈188 * .9⌉ = 170
Ini berfungsi dalam versi Matlab R2014b atau lebih tinggi. Hasilnya ditampilkan pada jendela gambar.
Dalam contoh berikut , teks diketik dalam huruf tebal untuk visualisasi yang lebih baik (tidak dilakukan dalam kode di atas karena harganya beberapa byte). Perhatikan juga bahwa kecepatan animasi GIF tidak sesuai dengan jeda 0,1 detik yang diperlukan, tetapi waktunya tepat pada gambar aktual yang ditunjukkan dengan menjalankan program.
sumber
SpecBAS, 130 byte (-10% = 117)
Lipat gandakan string asli menjadi 80 karakter atau lebih, lalu potong menjadi 80.
TEXT
adalah perintah dalam SpecBAS yang bekerja dengan cara yang sama sepertiPRINT
(dalam contoh ini) tetapi menyimpan satu karakter.The
SCALE
perintah menambahkan beberapa karakter tambahan untuk kode, tetapi membuatnya tampak lebih tenda-ish.Program terus berjalan sampai Anda menekan Esc.
sumber
Perl, 63 (70 karakter - 10% untuk bonus)
Bukan solusi yang sangat berbeda dengan yang lain, tetapi saya membuang-buang waktu untuk membuatnya, jadi saya pikir saya akan mempostingnya juga!
Bergantung pada terminal yang kompatibel dengan Unix untuk kode ANSI dan panggilan ke coreutils '
sleep
. Dua\x..
karakter di atas sebenarnya adalah line-feed literal dan escape char sesuai dengan hex dump ini:sumber
Ruby,
797675 byteSaya masih bukan ahli ruby, mungkin bisa bermain golf.
Dengan skor yang sama merah & hitam:
sumber
Perl, 84 byte (- 10% = 76)
Ini mengambil argumen baris perintah yang merupakan teks dalam tenda.
Penjelasan:
$_
\b
) dan spasi (). Ini menghilangkan karakter terakhir dari cetakan sebelumnya. Kemudian cetak kembali carriage dan warnai.
$p
$p = ($p+1) % length of text
sumber
bash, 121 byte
sumber
Python 3, 96 byte
Ini hanya akan bekerja pada terminal yang mendukung urutan pelarian ANSI. Jika Anda menggunakan Windows, coba ansicon .
Hore untuk
flush
kata kunci di Python 3, jadi kami tidak perlu melakukansys.stdout.flush()
panggilan mahal .sumber
C,
293269 byte(Baris ditambahkan untuk keterbacaan)
Ini mengambil input dari input standar yang diakhiri oleh EOF; jadi yang terbaik adalah memasukkan string, baris baru, dan kemudian EOF (misalnya, Ctrl ^ D).
Tidak Disatukan:
sumber
SmileBASIC BIG, 79 byte
Saya punya solusi grafis yang bagus hampir selesai ketika saya menyadari itu harus menggulir 1 karakter keseluruhan sekaligus.
sumber
Jelly ,
201918 byte80
dengan⁹
(= 256) karena harus dikalikan dengan setidaknya 80Çß
(dariÇ1¿
).Dengan beberapa trik dari jawaban @Dennis di sini . Jelly lebih baru daripada tantangannya, tetapi tidak benar-benar dirancang khusus untuk itu. Saran tentang cara meningkatkan dipersilahkan! Jika konsol Anda dalam utf-8, jalankan
export LC_ALL=en_US
atau mirip sebelum mencoba.Contoh
Penjelasan
sumber
LOVE2D Lua, 197-10% = 178 Bytes
Membutuhkan input berada di file yang disebut 'tt' di root, sehingga 3 byte tambahan ditambahkan ke skor.
Fungsionalitas yang sangat mendasar, hanya dalam satu loop untuk 80 iterasi, tambahkan karakter pada indeks i ditambah waktu saat ini dalam detik yang dimodulasi oleh panjang string saat ini, memberikan string input 80 karakter yang berulang, yang bergeser ke kiri seiring berjalannya waktu.
Saya menggunakan LOVE2D Untuk tertawa.
sumber
Sinclair ZX81 / Timex TS1000 / 1500 BASIC,
110 byte182 byte (untuk daftar)Ia bekerja dengan mencetak
3280 karakter pertama dari stringA$
pada posisi layar 0,0 di baris dua, dan kemudian memanipulasi string dari posisi 2 ke ujung sting in line 3 (Sinclair ZX81 BASIC mengindeks string dari 1 dan bukan nol ), oleh karena itu menambahkan karakter pertama ke akhir dan meneruskannya kembali keA$
variabel; lalu ada loop tanpa syarat kembali ke jalur 2.sumber
Commodore 64, 434 bytes
Karena ini membutuhkan 80 karakter untuk ditampilkan, dan C64 secara default hanya 40 karakter, maka 40 karakter scrolly dicetak pada baris atas area layar sedangkan 40 lainnya dicetak di dekat bagian bawah.
Untuk menjernihkan apa yang
{HOME}
diterjemahkan dan simbol-simbol lain menjadi PETSCII maka berikut ini adalah ambil layar yang diambil dari emulator saya:Saya akan melakukan versi golf penuh ketika saya menginstal CBM PRG Studio (atau ketika saya sedang tidak makan siang di tempat kerja).
sumber
Ruby,
7977 karaktersumber
PHP, 136 byte
php -f marquee.php hello\ world
string "hello world" ke tenda.hello worlddddddddddddddddddddddddddddddddddddddd
, tapi itu hanya akan diulang melalui 80 karakter - saya harap masih diperhitungkan.Sudah hari yang panjang, mungkin ada sesuatu yang bisa saya lakukan untuk memperbaikinya
sumber
PHP, 85 byte
mengambil input dari argumen baris perintah pertama; jalankan bersama
-nr
.Mulai menggulir dengan karakter kedua. Tambahkan satu byte untuk memulai karakter pertama:
Ganti
=++$i%
dengan%=
dan;;
dengan;;$i++,
.sumber