आउटपुट कीस्ट्रोक


14

किसी भी प्रोग्रामिंग भाषा में, एक प्रोग्राम बनाएं जो इनपुट लेता है और कीबोर्ड पर टाइप किए जा रहे टेक्स्ट को एनिमेट करता है।

एक कीबोर्ड पर सही टाइपिंग अनुकरण करने के लिए प्रत्येक वर्ण के बीच देरी अलग-अलग होनी चाहिए। 0.1, 0.1, 0.5, 0.1, 0.1, 0.5 ...अंतिम वर्ण मुद्रित होने तक विलंब सेकंड होगा । अंतिम आउटपुट स्क्रीन पर छोड़ दिया जाएगा।

आपको पाठ की वर्तमान पंक्ति को अधिलेखित करना चाहिए जो पाठ को नई पंक्तियों पर मुद्रित नहीं किया जा सकता है।

उदाहरण, इनपुट "हैलो, पीपीसीजी! अलविदा धरती!" निम्नलिखित एनीमेशन में परिणाम होना चाहिए (ध्यान दें कि जिफ़ बनाने वाले का नमूना दर कम था, इसलिए सही परिणाम थोड़ा अलग है):

यहाँ छवि विवरण दर्ज करें

चूंकि यह कोड गोल्फ है, बाइट्स की सबसे छोटी राशि जीतती है।


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

क्या हम मान सकते हैं कि हमेशा इनपुट है?
मेटोनीम

1
क्या देरी को यादृच्छिक माना जाता है, या 0.1, 0.1, 0.5 का दोहराव पैटर्न है?
12M2121

2
पहले चरित्र को छापने से पहले देरी होनी चाहिए?
user41805

1
यह है कि पैटर्न हां @ 12M21
18:18 पर Metoniem

जवाबों:


8

सी 108 93 89 78 73 80 बाइट्स

f(char *s){for(int i=0;s[i];fflush(0),usleep(100000*(i++%3?1:5)))putchar(s[i]);}

Ungolfed संस्करण:

 void f(char *s)
 {
  for( int i=0;s[i];)
  {
    putchar(s[i]);
    fflush(0);
    usleep(100000*(i++%3?1:5));
 }
}

@Kritii Lithos @Metoniem आपके इनपुट के लिए धन्यवाद! कुछ बाइट्स बचाए।

किसी तरह, बस int iमुझे दौड़ने में एक विभाजन त्रुटि दी, इसलिए मैंने इसे 0 से शुरू किया।


1
जागो तुम मेरे सुधारों का उपयोग करो या नहीं: तुम्हारी देरी दूसरे तरीके से होनी चाहिए। यदि i%3देरी 5 होनी चाहिए
19

बदलें 100000के साथ 1e5दाढ़ी 3 बाइट्स के लिए
अल्बर्ट रेंशाव

@AlbertRenshaw टिप के लिए धन्यवाद, अपडेट किया गया। मैंने अपने कुछ अन्य समाधानों में भी इसका उपयोग किया है, मुझे यह भी नहीं पता कि मैं यहाँ क्यों भूल गया।
हाबिल टॉम

@AbelTom किसी कारण से, 1e5मेरे डिवाइस पर काम नहीं करता है
user41805

@KritiiLithos कैसे करें? क्या आप लिनक्स पर हैं?
हाबिल टॉम

6

जेली , 13 बाइट्स

115D÷⁵ṁȮœS¥@"

यह एक मोनडिक लिंक / फ़ंक्शन है। निहित उत्पादन के कारण, यह एक पूर्ण कार्यक्रम के रूप में काम नहीं करता है।

सत्यापन

यह काम किस प्रकार करता है

115D÷⁵ṁȮœS¥@"  Monadic link. Argument: s (string)

115            Set the return value to 115.
   D           Decimal; yield [1, 1, 5].
    ÷⁵         Divide all three integers by 10.
      ṁ        Mold; repeat the items of [0.1, 0.1, 0.5] as many times as
               necessary to match the length of s.
          ¥@"  Combine the two links to the left into a dyadic chain and apply it
               to each element in s and the corr. element of the last return value.
       Ȯ         Print the left argument of the chain (a character of s) and sleep
                 as many seconds as the right argument indicates (0.1 or 0.5).

