Latar Belakang
The echo
Program begitu rapi. Anda dapat mengatakan apa pun untuk itu, dan itu mengulangi kata-kata Anda dengan sempurna, setiap saat! Betapa kerennya itu! Yang mengecewakan, itu mengulangi input sekaligus, terlepas dari kecepatan mengetik Anda, yang tidak terlalu realistis. Kami harus memperbaikinya.
Tugas
Program Anda harus mengambil input dari STDIN atau yang setara terdekat. Ini akan membaca baris dari pengguna satu per satu, mungkin menampilkan beberapa prompt, sampai mereka memasukkan baris kosong. Setelah itu, ia harus mencetak garis ke STDOUT atau setara terdekat, dalam urutan yang sama seperti yang diberikan. Baris terakhir (kosong) tidak dicetak, dan baris tercetak terakhir tidak perlu memiliki baris tambahan.
Selain itu, program harus menjaga interval waktu di antara setiap baris: jika pengguna perlu waktu beberapa x
detik untuk memasukkan sebuah baris, program tersebut akan membutuhkan beberapa x
detik bagi program untuk mencetaknya. Ini berlaku untuk baris pertama dan terakhir juga; baris kosong tidak dicetak, tetapi program tetap menunggu sebelum mengakhiri.
Contoh
Berikut adalah contoh sesi dengan program ini. Semua tindakan yang tidak menghasilkan teks dijelaskan dalam tanda kurung, dan prompt (opsional) ditampilkan sebagai >
.
[begin program]
> fhtagn[enter; 1.48s passed since starting program]
> yum yum[enter; 3.33s passed since previous enter]
> so cool![enter; 2.24s passed since previous enter]
> [enter; 0.23s passed since previous enter]
[wait 1.48s]fhtagn
[wait 3.33s]yum yum
[wait 2.24s]so cool!
[wait 0.23s, then end program]
Tanpa tindakan, sesi terlihat seperti ini:
> fhtagn
> yum yum
> so cool!
>
fhtagn
yum yum
so cool!
Aturan dan Penilaian
Waktu tunggu harus akurat hingga dalam 0,01 detik (dalam praktiknya, jika rata-rata manusia tidak bisa membedakannya, Anda baik-baik saja). Hitungan byte terendah menang, dan celah standar tidak diizinkan. Jika bahasa Anda memiliki fungsi bawaan untuk tugas ini, Anda tidak dapat menggunakannya.
yum yum
, yang agak rumit.Jawaban:
CJam,
4541393634 byteIni tidak benar-benar masuk akal dalam penerjemah online, tetapi ini bekerja di penerjemah Java.
Itu tidak menampilkan prompt.
Penjelasan
sumber
JavaScript,
119112 byteBerharap untuk menemukan beberapa byte lagi untuk dipotong.
sumber
j=i=[]
(++
masih akan bekerja!) Juga, Andawhile
tidak perlu!=''
karena itu palsu! Sangat kecewa saya ketinggalanmap
! +1!=''
. Khawatir jika inputnya0
, tetapi tampaknya menangani itu baik-baik saja. Saya telah memperhatikan[]
kemungkinan kenaikan sebelumnya, tetapi saya telah konyol dan mencoba melakukannyaj++
. Melakukan++j
pekerjaan, karena[]++
ternyata 0 XD Terima kasih!do...while
loop di JSJavaScript, 120 byte
Tidak ada peluang untuk mendekati CJam dengan pendekatan ini, tetapi skrip yang mudah.
sumber
Pyth, 68 byte
Membuang banyak byte pada panggilan ke
sleep
, karena Pyth tidak memilikisleep
fungsi.sumber
Ruby, 74
Trik:
*a
pada baris pertama menginisialisasi array kosong. Saya bisa menggunakan$*
tetapi itu agak samar karena diisi dengan beberapa doa dan hanya menghemat satu byte.$/
adalah baris baru, dan$_
merupakan baris terakhir yang diambil olehgets
.Sunting: Tidur pada akhirnya menghabiskan 20 byte lebih, mungkin cara untuk menurunkannya
sumber
Time.now
cukup menelepon kali menggunakandef n;Time.now;end
, menyimpan seluruh 2 bytePython 3, 124
Hanya berfungsi pada platform Windows
Menyimpan input dan waktu dalam daftar terpisah harganya 3 byte lebih banyak . Mungkin bukan pendekatan terbaik.
Versi ramah Unix 129 byte, dengan kredit ke Mego :
sumber
time()
daripadaclock()
menyimpan 2 byte?SWI-Prolog, 185 byte
Mungkin ada banyak golf di sini tetapi ini akan dilakukan untuk saat ini ...
sumber
PowerShell,
26119012195 BytesAlat peraga untuk TessellatngHeckler dan tomkandy untuk bantuan dan inspirasi golf
Ini sangat mirip dalam konsep dengan versi 121-byte di bawah ini, kami hanya secara dinamis membuat dan membangun daftar objek, alih-alih melalui perulangan sementara untuk menyimpannya ke dalam array eksplisit
$a
. Dalam kedua kasus, daftar objek akan di-pipeline ke loop foreach yang sama|%{...}
. Pengindeksan ke pemilih-array-hasil($b=!$b+!$_)
kali ini diformulasikan untuk menghilangkanif($_){$_}
iterasi di bawah ini, yang menyimpan beberapa byte lagi.Sebelumnya, 121 Bytes
Diperluas dan dijelaskan:
Sebelumnya, 190 Bytes
Sebelumnya-er-er, 261 Bytes
Kata kerja suci, Batman! Mari kita jabarkan:
sumber
$a=1,1;while($a[-1]-ne""){$a+=Measure-Command{$b=read-host};$a+=$b};$i=2;while($i-lt$a.length){sleep -m $a[($i++)].totalmilliseconds;$a[($i++)]}
@
dari array itu, karena tidak diperlukan dalam konteks ini, jadi turun ke 121 .$($l=1;while($l){Measure-Command{$l=read-host};$l})|%{($_,(sleep -m($_.Ticks/1e4)))[($b=!$b+!$_)]}
- dan dengan perubahan toggle, sehingga ketika string kosong tidak beralih, dan tidur sebagai gantinya - 98do{...}while($l)
lingkaran dan jatuhkan$l=1;
untuk mendapatkan 95 )Perl 6, 70 karakter
Interpreter Perl 6 hanya mendefinisikan tiga variabel simbolik (tidak seperti kegilaan Perl 5). Tepatnya,
$/
,$!
, dan$_
. Program ini menggunakan semuanya, untuk menghindari biaya mendeklarasikan variabel yang digunakanmy
.get
membaca baris dari STDIN. Itu tidak mengandung baris baru, tidak seperti Perl 5.now
builtin mengembalikan waktu saat ini. Ketika dikurangi, itu memberikan interval yang dapat diteruskan ke string.Metode tanpa apa-apa di sebelah kiri itu (seperti
.push
dan.map
dalam kode ini) berfungsi$_
.Menggunakan
repeat while
loop (dikenal sebagaido while
dalam bahasa pemrograman lain), Perl 6 sedang menulis cap waktu saat ini$/
, dan mendorong baris yang diterima (yang juga menyimpannya$!
), dan perbedaan antara waktu saat ini dan cap waktu di$/
. Karena urutan parameter,now
tidak dihitung sampai garis diterima.The
while
Kondisi memeriksa apakah garis tidak kosong (di Perl 6,"0"
adalah nilai yang benar, tidak seperti Perl 5).Setelah saya mendapatkan semua cap waktu dan garis, saya hanya menyediakan mereka untuk
map
callback yang tidur sedikit dan mengatakan apa yang dikatakan.sumber
Groovy, 202 byte
Radikal.
Versi tidak disatukan:
sumber
JavaScript (ES6) 102
Menyatukan upaya Mwr247 dan Dom Hastings (CW)
sumber
MATLAB,
10799Dan ungolfed:
Ini tidak akan 100% akurat dalam penentuan waktu karena tidak memperhitungkan waktu yang diperlukan untuk menampilkan setiap string tetapi itu harus cukup cepat sehingga waktu-bijaksana itu harus cukup dekat.
Setelah meninjau kembali dengan cepat, saya telah menyimpan beberapa byte dengan menghapus array sel dalam lapisan ganda. Ternyata yang saya butuhkan adalah
;
untuk membuatnya berpisah dengan benar saat berkemas.sumber
Java, menggunakan versi 1.04 dari perpustakaan ini , 385 byte
sumber
Caché ObjectScript, 123 byte
Seperti biasa, ini mengasumsikan tabel simbol bersih sebelum dijalankan
d r
.Masalah ini tidak dapat diselesaikan dalam ANSI MUMPS, karena standar ANSI hanya memerlukan resolusi tingkat kedua untuk intrinsik waktu
$H[OROLOG]
. Untungnya, Intersystems Caché, yang saat ini merupakan platform terdepan di industri untuk MUMPS, menyediakan intrinsik yang ditentukan-implementasi$ZT[IME]S[TAMP]
, yang menyediakan resolusi tingkat mikrodetik.(Skor sebelumnya 105 byte, tetapi ada bug.)
sumber
C ++ 11,
343338 byteIngin melihat berapa banyak byte yang dibutuhkan oleh kode dalam c ++. Lebih banyak dari yang saya harapkan. Mungkin saya terlalu rumit solusinya.
Mari kita lihat apakah saya bisa mengurangi ini entah bagaimana.
sumber
#include
s dan tipe deklarasi untukmain
. Itu 7 byte - tidak banyak, tapi awal. Anda mungkin juga bisa menggunakanauto
daripadastring
untuks
.c
itu kita tidak perlu menentukannya. Saya mencoba pada awalnya untuk menggunakanauto s
... tetapi sepertinya itu dikonversi keconst char *
dan tidakstd::string
. Saya ingin tahu apakah saya dapat membuat alias untukwhile
.while
menggunakan#define
mungkin.Bash,
9190 byteIni menciptakan file sementara
t
. Ini akan menimpa file yang sudah ada dengan nama yang sama.Idenya sendiri cukup singkat, tetapi berurusan dengan karakter khusus dalam input menambah sekitar 15 byte ...
sumber
VBA,
233228bytesSaya yakin ini bisa bermain golf banyak. mereka tidak menentukan berapa banyak input jadi saya hard code panjang array saya karena lebih pendek
Redim preserve
.Input melalui popup, output
debug.print
karenamsgbox
menghasilkan MODAL dan menghentikan kode.Saya tidak tahu cara menguji apakah ini akurat untuk 0,01. Mungkin seseorang dapat menguji tetapi saya memberikan nomor tunggu perintah dengan cara yang HARUS menggunakan milidetik, Tapi VBA tidak dikenal untuk melakukan apa yang seharusnya.
Itu
If goto
mungkin dapat diganti dengan sebuah sumur golfedDo Loop While
.sumber
SmileBASIC, 122 byte
Saya pikir ini bisa dibuat sedikit lebih pendek.
sumber
C UNIX, 272 byte
Terperinci
sumber