घंटे की चुनौती


43

घंटा

इस घंटाघर में 60 "रेत का समय" है, और यह पूरी तरह से प्रत्येक कक्ष को भरता है। घड़ी की लंबाई 19 वर्ण और ऊँचाई 13 वर्ण है। प्रत्येक कक्ष में रेत की 5 पंक्तियाँ होती हैं और केंद्र में एक पंक्ति होती है जो 1 रेत पकड़ सकती है। शीर्ष पंक्ति 17 रेत, अगले एक 15 और इतने पर पकड़ सकती है (नीचे देखें)। रेत प्रति सेकंड एक रेत की दर से नीचे के कक्ष में गिरती है।

       START                     3 SECONDS LATER               38 SECONDS LATER

███████████████████            ███████████████████            ███████████████████
█.................█   17       █..............   █   14       █                 █    0
██...............██   15       ██...............██   15       ██               ██    0
███.............███   13       ███.............███   13       ███.......      ███    7  
█████.........█████   09       █████.........█████   09       █████.........█████   09 
███████.....███████   05       ███████.....███████   05       ███████.....███████   05 
█████████.█████████   01       █████████.█████████   01       █████████.█████████   01 
███████     ███████            ███████  .  ███████            ███████  .  ███████  
█████         █████            █████    .    █████            █████    .    █████   
███             ███            ███      .      ███            ███....         ███
██               ██            ██               ██            ██...............██  
█                 █            █                 █            █.................█  
███████████████████            ███████████████████            ███████████████████   

चुनौती

एक निश्चित अवधि (0 ≤ t) 60) के बाद प्रति घंटा (कोई संख्या या शीर्षकों की आवश्यकता नहीं है) प्रदर्शित करें।

कोडिंग नियम

  1. घंटाघर बिलकुल वैसा ही दिखना चाहिए जैसा कि यहाँ दिखाया गया है। आप अपनी भाषा (यूनिकोड, एएससीआईआई संगतता मुद्दों) को फिट करने के लिए चरित्र और / या चरित्र को बदल सकते .हैं।
  2. इनपुट एक संख्या होना चाहिए जैसे कि 45 या 7. इन कई सेकंड के बाद घड़ी प्रदर्शित करें।
  3. आउटपुट या तो फ़ाइल में प्रदर्शित या सहेजा जा सकता है। जैसा कि ऊपर दिखाया गया है, कोई अतिरिक्त पाठ या लेबल की आवश्यकता नहीं है - बस प्रति घंटा हम सभी की आवश्यकता है।
  4. यदि उपयोगकर्ता t> 60 में प्रवेश करता है, तो आपको त्रुटि को संभालने की आवश्यकता नहीं है।

अंक

  1. सबसे छोटा कोड जीतता है।

मुझे नहीं पता कि यह सिर्फ मेरे लिए है, लेकिन घंटे के चश्मे संपादक की तुलना में पूरी तरह से अलग दिखते हैं। ऐसा शायद इसलिए है क्योंकि doesn't चरित्र उचित चौड़ाई के साथ प्रदर्शित नहीं होता है।
डेनिस

1
क्या रेत का एक दाना वर्तमान परत को छूता है, फिर बाईं ओर एक सेकंड के बाद संरेखित करें?
xnor

2
टी == 59 के लिए आउटपुट क्या होना चाहिए?
edc65

3
स्टैक एक्सचेंज हॉट नेटवर्क प्रश्न सूची बनाने के लिए बधाई!
एलेक्स ए।

1
यह वास्तव में एक जवाब नहीं है, क्योंकि यह चश्मा फिट नहीं है, लेकिन डेसमोस में प्रस्तुत करने के लिए यहां एक नज़र डालें। (प्ले बटन दबाएं और ~ 1 यूनिट / सेकंड के लिए गति 0.15x पर सेट करें)
कॉनर ओ'ब्रायन

जवाबों:


27

जावास्क्रिप्ट ( ईएस 6 ), 203 208 233 270 256 वर्ण

कॉल के अनुक्रम के बजाय लूप का उपयोग करके संशोधित करें

संपादित जोड़ा ऊपर और नीचे पंक्ति है कि लापता हैं।

एक फ़ंक्शन आउटपुट लौटाता है। परीक्षण करने के लिए फ़ायरफ़ॉक्स में स्निपेट चलाएँ।

f=w=>[h='█'[R='repeat'](19),...[17,15,13,9,5,1,5,9,13,15,17].map((d,i)=>(t=i>5?-v:v,v-=i<5?d:1-d,e=' '[R](d/2),b='█'[R](10-d/2),b+('.'[R](t<d&&d-t)+e+' .'[i>4&w>i-6&t>=d|0]+e).slice(0,d)+b),v=w),h].join`
`

