Time-Sensitive Echo


38

Latar Belakang

The echoProgram 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 xdetik untuk memasukkan sebuah baris, program tersebut akan membutuhkan beberapa xdetik 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.


9
Langkah berikutnya: Golf program yang memainkan permainan ritme dasar: P
Sp3000

Bisakah kita mengabaikan waktu yang dibutuhkan program untuk menampilkan karakter? Maksud saya, jika saya dapat mengukur bahwa bahasa saya membutuhkan 0,1 detik untuk menghasilkan char, haruskah saya memperhitungkannya? Pengungkapan penuh, saya berencana untuk menggunakan waktu centang <> penerjemah 'untuk mengimplementasikan penundaan; dalam hal ini, bisakah saya memiliki loop yang melewati waktu input kemudian mengabaikan waktu yang telah berlalu oleh loop tampilan saya?
Aaron

1
@AaronGOUZIT Saya akan mengizinkannya, selama Anda konsisten: baik interval waktu antara saat-saat program Anda mulai mencetak garis semua diambil dari pengguna, ATAU waktu menunggu antara selesai mencetak garis dan mulai mencetak selanjutnya semua diambil dari pengguna.
Zgarb

1
@TessellatingHeckler Yang terakhir; lihat contoh sesi.
Zgarb

1
@ KritixiLithos Saya hanya menggunakan tangan kanan saya yum yum, yang agak rumit.
Zgarb

Jawaban:


15

CJam, 45 41 39 36 34 byte

{eslN1$}g;es](es-fm3/{){_es>}g;o}/

Ini tidak benar-benar masuk akal dalam penerjemah online, tetapi ini bekerja di penerjemah Java.

Itu tidak menampilkan prompt.

Penjelasan

{        e# Do while... (popping the condition from the stack)
  es     e#   Get the current timestamp.
  l      e#   Wait for a line to be entered and read it.
  N      e#   Push a linefeed.
  1$     e#   Copy the line we read - this terminates if the line is empty, because
         e#   empty strings/arrays are falsy.
}g
;        e# Discard the last linefeed (the one after the empty input).
es       e# Push the current timestamp (corresponding to the last, empty, input).
]        e# Wrap everything in an array. This is now a flat array containing:
         e#   - The initial timestamp.
         e#   - Three elements for each line: the line, a linefeed, the timestamp.
         e#   - Two elements for the last line: the empty string and the timestamp.
(        e# Pull off the initial time.
es-      e# Subtract the current time, which gives (minus) the difference between
         e# when a line was entered and when it should be printed back.
fm       e# This maps "minus that value" onto each element in the array. Now the lines
         e# and linefeeds are strings (arrays) - so minus is set difference, but they
         e# only contain characters, not any integers (like the difference value), so
         e# none of the strings will be affected.
         e# The timestamps on the other hand will be incremented by the time difference
         e# between reading and printing, giving the time at which each line should be
         e# printed back.
3/       e# Split the array into chunks of 3 (where the remaining two elements are
         e# just grouped as a pair).
{        e# For each of those chunks...
  )      e#   Pull off the timestamp.
  {      e#   Do while... (popping the condition from the stack)
    _    e#     Duplicate the target time.
    es>  e#     Check if it's still greater than the current time.
  }g
  ;o     e# Discard the target time and print the rest of the current chunk, which will
         e# automatically be flattened/concatenated into a single string.
}/

9

JavaScript, 119 112 byte

k=(d=Date.now)(i=j=[]);do{i[++j]=[prompt(),d()-k]}while(i[j][0]);i.map(a=>setTimeout(b=>console.log(a[0]),a[1]))

Berharap untuk menemukan beberapa byte lagi untuk dipotong.


1
Anda dapat menyimpan beberapa byte dengan j=i=[]( ++masih akan bekerja!) Juga, Anda whiletidak perlu !=''karena itu palsu! Sangat kecewa saya ketinggalan map! +1
Dom Hastings