6

MATLAB, 74 बाइट्स

c=input('');p=[1,1,5]/10;for i=c;fprintf('%s',i);p=p([2,3,1]);pause(p);end

स्पष्टीकरण:

मैंने fprintfसंस्करण को कम से कम समय के disp()साथ उपयोग किया clc। सफलता तब मिली जब मुझे पता चला / याद आया कि pauseएक वेक्टर को तर्क के रूप में लिया जा सकता है, इस स्थिति में यह सिर्फ पहला मूल्य चुनेगा। इससे एक काउंटर छोड़ना संभव हो जाता है।

c=input('');    % Take input as 'Hello'
p=[.1,.1,.5];   % The various pause times

for i=c;            % For each of the characters in the input c
  fprintf('%s',i);  % Print the character i, without any trailing newline or whitespace
                    % No need to clear the screen, it will just append the new character 
                    % after the existing ones
  pause(p);         % pause for p(1) seconds. If the input to pause is a vector, 
                    % then it will choose the first value
  p=p([2,3,1]);     % Shift the pause times
end

मुझे सबसे कम इस्तेमाल करने वाला disp81 बाइट्स मिला :

c=input('');p=[1,1,5]/10;for i=1:nnz(c),clc;disp(c(1:i));pause(p(mod(i,3)+1));end

क्या आप इसके printfबजाय कर सकते हैं fprintf? यह octave-online.net पर काम करता है (लेकिन यह ऑक्टेव है न कि मैटलैब)
user41805

4

जावास्क्रिप्ट (ईएस 6), 67 बाइट्स

f=(i,o,n=0)=>i[n]&&(o.data+=i[n],setTimeout(f,++n%3?100:500,i,o,n))
<form><input id=i><button onclick=f(i.value,o.firstChild)>Go!</button><pre id=o>


स्निपेट काम नहीं करता है
user41805

@KritiiLithos Yup, Chrome पर काम नहीं करता है :-(
Metoniem

फ़ायरफ़ॉक्स थियो में काम करता है
कॉनर ओ'ब्रायन

2
यह क्रोम में मेरे लिए काम करता है, लेकिन कंसोल कहता हैBlocked form submission to '' because the form's frame is sandboxed and the 'allow-forms' permission is not set.
नंबरमानसिक

@numbermaniac मैंने एक अलग घटना का उपयोग करने के लिए स्निपेट को बदल दिया। (मैं इतना बूढ़ा हो गया हूं कि वास्तव में याद कर सकता हूं जब एक फॉर्म फील्ड में एंटर करें तो निम्नलिखित बटन को ट्रिगर न करें लेकिन सीधे फॉर्म सबमिट करने के लिए चला गया।)
नील

4

वी , 20 19 18 बाइट्स

1 बाइट ने @DJMcMayhem को धन्यवाद दिया

òअंत में हटाकर 1 बाइट बचाया

òD1gÓulD1gÓulDgÓul

बहुत अस्वाभाविक, मुझे पता है, यह सिर्फ इतना है कि सख्त uनीडो मुझे नेस्टेड छोरों का उपयोग करने से रोक रहा है।

व्याख्या

कर्सर बफर की शुरुआत में शुरू होता है, जो इनपुट का पहला चरित्र है।

ò                      " Start recursion
 D                     " Deletes everything from the cursor's position to the end of line
  1gÓ                  " Sleep for 100ms
     u                 " Undo (now the deletion is reverted)
      l                " Move cursor one to the right
       D1gÓul          " Do it again
             D         " Same as before but...
              gÓ       " Sleep for 500ms this time
                ul     " Then undo and move right
                       " Implicit ò

Gif जल्द ही आ रहा है ...


500 एमएस के लिए एक गिनती चूक के बिना, तो आप वहाँ एक बाइट बचा सकते हैं। इसके अलावा, याद रखें कि आपको दूसरे की आवश्यकता नहीं है ò!
जेम्स

uNdo के बजाय क्या आप केवल अस्ट कर सकते हैं p? अगर यह सब में मदद करता है तो अनिश्चित
nmjcman101

@DJMcMayhem मुझे नहीं पता कि मैं डिफ़ॉल्ट 500 क्यों याद किया, धन्यवाद! लेकिन मुझे दूसरी की आवश्यकता है òक्योंकि अन्यथा कार्यक्रम अंत में अंतर्निहित न्यूलाइन के कारण जल्दी समाप्त हो जाता है जिससे ब्रेकिंग त्रुटि होती है।
user41805

@ nmjcman101 मैं एस्टे का उपयोग करने के बारे में भी सोच रहा था p, लेकिन अफसोस कि यह कर्सर को लाइन के अंत तक ले जाता है और वापस जाने के लिए मुझे कुछ ऐसा चाहिए होता है, ``जिससे मेरे बायटेकाउंट में और वृद्धि होगी
user41805

4

MATL , 16 बाइट्स

"@&htDTT5hX@)&Xx

MATL ऑनलाइन पर यह कोशिश करो!

व्याख्या

"        % Implicitly input string. For each char of it
  @      %   Push current char
  &h     %   Concatenate everything so far into a string
  tD     %   Duplicate and display
  TT5h   %   Push array [1 1 5]
  X@)    %   Get the k-th element modularly, where k is current iteration.
         %   So this gives 1, 1, 5 cyclically
  &Xx    %   Pause for that many tenths of a second and clear screen
         % Implicit end. Implicitly display the final string, again (screen
         % was deleted at the end of the last iteration)