// Less golfed
F=
w=>[h='█'.repeat(19),
    ... [17, 15, 13, 9, 5, 1, 5, 9, 13, 15, 17].map(
     (d,i) => (
       t = i>5 ? -v : v,
       v -= i<5 ? d : 1-d, 
       e = ' '.repeat(d / 2),
       b = '█'.repeat(10 - d / 2),
       b + 
        ('.'.repeat(t < d && d - t) 
         + e + ' .'[i > 4 & w > i-6 & t >= d | 0]
         + e).slice(0,d)
       + b
     ), v = w
    ),
    h].join('\n')

// TEST            

O.innerHTML=f(+I.value)

function tick(d) {
  var i=+I.value+d
  I.value=i
  O.innerHTML=f(i)
}

var int=0;

function auto()
{
  function go()
  {
    var t = I.value;
    O.innerHTML=f(++t)
    if (t>70)t=0;
    I.value = t;
  }
  if (A.checked && !int)
  { 
    int = setInterval(go, 200);
  }
  else if (!A.checked && int)
  {
    clearInterval(int);
    int = 0;
  }
}
input[type=text] { width: 3em }
<button onclick='tick(-1)'>-</button>
<input type=text id=I value=0 onchange='tick(0)' >
<button onclick='tick(1)'>+</button>
<input type=checkbox id=A onclick='auto()'>Fly time
<pre id=O><pre>


5
मेरी जिज्ञासा के लिए, इसे दो बार क्यों नकारा गया? मुझे इससे कोई समस्या नहीं है।
मैनटवर्क

यह जवाब बहुत बढ़िया है ! इसे फ़ायरफ़ॉक्स में खोलें, लोग!
क्रिस्टियन लुपस्कू

1
अच्छा जवाब है, लेकिन प्रति घंटा का शीर्ष और आधार गायब लगता है।
रेन लीडर

@manatwork निश्चित रूप से (निश्चित रूप से) नहीं है, लेकिन वास्तव में एक दोष था
edc65

कृपया एक सेट करें। (), जावास्क्रिप्ट उस के लिए बहुत अच्छा होगा:setTimeout( tick, 1000);
Martijn

18

अजगर 2, 200

t=input()+1
s=' '*t+'.'*60+' '*70
n=0
d=sum((1<t<56,2<t<48,3<t<36,4<t<22))
for c in'ctrplhdhlprtc':i=ord(c)-99;print[s[n+i:n:-1],[s[180-n-i+d:][:i],'.'][5+d*3>i>0]][n>59].center(i).center(19,'#');n+=i

xnor ने चैट में 197 बाइट संस्करण बनाया है ।

मैं एक स्पष्टीकरण पोस्ट करूंगा, लेकिन मैंने यह ट्रैक किया है कि यह वास्तव में कैसे काम करता है ...

इसके अलावा, यहाँ शाप के साथ एक एनिमेटेड संस्करण है:

hourglass

from curses import*
w=initscr()

for t in range(1,61):
    s=' '*t+'.'*60+' '*70
    n=0
    d=sum((1<t<56,2<t<48,3<t<36,4<t<22))
    for i in 0,17,15,13,9,5,1,5,9,13,15,17,0:w.addstr([s[n+i:n:-1],[s[180-n-i+d:][:i],'.'][5+d*3>i>0]][n>59].center(i).center(19,'#')+"\n");n+=i
    w.refresh()
    w.clear()
    napms(999)

endwin()

1
यार, तुमने मुझे पता लगाया है कि तार एक केंद्र () विधि है!
आहार विशेषज्ञ

13

पायथन 2.7, 362 356 347

e,c,x,a,b,n=' .#ab\n';R,r,s,l,T,m=range,str.replace,'',19,[1,2,3,5,7,9],-1
for t in[T,T[:m][::m]]:s+=''.join([n+x*y+c*(l-y*2)+x*y for y in t]);c=b
s=list(s)
for i in R(130,220,20):s[i]=a
for _ in R(input()):s[s.index('.')]=e;i=s.index(a)if a in s else 219-s[::m].index(b);s[i]='.'
for l in(x*l+r(r(''.join(s),a,e),b,e)+n+x*l).split(n):print l[::m]

hourglass

38 सेकंड में आउटपुट:

###################
#                 #
##               ##
###.......      ###
#####.........#####
#######.....#######
#########.#########
#######  .  #######
#####    .    #####
###...   .      ###
##...............##
#.................#
###################

