Setelah entri saya ke Hello World yang dikaburkan, saya pikir mungkin menyenangkan untuk membagikan kode yang mendasarinya. Tapi mengapa hanya menunjukkan kodenya, mari kita membuatnya menjadi golf juga!
Tantangan
Tulis skrip yang menggulirkan string melintasi terminal, dari kanan ke kiri, menetap di sisi kiri.
Memasukkan
Mengambil string sebagai argumen.
Hasil
Mencetak tenda bergulir ke STDOUT. Lebar maks ~ 50 karakter. Mulai dengan 0 atau 1 karakter yang ditampilkan. Beberapa spasi antar huruf saat menggulir. Berhenti ketika diselesaikan (tidak memiliki ruang ekstra di antara karakter kata). Gulir lambat, tetapi tidak terlalu lambat (<1 per iterasi).
Contoh
Menjalankan skrip dengan arg 'Hello World'
H
kemudian
H e l l o W o
kemudian
H e l l o W o r l d
kemudian
Hell o W o r l d
akhirnya
Hello World
Untuk contoh yang sedang berjalan, coba kode saya dari tantangan "Hello World". Akhirnya saya akan memposting milik saya. Saat ini adalah 202 karakter di Perl. Sekarang ada beberapa pesaing, saya telah memposting milik saya di jawaban.
Pemenang
Saya tidak ingin pembatasan menjadi absolut, itu sebabnya saya meninggalkannya sedikit kabur. Naskah terpendek yang mengikuti semangat orisinal saya akan menang.
Catatan
Game ini mengasumsikan xterm
lingkungan. Jika lingkungan lain terbukti bermanfaat, hanya lingkungan yang serupa yang akan dibandingkan dan pemenang yang terpisah dapat dinyatakan untuk masing-masing
Adendum (25 April 2012)
Untuk mengatasi beberapa masalah pemula, saya membuat keputusan. Hitungan karakter Anda harus menyertakan kode yang diperlukan untuk:
- Flush STDOUT (Melihat Anda Ruby)
- Laksanakan
sleep
dengan penundaan waktu <1s (Melihat Anda Perl)
Ini dapat dilakukan ketika baris perintah beralih ke juru bahasa, tetapi karakter-karakter tersebut dihitung dalam total (tanpa spasi di sekitar).
xterm
,vt102
, ...?Jawaban:
python 2 - 146 karakter
sunting: menjadikannya fungsi alih-alih input melalui stdin. Argumen pertama adalah string, dan argumen kedua adalah panjang yang Anda inginkan. jadi doa akan menjadi
f('Hello World', 50)
. Saya juga membuatnya lebih halus; ketika setiap karakter 'mendarat' ada jeda canggungtua, 158 karakter:
sumber
f("Hello World, 40)
berhasil untuk saya.Ruby,
939189 karakterTeks yang akan ditampilkan harus diberikan sebagai argumen baris perintah, misalnya
untuk contoh yang ditunjukkan di atas. Sayangnya saya tidak dapat menampilkan animasi di sini, jadi Anda harus mencoba sendiri kodenya.
Versi sebelumnya:
sumber
STDOUT.sync=true;
sehingga autoflushes. The Equiv Perl adalah$|++
. Itu tambahan 17 karakter, tapi masih jauh di bawah milikku. Yah aku tidak bisa membiarkan Ruby mengalahkan Perl! Akan mulai bekerja. Bagusruby1.8 "Hello World"
saya dapat, tidak mengejutkan saya, ada kesalahan yang mengatakan:ruby1.8: No such file or directory -- Hello World (LoadError)
ruby foo.rb args
;-)C,
948380173 karakterEDIT: Menambahkan banyak kode, mengimplementasikan semua fungsi yang diminta sekarang. Konstanta
1e8
dapat diubah untuk mengontrol kecepatan. Di mesin saya, ini cukup cepat.Beberapa karakter pasti dapat disimpan di sini.
l
bisa statis (menyimpan inisialisasi),c
bisa menjadi pointer (gantib+c
).Versi lama (80 karakter), dengan fungsi sebagian:
Menyimpan beberapa karakter dengan mengganti
char**t
denganint*t
. Bekerja dengan baik dalam 32-bit (int**t
akan mendukung 64-bit).sumber
K&R C -
431416 karakterMenghormati standar sampai tingkat yang tinggi. Menggunakan ncurses sehingga sebagian besar terminal harus independen. Ada sedikit kegagapan ketika teks menyentuh sisi karena beberapa tipu muslihat dimainkan untuk mempertahankan spasi yang diinginkan dalam string.
String yang digunakan harus diteruskan sebagai argumen pertama pada baris perintah (dan harus diloloskan jika mengandung spasi, terlebih lagi jika berisi
!
string seperti yang saya uji (Hello, World!
) lakukan).Dalam bentuk yang lebih mudah dibaca dan dikomentari:
sumber
if
dengan operator. Misalnya -if((s-q)%2)s--;else usleep(1e5);
->s-q&1?s--:usleep(1e5);
(ataus-=s-q&1||usleep(1e5);
)' '
s dengan angka yang ekuivalen.x==32
denganx-32
(membalikkan makna, jadi balik jika-lain), atau denganx<33
( dengan asumsi 0..31 tidak pernah digunakan). Inisialisasi dengan nilai yang Anda miliki (for(curs_set(c=0);...
).*(s+1)
->s[1]
. Hapus kawat gigi yang tidak dibutuhkan (mengganti;
dengan,
akan membantu).Perl 5.13.2, 96
Mencuri banyak dari jawaban @ Kevin Reid , terutama
/r
trik yang tersedia di Perls yang lebih baru.Perl, 115
Seperti jawaban @ Joel Berger , ini akan menjadi jauh lebih pendek jika saya bisa menggunakan
sleep 1
dan lambat, atau meneruskan-MTime::HiRes=sleep
baris perintah untuk mengaktifkansleep.1
. Kalau tidak, satu-satunya cara built-in untuk tidur singkat adalahselect'','','',.1
yang cukup panjang.Perl, 128Perl, 133sumber
x
- masing dan bentuk blokmap
akan menghemat beberapa.JavaScript
180218 karakterVersi produksi:
Versi Tidak Serigala:
Ini Demo jsFiddle
Catatan: jika Anda mencoba mereproduksinya, pastikan kodenya di bawah tubuh
sumber
Perl 5.13.2, 115 karakter
/r
.Kredit:
$"
sebagai sumber" "
diambil dari jawaban ephemient , reduksi dengan 1 karakter.sumber
r
bendera, tambahan terbaik untuk bahasa sejakstate
pesta 234
Pemakaian:
ungolfed:
sumber
R, 319 karakter
Mengikuti filosofi contoh @Blazer (d adalah penundaan dalam detik):
Pemakaian:
sumber
Perl :
144133Untuk dapat tidur <1s meskipun Anda harus menjalankan sebagai:
Karena saya tidak akan menyatakan diri saya sebagai pemenang, saya tidak akan berdebat sendiri tentang apa yang diperhitungkan di sana atau tidak (tapi saya benar-benar tidak bisa membuat Ruby memenangkan ini ;-))
sumber
s/' '/$"/g
dans/shift/pop/
push
pernyataan itu. Saya hanya belum mempostingnya.Q, 145
Tidak persis memenuhi persyaratan karena baris terakhir menghapus semua spasi yang ada di string input asli.
Dibutuhkan dua argumen, string input dan kecepatan gulir
sumber
PowerShell, 135
Tidak terlalu bermain golf dan mungkin pendekatan yang mengerikan, tapi saya sakit dan tidak bisa berpikir ...
sumber
J (116)
Mengambil string input pada baris perintah, yaitu
jconsole marquee.ijs 'Hello, world!'
Jika tidak perlu menghapus layar, yaitu output seperti ini:
diizinkan, itu akan menjadi 12 karakter lebih pendek.
Penjelasan:
s.=>2{ARGV
: dapatkan string dari baris perintahk.=50,3#~<:#s
: jumlah awal spasi yang ditambahkan sebelum setiap karakter, 50 sebelum yang pertama dan 3 sebelum yang lainnya. (memberikan array, '50 3 3 3 ... ')([-=&0@/:@\:@~:&0)
: diberikan array, mengurangi item bukan nol pertama dalam array^:(i.>:+/k)
: fungsi ini diterapkan N kali, di mana N adalah 0 hingga jumlah jumlah spasi yang ditambahkan. (memberikan matriks:50 3 3 3; 49 3 3 3; 48 3 3 3; ... 0 0 0 1; 0 0 0 0)
."1
: jalankan fungsi berikut pada setiap baris matriks;@:(([,~#&' '@])@.>)
: tambahkan jumlah spasi yang diberikan sebelum setiap karakter dalam string(50&{.)
: ambil 50 karakter pertama dari string([[i.@]&2e7)
: fungsi yang menghasilkan daftar dari 0 hingga 2 * 10 ^ 7, dan kemudian membuangnya. Ini membutuhkan sekitar sepertiga detik di mesin saya, ini menyebabkan penundaan.((50#LF)&,)
: tambahkan 50 baris baru sebelum string, untuk menghapus layarecho
: output strings (...)
: berikan string sebagai argumen kiri ke fungsisumber
APL (70)
Mengambil input dari keyboard, hasilnya ada di
⎕SM
jendela (yang akan menjadi terminal jika Anda memiliki APL berbasis teks saya kira). Ukuran jendela terdeteksi secara otomatis, jika Anda benar-benar ingin menjadi 50 perubahan1↓⎕SD
untuk50
.Penjelasan:
1↓⎕SD,1↓3⍴⍨⍴D←⍞
: baca string dan simpan diD
. Hasilkan vektor yang menjelaskan berapa banyak spasi yang harus ditambahkan sebelum setiap karakter, yang merupakan lebar layar sebelum karakter pertama (1↓⎕SD
), dan 3 sebelum yang lain (1↓3⍴⍨⍴D
).⎕DL÷8
: tunggu 1/8 detikP←⍵-{⍵×~×⍺}\×⍵
: dalam vektor di argumen kanan, kurangi 1 dari item bukan nol paling kiri, dan simpan vektor baru di P.,/D{⍺,⍨⍵⍴⍕⍬}¨P
: untuk setiap karakter dalam D, awali jumlah spasi yang diberikan dalam P.⎕SM∘←1,⍨1,⍨
: tampilan di layar, di kolom paling kiri dari baris atas0∨.≠P:∇P
: jika ada elemen bukan nol di P, ulangi dengan P.sumber
PowerShell , 129 byte
Cobalah online!
Skrip ini tidak menghapus spasi dari argumen yang berbeda dengan skrip Joey .
TIO
tidak menampilkan output dengan benar. Dengan konsol Powershell, Anda mendapatkan garis gulir yang bergulir.sumber
05AB1E , 42 byte
Cobalah online (tanpa tidur). CATATAN: Saya tidak menginstal 05AB1E secara lokal, jadi saya tidak 100% yakin jika
\r
triknya berhasil (secara teori seharusnya berhasil). Dalam TIO,\r
mereka ditafsirkan sebagai baris baru. Juga, TIO menggunakan versi lama, karena.e
dinonaktifkan di versi TIO baru (programnya sama di versi legacy dan baru 05AB1E, meskipun).Penjelasan:
Lihat ini ujung 05AB1E saya (bagian Cara menggunakan kamus? ) Untuk memahami mengapa
“…¢('\r')“
adalah"print('\r')"
.sumber
Python, 139 byte
Harus menelepon
f('Hello World', 50)
untuk memulai.sumber