4

नूडल , 18 बाइट्स

ʋ115ṡḶƙÞṡạḌ100.ṡ€ß

कोशिश करो:)


यह काम किस प्रकार करता है

                   # Input is automatically pushed to the stack.
ʋ                  # Vectorize the string into an array of characters.
 115               # Push on the string literal "115" to be used to create the delays.
    ṡ              # Swap the two items on the stack.

     ḶƙÞṡạḌ100.ṡ€  # The main loop for the animation.
     Ḷ             # Loops the following code based off of the length of the string.
      ƙ            # Push on the current iteration's element of the character array (essentially a foreach).
       Þ           # Pop off of the stack and push to the screen.
        ṡ          # Swap the string "115" and he array of characters (this is done because need array of characters on the top for the loop to know how many times to loop)
         ạ         # Grab the next character in the string "115" (essentially a natural animation cmd that every time called on the same object will access the next item looping)
                   # Also, turns the string into an array of characters.
          Ḍ100.    # Pop the character off and convert to a number then multiply by 100 to get the correct delay. Then delay for that many ms.
               ṡ   # Swap the items again to compensate for the one earlier.
                €  # The end of the loop.

                 ß # Clears the screen such that when implicit popping of the stack occurs it will display the correct output.

19 बाइट कोड स्निपेट जो अंतहीन रूप से लूप करता है।

<div id="noodel" cols="30" rows="2" code="ʋ115ṡḷḶƙÞṡạḌ100.ṡ€ß" input='"Hello, PPCG! Goodbye Earth!"'/>
<script src="https://tkellehe.github.io/noodel/release/noodel-2.5.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>


1
किसी कारण से, देरी से बंद लगता है। देरी 100ms, 100ms, 500ms है। आपको हर समय 100ms लगते हैं।
इस्माइल मिगुएल

@IsmaelMiguel अच्छी नज़र। स्रोत के माध्यम से देखने के बाद एक गुणा के बजाय एक ऐड होता है। मैं इसे इस तरह रख सकता हूं, हालांकि मुझे इसकी आवश्यकता है क्योंकि मैं देख सकता हूं कि यह कहां उपयोगी हो सकता है। इसके लिए बहुत धन्यवाद!
tkellehe

आपका स्वागत है। और मुझे खेद है कि आपकी बाइट की गिनती बढ़ गई।
इस्माईल मिगुएल

