टाइम-सेंसिटिव इको


38

पृष्ठभूमि

echoकार्यक्रम इतना साफ है। आप इसे कुछ भी कह सकते हैं, और यह आपके शब्दों को हर बार, पूरी तरह से दोहराता है! कितना मजेदार था वो! निराशाजनक रूप से, यह आपकी टाइपिंग गति की परवाह किए बिना, एक ही बार में सभी इनपुट को दोहराता है, जो बहुत यथार्थवादी नहीं है। हमें इसे ठीक करना होगा।

काम

आपका कार्यक्रम STDIN या निकटतम समकक्ष से इसका इनपुट लेगा। यह उपयोगकर्ता द्वारा एक-एक करके लाइनें पढ़ सकता है, संभवत: कुछ संकेत दिखा रहा है, जब तक कि वे एक खाली लाइन दर्ज नहीं करते हैं। उसके बाद, यह एसटीडीयूएसटी या निकटतम समतुल्य लाइनों को उसी क्रम में प्रिंट करेगा, जैसा कि उन्हें दिया गया था। अंतिम (खाली) लाइन मुद्रित नहीं है, और अंतिम मुद्रित लाइन के लिए एक अनुगामी न्यूलाइन की आवश्यकता नहीं है।

इसके अतिरिक्त, कार्यक्रम प्रत्येक पंक्ति के बीच समय अंतराल को संरक्षित करेगा: यदि उपयोगकर्ता xको एक पंक्ति में प्रवेश करने में सेकंड लगते हैं, तो xप्रोग्राम को इसे प्रिंट करने के लिए सेकंड लगेगा । यह पहली और आखिरी लाइनों पर भी लागू होता है; खाली लाइन मुद्रित नहीं है, लेकिन कार्यक्रम समाप्त होने से पहले वैसे भी इंतजार करता है।

उदाहरण

यहां कार्यक्रम के साथ एक उदाहरण सत्र है। सभी क्रियाएँ जो पाठ का उत्पादन नहीं करती हैं उन्हें कोष्ठक में वर्णित किया गया है, और (वैकल्पिक) संकेत के रूप में प्रदर्शित किया गया है >

[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]

क्रियाओं के बिना, सत्र इस तरह दिखता है:

> fhtagn
> yum yum
> so cool!
> 
fhtagn
yum yum
so cool!

नियम और स्कोरिंग

प्रतीक्षा समय 0.01 सेकंड के भीतर सटीक होना चाहिए (व्यवहार में, यदि औसत मानव अंतर नहीं बता सकता है, तो आप ठीक हैं)। सबसे कम बाइट गिनती जीतता है, और मानक खामियों को रोक दिया जाता है। यदि आपकी भाषा में इस कार्य के लिए बिल्ट-इन फ़ंक्शन है, तो आप इसका उपयोग नहीं कर सकते हैं।


9
अगला कदम: गोल्फ एक ऐसा कार्यक्रम है जो एक मूल लय का खेल खेलता है: P
Sp3000

क्या हम प्रोग्राम को आउटपुट कैरेक्टर में लगने वाले समय की अवहेलना कर सकते हैं? मेरा मतलब है, अगर मैं यह माप सकता हूं कि मेरी भाषा को एक आउटपुट के लिए 0.1 सेकंड लगते हैं, तो क्या मुझे इसे ध्यान में रखना चाहिए? पूर्ण प्रकटीकरण, मैं देरी का कार्यान्वयन करने के लिए> <> दुभाषियों के टिक समय का उपयोग करने की योजना बना रहा हूं; इस मामले में, क्या मेरे पास इनपुट समय को समाप्त करने वाला एक लूप हो सकता है जो मेरे डिस्प्ले लूप द्वारा समाप्त हुए समय की उपेक्षा करता है?
आरोन

