तो शेफर्ड कहते हैं


23

मैं थक गया हूँ, लेकिन मैं सो नहीं सकता। भेड़ गिनने में मेरी मदद करो।

एक इनपुट एन (पॉजिटिव पूर्णांक) को देखते हुए, एन भेड़ को एससीआई बाड़ पर कूदें, नीचे दिए गए नमूने की तरह। केवल एक ही फ्रेम को एक बार में प्रदर्शित किया जाना चाहिए:

o |-|
──|-|──  0

 o|-|
──|-|──  0

   o
  |-|
──|-|──  0

  |-|o
──|-|──  0

  |-| o
──|-|──  0

o |-|
──|-|──  1

 o|-|
──|-|──  1

   o
  |-|
──|-|──  1

गणना को 'जमीन' के निचले दाहिने हिस्से में रखा जाना चाहिए। अनुगामी और प्रमुख व्हाट्सएप और नए समाचारों की अनुमति है। यदि आपकी पसंद की भाषा में प्रत्येक फ़्रेम के लिए स्क्रीन को साफ़ करने में कठिनाई होती है, तो आप स्क्रीन को साफ़ करने के लिए पर्याप्त नए लिंक जोड़ सकते हैं - कृपया बताएं कि आपने अपने उत्तर में इसके लिए कितनी लाइनें जोड़ी हैं। कार्यक्रम को समाप्त करना चाहिए जब N'th भेड़ पांचवीं फ़्लोरल पर हो।

मुझे कल जल्दी उठने की जरूरत है, इसलिए बाइट्स में सबसे छोटा कोड जीतता है। एक समारोह या पूरा कार्यक्रम प्रस्तुत करें। मानक खामियां लागू होती हैं।


6
1. कृपया, यह मुझे पीड़ा देता है जब लोग शॉर्ट कोड के लिए औचित्य का उपयोग करते हैं ("मुझे कल जल्दी उठने की आवश्यकता है") 2. फ्रेम के बीच हम कितने व्हाट्सएप डालते हैं? यह 1 न्यूलाइन जैसा दिखता है, लेकिन आप स्पष्ट रूप से बताना चाहते हैं।
R

12
1) एस्पिरिन 2 लें) स्क्रीन पर केवल 1 फ्रेम हो सकता है। यहां ये फ्रेम प्रत्येक राज्य को व्यक्तिगत रूप से प्रदर्शित करने के लिए हैं और एक साथ 1 स्क्रीन पर दिखाई नहीं देने चाहिए।
steenbergh

3
कई भाषाओं में प्रदर्शन को स्पष्ट करने का विकल्प नहीं है, ऐसे मामलों में उन्हें क्या आउटपुट देना चाहिए?
जोनाथन एलन

6
"स्क्रीन को साफ़ करने के लिए पर्याप्त नए लिंक जोड़ें"। क्या यह आउटपुट विंडो के आकार के साथ-साथ स्क्रीन रिज़ॉल्यूशन पर निर्भर नहीं है?
एमिग्ना

3
आपके उदाहरण के अनुसार, N=3अंतिम फ्रेम के लिए दाईं ओर एक भेड़ होगी और काउंटर अभी भी कहेगा 2। क्या वो सही है?
लुइस मेंडो

जवाबों:


15

MATL , 60 56 53 बाइट्स

:"@qXJx[HKCbO]"7Z"'  |-|  'v'o'@('--|-|--  '  JVhXxXD

उपरोक्त कोड वाला एनीमेशन बहुत तेजी से चलता है। निम्नलिखित संस्करण में एनीमेशन को धीमा करने के लिए एक विराम शामिल है और इस प्रकार 4 और बाइट्स की कीमत पर (चुनौती के लिए आवश्यक नहीं) देखना आसान है:

:"@qXJx[HKCbO]"7Z"'  |-|  'v'o'@('--|-|--  '  JVhXxXD.2Y.

MATL ऑनलाइन पर यह कोशिश करो ! दुभाषिया एक बीटा है; यदि यह काम नहीं करता है तो पृष्ठ को ताज़ा करें।