1
Catatan bagus di !=''. Khawatir jika inputnya 0, tetapi tampaknya menangani itu baik-baik saja. Saya telah memperhatikan []kemungkinan kenaikan sebelumnya, tetapi saya telah konyol dan mencoba melakukannya j++. Melakukan ++jpekerjaan, karena []++ternyata 0 XD Terima kasih!
Mwr247

1
Tandai ini pada hari ketika saya mengetahui bahwa ada do...whileloop di JS
Conor O'Brien

6

JavaScript, 120 byte

Tidak ada peluang untuk mendekati CJam dengan pendekatan ini, tetapi skrip yang mudah.

a=[];t=+new Date;while(s=prompt()){a.push({s:s,t:+new Date})}while(v=a.pop()){setTimeout(`console.log('${v.s}')`,v.t-t)}

1
Sepertinya kita berdua pergi untuk JS pada saat yang sama haha, meskipun kamu punya milikmu sedikit sebelum milikku. Tetap saja pendekatannya berbeda.
Mwr247

@ Mwr247 Memang, milikmu lebih elegan!
Dom Hastings

6

Pyth, 68 byte

M&p+Gb$__import__('time').sleep(H)$J].dZWeaYwaJ.dZ)aJ.dZp&gVPY-VtJJk

Membuang banyak byte pada panggilan ke sleep, karena Pyth tidak memiliki sleepfungsi.


3
Mungkin Anda harus menyarankan itu sebagai tambahan untuk Pyth.
mbomb007

Saya yakin Anda memiliki kesalahan satu-per-satu dalam menunggu. Cobalah memulai program, menunggu, lalu mengetik sesuatu dan tekan enter dua kali dengan cepat. Ini akan segera mencetak baris pertama, lalu menunggu beberapa saat sebelum mengakhiri.
FryAmTheEggman

6

Ruby, 74

t,*a=Time.now
a<<[$_,t-t=Time.now]while$/<gets
a.map{|l,i|sleep -i;puts l}

Trik: *apada 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 oleh gets.

Sunting: Tidur pada akhirnya menghabiskan 20 byte lebih, mungkin cara untuk menurunkannya

t,*a=Time.now
a<<[$_,t-t=Time.now]while$/<gets
t-=Time.now
a.map{|l,i|sleep -i;puts l}
sleep -t

Saya pikir Anda perlu tidur di baris terakhir, tergantung pada berapa lama pengguna untuk memberikan baris kosong.
Konrad Borowski

Untuk tidur di akhir (solusi 2), Anda Time.nowcukup menelepon kali menggunakan def n;Time.now;end, menyimpan seluruh 2 byte
Nilai Tinta

6

Python 3, 124

Hanya berfungsi pada platform Windows

from time import*
s=[(1,clock())]
while s[-1][0]:s+=[(input(),clock()-s[-1][1])]
[sleep(y)or x and print(x)for x,y in s[1:]]

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 :

from time import*
t=time
s=[(1,t())]
while s[-1][0]:s+=[(input(),t(),t()-s[-1][1])]
[sleep(y)or x and print(x)for x,z,y in s[1:]]

Tidak bisakah Anda menggunakan time()daripada clock()menyimpan 2 byte?
kirbyfan64sos

4

SWI-Prolog, 185 byte

a:-b([],S),reverse(S,T),c(T),!.
b(R,S):-get_time(X),read_string(user_input,"\n","",_,A),get_time(Y),Z is Y-X,(A="",S=[A:Z|R];b([A:Z|R],S)).
c([A:Z|T]):-sleep(Z),T=[];(write(A),nl,c(T)).

Mungkin ada banyak golf di sini tetapi ini akan dilakukan untuk saat ini ...


4

PowerShell, 261 190 121 95 Bytes

$(do{Measure-Command{$l=read-host};$l}while($l))|%{($_,(sleep -m($_.Ticks/1e4)))[($b=!$b+!$_)]}

Alat 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 menghilangkan if($_){$_}iterasi di bawah ini, yang menyimpan beberapa byte lagi.


Sebelumnya, 121 Bytes

$l,$a=1,@();while($l){$t=Measure-Command{$l=read-host};$a+=$t,$l}$a|%{($(if($_){$_}),(sleep -m($_.Ticks/1e4)))[($b=!$b)]}