2
पायथन कोड किस तरह का है? मुझे उनकी तरह कोड करना सीखना अच्छा लगेगा। कृपया सही दिशा में मार्गदर्शन करें।
रजत सक्सेना

1
मुझे यकीन नहीं है कि यह एक वैध जवाब है। यदि आप 38 सेकंड के लिए बनाए गए उदाहरण को देखते हैं, तो आप देख सकते हैं कि सबसे कम डॉट जो अभी भी गिर रहा है वह उस पंक्ति में नहीं है जहां डॉट्स संरेखित करते हैं। (नीचे से चौथी पंक्ति में, केंद्र में)
RononDex

3
@ रॉनडेक्स: जैसा कि प्रश्न की टिप्पणियों में बताया गया है, भरने का क्रम इतना सख्त नहीं है - मेरा कार्यान्वयन रेत के दानों को इस तरह से बाईं ओर चिपका देता है जो प्रश्न से थोड़ा अलग है, लेकिन फिर भी मान्य है
डाइटर

3

C 544

यहाँ मैं एक सी समाधान के लिए अब तक क्या है।

#include <stdio.h>
int main(int z,char **a){int r,i,y=i=0,v,d,t,m,s=atoi(a[1]),n[13]={0,43,28,15,6,1,0,1,5,13,25,39,0};char H[13][20];while(y<13){int x,b=x=i=0;v=y-6;t=3+abs(v);m=2*abs(v);d=t<m?t:m;d=9-d;if(d==0)d=10;while (b<d){H[y][b]='#';H[y][18-b]='#';b++;}while(x<19-2*b){if(x<=s-n[y])H[y][x+b]=v>0?' ':'.';else H[y][x+b]=v>0?'.':' ';x++;}if(s>58)r=0;else if(s==58)r=1;else if(s==57)r=2;else if(s==56)r=3;else if(s>38)r=4;else if(s>24)r=3;else if(s>12)r=2;else if(s>4)r=1;while(i<r){H[7+i][9]='.';i++;}H[y][19]='\n';y++;}fputs(H,stdout);}

निम्नलिखित कमांड के साथ संकलित:

gcc -w -o hourglass hourglass.c  // I realize I should have cast H as a char *, but since it works this way, I just decided to suppress the error from the compiler instead to save space.

जाहिर है, इस भाषा में बहुत अधिक मात्रा है- जिसमें यह कथन भी शामिल है कि ब्लॉक से बाहर आने में थोड़ा बहुत बाधा थी, लेकिन मैं वास्तव में सी का उपयोग करने के लिए एक बहाना ढूंढ रहा था।

मुझे आशा है कि आप मेरे समाधान को पसंद करेंगे, और मुझे बताएंगे कि क्या आपको सुधार करने के तरीके दिखाई देते हैं।


2
इसमें सुधार करने के लिए बहुत सारे तरीके हैं, जो इसे बदतर बना देता है लेकिन बहुत छोटा होता है।
edc65

1
संकेत: forके बजाय where, ?:के बजाय if else, वैश्विक पूर्णांक चर की जरूरत नहीं है int, includeजरूरत नहीं। (मुझे आपका गणित पसंद है)
edc65

