codegolf.com: समय की बचत


11

Codegolf.com से (15 सितंबर, 2011 को लोड नहीं हुआ) वह था जो मुझे पागल कर रहा था। एक सटीक फॉर्म की एक घड़ी के लिए प्रिंट करें, STDIN से समय पढ़ रहा है और hघंटे और mमिनट पर अंकन कर रहा है (5 से अधिक की संख्या तक नीचे) और xयदि वे ओवरलैप करते हैं, तो अप्रयुक्त टिक एक के साथ चिह्नित हैं o, ताकि

echo "23:13" | perl script.pl

पैदावार

        o
    h       o

 o             m

o               o

 o             o

    o       o
        o

मेरा है:

$/=':';($h,$m)=<>;printf'%9s
%5s%8s

%2s%14s

%s%16s

%2s%14s

%5s%8s
%9s',map{qw'o h m x'[2*($_==int$m/5)^$_==$h%12]}map{$_,11-$_}0..5

पर्ल का उपयोग करते हुए 136 वर्णों के लिए। मेरी इच्छा है कि मैं साइट पर पहुंच सकूं, लेकिन मुझे याद है कि नेता 100 से कम उम्र के थे, साथ ही पर्ल का भी इस्तेमाल कर रहे थे। क्या कोई और इसे हरा सकता है?



एक आकर्षक पाठ :)
JB

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

1
क्या एक गंभीर कारण है कि एक सर्कल के बजाय, इस तरह के नींबू के आकार में कुछ का उपयोग करना है?
यूजर अनजान

1
@userunknown: मूल कार्य संभवतः एक व्यापक फ़ॉन्ट का उपयोग करके बनाया गया था।
हमार

जवाबों:


3

गोल्फस्क्रिप्ट, 75 बाइट्स

टिप्पणियों में जुड़े लेख से प्रेरित ।

':'/{~}/5/:m;12%:h;"XXXXXXXXXXXX"{..318\%9/' '*@12%.h=2*\m=+'omhx'=@85/n*}%

यह XXXXXXXXXXXXभाग 12 बाइट्स डेटा का प्रतिनिधित्व करता है, उनमें से कुछ अनपेक्षित हैं, और उन्हें बाइट अनुक्रम से प्रतिस्थापित किया जाना चाहिए 120 47 253 22 194 9 183 44 196 55 125 246

सुविधा के लिए, यहाँ एक base64 एन्कोडेड संस्करण है:

JzonL3t+fS81LzptOzEyJTpoOyJ4L/0Wwgm3LMQ3ffYiey4uMzE4XCU5LycgJypAMTIlLmg9Mipc
bT0rJ29taHgnPUA4NS9uKn0l

उदाहरण रन:

$ echo -n "JzonL3t+fS81LzptOzEyJTpoOyJ4L/0Wwgm3LMQ3ffYiey4uMzE4XCU5LycgJypAMTIlLmg9MipcbT0rJ29taHgnPUA4NS9uKn0l" | base64 -d > saving-time.gs
$ ls -l saving-time.gs 
-rw-r--r-- 1 ahammar ahammar 75 2012-01-29 17:31 saving-time.gs
$ ruby golfscript.rb saving-time.gs <<< "15:37"
        o
    o       o

 o             o

o               h

 o             o

    m       o
        o

2

सी, 259 244 163 चार

स्टड के साथ प्रतिस्थापित कमांड लाइन तर्क (आवश्यकतानुसार, यह भी कम होता है)।
59 से ऊपर के मिनटों के लिए हटाए गए समर्थन - 3 वर्णों की बर्बादी।
कोड को लाइन ब्रेक और इंडेंटेशन के साथ दिखाया गया है, लेकिन वर्ण उनके बिना गिने गए थे।

main(i,h,m,x){
    scanf("%d:%d",&h,&m);
    for(i=0;i<12;
        printf("%*c","IEHBNAPBNEHI"[i++]-64,"ohmx"[(x==h%12)+2*(x==m/5)]))
        x=i%2?puts("\n"+(i%10==1)),11-i/2:i/2;
    puts("");
}

पुराना प्रयास (ANSI एस्केप कोड का उपयोग करके), 244 वर्ण:

f(x,y)char*y;{printf("\033[%d%c",x>0?x:-x,y[x<0]);}
main(i,h,m,x){
    char*v="HIJJJJIGFFFFPKJHFDCCDFHJ";
    f(i=f(scanf("%d:%d",&h,&m),"J")*0,v);
    for(;i<12;i++)
        (x=v[i+12]-72)&&f(x,"CD"),
        f(v[i]-72,"BA"),
        putchar("omhx"[2*(i==h%12)+(i==m%60/5)]);
    f(i,"B");
}

1

पायथन, 175 वर्ण

h,m=map(int,raw_input().split(':'))
S=([' ']*17+['\n'])*11
for i in range(12):p=1j**(i/3.);S[98+int(8.5*p.imag)-18*int(5*p.real)]='ohmx'[2*(i==m/5)+(i==h%12)]
print''.join(S),

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


1

पायथन, 226 वर्ण