1
@AaronGOUZIT, जब तक आप सुसंगत हैं, तब तक मैं इसकी अनुमति दूंगा: या तो आपके प्रोग्राम को प्रिंट करने के लिए शुरू होने वाले क्षणों के बीच का समय अंतराल सभी एक उपयोगकर्ता से लिया जाता है, या एक लाइन को प्रिंट करने और प्रिंट करने की शुरुआत के बीच की प्रतीक्षा समय। अगले सभी उपयोगकर्ता से लिए गए हैं।
ज़गरब

1
@TellellatingHeckler बाद वाला; उदाहरण सत्र देखें।
जर्बद

1
@KritiiLithos मैंने केवल अपने दाहिने हाथ का उपयोग किया yum yum, जो कि बोझिल था।
जर्ग्बर्ट

जवाबों:


15

CJam, 45 41 39 36 34 बाइट्स

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

यह वास्तव में ऑनलाइन दुभाषिया की समझ में नहीं आता है, लेकिन यह जावा दुभाषिया में काम करता है।

यह एक संकेत प्रदर्शित नहीं करता है।

व्याख्या

{        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

जावास्क्रिप्ट, 119 112 बाइट्स

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

बाहर काटने के लिए कुछ और बाइट्स खोजने की उम्मीद है।


1
आप के साथ कुछ बाइट्स बचा सकता है j=i=[]( ++अभी भी काम करेगा!) भी, आपकी whileज़रूरत नहीं है !=''क्योंकि यह मिथ्या है! इतना निराश मैं चूक गया map! +1
डोम हेस्टिंग्स

1
पर अच्छा ध्यान दें !=''। यदि इनपुट होता तो चिंतित था 0, लेकिन लगता है कि यह ठीक है। मैंने पहले भी []वृद्धि की संभावना पर ध्यान दिया था , लेकिन मैं मूर्खतापूर्ण था और इसके j++साथ करने की कोशिश की । ++jकाम कर रहा है, क्योंकि []++जाहिरा तौर पर 0 XD धन्यवाद है!
15:24 पर Mwr247

1
इस दिन को चिह्नित करें जो मैंने सीखा है कि do...whileजेएस में लूप थे
कॉनर ओ'ब्रायन

6

जावास्क्रिप्ट, 120 बाइट्स

इस दृष्टिकोण के साथ सीजेएम के पास होने का कोई मौका नहीं है, लेकिन एक सीधी पटकथा।

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
लगता है कि हम दोनों एक ही समय में जेएस के लिए चले गए, हालांकि आप मेरा कुछ समय पहले आपका हो गया। फिर भी, विभिन्न दृष्टिकोण।
Mwr247

@ Mwr247 वास्तव में, तुम्हारा हालांकि अधिक सुरुचिपूर्ण है!
डोम हेस्टिंग्स

6

पायथ, 68 बाइट्स

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

कॉल पर बहुत सारे बाइट बर्बाद कर दिए sleep, क्योंकि पायथ का कोई sleepकार्य नहीं है।


3
शायद आपको यह सुझाव देना चाहिए कि पायथ के अतिरिक्त।
mbomb007

मेरा मानना ​​है कि प्रतीक्षा में आपके पास एक-एक त्रुटि है। कार्यक्रम शुरू करने का प्रयास करें, चारों ओर प्रतीक्षा करें, फिर कुछ टाइप करें और दो बार तेजी से दर्ज करें दबाएं। यह तुरंत पहली पंक्ति को प्रिंट करेगा, फिर समाप्त करने से पहले थोड़ी देर प्रतीक्षा करें।
फ्राईअमईएग्गमैन

6

रूबी, 74

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

ट्रिक्स: *aपहली पंक्ति में एक खाली सरणी को जन्म देती है। मैं $*इसके बजाय उपयोग कर सकता था, लेकिन यह थोड़े से स्केच के साथ है क्योंकि यह कुछ आह्वान के साथ आबाद है और केवल मुझे एक बाइट बचाता है। $/एक नई $_रेखा है , और द्वारा प्राप्त अंतिम पंक्ति है gets

संपादित करें: अंत में सोते हुए 20 और बाइट्स खर्च होते हैं, शायद यह नीचे गोल्फ करने का एक तरीका है

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

मुझे लगता है कि आपको अंतिम पंक्ति पर सोने की आवश्यकता है, यह निर्भर करता है कि उपयोगकर्ता को एक खाली लाइन प्रदान करने में कितना समय लगा।
कोनराड बोरोस्की

अंत में सोने के लिए (समाधान 2), आप Time.nowपर्याप्त बार कॉल करते हैं कि उपयोग करते हुए def n;Time.now;end, पूरे 2 बाइट्स को बचाते हुए
वैल्यू इंक

6

पायथन 3, 124

केवल विंडोज प्लेटफॉर्म पर काम करता है

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:]]