Diperluas dan dijelaskan:

$l,$a=1,@()                        # Set variable $l and create array $a
while($l){                         # So long as we don't have a blank line
  $t=Measure-Command{$l=read-host} # Read the input and measure time to input
  $a+=$t,$l                        # Add those values into the array
}
$a|%{                              # For each item in $a, do
  ($(if($_){$_}),(sleep -m($_.Ticks/1e4)))[($b=!$b)]
  # Magic happens here ... first, we set $b to the NOT of it's uninitialized
  # value, so $b is initially set to truthy
  # This value in [...] selects which of the two elements ( , ) get selected
  # Truthy to start means the second command, sleep, gets chosen first, and
  # then it alternates every next item, so it sleeps, then prints, then
  # sleeps, then prints, etc., until we run out of $a
}

Sebelumnya, 190 Bytes

function f {param($m)sleep -m $a[$m].totalmilliseconds}$a=1,1;while($a[-1]-ne""){$a+=Measure-Command{$b=read-host};$a+=$b}if(!($a[3])){f 2;exit}$i=2;while($i-lt$a.length){f($i++);$a[($i++)]}

function f {                        # Define a new function
  param($m)                         # with $m as input
  sleep -m $a[$m].totalmilliseconds # sleep for $a[$m] milliseconds
}
$a=1,1                              # Create new array with two elements
while($a[-1]-ne""){                 # While the last element isn't empty
  $a+=Measure-Command{$b=read-host} # Read into $b and measure how long that took,
                                    # and add the time into $a
  $a+=$b                            # Then add the input into $a
}
if(!($a[3])){                       # If the third element is empty, the user entered
                                    # a blank as the only input, so...
  f 2                               # sleep for $a[2] ms (how long it took them to hit enter)...
  exit                              # and exit the script
}                                   # Else ...
$i=2                                # Set a counter variable
while($i-lt$a.length){              # While we haven't reached the end of $a
  f($i++)                           # Sleep
  $a[($i++)]                        # Write the output
}

Sebelumnya-er-er, 261 Bytes

$a=$d=@();$d+=,@(date);$x=Read-Host
while($x){$a+=,@($x);$d+=,@(date);$x=Read-Host}
if($x){0..($a.Length-1)|%{sleep -m((($d[$_+1]).ticks-($d[$_]).ticks)/1e4);$a[$_]};sleep -m((($d[-1]).ticks-($d[-2]).ticks)/1e4)}
else{sleep -m(((date).Ticks-($d[0]).Ticks)/1e4)}

Kata kerja suci, Batman! Mari kita jabarkan:

$a=$d=@()                  # Create two empty arrays
$d+=,@(date)               # Add the current time into $d
$x=Read-Host               # Read the first line
while($x){                 # So long as it's not empty
  $a+=,@($x)               # Add it into our output array
  $d+=,@(date)             # Add the current time into $d
  $x=Read-Host             # Get the next line
}
if($a){                    # So long as $a exists (i.e., the first input wasn't blank)
  0..($a.Length-1)|%{      # For-loop over the length
                           # Sleep for how long it took to do input
    sleep -m((($d[$_+1]).ticks-($d[$_]).ticks)/1e4)
    $a[$_]                 # Print out the input
  }
                           # Sleep the length it took for the final blank
  sleep -m((($d[-1]).ticks-($d[-2]).ticks)/1e4)
}
else{
                           # If we're here, the initial input was blank, so just sleep
  sleep -m(((date).Ticks-($d[0]).Ticks)/1e4)
}

144$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++)]}
tomkandy

@tomkandy Terima kasih! Diperbarui dengan perbaikan.
AdmBorkBork

@TessellatingHeckler Luar Biasa! Saya berjuang dengan cara untuk mengendalikan bolak-balik secara efektif, dan mengindeks ke dalam array seperti itu adalah pilihan yang jelas sekarang saya melihatnya. Kebetulan, saya golf byte lain dengan menghapus @dari array itu, karena tidak diperlukan dalam konteks ini, jadi turun ke 121 .
AdmBorkBork

