अपने टर्मिनल में समुद्र


46

पृष्ठभूमि

उत्तरी गोलार्ध में गर्मियों में अच्छी तरह से खत्म हो गया है, और हम में से बहुत से सूरज, समुद्र तटों, समुद्र की लहरों को याद करते हैं ... इस चुनौती का उद्देश्य उन्हें समुद्र की याद दिलाकर खुश करना है।

चुनौती

यहाँ समुद्र है:

             **              **              **              **              ** 
         ****            ****            ****            ****            ****   
      *****           *****           *****           *****           *****     
    **   **         **   **         **   **         **   **         **   **     
  **      **      **      **      **      **      **      **      **      **    
**          ******          ******          ******          ******          ****

समुद्र इस लहर पैटर्न से 5 गुना बना है:

            **  
        ****    
     *****      
   **   **      
 **      **     
*          *****

ध्यान दें कि पैटर्न 16 वर्ण लंबा है, और समुद्र इस पैटर्न का 5 गुना = 80 वर्ण लंबा है।

जिसे आप इस कमांड-लाइन का उपयोग करके टर्मिनल में प्रिंट कर सकते हैं:

perl -e 'print "            **  \n        ****    \n     *****      \n   **   **      \n **      **     \n*          *****\n"'

या यह एक:

perl -e 'print " "x12, "*"x2, " "x2, "\n", " "x8, "*"x4, " "x4, "\n", " "x5, "*"x5, " "x6, "\n", " "x3, "*"x2, " "x3, "*"x2, " "x6, "\n", " "x1, "*"x2, " "x6, "*"x2, " "x5, "\n", "*"x1, " "x10, "*"x5, "\n"'

(दूसरे को आपके लिए सटीक पैटर्न प्राप्त करना आसान बनाना चाहिए)

आपका कार्य समुद्र को एक टर्मिनल में प्रदर्शित करना है, और यह देखना है कि लहरें दाईं ओर बढ़ रही हैं: इसे प्रत्येक 100ms (= 10 बार प्रत्येक सेकंड) पर 1 वर्ण की गति से दाईं ओर शिफ्ट करने की आवश्यकता है। 80 वें कॉलम के बाद किसी भी चरित्र को मुद्रित नहीं किया जाना चाहिए, लेकिन जैसे ही दाएं लहर गायब हो जाती है, बाईं ओर एक नया दिखाई देता है।
यहाँ आउटपुट का एक उदाहरण है:

समय = 0.0

             **              **              **              **              ** 
         ****            ****            ****            ****            ****   
      *****           *****           *****           *****           *****     
    **   **         **   **         **   **         **   **         **   **     
  **      **      **      **      **      **      **      **      **      **    
**          ******          ******          ******          ******          ****

समय = 0.1 s

              **              **              **              **              **
          ****            ****            ****            ****            ****  
       *****           *****           *****           *****           *****    
     **   **         **   **         **   **         **   **         **   **    
   **      **      **      **      **      **      **      **      **      **   
***          ******          ******          ******          ******          ***

समय = 0.2 s

*              **              **              **              **              *
           ****            ****            ****            ****            **** 
        *****           *****           *****           *****           *****   
      **   **         **   **         **   **         **   **         **   **   
    **      **      **      **      **      **      **      **      **      **  
****          ******          ******          ******          ******          **

समय = 0.3

**              **              **              **              **              
            ****            ****            ****            ****            ****
         *****           *****           *****           *****           *****  
       **   **         **   **         **   **         **   **         **   **  
     **      **      **      **      **      **      **      **      **      ** 
*****          ******          ******          ******          ******          *

समय = 0.4s

 **              **              **              **              **             
*            ****            ****            ****            ****            ***
          *****           *****           *****           *****           ***** 
        **   **         **   **         **   **         **   **         **   ** 
      **      **      **      **      **      **      **      **      **      **
******          ******          ******          ******          ******          

बेशक, प्रत्येक आउटपुट को पिछले एक को बदलना चाहिए।

आप इस कोड को यूनिक्स टर्मिनल में देख सकते हैं कि यह एनीमेशन के साथ कैसा दिखना चाहिए:

perl -M5.010 -MTime::HiRes=sleep -E '@arr=([($")x12,($n="*")x2,($")x3],[($")x8,($n)x4,($")x4],[($")x5,($n)x5,($")x6],[($")x3,($n)x2,($")x3,($n)x2,($")x6],[($")x1,($n)x2,($")x6,($n)x2,($")x5],[($n)x1,($")x10,($n)x5]);while(++$j){for$i(0..5){for$k(0..15) {$out[$i][16*$_+$k]=$arr[$i][($k-$j)%16]for 0..4}}say"\e[H",$/,join$/,map{join"",@$_}@out;sleep 0.1}'

(ध्यान दें कि यह कोड बहुत अच्छी तरह से गोल्फ नहीं है: मैंने अभी इसे कॉम्पैक्ट किया है जो टर्मिनल में चलाने के लिए सुविधाजनक है।)

कसौटी जीतना

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


2
क्या हम किसी भी फ्रेम में एनीमेशन शुरू कर सकते हैं?
अरण्युलद

2
05ab1e.tryitonline.net/… बहुत बुरा 05AB1E चेतन नहीं कर सकता है, यह छोटा रहा होगा।
मैजिक ऑक्टोपस Urn

2
@Arnauld हाँ, आप कर सकते हैं।
दादा

2
ओह, तुम सही हो! ये सच हैं लैम्ब्डा
लुइस मेंडो

14
"गर्मियों में अच्छी तरह से खत्म हो गया है" यह आप के बहुत उत्तरी गोलार्ध है।
माइकइलियर

जवाबों:


18

MATL , 41 40 बाइट्स

`'3SJp/B@Tc`@+ara'F'* 'Za6el&Xx80:@-Z)DT

उदाहरण रन:

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