अलग-अलग सूचियों में इनपुट और समय को ध्यान में रखते हुए मुझे 3 और बाइट्स खर्च करने पड़े । शायद सबसे अच्छा तरीका नहीं।

मीगो को क्रेडिट के साथ 129 बाइट यूनिक्स फ्रेंडली संस्करण :

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:]]

क्या आप 2 बाइट बचाने time()के clock()लिए उपयोग नहीं कर सकते ?
kirbyfan64sos

4

एसडब्ल्यूआई-प्रोलॉग, 185 बाइट्स

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

यहाँ गोल्फ के लिए बहुत कुछ है लेकिन अभी के लिए यह करना होगा ...


4

पॉवरशेल, 261 190 121 95 बाइट्स

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

गोल्फिंग सहायता और प्रेरणा के लिए TessellatngHeckler और tomkandy को सहारा

यह नीचे दिए गए 121-बाइट संस्करण की अवधारणा के समान है, हम स्पष्ट रूप से स्टोर करने के लिए गतिशील लूप के माध्यम से जाने के बजाय गतिशील रूप से वस्तुओं की एक सूची बना और बना रहे हैं $a। दोनों मामलों में, वस्तुओं की सूची एक ही फॉरेस्ट लूप में पाईपलाइज़ हो जाती है |%{...}। परिणाम-सरणी-चयनकर्ता में अनुक्रमण ($b=!$b+!$_)इस बार if($_){$_}नीचे दिए गए पुनरावृत्तियों को समाप्त करने के लिए तैयार किया गया है, जो कुछ और बाइट्स को बचाता है।


पिछला, 121 बाइट्स

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

विस्तार और समझाया:

$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
}

पिछला-एर, 190 बाइट्स

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
}

पिछला-एर-एर, 261 बाइट्स

$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)}

पवित्र वाचालता, बैटमैन! चलो इसे तोड़ दो:

$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 धन्यवाद! सुधार के साथ अपडेट किया गया।
AdmBorkBork 20

@TellellatingHeckler बहुत बढ़िया! मैं बारी-बारी से प्रभावी ढंग से नियंत्रण करने के तरीके से जूझ रहा था, और एक सरणी में अनुक्रमण कर रहा था जैसे कि अब यह स्पष्ट विकल्प है कि मैं इसे देखता हूं। संयोग से, मैंने @उस सरणी से हटाकर एक और बाइट को गोल्फ में डाला , क्योंकि इस संदर्भ में इसकी आवश्यकता नहीं है, इसलिए 121 से नीचे ।
AdmBorkBork

@TimmyD कल के लिए जो मैं कोशिश कर रहा था वह था ($ t, $ l) जोड़े को $ में नेस्टेड एरे बनाकर। मैं इसे काम नहीं कर सका, लेकिन आज मैं कर सकता था और यह थोड़ा मदद करता है क्योंकि टॉगल करने की कोई आवश्यकता नहीं है, बस हर जोड़ी को पढ़ें और उनका उपयोग करें। तब मुझे एहसास हुआ - हमारे पास एक पूरी तरह से अच्छी पाइपलाइन है जो चीजों को पंक्तिबद्ध कर सकती है, एक सरणी को बिल्कुल क्यों रखें? $($l=1;while($l){Measure-Command{$l=read-host};$l})|%{($_,(sleep -m($_.Ticks/1e4)))[($b=!$b+!$_)]}- और टॉगल में बदलाव के साथ, ताकि जब स्ट्रिंग खाली हो तो यह टॉगल न हो, और इसके बजाय सो जाए - 98
TessellatingHeckler