1
317: r,i,y,x,b,d,n[]={0,43,28,15,6,1,0,1,5,13,25,39,0};char H[14][20];main(s,a)char**a;{for(s=atoi(a[1]);y<13;){b=x=i=0;d=abs(y-6);d+=3<d?3:d;d=9-d?9-d:10;r=s>55?59-s:s>38?4:s>24?3:s>12?2:s>4?1:r;for(;b<19;)H[y][b++]=35;for(;x<19-2*d;x++)H[y][x+d]=(x>s-n[y]?" .":". ")[y>6];for(;i<r;)H[7+i++][9]=46;H[y++][b]=10;}puts(H);}(सावधान, अजीब अदृश्य
आकर्षण

3

मतलाब, 252 बाइट्स

विचार एक मैट्रिक्स का निर्माण कर रहा है जो इस तरह दिखता है:

0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0  17  16  15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
0   0  32  31  30  29  28  27  26  25  24  23  22  21  20  19  18   0   0
0   0   0  45  44  43  42  41  40  39  38  37  36  35  34  33   0   0   0
0   0   0   0   0  54  53  52  51  50  49  48  47  46   0   0   0   0   0
0   0   0   0   0   0   0  59  58  57  56  55   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0  60   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0 116 117  61 118 119   0   0   0   0   0   0   0
0   0   0   0   0 108 109 110 111  62 112 113 114 115   0   0   0   0   0
0   0   0  96  97  98  99 100 101  63 102 103 104 105 106 107   0   0   0
0   0  82  83  84  85  86  87  88  64  89  90  91  92  93  94  95   0   0
0  66  67  68  69  70  71  72  73  65  74  75  76  77  78  79  80  81   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

वहां से एंट्री को स्ट्रिंग्स के साथ भरना आसान है, n(उन सभी प्रविष्टियों को भरना जो डॉट्स के साथ की nतुलना में अधिक और छोटी n+60हैं)

function c=f(n);
b=zeros(13,19);
z=[0,17,32,45,54,59];
y=-2:3;
for k=2:6;
    d=k+sum(k>4:5);
    b(k,d:20-d)=z(k):-1:z(k-1)+1;
    b(14-k,d:19-d)=68+(z(k-1):z(k)-2)-k;
end;
b(8:12,11:19)=b(8:12,10:18);
b(7:12,10)=60:65;c=[ones(13,19)*32,''];
c(~b)='¶';c(n<b)=46;c(b>n+60)=32

के लिए n=38हम इस उत्पादन प्राप्त करें:

¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶
¶                 ¶
¶¶               ¶¶
¶¶¶.......      ¶¶¶
¶¶¶¶¶.........¶¶¶¶¶
¶¶¶¶¶¶¶.....¶¶¶¶¶¶¶
¶¶¶¶¶¶¶¶¶.¶¶¶¶¶¶¶¶¶
¶¶¶¶¶¶¶  .  ¶¶¶¶¶¶¶
¶¶¶¶¶    .    ¶¶¶¶¶
¶¶¶...   .      ¶¶¶
¶¶...............¶¶
¶.................¶
¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶

2

जावा, 712

इनपुट कमांड लाइन से लिया गया है। समय के लिए और साथ ही आवश्यकता से अधिक के लिए दोनों नकारात्मक मूल्यों को संभालता है।

enum H{;public static void main(String[]r){int x=0,y=0,z=0,l,t=Integer.parseInt(r[0]);String b="",d="█",e=" ",f=".",n="\n",j,k,a="███████████████████"+n;int[]w={17,15,13,9,5},v;int[][]h=new int[10][];for(;x<5;){l=w[x];v=(h[x++]=new int[l--]);l/=2;v[l]=++z;for(y=0;y++<l;){v[l-y]=++z;v[l+y]=++z;}}for(z=0;x>0;){l=w[--x];v=(h[9-x]=new int[l--]);v[l/2]=++z;}for(;x<5;){l=(w[x]-1)/2;v=h[9-x++];for(y=0;y++<l;){v[l-y]=++z;v[l+y]=++z;}}p(a);for(x=0;x<5;x++){l=w[x];j=b;for(y=0;y++*2<19-l;)j+=d;k=b;for(y=0;y<l;)k+=t<h[x][y++]?f:e;p(j+k+j+n);}j="█████████";p(j+f+j+n);for(;x>0;){l=w[--x];j=b;for(y=0;y++*2<19-l;)j+=d;k=b;for(y=0;y<l;)k+=t<h[9-x][y++]?e:f;p(j+k+j+n);}p(a);}static void p(String s){System.out.print(s);}}

उत्पादन:

time: 0
███████████████████
█.................█
██...............██
███.............███
█████.........█████
███████.....███████
█████████.█████████
███████     ███████
█████         █████
███             ███
██               ██
█                 █
███████████████████

time: 1
███████████████████
█........ ........█
██...............██
███.............███
█████.........█████
███████.....███████
█████████.█████████
███████  .  ███████
█████         █████
███             ███
██               ██
█                 █
███████████████████

time: 9
███████████████████
█....         ....█
██...............██
███.............███
█████.........█████
███████.....███████
█████████.█████████
███████  .  ███████
█████    .    █████
███      .      ███
██       .       ██
█      .....      █
███████████████████

time: 41
███████████████████
█                 █
██               ██
███..         ..███
█████.........█████
███████.....███████
█████████.█████████
███████  .  ███████
█████    .    █████
███   .......   ███
██...............██
█.................█
███████████████████

यह केंद्र से बाहर की ओर विस्तार करते हुए रेत को भरता है। मैं शायद इसे और अधिक गोल्फ कर सकता हूं यदि मैं आलसी हो जाता हूं तो यह नीचे के आधे हिस्से को कैसे भरता है और शीर्ष आधे को खाली करता है। लेकिन अभी के लिए मैं इसे काफी पसंद करता हूं।


2

हास्केल 512 बाइट्स

h=[17,15,13,9,5,1];b=drop 1$reverse h;n#s=[1..n]>>[s];s='.';n =' ';c q=(q#n)++(60-q)#s;f q|q<=5=q#s|3>2=g#s where{g=foldl i 5 (scanl (+) 0 h);i x y=if q>x+y then x-1 else x};e q=j#s++(59-length(k q)-(j))#n where{j=q-length(f q)};l q=c q++k q++(reverse$e q);p _ []=[];p x y=reverse(z++take q x++z):p (drop (head y) x) (tail y)where{q=head y;z=replicate(div (19-q) 2) '|'};k q= (concat.map(\x -> z x ++ "." ++ z x).take (length.f$q)$b)where{z x=(div x 2)#n};m n=mapM_ putStrLn $ t ++ p (l n) (h++b) ++ t;t=[19#'|'] 

इनपुट m 55

उत्पादन

|||||||||||||||||||
|                 |
||               ||
|||             |||
|||||         |||||
|||||||.... |||||||
|||||||||.|||||||||
|||||||  .  |||||||
|||||.........|||||
|||.............|||
||...............||
|.................|
|||||||||||||||||||

इनपुट m 48 आउटपुट

    |||||||||||||||||||
    |                 |
    ||               ||
    |||             |||
    |||||......   |||||
    |||||||.....|||||||
    |||||||||.|||||||||
    |||||||  .  |||||||
    |||||..       |||||
    |||.............|||
    ||...............||
    |.................|
    |||||||||||||||||||

1
PPCG में आपका स्वागत है! मैं देख रहा हूँ कि आप पहले से ही इसको थोड़ा बहुत गढ़ चुके हैं, लेकिन अभी भी बहुत सारे अनावश्यक सफेद स्थान बाकी हैं, उदा। आसपास ++। इसके अलावा, आप पूर्वनिर्धारित करके कुछ बाइट्स बचा सकते हैं lengthऔर reverse
लाकोनी

1

सी #, 382 410

यह अभी भी कुछ बाइट्स द्वारा इसे कम करने के लिए संभव हो सकता है ...

class Program{static void Main(){int u=60-22,d=u,i,j,k,l,m;var c=new char[260];var r=new int[]{0,17,15,13,9,5,1,5,9,13,15,17,0,54,45,32,17,0};for(i=0;i<13;){m=0;l=(19-r[i])/2-1;for(j=19;j>=0;){k=i*20+j--;var b=j>=l&&j<r[i]+l;if(i>6&b)c[k-r[i]+m++ +m]=r[i+6]<d&&d-->0||j==8&r[i+6]>d&&d-->0?'.':' ';else c[k]=i<7&b?u-->1?' ':'.':'█';}c[++i*20-1]='\n';}System.Console.WriteLine(c);}}

फिडलर - 38 सेकेंड


ठंडा! यह कैसे इनपुट लेता है?
इसहाक

@ आईसैक, उफ़, मैं आज बाद में इसे ठीक कर दूंगा, मुझे पता था कि यह एसी # समाधान के लिए बहुत छोटा था। अब के लिए यू = 60-22 को कुछ और बदल दें
फ्रेडौ

आप क्यों इस्तेमाल करते हैं int u=60-22और सिर्फ नहीं int u=38??
देव-माशिह

1

रूबी: 196 190 186 185 184 वर्ण

u=[0,17,15,13,9,5].map{|i|(?.*i).center 19,?#}*$/
(?1..$*[0]).map{u[?.]=' '}
l=u.reverse
5.times{|i|l[p=i*20+9]==?.&&l[' ']&&(l[p]=?|)&&l[' ']=?.}
puts u,?#*9+?.+?#*9,l.tr('. | ',' .')

सीडब्ल्यू क्योंकि पोस्ट किए गए नमूनों के बिल्कुल अनुरूप नहीं है क्योंकि यह बाईं ओर से शुरू होने वाली रेत का उपभोग करता है। अधिकतर केवल String.[]=विधि का प्रदर्शन है ।

नमूना रन:

bash-4.3$ ruby hg.rb 38
###################
#                 #
##               ##
###      .......###
#####.........#####
#######.....#######
#########.#########
#######  .  #######
#####    .    #####
###      .   ...###
##...............##
#.................#
###################

रूबी: 215 अक्षर

यह सटीक आवश्यक आउटपुट उत्पन्न करता है:

u=[0,17,15,13,9,5].map{|i|(?.*i).center 19,?#}*$/
(?1..$*[0]).map{u[?.]=' '}
l=u.reverse
5.times{|i|l[p=i*20+9]==?.&&l[' ']&&(l[p]=?|)&&l[' ']=?.}
puts ([u,?#*9+?.+?#*9,l.tr('. | ',' .')]*$/).split($/).map &:reverse

नमूना रन:

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