या ऑफ़लाइन कंपाइलर से रिकॉर्डिंग देखें:

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

व्याख्या

:"              % Input N implicitly. Repeat N times
  @q            %   Push iteration index minus 1, that is, from 0 to N-1. This
                %   are the numbers of sheep
  XJx           %   Copy into clipboard J and delete
  [HKCbO]       %   Push array [2 4 7 -2 0]
  "             %   For each value in that array. This loops generates the 5
                %   frames for each number of sheep
    7Z"         %     Push string of 7 spaces
    '  |-|  '   %     Push this string
    v           %     Concatenate vertically. This gives a 2x7 char array
                %     with the upper part of the frame, except the 'o',
                %     which will be now placed in a varying position 
    'o'         %     Push string 'o'
    @           %     Push loop variable, that is, 2, 4, 7, -2 or 0
    (           %     Write 'o' into that position of the 2x7 char array.
                %     The position is interpreated linearly, that is, a single
                %     number is used as index into the 2D array in column-major
                %     order (down, then across). So index 2 is lower-left corner,
                %     index 4 is to the right of that etc. Indexing is
                %     semi-modular (modular for non-positive values). So 0 is
                %     the lower-right corner, and -2 is to the left of that
    '--|-|--  ' %     Push this string
    JV          %     Push current number of sheep converted to string
    h           %     Concatenate horizontally
    Xx          %     Clear screen
    XD          %     Display all stack contents
    .2Y.        %     Pause for 0.2 seconds (optional)
                %   End implicitly
                % End implicitly

6

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

f=(n,m=`   2
43|-|10
──|-|── `,s=0)=>n?alert(m.replace(s%5,'o').replace(/\d/g,' ')+' '+(n-1),(++s%5?f(n,m,s):f(n-1,m,0))):''

गणना की गई अंतिम फ़्रेम पहले दिखाई दे रही है। n-1
इसके लिए जंप संख्या है । alertइनटैचर्स की चौड़ाई अलग-अलग है, इसलिए ऐसा लगता है कि यह टूट गया है।


पिछला उत्तर:

120 बाइट्स, जंप नंबर गलत है क्योंकि यह 0 के बजाय 1 से शुरू होता है

f=(n,m=`   2
43|-|10
──|-|── `,s=0)=>n?alert(m.replace(s%5,'o').replace(/\d/g,' ')+' '+n,(++s%5?f(n,m,s):f(n-1,m,0))):''

@LuisMendo मैंने 0. पर शुरू करने के लिए काउंटर को अपडेट किया। इसके द्वारा उपयोग किए गए फ़ॉन्ट के लिए बार के लिए alert। मैं बढ़त के साथ क्रोम की तुलना में एक ही परिणाम है, और यह फ़ायरफ़ॉक्स के साथ बदतर है।
हेदी

6

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

उत्पादन को समाप्त करता है और प्रत्येक फ्रेम के बीच 300ms इंतजार करता है:

n=>(F=j=>((c=console).clear(),c.log(`   2
01|-|34
──|-|── `.replace(/\d/g,i=>(j-i)%5?' ':'o')+(j/5|0)),++j<n*5&&setTimeout(`F(${j})`,300)))(0)

आप इसे यहाँ परीक्षण कर सकते हैं (कंसोल को खोलना सुनिश्चित करें)।


यह (से काउंटर बढ़ाने के लिए प्रतीत नहीं होता है 4करने के लिए 5) के बाद पिछले भेड़ बाड़ ... कूद गया है
ʰᵈˑ

@ @ - मुझे लगता है कि यह अपेक्षित व्यवहार है। (चुनौती में देखें लुइस Mendo के सवाल टिप्पणियाँ।)
Arnauld

आह हाँ, मैंने पढ़ा नहीं है - किसी और के लिए टिप्पणी करने के लिए लिंक
'

4

रूबी, 83 बाइट्स

->n{(n*5).times{|i|$><<"   c
  |-|  
ab|-|de  #{i/5}
".tr('abcde',' '*(i%5)+'o ')}}

प्रिंट करने के लिए प्रिंट। आउटपुट नईलाइन्स द्वारा अलग हो गया। स्क्रीन की ऊँचाई 3 तक कम करने से एक बार में केवल एक छवि दिखाई देती है।


4

सी #, 234 बाइट्स

using C=System.Console;class P{static void Main(string[]a){for(int n=0;n-1+""!=a[0];++n){foreach(int p in new[]{5,6,3,10,11}){C.Clear();C.Write("    \n  |-|  \n──|-|── ".Remove(p,1).Insert(p,"o")+n);for(var w=3e7;w>0;--w);}}}}

पहली नज़र में, कुछ व्हाट्सएप पर string[] argsऔर उसके आसपास बिछाने हैं for (intInt32.Parseहो सकता है int.Parse
यति

1
आप क्लास का नाम Programसिर्फ Pया कुछ से बदल सकते हैं
माटीस सिसेरो

1
stringहो सकता है var। लूप के लिए पूर्णांक एक ही समय में पूर्णांक के लिए प्रारंभ किया जा सकता है args[0]
यति

मैं देख रहा हूँ कि जब भी इसे उतारा जाता है, तो आप बाइट की गिनती को संपादित करते हैं। हालाँकि, मैं प्रगति के बारे में जानकारी रखने के लिए पुरानी बाइट काउंट्स (एक रेखा के साथ पार) को रखने की
सलाह देता हूं

आपको केवल एक फ़ंक्शन का संकलन करने की आवश्यकता है Action<string[]>और आप बाहरी कोष्ठक को लूप के लिए निकाल सकते हैं, इसलिए मुझे विश्वास है कि मुझे 200 बाइट्स using C=System.Console;a=>{for(int n=0;n-1+""!=a[0];++n)foreach(int p in new[]{5,6,3,10,11}){C.Clear();C.Write(" \n |-| \n──|-|── ".Remove(p,1).Insert(p,"o")+n);for(var w=3e7;w>0;--w);}};
मिलेंगे

3

PHP + जावास्क्रिप्ट, 168 बाइट्स

<?extract($_GET);$s="     ";$s[$f=++$f%5]=o;echo strtr("<pre>   C
AB|─|DE
──|─|── $c",EABCD,$s),($c+=!$f)<$n?"<script>location.href='s.php?n=$n&c=$c&f=$f'</script>":"";

फ़ाइल के साथ सहेजें s.php, ब्राउज़र में कॉल करें s.php?n=<n>

हर फ्रेम के लिए नए मापदंडों के साथ खुद को बुलाता है, कोई देरी नहीं।


मैं 5 और बचा सकता था index.php; लेकिन मैं उस तक नहीं जाना चाहता।


मैंने इसे PHP 5 और 7 पर चलाने की कोशिश की है, लेकिन सभी क्रोम मुझे देता है C AB|─|DE ──|─|── $c",EABCD,$s),($c+=!$f)<$n?"
०६ पर steenbergh

@steenbergh आपने short_open_tagअक्षम कर दिया है। इसे (डिफ़ॉल्ट) सक्षम करें या इसके phpबाद + स्थान जोड़ें <?
टाइटस

हाँ, यह बात है। अब चल रहा है।
स्टीनबर्गघ

3

Tcl, 168 बाइट्स

10-पंक्ति-उच्च स्क्रीन का उपयोग कर संस्करण। ( 7कॉलम शून्य चार में अपनी स्क्रीन ऊंचाई के साथ नीचे बदलें ।)

set s {0 1 2 3 4 }
for {set n 0} {$n<$argv} {incr n} {foreach x $s {
puts [string repe \n 6][string map [split $s {}] [string map "$x o" {   2
01|-|34
--|-|--  }]]$n}}

यह वास्तव में तेजी से चलता है, इसलिए आप लाइन दो पर एक विराम जोड़ सकते हैं:

टीईसी, 177 बाइट्स

set s {0 1 2 3 4 }
for {set n 0} {$n<$argv} {incr n} {foreach x $s {after 250
puts [string repe \n 6][string map [split $s {}] [string map "$x o" {   2
01|-|34
--|-|--  }]]$n}}

यह दो अलग चीजों के लिए शीर्ष पर स्ट्रिंग का पुन: उपयोग करके काम करता है:

  • आंतरिक पाश के लिए एक सूची के रूप में (भेड़ के प्रत्येक संस्करण को प्रदर्शित करने के लिए + बाड़)
  • भेड़ + बाड़ छवि टेम्पलेट से अंकों को हटाने के लिए अंक → अंतरिक्ष के मानचित्रण के रूप में

टेम्पलेट ही प्रदर्शित करने के लिए स्ट्रिंग छवि है। पहले हम एक 'ओ' में भेड़ के वर्तमान स्थिति अंक (आंतरिक लूप) का नक्शा (स्ट्रिंग प्रतिस्थापित) करते हैं। फिर हम शेष अंकों को रिक्त स्थान पर मैप करते हैं। फिर हम परिणामी स्ट्रिंग को प्रिंट करते हैं।

(स्ट्रिंग स्वयं तीसरी पंक्ति पर अंतिम {के बाद शुरू होती है और अंतिम पंक्ति पर सबसे बाईं ओर समाप्त होती है।)


3

QBasic, 110 बाइट्स

INPUT n
FOR i=0TO 5*n-1
CLS
?
?"  |-|"
?"--|-|-- ";i\5
x=i MOD 5
LOCATE(x=2)+2,1+x-(x>1)+x\3
?"o"
SLEEP 1
NEXT

5*nटिक्स पर लूप । प्रत्येक टिक पर, स्क्रीन को साफ करता है, स्टाइल और भेड़ की गिनती LOCATEप्रिंट करता है, और फिर oउपयुक्त स्थान पर प्रिंट करने के लिए उपयोग करता है । x0 और 4 के बीच स्थिति कोड होने के साथ :

  • पंक्ति: (x=2)+2
    • अगर x=2सच है, -1+2=1
    • अगर x=2झूठ है, 0+2=2
  • स्तंभ: 1+x-(x>1)+x\3
    • अगर xहै 0या 1, x>1गलत है और x\3है 0: 1+x-0+0= 1या2
    • यदि xहै 2, x>1सत्य है और x\3है 0: 1+x-(-1)+0=4
    • यदि xहै 3या 4, x>1सत्य है और x\3है 1: 1+x-(-1)+1= 6या7

अंत में, SLEEP1 सेकंड और लूप के लिए। यदि आपको हर फ्रेम में प्रवेश करने में कोई आपत्ति नहीं है, तो मैं तर्क को हटाकर दो बाइट्स दाढ़ी कर सकता हूं SLEEP


3

PHP, 132 131 बाइट्स

टिप्पणियों के बाद संपादन (धन्यवाद!):

<?php for(;$i<$argv[1]*5;sleep(1),system(clear),$c="    
  |-|  
──|-|──  ".floor($i/5),$c[[5,6,3,10,11][$i++%5]]=o)echo$c;

जो अपुष्ट है:

<?php

ini_set('error_reporting', '0');        # golfing precondition

for(; $i<$argv[1]*5;                    # repeat N times
  sleep(1),                             # sleep after iteration
  system(clear),                        # clear screen (linux only)
  $c = "    
  |-|  
──|-|──  " . floor($i / 5),             # define template
  $c[[5, 6, 3, 10, 11][$i++ % 5]] = o)  # replace with sheep (and finish "for" statement)
  echo $c;                              # output result

मूल पोस्ट

<?php $i=0;for(;;){system("clear");$c="  \n  |-|  \n──|-|──  ";$c[[3,4,1,8,9][$i%5]]='o';echo"  $c".floor($i++/5);sleep(1);}

Ubuntu पर परीक्षण (पता नहीं, अगर system("clear")खिड़कियों पर काम करता है)

Ungolfed:

<?php
$i = 0;
for(;;) {
  system("clear");
  $content = "  \n  |-|  \n──|-|──  ";
  $content[[3,4,1,8,9][$i%5]] = 'o';
  echo "  $content " . floor($i++/5);
  sleep(1);
}

1
Idk या तो विंडोज के बारे में, लेकिन मुझे यकीन है कि clearकोई उद्धरण की आवश्यकता है।
टाइटस

1
विंडोज के बारे में सोच ... यह clsडॉस में था ।
टाइटस

1
$i=0;चेतावनी निकालें , आमतौर पर कोड गोल्फ (-5 बाइट्स) में चेतावनी प्रदर्शित नहीं की जाती है। उसी कारण से, आपको उद्धरण चिह्नों की आवश्यकता नहीं है clearऔर o(-4 बाइट्स)। \nवास्तविक newlines (-2 बाइट्स) द्वारा प्रतिस्थापित करें । चूँकि आपके पास केवल भाव हैं, न कि कोई कथन, आप सब कुछ डाल सकते हैं, लेकिन आपके forपाश में अंतिम एक है , जिससे आप कोष्ठक ( for(;;system(clear),$c=…)sleep(1);) (-2 बाइट्स) को हटा सकते हैं । और अंत में, आप शर्त $i<$argv[0](+ 11 बाइट्स) जोड़ना भूल जाते हैं ।
ब्लैकहोल

धन्यवाद! मुझे पाश में एक प्रतिध्वनि नहीं मिली। लेकिन रेपोस्टेड समाधान यह कर रहा है।
user470370 5

3

नोड.जेएस + नींद , 169 बाइट्स

c='   2\n01|-|34\n──|-|──  '
for(i=0;i<process.argv[2]*5;require('sleep').sleep(1))console.log('\033[2J'+c.replace(i%5,'o').replace(/\d/g,' ')+Math.floor(i++/5))

मूल समाधान

नोड.जेएस, 146 142 185 बाइट्स

केवल ubuntu टर्मिनल के साथ परीक्षण किया गया (और अब n भेड़िये के साथ):

i=0
c='   2\n01|-|34\n──|-|──  '
setInterval(function(){console.log('\033[2J'+c.replace(i%5,'o').replace(/\d/g,' ')+Math.floor(i++/5))
if(process.argv[2]*5==i)process.exit()},9)

खैर, यह एक फ्रेम हर 9 एमएस है। एक अधिक नींद-सुखदायक संस्करण (हर 1s फ्रेम):

i=0;setInterval(function(){console.log('\033[2J'+'   2\n01|-|34\n──|-|──  '.replace(i%5,'o').replace(/\d/g,' ')+Math.floor(i++/5))},1000)

और अपुष्ट:

var i = 0;
setInterval(function(){
  console.log('\033[2J' + '   2\n01|-|34\n──|-|──  '.replace(i%5, 'o').replace(/\d/g, ' ') + Math.floor(i++/5));
}, 1000)

अपने पहले समाधान में, मैं N भेड़ के लिए पैरामीटर भूल गया
user470370

2

05AB1E , 66 60 59 बाइट्स

FNU5Fð4×N<i¨'oJ},N<iðë'o}ðNÉis}"|-|  "JN1›iR},…──|Â'-sððXJ,

CP-1252 एन्कोडिंग का उपयोग करता है ।

Explanantion

Iteration भेड़ों की यात्रा के आंतरिक पुनरावृत्ति (0 -> 4) को संदर्भित करता है।

मुख्य छोरों

F      # For N in range [0 .. input)
 NU    # Save N in variable X
 5F    # For N in range [0 .. 5)

शीर्ष पंक्ति उत्पन्न करें

ð4×         # push 4 spaces
N<i    }    # if we're on the 2nd iteration
   ¨'oJ     # replace the last space with an "o"
,           # print row

मध्य पंक्ति उत्पन्न करें

N<iðë'o}     # push a space if we're on the 2nd iteration, else push "o"
ð            # push a space
NÉis}        # if we're on an odd numbered iteration, swap the stacks top 2 chars
"|-|  "      # push this string
J            # join the stack to one string
N1›iR}       # if we're on the any of the last 3 iterations, reverse the string
,            # print row

नीचे की पंक्ति उत्पन्न करें

…──|  # push the string "──|"
     # push a reversed copy
'-s   # push "-" between the 2 strings on the stack
ðð    # push 2 spaces
X     # push the N we saved in the main loop (current sheep number)
J,    # join and print row

1

जेली , 55 54 53 बाइट्स

ị30214D¤“o    ”ṙ“   “
““|-|““
__|-|__  ”ż
×5Ḷµ:5ż@Ç€Y

TryItOnline

प्रिंट्स फ्रेम को फीड द्वारा अलग किया जाता है।

कैसे?

ị30214D¤“o    ”ṙ“   “
““|-|““
__|-|__  ”ż           - Link 1, build a frame without counts: frameNumber
       ¤              - nilad and link(s) as a nilad:
 30214                -     literal 30214 (a nilad)
      D               -     to decimal: [3,0,2,1,4]
ị                     - index into (1-based and modular, so frames go 4,3,0,2,1,4,...)
        “o    ”       - string "o    "
               ṙ      - rotated to the left by that number
                “   “ - the rest, except the last character, is:
““|-|““               -     an array of strings ["   ","\n","","|-|","","\n__|-|__  "]
__|-|__  ”            -     i.e. split where a sheep might go

          ż           - zip the sheep (the rotated "o    ") into that

×5Ḷµ:5ż@Ç€Y - Main link: nSheep
×5          - multiply by 5 -> nFrames
  Ḷ         - lowered range: [0,1,2,...nFrames-1]
   µ        - monadic chain separation
    :5      - integer division by 5 (vectorises): [5 zeros, 5 ones, ..., 5 (nSheep-1)s]
      ż@    - zip with reversed arguments
        ǀ  - call last link (1) as a monad for each (zip sheep numbers with frames)
          Y - join with line feeds (TODO: replace with future animate frames atom :p)

1

पायथन 2, 171 159 144 बाइट्स, 163 151 136 अक्षर

पुनरावर्ती फ़ंक्शन का उपयोग करके समाधान। F (int) के रूप में कॉल करें

संपादित करें

-12 टिप्पणियों को फिर से जारी करने और यह देखने के बाद कि जब भेड़ खेत के अंत तक पहुँचती है तो गिनती नहीं बढ़ानी पड़ती है

-15 सीधे सूचकांक सूची के माध्यम से पुनरावृत्ति करके और एक चर खो देता है

def f(a,x=0):
 if a>0:
  for c in 5,6,3,10,11:
   b=list('    \n  |-|  \n──|-|──  ');b[c]='o';print"\n"*50+"".join(b)+(`x`)
  f(a-1,x+1)

टिप्पणियाँ

UTF-8 एन्कोडिंग मानता है

प्रयोग - के बजाय (@Luis MATL उत्तर के रूप में) वर्ण गणना से मिलान करने के लिए बाइट काउंट 8 से नीचे लाएगा और UTF-8 निर्भरता खो देगा

50 नए लिंक जोड़े गए - आउटपुट कंसोल पर सबसे नीचे है (ओएस.सिस्टम ("स्पष्ट" आयात और उपयोग करने की तुलना में सस्ता) और विंडोज और लिनक्स पर काम करता है)

आउटपुट के बीच 1 दूसरी बार देरी के साथ संस्करण (170 बाइट्स, 162 वर्ण)

import time
def f(a,x=0):
 if a>0:
  for c in 5,6,3,10,11:
   b=list('    \n  |-|  \n──|-|──  ');b[c]='o';print"\n"*50+"".join(b)+(`x`);time.sleep(1)
  f(a-1,x+1)

1

बैश + मानक लिनक्स उपयोगिताओं (339 बाइट्स)

e(){ echo "$@";}
n(){ e -n "$@";}
r(){ [ $? -eq 0 ]&&s=o||s=" ";[ $1 ]&&n " $s "||n "$s";}
f(){ k=$(($1%5));n "  ";[ $k -eq 2 ];r .;e "  ";for i in 0 1;do [ $k -eq $i ];r;done;n "|-|";for i in 3 4;do [ $k -eq $i ];r;done;e;n "──|-|──";}
for l in `seq 1 $1`;do for z in `seq 0 4`;do clear;f $z;e "  $((l-1))";sleep 1;done;done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.