(इसे do{...}while($l)लूप बनाएं और 95$l=1; पाने के लिए ड्रॉप करें )
TessellatingHeckler

3

पर्ल 6, 70 अक्षर

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

पर्ल 6 दुभाषिया केवल तीन प्रतीकात्मक चर (पर्ल 5 के पागलपन के विपरीत) को परिभाषित करता है। सटीक, होना करने के लिए $/, $!और $_। यह कार्यक्रम उन सभी का उपयोग करता है, जिनके उपयोग से चर घोषित करने की लागत से बचने के लिए my

getSTDIN की एक पंक्ति पढ़ता है। इसमें पर्ल 5 के विपरीत एक नई रेखा नहीं है।

nowबिल्ट वर्तमान समय देता है। जब घटाया जाता है, तो यह एक अंतराल देता है जिसे एक स्ट्रिंग में पारित किया जा सकता है।

इसके बाईं ओर ( .pushऔर .mapइस कोड में) कुछ नहीं के साथ एक विधि पर काम करता है $_

repeat whileलूप का उपयोग करना ( do whileअन्य प्रोग्रामिंग भाषाओं में जाना जाता है), पर्ल 6 वर्तमान टाइमस्टैम्प को लिख रहा है $/, और प्राप्त लाइन (जो इसे स्टोर भी करता है $!) को धक्का देता है , और वर्तमान समय और टाइमस्टैम्प के बीच अंतर $/। पैरामीटर ऑर्डर के कारण, nowएक लाइन प्राप्त होने तक गणना नहीं की जाती है।

whileहालत जांच करता है कि लाइन खाली नहीं है (पर्ल 6 में, "0"एक सही मूल्य, पर्ल 5 के विपरीत है)।

जब मुझे सभी टाइमस्टैम्प और लाइनें मिल जाती हैं, तो मैं उन्हें mapकॉलबैक प्रदान करता हूं जो थोड़ा सोता है और कहता है कि क्या कहा गया था।


2

ग्रूवी, 202 बाइट्स

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]}

कट्टरपंथी।

Ungolfed संस्करण:

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

जावास्क्रिप्ट (ईएस 6) 102