या इसे MATL ऑनलाइन पर आज़माएं! (वास्तविक गति सर्वर लोड पर निर्भर हो सकती है)।

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

`                    % Do...while
  '3SJp/B@Tc`@+ara'  %   Compressed string (actually it's just a change of base)
  F                  %   Push false. Indicates base-95 input alphabet for decompression
  '* '               %   Push this string, which defines output alphabet
  Za                 %   Base conversion. This decompresses the string
  6e                 %   Reshape as a 6-row char array. This gives the basic pattern
  l&Xx               %   Pause 0.1 seconds and clear screen
  80:                %   Push array [1 2 ... 80] 
  @-                 %   Subtract iteration index to each element of that array. This
                     %    will produce the rotation via modular indexing
  Z)                 %   Use as column index. Indexing is modular, so this repeats
                     %   (and rotates) the pattern
  D                  %   Display
  T                  %   True. Loop condition for infinite loop
                     % Implicit end

19

JavaScript (ES6) + HTML, 151 143 + 10 = 161 153 बाइट्स

a=[48,15,57347,6147,1542,504];setInterval("a=a.map(n=>{for(x=-1;++x<80;)s+=' *'[n>>x%16&1];s+=`\n`;return n>>>15|n<<1},s='');O.innerHTML=s",99)
<pre id=O>


चर का कार्य क्या है a?
क्रिक्सी लिथोस

@KritiiLithos aबाइनरी-एन्कोडेड वेव पैटर्न रखता है और प्रत्येक फ्रेम पर घुमाया जाता है। तो, इसे हार्डकोड नहीं किया जा सकता है: इसे एक चर में संग्रहीत करने की आवश्यकता है।
Arnauld

16

HTML + CSS, 70 + 181 175 = 245 बाइट्स

बनाता का उपयोग text-shadow, rtlपाठ और सीएसएस-फ़्रेम एनिमेशन।

a{display:flex;overflow:hidden;width:80ch}pre{text-shadow:16ch 0,32ch 0,48ch 0,64ch 0,80ch 0;direction:rtl;animation:w steps(16)1.6s infinite}@keyframes w{0%{margin-left:-16ch
<a><pre>**
  ****
    *****
    **   **
   **      **
***          ***


9

सी # 450 444 425 417 बाइट्स

399 बिना using System.Linq;लेकिन मुझे यकीन है कि धोखा होगा ...

संपादित करें: सहेजे गए 25 बाइट्स @Cyoce के लिए धन्यवाद

golfed:

void S(){Func<string,string>r=a=>string.Concat(Enumerable.Repeat(a,5));Func<string,int,string>s=(b,i)=>(b.Substring(16-i)+b).Substring(0,80);int p=0;for(;;){Console.Clear();Console.WriteLine(string.Join("\r\n",new string[]{s(r("            **  "),p),s(r("        ****    "),p),s(r("     *****      "),p),s(r(" **      **     "),p),s(r("*          *****"),p),}));Thread.Sleep(100);p++;if(p==16)p=0;}}

Ungolfed:

public void S()
{
  Func<string, string> r = a => string.Concat(Enumerable.Repeat(a, 5));
  Func<string, int, string> s = (b, i) => (b.Substring(16 - i) + b).Substring(0, 80);

  int p = 0;
  for(;;)
  {
    Console.Clear();
    Console.WriteLine(
      string.Join("\r\n", new string[]
    {
      s(r("            **  "), p),
      s(r("        ****    "), p),
      s(r("     *****      "), p),
      s(r(" **      **     "), p),
      s(r("*          *****"), p),})
      );
    Thread.Sleep(100);
    p++;

    if (p == 16)
      p = 0;
  }
}

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


1
मुझे लगता है कि आप कोष्ठक को हटा सकते हैं (a)=>। और while(true)हो सकता हैfor(;;)
Cycece

1
के लिए sलैम्ब्डा मुझे लगता है कि आप को हटा सकते हैं {}औरreturn
Cyoce

दोनों पर काम किया, मुझे कुल मिलाकर 25 बाइट की बचत हुई, धन्यवाद! :)
पीट आर्डेन

आप अपने पूरे फंक्शन को मेमना बना सकते हैं। मुझे लगता है कि आप भी निकाल सकते हैं \rसे string.Join(Windows पर कम से कम यह काम करता है, मोनो हालांकि साथ यह परीक्षण नहीं किया है) भी कर सकते हैं डाल कर 1 बाइट बचाने p++में forइस तरह पाशfor(;;p++)
स्टीफन

तल पर सीमा जांच को हटाने के लिए ( if (p==16)...) आप इसे इस तरह लूप हैडर के लिए भी डाल सकते हैं for(;;p=++p%16)pलूप में घोषित करके 1 और बाइट बचाएं ( for(int p=0;;p=++p%16))
स्टीफन

7

वी, 98 97 73 बाइट्स

24 बाइट बचाने के लिए @ nmjcman101 को धन्यवाद!

i¹ ³ **  
¸ ´*´ 
µ µ*¶ 
³ **³ **¶ 
 **¶ **µ 
*± µ*<ESC>{<C-v>}y4pò:sl100m
$<C-v>}x|Pò

इसमें बहुत सारे unprintables शामिल हैं, इसलिए यहाँ एक xxd hexdump है:

0000000: 69c2 b920 c2b3 202a 2a20 200a c2b8 20c2  i.. .. **  ... .
0000010: b42a c2b4 200a c2b5 20c2 b52a c2b6 200a  .*.. ... ..*.. .
0000020: c2b3 202a 2ac2 b320 2a2a c2b6 200a 202a  .. **.. **.. . *
0000030: 2ac2 b620 2a2a c2b5 200a 2ac2 b120 c2b5  *.. **.. .*.. ..
0000040: 2a1b 7b16 7d79 3470 c3b2 3a73 6c31 3030  *.{.}y4p..:sl100
0000050: 6d0a 2416 7d78 7c50 c3b2 0a              m.$.}x|P...