@IsmaelMiguel, यह ठीक है क्योंकि जब मैं नूडल का अगला संस्करण बनाता हूं तो मैं एक 11 बाइट समाधान (मूल बातें क्योंकि मुझे जोड़ने की आवश्यकता होती है) बना सकता है। यह स्पष्ट रूप से
नॉन

3

एपीएल, 23 ​​बाइट्स

⊢{⍞←⍺⊣⎕DL⍵÷10}¨1 1 5⍴⍨⍴

स्पष्टीकरण:

               1 1 5⍴⍨⍴  ⍝ repeat the values [1,1,5] to match the input length
⊢                        ⍝ the input itself
 {           }¨          ⍝ pairwise map
      ⎕DL⍵÷10            ⍝ wait ⍵÷10 seconds, where ⍵ is the number
     ⊣                   ⍝ ignore that value, and
  ⍞←⍺                    ⍝ output the character   

3

सी #, 131 बाइट्स

समझाने के लिए ज्यादा नहीं। यह सिर्फ एक स्ट्रिंग लेता है ("" में लिपटा हुआ) तर्क के रूप में और सही देरी पैटर्न का उपयोग करके प्रत्येक वर्ण को प्रिंट करता है। एनीमेशन के बाद यह एक के साथ बाहर निकलता हैOutOfRangeException क्योंकि सभी वर्णों पर लूप होने के बाद लूप बंद नहीं होता है। चूंकि यह एक अनंत लूप है, इसका मतलब यह भी है कि मैं ;-) के int Mainबजाय उपयोग कर सकता हूंvoid Main

golfed

class C{static int Main(string[]a){for(int i=0;){System.Console.Write(a[0][i]);System.Threading.Thread.Sleep(i++%3<1?500:100);}}}

Ungolfed

class C
{
    static int Main(string[] a)
    {
        for (int i = 0; ;)
        {
            System.Console.Write(a[0][i]);
            System.Threading.Thread.Sleep(i++ % 3 < 1 ? 500 : 100);
        }
    }
}

संपादित करता


1
मैं C # प्रोग्रामर नहीं हूं, लेकिन क्या आप Sleep(i++ [...])लूप के लिए अतिरिक्त बाइट बचाने के लिए कुछ नहीं कर सकते ?
मालियाफो

@Maliafo आप सही हो सकते हैं! यदि यह अभी भी सही ढंग से चलता है और फिर अपनी पोस्ट को अपडेट करता है तो मैं इसे सुनिश्चित करने के लिए इसे चलाऊंगा। धन्यवाद!
मेटोनीम

2

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

LINPUT S$FOR I=0TO LEN(S$)-1?S$[I];
WAIT 6+24*(I MOD 3>1)NEXT

मुझे लगता है कि देरी की गणना बहुत कम हो सकती है।


2

क्लोजर, 81 बाइट्स

#(doseq[[c d](map vector %(cycle[100 100 500]))](Thread/sleep d)(print c)(flush))

इनपुट स्ट्रिंग पर लूप्स की अनंत सूची के साथ ज़िप किया गया [100 100 500]