@ TimmyD apa yang saya coba untuk kemarin adalah untuk menempatkan ($ t, $ l) pasangan ke dalam $ a membuat array bersarang. Saya tidak bisa membuatnya bekerja, tetapi hari ini saya bisa dan itu sedikit membantu karena tidak perlu beralih, cukup baca setiap pasangan dan gunakan. Kemudian saya menyadari - kami memiliki pipa yang sangat bagus yang dapat mengantri, mengapa menyimpan array? $($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 - 98
TessellatingHeckler

(Buat do{...}while($l)lingkaran dan jatuhkan $l=1;untuk mendapatkan 95 )
TessellatingHeckler

3

Perl 6, 70 karakter

repeat {$/=now;.push($!=get,now -$/)}while $!;.map:{sleep $^b;say $^a}

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 digunakan my.

getmembaca baris dari STDIN. Itu tidak mengandung baris baru, tidak seperti Perl 5.

nowbuiltin mengembalikan waktu saat ini. Ketika dikurangi, itu memberikan interval yang dapat diteruskan ke string.

Metode tanpa apa-apa di sebelah kiri itu (seperti .pushdan .mapdalam kode ini) berfungsi $_.

Menggunakan repeat whileloop (dikenal sebagai do whiledalam 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 whileKondisi 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 mapcallback yang tidur sedikit dan mengatakan apa yang dikatakan.


2

Groovy, 202 byte

def b={System.currentTimeMillis()};def h=[];for(;;){def t=b();def s=System.console().readLine();h.add(s+" "+(b()-t));if(s=="")break};for(def s:h){Thread.sleep((s=s.split(" "))[1].toLong());println s[0]}

Radikal.

Versi tidak disatukan:

def b = {System.currentTimeMillis()}; // Creates a closure (short function) b that returns the current time since the epoch in milliseconds.
def h = []; // Makes an empty list
for(;;) { // Infinite loop
  def t = b(); // Get the time
  def s = System.console().readLine(); // Read a line
  h.add(s + " " + b()-t); // Add the string plus the amount of time elapsed to the list
  if(s=="") // If the string is blank
    break; // Exit loop
}
for(def s : h) { // Iterate through array
  Thread.sleep((s=s.split(" "))[1].toLong()); // Splits s into an array and puts the value in s, then takes the second element (the time), converts into a long and sleeps for that time.
  println s[0] // Print the first element (text)
}

2

JavaScript (ES6) 102

Menyatukan upaya Mwr247 dan Dom Hastings (CW)

/* for TEST */ console.log=x=>O.innerHTML+=x+'\n'

for(k=new Date,i=[];p=prompt();i.push([p,new Date]));i.map(a=>setTimeout(b=>console.log(a[0]),a[1]-k))
<pre id=O></pre>


2

MATLAB, 107 99

tic;a={};i=1;while nnz(i);i=input('','s');a=[a;{i,toc}];tic;end;for b=a';pause(b{2});disp(b{1});end

Dan ungolfed:

tic; %Start timer
a={};
i=1; %Make us enter the while loop
while nnz(i); %While i has some non-zero elements (this is used to detect a zero length input where we end)
    i=input('','s'); %Get an input string
    a=[a;{i,toc}]; %Append the string and current time as a new cell in a
    tic; %Restart timer
end
for b=a' %For each input
    pause(b{2}); %Wait for the required time
    disp(b{1}); %Then print the string
end

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.


1
Mungkin Anda bisa membuat versi yang bermain golf di MATL.
ckjbgames

1

Java, menggunakan versi 1.04 dari perpustakaan ini , 385 byte

import sj224.lib.util.*;import java.util.*;class E{static long t(){return System.currentTimeMillis();}public static void main(String[]a) throws Exception{List<Pair<?,Long>>l=new ArrayList();Scanner i=new Scanner(System.in);while(true){long t=t();String s=i.nextLine();if(s.isEmpty())break;l.add(new Pair(s,t()-t));}for(Pair<?,Long>p:l){Thread.sleep(p.two);System.out.println(p.one);}}}

1

Caché ObjectScript, 123 byte

w() q $P($ZTS,",",2)
r f  s i=i+1,t=$$w() r x,! q:x=""  s g(i,x)=$$w()-t
    f i=1:1 s s=$O(g(i,"")) q:s=""  w s,! h g(i,s)
    q

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.)


1

C ++ 11, 343 338 byte

Ingin melihat berapa banyak byte yang dibutuhkan oleh kode dalam c ++. Lebih banyak dari yang saya harapkan. Mungkin saya terlalu rumit solusinya.

#include<iostream>
#include<vector>
#include<chrono>
int i;using namespace std;int main(){auto n=chrono::system_clock::now;auto t=n();string s{1};vector<string>r;vector<decltype(t-t)>w;while(s.size())getline(cin,s),r.push_back(s),w.push_back(n()-t),t=n();while(i<r.size()){while((n()-t)<w[i]);t=n();cout<<r[i++]<<(i<r.size()-1?"\n":0);}}  

Mari kita lihat apakah saya bisa mengurangi ini entah bagaimana.


Anda dapat menghapus spasi di #includes dan tipe deklarasi untuk main. Itu 7 byte - tidak banyak, tapi awal. Anda mungkin juga bisa menggunakan autodaripada stringuntuk s.
Alex A.

Terima kasih untuk umpan baliknya. Saya akan menyimpan jenis kembali untuk utama. Jika saya ingat dengan benar, hanya untuk citu kita tidak perlu menentukannya. Saya mencoba pada awalnya untuk menggunakan auto s... tetapi sepertinya itu dikonversi ke const char *dan tidak std::string. Saya ingin tahu apakah saya dapat membuat alias untuk while.
wendelbsilva

Menghapus tipe pengembalian berfungsi untuk C ++ meskipun "tidak seharusnya" sesuai standar. Anda dapat mencoba membuat alias untuk whilemenggunakan #definemungkin.
Alex A.

1

Bash, 91 90 byte

while r=`\time -fsleep\ %e head -1`
[[ $r ]]
do printf{,\ %%b\ %q\;} "$r
"
done>t 2>&1
. t

Ini 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 ...


1

VBA, 233 228bytes

Saya 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.printkarena msgboxmenghasilkan 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 golfed Do Loop While.

Sub a()
Dim k(99) As String
Dim h(99) As Date
b:
t=Now()
i=i+1
k(i)=InputBox("")
h(i)=Now()-t
If k(i)<>"" Then GoTo b
For u=1 To i
Application.Wait (Now()+(Format(h(u),"s")&Format(h(u),"ms"))/10^8)
Debug.Print k(u)
Next
End Sub

Tidak akan berfungsi di Access VBA, karena akses tidak memiliki perintah tunggu karena Microsoft membenci konsistensi


0

SmileBASIC, 122 byte

DIM A$[0],T[0]@L
C=MAINCNT
LINPUT S$PUSH A$,S$PUSH T,MAINCNT-C
IF""<S$GOTO@L@P
WAIT SHIFT(T)IF""<A$[0]THEN?SHIFT(A$)GOTO@P

Saya pikir ini bisa dibuat sedikit lebih pendek.


0

C UNIX, 272 byte

#include <stdio.h>
#include <unistd.h>
#define P printf
i;r;c;main(){char*L[99]={0};size_t s;long T[99]={0};while(1){P(">  ");T[c]=time(0);r=getline(&L[c],&s,stdin);T[c]=time(0)-T[c];if(r==-1|!(*L[c]-10))break;c++;}while(i<c){P("> ");usleep(T[i]*1000);P("%s", L[i]);i++;}}

Terperinci

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    int i = 0, c = 0, r;
    char * L[99] = {0};
    size_t size;
    long T[99] = {0L};

    while(1)
    {
        printf("> ");
        T[c] = time(0);
        r = getline(&L[c], &size, stdin);
        T[c] = time(0) - T[c];
        if(r == (-1)) break;
        if(*L[c]=='\0' || *L[c]=='\n') break;
        c = c + 1;
    }

    while(i < c)
    {
        printf(" %ld > ",T[i]);
        usleep(T[i]*1000);
        printf("%s", L[i]);
        i = i + 1;
    }

    return 0;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.