संपादित करें

  1. के y$बजाय इस्तेमाल किया<C-v>$y

  2. बहुत सारे बदलाव

    • प्रत्येक पंक्ति को कॉपी करने और उन्हें 4 बार चिपकाने के बजाय, मैं पहले तरंग उत्पन्न करता हूं और फिर पूरी चीज को कॉपी करता हूं और 4 बार पेस्ट करता हूं
    • प्रयुक्त {और }कुछ बाइट्स को बचाने के लिए
    • òअनंत लूप बनाने के लिए रजिस्टरों के बजाय उपयोग किया जाता है (किसी कारण से मुझे òइसे काम करने के लिए अंत में शामिल करना होगा)
    • *तल पर स्थिर तय की

मिनी स्पष्टीकरण

मैं <alt-n>तार की प्रतियां बनाने के लिए उपयोग कर रहा हूं । उदाहरण के लिए, <alt-5>*(यह दिखता है µ5) सम्मिलित मोड में 5प्रतियां बनाता *है। यह मुझे स्ट्रिंग को कॉपी करने और आवश्यक प्रतिस्थापन करने के लिए एक regex का उपयोग करने से कम पाया गया। एक तरंग बनाने के बाद, मैं इसे दूसरी तरंगें बनाने के लिए चिपकाता हूं। अंत में, मैं òअनंत लूप (देरी के साथ 100ms) बनाने के लिए पुनरावर्ती का उपयोग करता हूं ।

Gif

अधिकांश कोड तरंग बनाने के लिए समर्पित है, इसलिए मैं अभी भी इसे गोल्फ करने की कोशिश कर रहा हूं। ध्यान दें कि यह कोड TIO पर काम नहीं करेगा क्योंकि TIO केवल आउटपुट को कोड समाप्त होने के बाद आउटपुट देता है। तो यहाँ एक gif है (खेद कम गुणवत्ता के लिए, मैं उपयोग करने के लिए एक वेबसाइट एक कन्वर्ट करने के लिए किया था .movएक के लिए .gif, यह भी >_है कि सही में पॉपिंग रहता है मेरी मैक के गोदी पर टर्मिनल आइकन है):

लहर gif


मुझे इस बारे में बहुत कम पता है कि आपकी फ़ंकी रिपीटिंग
nmjcod101

कम मददगार, मुझे लगता है कि आपके 5j(संदर्भ में $<C-V>5j) बस हो सकता है }, और pबाद में ऐसा |होना चाहिए Pजो *नीचे बाईं ओर स्थिर को ठीक करेगा ।
nmjcman101

1
अंत में (टिप्पणी स्पैम के लिए खेद है, जाहिरा तौर पर वे 5 मिनट के लिए संपादन योग्य हैं) आप qm[CODE]@mq@mअंत में बस के साथ बदल सकते हैं ò[CODE]òब्रेकिंग (आपके मैक्रो के समान) तक लूप के बीच कोड होगा, और प्रोग्राम के अंत में ए òबंद है।
nmjcman101

@ nmjcman101 आप सभी की मदद के लिए धन्यवाद! (अगर आप मुझे कुछ बाइट्स देने में मेरी मदद कर रहे हैं तो यह स्पैम नहीं है। :)
क्रिति लिथोस

6

बैच, 424 बाइट्स

@echo off
set f=     
set a=%f%%f%  **  
set b=%f%   ****    
set c=%f%***** %f%
set d=   **   ** %f%
set e= **%f% **%f%
set f=*%f%%f%*****
set a=%a%%a%%a%%a%%a%%b%%b%%b%%b%%b%%c%%c%%c%%c%%c%%d%%d%%d%%d%%d%%e%%e%%e%%e%%e%%f%%f%%f%%f%%f%
:l
cls
echo %a%
set a=%a:~79,1%%a:~0,79%%a:~159,1%%a:~80,79%%a:~249,1%%a:~160,79%%a:~319,1%%a:~240,79%%a:~399,1%%a:~320,79%%a:~-1%%a:~-80,79%
ping>nul 1.1 -n 1 -w 100
goto l

कुछ पंक्तियों में अनुगामी स्थान होते हैं। एक मानक 80-कॉलम टर्मिनल की आवश्यकता है। समय बहुत सटीक नहीं है, लेकिन यह सबसे अच्छा है जो आप बैच में कर सकते हैं।


6

रैकेट 395 374 373 367 364 351 बाइट्स

स्क्रीन समाशोधन के लिए एक बाहरी पुस्तकालय का उपयोग करता है
परिभाषित करने नहीं द्वारा सहेजी गयी 21 बाइट्स: संपादित करें wऔर समारोह को इनलाइन।
Edit2: एक स्थान को हटाकर 1 बाइट को बचाया।
Edit3: 6 बाइट्स का नाम बदलकर सहेजा loopगया p, धन्यवाद @rnso!
Edit4: 3 बाइट्स को सेव करने में सबस्ट्रिंग डालते हैं।
Edit5: निकालें #lang racket, जो दुभाषिया में आवश्यक नहीं है।

गोल्फ: 351 बाइट्स