(defn typer [input]
  ; (map vector... is generally how you zip lists in Clojure 
  (doseq [[chr delay] (map vector input (cycle [100 100 500]))]
    (Thread/sleep delay)
    (print chr) (flush)))

2

बैश (+ उपयोगिताओं), 32 बाइट

ध्यान दें, यह प्रक्रिया में बीप होगा, लेकिन किसने कहा कि प्रस्तुतियाँ फैंसी ध्वनि प्रभाव नहीं कर सकती हैं!

golfed

sed 's/.../&\a\a\a\a/g'|pv -qL10

डेमो

यहाँ छवि विवरण दर्ज करें



1

पॉवर्सशेल, 66 65 63 बाइट्स

[char[]]$args|%{sleep -m((1,1,5)[++$i%3]*100);Write-Host $_ -N}

यहाँ छवि विवरण दर्ज करें

-1 के बाद अनावश्यक सफेद स्थान को हटा दिया -m

AdmBorkBork के लिए -2 धन्यवाद - उपयोग करने के बजाय उपयोग किया गया 1,1,5और *अंतिम परिणाम100100,100,500

$argsएक चार सरणी के रूप में लेता है , नींद के माध्यम से निर्दिष्ट के रूप में, के Write-Hostसाथ छोरों-N उसी लाइन पर चार्ट को लिखने के लिए ओवेनलाइन तर्क के प्रयोग किया जाता है।

सुधार?

  • के [0..99]बजाय का उपयोग करें[char[]]1 बाइट बचाने लिए , लेकिन 100 से अधिक तार पर काम न करें।
  • का उपयोग करें 100,500और[(++$i%3)-gt1] लेकिन इसे किसी भी तरह कम करें।
  • इसे एक ही स्ट्रिंग में संयोजित करें और आउटपुट के बीच स्पष्ट करें, लंबे समय तक समाप्त करें Write-Host

पिछले दो काम करने का कोई तरीका नहीं मिल सकता है, और पहला कोई विशेष नियम से मान्य नहीं है।


1
दो बाइट्स को बचाने के लिए सौ को sleep -m((1,1,5)[++$i%3]*100)
तोड़ें

@AdmBorkBork स्मार्ट एक - धन्यवाद!
Colsw



0

Rebol, 65 बाइट्स

s: input t:[.1 .1 .5]forall s[prin s/1 wait last append t take t]

Ungolfed:

s: input
t: [.1 .1 .5]

forall s [
    prin s/1
    wait last append t take t
]


0

जावा 7, 151 149 बाइट्स

class M{public static void main(String[]a)throws Exception{int n=0;for(String c:a[0].split("")){System.out.print(c);Thread.sleep(n++%3>0?100:500);}}}

-2 बाइट्स की बदौलत @KritiiLithos के लिए मैं हमेशा कुछ भूल जाता हूँ ..

स्पष्टीकरण:

class M{
  public static void main(String[] a) throws Exception{ // throws Exception is required due to the Thread.sleep
    int n = 0;                                          // Initialize counter (and set to 0)
    for(String c : a[0].split("")){                     // Loop over the characters of the input
      System.out.print(c);                              // Print the character
      Thread.sleep(n++ % 3 > 0 ?                        // if (n modulo 3 != 0)
                                 100                    //   Use 100 ms
                               :                        // else (n modulo 3 == 0):
                                 500);                  //   Use 500 ms
    }
  }
}

उपयोग:

java -jar M.jar "Hello, PPCG! Goodbye Earth!"

1
मैंने इसका परीक्षण नहीं किया है, लेकिन क्या आप a[0].split("")इसके बजाय कुछ कर सकते हैं ?
user41805

@KritiiLithos Argg .. मैं हमेशा उस एक को भूल जाता हूं। धन्यवाद।
केविन क्रूज़सेन

जिसके बारे में बोलते हुए, मुझे splitअपने प्रसंस्करण उत्तर में भी उपयोग करना चाहिए ...
user41805

0

प्रसंस्करण, 133 131 बाइट्स

int i;void setup(){for(String c:String.join("",args).split(""))p{try{Thread.sleep(i++%3<1?500:100);}catch(Exception e){}print(c);}}

मैंने इसके बजाय args[0]तर्क को करने और लपेटने की कोशिश की "", लेकिन यह किसी कारण से काम नहीं करता है।

वैसे भी ... यह पहली बार मैंने एक प्रोसेसिंग प्रोग्राम लिखा है जो तर्कों को लेता है। जावा के विपरीत, आपको तर्क का उपयोग करने की घोषणा करने की आवश्यकता नहीं है String[]args, लेकिन चरargs स्वचालित रूप से तर्कों के लिए आरम्भ किया जाएगा।

इसे sketch_name.pdeएक फोल्डर में रखें जिसे फोल्डर कहा जाता हैsketch_name (हाँ, फ़ोल्डर और स्केच के लिए एक ही नाम)। इसे कॉल करें जैसे:

processing-java --sketch=/full/path/to/sketch/folder --run input text here

पनीर

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