h,p,s=raw_input().split(':'),['o']*12,[0,11,1,10,2,9,3,8,4,7,5,6]
a,b=int(h[0])%12,int(h[1])/5
p[a],p[b]='h','m' if a!=b else 'x'
print '%9s\n%5s%8s\n\n %s%14s\n\n%s%16s\n\n %s%14s\n\n%5s%8s\n%9s'%tuple([p[i] for i in s])

उपयोग: 'python script.py' चलाएं और फिर आवश्यक समय टाइप करें। (पूर्व: 09:45)

आउटपुट:

        o
    o       o

 o             o

x               o

 o             o

    o       o
        o

0

मेरा पर्ल समाधान:

use POSIX;$/=':';@ss=(8,4,1,0,1,4,8);@sn=(0,7,13,15,13,7,0);$h=<stdin>;
$m=<stdin>;if($h>12){$h=$h-12;}$m=floor($m/5);
for($c=0;$c<7;$c++){for($s=0;$s<$ss[$c];$s++){printf(" ");}
$ac='o';if($h>5&&$h-6==6-$c){$ac='h';}if((($m>5)&&$m-6==6-$c)||($m==$c)&&($c==0)){
if($h>5&&$h-6==6-$c){$ac='x';}else{$ac='m';}}
print($ac);for($s=0;$s<$sn[$c];$s++){printf(" ");}$bc='o';if($h<6&&$h==$c){$bc='h';}
if($m<6&&$m==$c){if($h<6&&$h==$c){$bc='x';}else{$bc='m';}}
if($sn[$c]){print($bc);}printf("\n");if($c&&($c!=5)){printf("\n");}}

527 बाइट्स

मेरा सी समाधान:

main(){int x[]={8,4,1,0,1,4,8},y[]={0,7,13,15,13,7,0}
,h,m,z,c,s;scanf("%d:%d",&h,&m);h>12?h-=12:h;m/=5;
for(c=0;c<7;c++){for(s=0;s<x[c];s++){printf(" ");}z='o';
if(h>5&h-6==6-c){z='h';}if((m>5&m-6==6-c)|(m==c)&!c){
z='m';if(h>5&h-6==6-c){z='x';}}printf("%c",z);
for(s=0;s<y[c];s++){printf(" ");}z='o';if(h<6&h==c){
z='h';}if(m<6&m==c){z='m';if(h<6&h==c){z='x';}}
if(y[c]){printf("%c",z);}printf("\n");if(c&&(c!=5)){printf("\n");}}}

440 बाइट्स


1
पर्ल पर एक त्वरित सुझाव: आपको पोज़िक्स की आवश्यकता नहीं है, आप स्टड से बस के साथ पढ़ सकते हैं <>और मुझे नहीं लगता कि आपको printfजिस तरह से इसका उपयोग कर रहे हैं, उसके लिए printआपको काम करने की आवश्यकता है :)
जोएल बर्जर

0

स्काला 327 चर

object C extends App{
val R=List(2,4,6,8,10)
val r=1::R:::11::R.reverse
val C=List(3,6,12,18,21)
val c=1::C:::21::C.reverse
def p(n:Int,i:Char){
val z=r(n)
val s=c((n+3)%12)
printf("[%d;%dH"+i,z,s)}
val t=readLine.split(":")
val h=t(0).toInt%12
val m=t(1).toInt/5
(0 to 11).map(x=>p(x,'o'))
p(h,'h')
p(m,'m')
if(h==m)p(h,'x')}

एक उचित सर्कल आकार के साथ उपयोग करें, न कि आपके नींबू-XXXX:

clear  && echo 5:43 | scala C 
           o
     o           o

  o                 o

o                    o

  m                 o

     o           h
           o

ungolfed:

object Clock {
 val R = List (2,4,6,8,10)
 val r = 1 :: R ::: 11 :: R.reverse
 val C = List (3,6,12,18,21)
 val c = 1 :: C ::: 22 :: C.reverse

 def pos (n: Int, i: Char)={
   val z = r (n) 
   val s = c ((n+3) % 12) 
   printf ("[%d;%dH" + i, z, s)
 }

 def main (args: Array [String]) {
   val t = args (0).split (":")
   val h = t (0).toInt % 12
   val m = t (1).toInt /  5
   (0 to 11).map (x=> pos (x, 'o'))
   pos (h, 'h') 
   pos (m, 'm')
   if (h == m) pos (h, 'x')
  }
}

पॉज़ (y, x) पर आउटपुट के लिए एएनएसआई-कोड का उपयोग करता है। चूँकि हमें केवल 5 मिनट सटीकता की आवश्यकता है, x और y के लिए पूर्व-निर्धारित मान उनके आयात के साथ पाप और कॉस कार्यों को संभालने से कम प्रतीत होते हैं।


0

पायथन, 176 वर्ण

o=map(ord,' .@Set~lWC2&!/0ABTUfgu')
h,m=map(int,raw_input().split(':'))
print''.join([' ',['\n','ohmx'[2*(i==o[m/5])+(i==o[h%12])]][i in o[:12]]][i in o]for i in range(24,127))

0

पर्ल 131 वर्ण

<>=~/:/;$h=$`%12;$m=$'/5;printf'%9s
%12$5s%8s

%11$2s%14s

%10$s%16s

%9$2s%14s

%8$5s%8s
%9s',map$_^$h?$_^$m?o:'m':$h^$m?h:x,0..11
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.