Mwr247 और डोम हेस्टिंग्स (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

और अपुष्ट:

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

यह समय में 100% सटीक नहीं होगा क्योंकि इसमें प्रत्येक स्ट्रिंग को प्रदर्शित करने में लगने वाले समय का हिसाब नहीं है, लेकिन यह बहुत जल्दी होना चाहिए इसलिए समय-वार यह बहुत करीब होना चाहिए।


त्वरित पुनरावृत्ति के बाद, मैंने डबल लेयर डीप सेल ऐरे को हटाकर कुछ बाइट्स बचाए हैं। ;पैकिंग के समय सही ढंग से विभाजित होने के लिए मुझे इसकी आवश्यकता थी ।


1
हो सकता है कि आप एक ऐसा संस्करण बना सकते हैं जो MATL में गोल्फ हो।
ckjbgames

1

जावा, इस पुस्तकालय के संस्करण 1.04 का उपयोग करते हुए , 385 बाइट्स

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

कैच ऑब्जेक्टस्क्रिप्ट, 123 बाइट्स

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

हमेशा की तरह, यह चलने से पहले एक साफ प्रतीक तालिका मानता है d r

यह समस्या ANSI MUMPS में हल नहीं की जा सकती है, क्योंकि ANSI मानक के लिए केवल आंतरिक समय के लिए दूसरे स्तर के समाधान की आवश्यकता होती है $H[OROLOG]। सौभाग्य से, Intersystems Caché, जो वर्तमान में MUMPS के लिए उद्योग-अग्रणी मंच है, कार्यान्वयन-परिभाषित $ZT[IME]S[TAMP]आंतरिक प्रदान करता है, जो माइक्रोसेकंड-स्तरीय रिज़ॉल्यूशन प्रदान करता है।

(स्कोर पहले 105 बाइट्स था, लेकिन एक बग था।)


1

सी ++ 11, 343 338 बाइट्स

देखना चाहता था कि c ++ में कितने बाइट्स के लिए एक कोड की आवश्यकता होगी। मेरी अपेक्षा से बहुत अधिक। शायद मैं समाधान को जटिल कर दूं।

#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);}}  

देखते हैं कि क्या मैं इसे किसी तरह कम कर सकता हूं।


आप #includes में रिक्त स्थान और प्रकार के लिए घोषणा को हटा सकते हैं main। यह 7 बाइट्स है - ज्यादा नहीं, लेकिन एक शुरुआत। तुम भी उपयोग करने के लिए सक्षम हो सकता है autoबजाय stringके लिए s
एलेक्स ए।

प्रतिक्रिया के लिए धन्यवाद। मैं मुख्य के लिए वापसी प्रकार रखूंगा। अगर मुझे सही तरीके से याद है, तो केवल इसके लिए cहमें इसे निर्दिष्ट करने की आवश्यकता नहीं है। मैंने शुरू में उपयोग करने की कोशिश की auto s... लेकिन ऐसा लगता है कि यह परिवर्तित हो गया है const char *और नहीं std::string। मुझे आश्चर्य है कि क्या मैं इसके लिए एक उपनाम बना सकता हूं while
वेंडेलबसेल्वा

भले ही यह मानक के अनुसार "नहीं" होना चाहिए, सी + + के लिए रिटर्न प्रकार को हटाता है। आप एक whileका उपयोग करने के लिए एक उपनाम बनाने की कोशिश कर सकते हैं #define
एलेक्स ए।

1

बैश, 91 90 बाइट्स

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

यह एक अस्थायी फ़ाइल बनाता है tयह एक मौजूदा फ़ाइल को उसी नाम से अधिलेखित करेगा।

यह विचार अपने आप में बहुत छोटा है, लेकिन इनपुट में विशेष पात्रों के साथ काम करना लगभग 15 बाइट्स जोड़ता है ...


1

VBA, 233 228bytes

मुझे यकीन है कि यह एक बहुत गोल्फ हो सकता है। उन्होंने निर्दिष्ट नहीं किया कि कितने इनपुट हैं इसलिए मैंने अपनी सरणी की लंबाई को कठिन कोडित किया क्योंकि यह छोटा है Redim preserve

इनपुट पॉपअप के माध्यम से होता है, आउटपुट होता है debug.printक्योंकि msgboxएक MODAL और हॉल्ट कोड का उत्पादन होता है ।

मुझे नहीं पता कि यह परीक्षण कैसे करना है कि यह 0.01s के लिए सटीक है या नहीं। हो सकता है कि कोई व्यक्ति परीक्षण कर सकता है, लेकिन मैं प्रतीक्षा आदेश को इस तरह से संख्या दे रहा हूं कि वह मिलीसेकंड का उपयोग करे, लेकिन वीबीए को यह करने के लिए नहीं जाना जाता है कि उसे क्या करना चाहिए।

If gotoएक अच्छी तरह से 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

पहुँच VBA में काम नहीं करेगा, क्योंकि पहुँच के पास प्रतीक्षा आदेश नहीं है क्योंकि Microsoft को संगति से नफरत है


0

स्माइलबासिक, 122 बाइट्स

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

मुझे लगता है कि इसे थोड़ा कम किया जा सकता है।


0

सी UNIX, 272 बाइट्स

#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++;}}

विस्तृत

#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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.