[require[planet neil/charterm:3:0]][let p([n 1])[with-charterm[void[charterm-clear-screen]]][for([i'["            **  ""        ****    ""     *****      ""   **   **      "" **      **     ""*          *****"]])[let([g substring][x[string-join[make-list 5 i]""]])[displayln[string-append[g x[- 16 n]][g x 0[- 16 n]]]]]][sleep .1][p[modulo[+ n 1]16]]]

स्क्रॉलिंग (कोई स्पष्ट नहीं): 272 बाइट्स

[let p([n 1])[for([i'["            **  ""        ****    ""     *****      ""   **   **      "" **      **     ""*          *****"]])[let([g substring][x[string-join[make-list 5 i]""]])[displayln[string-append[g x[- 16 n]][g x 0[- 16 n]]]]]][sleep .1][p[modulo[+ n 1]16]]]

Ungolfed:

#lang racket
[require [planet neil/charterm:3:0]]
[define w
'[
"            **  "
"        ****    "
"     *****      "
"   **   **      "
" **      **     "
"*          *****"]]
[define (rotmul count)
  [for ([i w])
    [let ([x [string-join [make-list 5 i] ""]])
      [displayln [string-append [substring x count]
                                [substring x 0 count]]]]]]

[let loop ([n 1])
  [with-charterm
   [void [charterm-clear-screen]]]
  [rotmul [- 16 n]]
  [sleep .1]
  [loop [modulo [+ n 1] 16]]]

लहर की


बाइट्स को कम करने के लिए नामों को छोटे लोगों की तरह नाम देना (जैसे पी के बजाय लूप) किया जा सकता है। जिफ़ फ़ाइल में वीडियो कैप्चर करने के लिए आपने किस सॉफ़्टवेयर का उपयोग किया?
rnso

@rnso: ओह तुम ठीक कह रहे हो! उस एक के बारे में नहीं सोचा था। मैं प्रयोग किया जाता है simplescreenrecorderके साथ avconvgif करने के लिए mp4 कन्वर्ट करने के लिए।
अंतिम हॉक

आप लेट (g सबस्ट्रिंग) को लेट कर सकते हैं ताकि आप बाद में कोड में 2 सबरिंग कीवर्ड के स्थान पर g का उपयोग कर सकें। कि आप एक और 5 बाइट्स बचा जाना चाहिए। इसके अलावा आपके ungolfed संस्करण में 'lst' क्या कर रहा है?
rnso

@rnso: इसे हटा दिया गया, जब rotmulवास्तव में wएक पैरामीटर के रूप में लिया गया था तो इसका अवशेष था ।
परम हॉक

आप गोल्फ संस्करण से "# लांग रैकेट" भी निकाल सकते हैं। इस साइट पर अधिकांश रैकेट कोड बाइट्स की गिनती करते समय इसमें शामिल नहीं है।
rnso

4

पावरशेल 3.0, 183 182 173 बाइट्स

बाइनरी शिफ्ट ऑपरेटरों के लिए PS 3.0 की आवश्यकता है। AdmBorkBork की मदद से 173 बाइट्स तक की कमी !

$w=12,240,1984,6336,24672,32799
for(){0..5|%{'{0:D16}'-f+[Convert]::ToString(([uint16]$o=$w[$_]),2)*5-replace0,' '-replace1,'*'
$w[$_]=$o-shr1-bor$o-shl15}
sleep -m 100
cls}

PoshWaves


अच्छा जवाब! कुछ गोल्फ - दशमलव प्रारूप के बजाय निर्दिष्ट का उपयोग करते हुए .PadLeft, $oघोषणा को [convert]कॉल में स्थानांतरित करते हैं, और -replaceऑप्स में संख्याओं के आसपास के उद्धरणों को समाप्त करते हैं । आपको 175 से नीचे ले जाता है -for(){0..5|%{("{0:D16}"-f+[Convert]::ToString(([uint16]$o=$w[$_]),2))*5-replace0,' '-replace1,'*'
AdmBorkBork

@AdmBorkBork धन्यवाद! क्षमा करें कि मुझे उत्तर को अपडेट करने में काफी समय लगा। +में समझा सकता हूँ "{0:D16}"-f+[Convert]? यह इसके बिना काम नहीं करता है, लेकिन मैं यह नहीं कर सकता कि यह क्या करता है।
बीट

[convert]::ToString()एक स्ट्रिंग देता है। +बलों एक करने के लिए एक डाली [int]ताकि -fलिए सही पैरामीटर प्रकार ऊपर उठाता है D16काम करने के लिए।
AdmBorkBork

1
@AdmBorkBork तुम्हारा मतलब है कि पी एस व्यवहार करता है +'1'पहला योज्य के बिना एक वैध अंकगणितीय संचालन की तरह, डाले stringकरने के लिए intऔर रिटर्न परिणाम? महान स्कॉट!
बीट

3

बैश + कोरुटिल्स, 172 148 बाइट्स

24 बाइट्स @zeppelin की बदौलत बच गए , बहुत धन्यवाद

while :
do clear
cut -c$[i=i%16+1]-$[79+i] <(base64 -d<<<4AJFACddABVgf2dnw+CvmeyOkhIoUJOPLK6oKkljh0+Peqi5BfrbbnDyuVkr+AA==|xz -qdFraw)
sleep .1
done

पहली पंक्ति 6 ​​लगातार तरंगों से बने निम्न पैटर्न को विघटित करती है:

**              **              **              **              **              **              
            ****            ****            ****            ****            ****            ****
         *****           *****           *****           *****           *****           *****  
       **   **         **   **         **   **         **   **         **   **         **   **  
     **      **      **      **      **      **      **      **      **      **      **      ** 
*****          ******          ******          ******          ******          ******          *

फिर, लूप उस पैटर्न के माध्यम से एक 80-बाइट्स-चौड़ा विंडो स्लाइड करता है।


Coreutils base64 उपयोगिता -D ध्वज का समर्थन नहीं करता है (-d होना चाहिए, इसके बजाय लोअरकेस)।
ज़ेप्लेन

आप gzip के बजाय कच्चे LZMA (xz) का उपयोग करके ~ 10 बाइट्स बचा सकते हैं ( lzma -Fraw के साथ सेक करें , xz -qdFraw के साथ डीकंप्रेस )।
ज़ेपेलिन

आप $ 4 () () को बचाने के लिए $ () () के बजाय एक पुराने अंकगणितीय विस्तार वाक्यविन्यास $ का उपयोग कर सकते हैं
zeppelin

स्लीप कमांड में एक प्रमुख शून्य छोड़ा जा सकता है, यानी स्लीप .1 बस ठीक काम करना चाहिए
ज़ेप्लेनिन

तुम भी स्पष्ट मैं = 0 घोषणा से छुटकारा पा सकते हैं
zeppelin

3

* * <> , 251 250 251 बाइट्स (गैर-प्रतिस्पर्धात्मक)

" **             "e1C0["   ****         "e1C0["     *****      "e1C0["     **   **    "e1C0["    **      **  "e1C0["****          **"e1C0[06.
52Cl2,[52C52C]R
<v0&:l
$>:@=?v1+{:}&l1-[:&$@
?!v]1->:
~R>
vDDDDDD"H;0["ooooo
>l?u1S06.O{52Cl2,[a}48C]I
ol?!R

नोट: "H;0["माना जाता है कि आस्की के 27बाद [

यहाँ कोशिश करो! (0ms के लिए देरी सेट)

मैं विश्वास नहीं कर सकता कि मैंने इसे सफलतापूर्वक बना दिया है। यह उन निर्देशों Iऔर Dनिर्देशों का उपयोग करता है , जो चयनित स्टैक को बढ़ाते या घटाते हैं। यह प्रदर्शित करता है कि यह संभव है कि यह शुद्ध रूप से किया जा सके> <> (माइनस द स्लीप) या एक प्रतिस्पर्धी *> <> उत्तर, हालांकि शायद करना बहुत कठिन है।

एक कैरिज रिटर्न का उपयोग करके आउटपुट को खाली करने के लिए ऑनलाइन दुभाषिया संस्करण अलग है।

इस गैर प्रतिस्पर्धा कर रहा है क्योंकि I, D,C , और Rनिर्देश चुनौती से कम आयु के हैं। यह शायद उन निर्देशों के बिना करना संभव है, लेकिन यह बहुत कठिन / लंबा होगा।

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


मैं पूरी कोशिश करूँगा कि कदम नीचे गिर जाएँ और समझाएँ कि यहाँ क्या हो रहा है ...

व्याख्या

" **             "e2C0["   ****         "e2C0["     *****      "e2C0["     **   **    "e2C0["    **      **  "e2C0["****          **"e2C0[09.
# Copy current stack 4 times
54Cl2,[54C54C]R
# Copy stack
<v0&:l
$>:@=?v1+{:}&l1-[:&$@
?!v]1->:
~R>
# Main loop
vDDDDDD"H;0["ooooo
>l?u1S09.O{54Cl2,[a}4cC]I
# Output stack
ol?!R

विषय - सूची

Line 1 - Initialization
e2C    - Call "copy current stack 4 times"
54C    - Call "copy stack"
09.    - Jump to "main loop"
4cC    - Call "output stack" (not explained, is very simple)

प्रारंभ

यहां हम 6 लाइनें बनाते हैं जो तरंगों का निर्माण करती हैं। हमें सही लंबाई होने के लिए प्रत्येक स्ट्रिंग को 5 बार दोहराने की आवश्यकता है।

हम इनमें से 6 के साथ शुरू करते हैं, तरंग की प्रत्येक पंक्ति के लिए:

 " **             "       push " **             " to the stack
                   e2C    call "copy current stack 4 times"
                      0[  create a new stack

और हम शुरू होने के बाद मुख्य लूप में प्रवेश करते हैं 09.

करंट स्टैक 4 टाइम्स को कॉपी करें

यह एक साधारण फ़ंक्शन है जो बस वर्तमान स्टैक लेता है, और इसे 4 बार कॉपी करता है। तो "अ" "आ" बन जाएगा।

54C              call "copy stack"
   l2,[          copy half the current stack to a new stack
       54C54C    call "copy stack" twice
             ]   close the current stack, moving values to the one below
              R  return from the function

कॉपी स्टैक

यह वर्तमान स्टैक को कॉपी करता है, कॉपी को वर्तमान स्टैक में जोड़ता है।

सेट अप

प्रारंभिक को छोड़ दें <और पहली पंक्ति को उल्टा कर दें l:&0vक्योंकि यह वह क्रम है <जो आईपी की दिशा में बदलाव के बाद निष्पादित होता है।

l      push the stack length to the stack
 :&    copy the length to the register
   0   push 0 to the stack
    v  move the IP downwards, entering the loop

यहाँ से लंबाई के रूप में nऔर के 0रूप में जाना जाएगाi

लूप

>                        move the IP to the right
 :                       copy i
  @=?v                   pop i from the stack, if n == i, proceed to cleanup
      1+                 add 1 to i
        {:}              copy the first value of the stack to the end of the stack
           &             place n on the stack
            l1-[         open a new stack moving all values but index 0 to the new one
                :&       copy n and place it on the register
                  $@     swap i with the value on its right
                     $   swap i with n

साफ - सफाई

>                        move the IP to the right
 :?!v                    if i == 0 then ...
  ~R>                      remove i from the stack and return
     ]                   close the stack, appending all values to the stack below
      1-                 subtract 1 from i

मुख्य घेरा

यहां वह कोड है जहां कोड हमेशा के लिए चलता है, लगातार 100 सेमी नींद के बीच तरंगों को फिर से करता है।

सेट अप

DDDDDD                 select the 6th stack down
      "H;0[x"ooooo     move the cursor to the top-left of the term (x == ascii 27)
                  v    move the IP downwards, entering the loop 

लूप

>                          move the IP to the right
 l?u     O                 if the stack is empty ...
    1S                       sleep for 100ms
      09.                    jump to main loop initialisation
          {                shift the stack left
           54Cl2,[         copy the current stack to a new stack
                  a        append a newline to the stack
                   }       shift the stack to the right
                    4cC    call "output stack"
                       ]   close the stack
                        I  select one stack higher

2

PHP, 128 बाइट्स

for($a=[3,60,496,1584,6168,57351];;usleep(1e5))foreach($a as&$x)for($x=$x/2|$x%2<<15,$i=80;$i--;)echo" *"[$x>>$i%16&1],"\n"[$i];

एक से अधिक लाइन को चेतन नहीं कर सकता, लेकिन यह स्क्रॉल करता है। पुनरावृत्तियों के बीच रिक्त पंक्ति के लिए सरणी में
जोड़ें ,0। के साथ भागो -r


2

गणितज्ञ, 213 बाइट्स

i=0;RunScheduledTask[i++,0.1];Dynamic[RotateRight[#,i]&/@Characters/@(StringRepeat[#,5]&)/@{"            **  ","        ****    ","     *****      ","   **   **      "," **      **     ","*          *****"}//Grid]

मैं प्रत्येक पंक्ति के लिए तार की एक सूची के साथ शुरू करने के अलावा Mathematica में लहर पैटर्न को गोल्फ के किसी भी तरह से नहीं देखता। मैं शुरू iकरने के लिए 0और हर 0.1सेकंड इसे बढ़ाने के लिए एक कार्य शेड्यूल करता हूं । मैं Dynamicनिम्नलिखित का परिणाम प्रदर्शित करता हूं :

  1. StringRepeat प्रत्येक पंक्ति 5 बार।
  2. प्रत्येक पंक्ति को उसकी सूची में परिवर्तित करें Characters
  3. RotateRight द्वारा पात्रों की प्रत्येक सूची i
  4. एक के रूप में वर्णों के परिणामस्वरूप सरणी प्रदर्शित करें Grid

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


कैप्चर बनाने और gif फ़ाइल बनाने के लिए आपने किस सॉफ़्टवेयर का उपयोग किया?
रान्सो

मैंने ScreenToGif का इस्तेमाल किया।
19 दिसबंर को ngenisis

2

सी (यूनिक्स), 231 191 बाइट्स

यह केवल यूनिक्स वातावरण पर काम करेगा। इसके अलावा, कृपया इस तथ्य का बहाना करें कि नींद केवल पूर्णांक को स्वीकार करती है ... इसलिए यह वास्तव में फ्रेम के बीच 1 सेकंड में देरी करता है।

Ungolfed संस्करण:

#include <stdio.h>
int main() {
    int x=0,l,i,a[6]={32799,24672,6336,1984,240,12};
    while(l=6,++x) {
        printf("\033[2J");
        while(i=128,l--) {
            while(i--) putchar(a[l]&1<<(i+x)%16 ? 42 :32);
            puts("");
        }
        sleep(1);
    }
}

गोल्फ संस्करण:

#include <stdio.h>
int main(){int x=0,l,i,a[6]={32799,24672,6336,1984,240,12};while(l=6,++x){printf("\033[2J");while(i=128,l--){while(i--)putchar(a[l]&1<<(i+x)%16?42:32);puts("");}sleep(1);}}

1
वह आपके टर्मिनल में C है।
रॉबर्ट फ्रेजर

2

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

x=0,c=console;setInterval(a=>{for(c.clear();f="",i=128,++x,a--;c.log(f))for(;i--;)f+=" *"[[32799,24672,6336,1984,240,12][a]>>(i+x)%16&1]},100,6);

आप 2 बाइट्स भी बचा सकते हैं setInterval(a=>{...},100,6), और 4 अधिक के साथ f+=" *"[[...][a]&1<<(i+x)%16]
ETHproductions

सुझाव के लिए धन्यवाद! लेकिन क्या आप निश्चित हैं कि आप अपना दूसरा सुझाव काम कर सकते हैं? आपको अभी भी सरणी इंडेक्स 0-1 को पुनः प्राप्त करने के लिए एक बूलियन के लिए उस मूल्य को कम करना होगा। मैं एक एकल हेक्स मान में लहर एससीआई को और अधिक बिटमैपिंग करने के बारे में सोच रहा था: 0x801F606018C007C000F0000C लेकिन जावास्क्रिप्ट केवल किसी भी दिशा में अधिकतम 31 बिट्स को स्थानांतरित कर सकता है! आप हर रोज कुछ न कुछ सीखते हैं!
ajxs

2

पर्ल 6, 140 138 137 123 120 बाइट्स

for ^Inf ->\i{print "\e[H";for 12,240,1984,6336,24672,32799 ->\j{say [~] map {j+>((i-$_)%16)%2??'*'!!' '},^80};sleep .1}

पुराने समाधान:

for ^Inf ->\i {print "\e[H";for 12,240,1984,6336,24672,32799 ->\j {say [~] map {j+>((i-$_)%16)%2??'*'!!' '},^80};sleep .1;}
my @a=12,240,1984,6336,24672,32799;for ^Inf ->\i {print "\e[H";for @a ->\j {for ^80 {print j+>((i-$_)%16)%2??'*'!!' '};say ""};sleep .1;}
my @a=12,240,1984,6336,24672,32799;for ^Inf {print "\e[H";for @a ->\j {for ^80 ->\k {print j+>(($_- k)%16)%2??'*'!!' '};say ""};sleep .1;}
my @a=12,240,1984,6336,24672,32799;for ^Inf {print "\e[H";for @a ->\j {for ^80 ->\k {print j+>(($_+15*k)%16)%2??'*'!!' '};say ""};sleep .1;}

1

पायथन 3, 240 239 230 बाइट्स

-1 बाइट @redstarcoder का धन्यवाद

-9 बाइट्स @PascalvKooten को धन्यवाद

import time
def p():print("\x1b[0;H")
i=0;p();s=[' '*13+'**',' '*9+'****  ','      *****    ','    **   **    ','  **      **   ','**          ***']
while True:
 for x in s:x*=5;c=i%80;print(x[-c:]+x[:-c])
 i+=1;p();time.sleep(.1)

print("\x1b[0;H")मेरे लिए -1 बाइट के लिए भी काम करता है।
redstarcoder

आप के ' **'साथ प्रतिस्थापित ' '*13+'**'कर सकते हैं और आपके पास कुछ समय में 1 वर्ण संकेतक हो सकते हैं, इसके लिए 4 वर्ण होने की कोई आवश्यकता नहीं है।
पास्कलवूटेन

@PascalvKooten धन्यवाद इंडेंट चिपकाने के दौरान टैब वर्णों से रिक्त स्थान में तब्दील हो गए थे। मैं उसके लिए बाहर देखना सुनिश्चित करूंगा।
१६:१६ से २१:३६ तक

1

रैकेट 295 बाइट्स

(let*((g string-append)(h substring)(d displayln)(j(λ(l)(map(λ(x)(g(h x 1)(h x 0 1)))l))))(let p((l(map(λ(x)(apply g(for/list((i 5))x)))'("            **  ""         ****   ""      *****     ""    **   **     ""  **      **    ""*          *****"))))(for((i l))(d i))(d"")(sleep .1)(p(j l))))

Ungolfed:

(define(f)
 (define (lf l)
    (map (λ (x) (string-append (substring x 1) (substring x 0 1)))
         l))
  (let loop ((l (map (λ (x) (apply string-append (for/list ((i 5)) x)) )
                     (list 
                      "            **  "
                      "         ****   "
                      "      *****     "
                      "    **   **     "
                      "  **      **    "
                      "*          *****"))))
    (for ((i l))
      (displayln i))
    (displayln "")
    (sleep 0.1)
    (loop (lf l))))

परिक्षण:

(f)

आउटपुट:

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

(यह gif फ़ाइल डिस्प्ले वास्तविक आउटपुट से धीमी है)।


1

अजगर 2, 207 202 बाइट्स

आमतौर पर मैं एक C # डेवलपर हूं, इसलिए यह पूरी तरह से अभी तक गोल्फ नहीं हो सकता है ...

import time;i=0
while 5:
    print"\033[;H"
    for l in[" "*12+"**  "," "*8+"*"*4+" "*4," "*5+"*"*5+" "*6,"   **   **"+" "*6," **     "*2,"*"+" "*10+"*"*5]:print(l[16-i:]+l*5)[:80]
    time.sleep(.1);i=(i+1)%16

1

सी #, 327 बाइट्स

कमोबेश पायथन में मेरे समाधान का एक छोटा संस्करण ...

_=>{Func<string,int,string>t=(s,j)=>(s.Substring(16-j)+string.Concat(Enumerable.Repeat(s,5))).Substring(0,80);for(var i=0;;i=++i%16){Console.Clear();foreach(var q in "            **  ,        ****    ,     *****      ,   **   **      , **      **     ,*          *****".Split(','))Console.WriteLine(t(q,i));Thread.Sleep(100);}}

1

पर्ल, 110 बाइट्स

आवश्यक -Eकोई अतिरिक्त कीमत पर। इसमें अनपेक्षित वर्ण हैं।

$_=unpack"B*","x?`00?";s!.{16}!$&x5 .$/!ge;y/01/ */;{say"\ec$_";select!s/(.+)(.)$/$2$1/mg,$a,$a,.1;redo}"

नीचे दिए गए प्रतिवर्ती हेक्सडंप का उपयोग करके उपरोक्त डेटा बनाएं। xxd -d > sea.plएक लिनक्स या संगत टर्मिनल में चलाएं , नीचे पेस्ट करें और Ctrl+ दबाएं d, फिर चलाएं perl -E "$(cat sea.pl)"

0000000: 245f 3d75 6e70 6163 6b22 422a 222c 2200  $_=unpack"B*",".
0000010: 0600 7803 e00c 6030 30c0 0f22 3b73 212e  ..x...`00..";s!.
0000020: 7b31 367d 2124 2678 3520 2e24 2f21 6765  {16}!$&x5 .$/!ge
0000030: 3b79 2f30 312f 202a 2f3b 7b73 6179 225c  ;y/01/ */;{say"\
0000040: 6563 245f 223b 7365 6c65 6374 2173 2f28  ec$_";select!s/(
0000050: 2e2b 2928 2e29 242f 2432 2431 2f6d 672c  .+)(.)$/$2$1/mg,
0000060: 2461 2c24 612c 2e31 3b72 6564 6f7d       $a,$a,.1;redo}

प्रयोग

आसान कॉपी / पेस्ट करने के लिए, कृपया नीचे का उपयोग करें:

perl -E '$_=unpack"B*","\x00\x06\x00\x78\x03\xe0\x0c\x60\x30\x30\xc0\x0f";s!.{16}!$&x5 .$/!ge;y/01/ */;{say"\ec$_";select!s/(.+)(.)$/$2$1/mg,$a,$a,.1;redo}'

व्याख्या

एक बिल्कुल सीधा समाधान जो लहर को शुरुआत में एक स्ट्रिंग के रूप में संग्रहीत करता है, जो कि unpackबाइनरी के लिए एड है, प्रत्येक अनुभाग को क्विंटुप्लिकेट किया गया है, 0एस को रिक्त स्थान में बदल दिया जाता है और 1एस को परिवर्तित किया जाता है *। अब हमारे पास पूरी स्ट्रिंग है, इसलिए हम एक redoलूप दर्ज करते हैं जो पूरे स्ट्रिंग को प्रिंट करता है, फिर हम 1 सेकंड के लिए प्रतीक्षा करते हैं और स्ट्रिंग में प्रत्येक पंक्ति के लिए, हम स्ट्रिंग की शुरुआत के लिए अंतिम चरित्र को स्थानांतरित करते हैं।


1

गणितज्ञ 171 बाइट्स

लहर ही डेटा है, इसलिए मैं अपने कोड में पूरी लहर का एक संपीड़ित संस्करण संग्रहीत कर रहा हूं। मैं एक एकल लहर को बहुत अधिक कॉम्पैक्ट रूप में संग्रहीत कर सकता हूं\fð߀ᣀ恠耟 द्विआधारी प्रतिनिधित्व का उपयोग करते हुए , लेकिन अनकम्प्रेस्टिंग की वर्ण गणना बहुत अधिक है *।

यहाँ कोड है:

w=Uncompress@"1:eJxTTMoPSmNjYGAoZgESPpnFJcEBQIYCEtDSUlCglI9iqJYWqhJy+QhDtdCUUMCHGQrmIymiiA8xFMajEg02FMkXWmi+IosPAJNuSHg=";
Dynamic[Pause[.1];Column[w=StringRotateRight/@w]]   

यहां वह कोड है जिसका उपयोग मैंने तरंग डेटा के संपीड़ित संस्करण को बनाने के लिए किया था:

s={"            **  ","        ****    ","     *****      ","   **   **      "," **      **     ","*          *****"};
s//TableForm
StringRepeat[#,5]&/@s
Compress[%]

इस कोड को मैं इस तरंग की तरह द्विआधारी डेटा को संपीड़ित दोहराते हुए स्टोर करने के लिए उपयोग करना पसंद करूंगा:

StringJoin /@ (PadLeft[(IntegerDigits[#1, 2] & ) /@ ToCharacterCode["\fð߀ᣀ恠耟"]] /. {0 -> " ", 1 -> "*"})

जैसा कि आप देख सकते हैं, संपीड़ित डेटा को वापस स्ट्रिंग में बदलने के लिए ओवरहेड इस विशेष समस्या के लिए बहुत महंगा है, हालांकि एक एकल तरंग को 7 UTF वर्णों और 15 बाइट्स के साथ इस तरह संग्रहीत किया जा सकता है।

यहाँ एक तरंग (जो ऊपर है) को संग्रहीत करने के लिए UTF वर्ण अनुक्रम निर्धारित करने के लिए कोड था।

StringReplace[#,{" "->"0","*"->"1"}]&/@s
ToExpression/@%
IntegerDigits/@%
FromDigits[#,2]&/@%
FromCharacterCode/@%
StringJoin@%

1

रूबी 269 217 189 185 बाइट्स

-28 बाइट्स @manatwork के लिए धन्यवाद

-5 बाइट्स @ @ धन्यवाद के लिए धन्यवाद

साधारण

p=0
loop do
  system 'clear'
  [' '*12+'**  ', ' '*8+'****    ','     *****      ','   **   **      ',' **      **     ','*          *****'].each {|i| puts ((i*5)[16-p..-1]+i)[0..79]}
  p=-~p%16
  sleep 0.1
end

golfed

p=0
b=' '
loop{system'clear'
[b*12+'**  ',b*8+'****    ',b*5+'*****'+b*6,'   **   **'+b*6,' **      **     ',"*#{b*10}*****"].map{|i|puts ((i*5)[16-p..-1]+i)[0,79]}
p=-~p%16
sleep 0.1}

यद्यपि आपका कोड ठीक काम करता है कृपया ध्यान दें कि साइट के नियमों के अनुसार यह अभी तक एक वैध समाधान नहीं है: "चुनौतियों का सभी समाधान होना चाहिए: (…) उपयोग में जीतने के मानदंडों के लिए एक गंभीर दावेदार हो। उदाहरण के लिए, एक कोड गोल्फ प्रतियोगिता में प्रवेश के लिए गोल्फ (…) की आवश्यकता होती है। - सहायता केंद्र रूबी में कुछ टिप्स के लिए गोल्फ के लिए टिप्स देखें ।
11

वैसे भी, एक संक्षिप्त सूची: इंडेंटेशन को हटा दें; do … end→ इसके { … }बाद {और पहले की नई सुचनाओं को निकालें} ; के बीच की जगह को हटा देंsystem और उसके पैरामीटर को ; ,एरे शाब्दिक के अंतिम तत्व के बाद हटा दें ; .each.mapऔर इसके और इसके कोड ब्लॉक के बीच की जगह को हटा दें; सामने की जगह को हटा दें puts; 0..800,80(यह एक बग भी है क्योंकि आप अभिव्यक्ति 81 वर्ण लंबी स्ट्रिंग का परिणाम देते हैं); p=p+1==16?0: p+1p=-~p%16
मैनटवर्क

येप, मैनटवर्क की गूंगी व्याख्या फिर से प्रहार करती है। यहां तक ​​कि do … end→ बदलते हुए { … }, अभी भी loopकीवर्ड की आवश्यकता है । यह मुझे सबसे छोटा है: pastebin.com/cg3gxnm4
manatwork

b=' 'शीर्ष पर 5 (6 रिक्त स्थान) सेट करके 5 या 6 बाइट्स को बचा सकते हैं, फिर आउटपुट एक्सप्रेशन को बदलकर ' '*12+'** ', ' '*8+'**** ',b+'***** '+b,' ** ** '+b,' ** **'+b,'*'+b+b+'*****'... (लेकिन एसई इस टिप्पणी में बार-बार रिक्त स्थान नहीं दिखा रहा है!)
2

0

HTML + JS + jQuery, 10 + 233 = 243 बाइट्स

b="            **  q        ****    q     *****      q   **   **      q **      **     q*          *****".split`q`.map(x=>x.repeat(5).split``)
setInterval(a=>$("#a").text(b.map(f=>f.join``).join`\n`)+b.map(e=>e.unshift(e.pop())),100)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<!-- start -->
<pre id=a>

जावास्क्रिप्ट बस प्रत्येक पंक्ति को 1 से बदलता है और प्रत्येक 100 एमएस में पाठ को बदलता है।

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