एक एनालॉग घड़ी बनाएं [बंद]


16

एक प्रोग्राम लिखें जो ASCII ग्राफिक्स का उपयोग करके वर्तमान सिस्टम समय को एनालॉग घड़ी के रूप में प्रदर्शित करता है। घड़ी में कम से कम घंटे और मिनट के संकेत होने चाहिए, और कम से कम 5 मिनट का पर्याप्त रिज़ॉल्यूशन होना चाहिए।

डिस्प्ले आपकी इच्छानुसार छोटा और बदसूरत हो सकता है, लेकिन दिखाया गया समय आसानी से पहचानने योग्य होना चाहिए।

कार्यक्रम को लगातार चलाना है और अपनी स्थिति को अपडेट करना है। यदि आपका सिस्टम स्क्रीन को साफ कर सकता है, तो इसका उपयोग करें, अन्यथा यह घड़ी की स्थिति को बदलने के लिए पर्याप्त है।

यदि वर्ण में कम से कम 1 मिनट का रिज़ॉल्यूशन हो तो आपको कैरेक्टर काउंट पर -20% बोनस मिलता है।


जब आप कहते हैं कि एनालॉग घड़ी का अर्थ है समय की एनालॉग रैपर्सेंटेशन का सामान्य एक या कोई रूप?
मार्को मार्टिनली

1 सेकंड के संकल्प के लिए अतिरिक्त बोनस?
श्मिट

क्या वास्तविक के लिए "-20% बोनस मिलता है"? यह नहीं होना चाहिए ... सकारात्मक?
समयटेक

@Timtech: यदि आप वास्तव में यह चाहते हैं, तो मैं आपके चरित्र की गिनती में 20% जोड़ सकता हूं ...
vsz

@vsz तुम्हारा क्या मतलब है?
टिमटेक

जवाबों:


10

गणितज्ञ 207 - 42 = 165

टिक्स और घंटे के लेबल यूनिट सर्कल पर रखे जाते हैं। Hऔर Mघड़ी केंद्र के चारों ओर घूमते हुए क्रमशः पूरे घंटे और मिनटों की पूरी संख्या दिखाते हैं। Sप्रत्येक सेकंड में कई बार अपनी स्थिति को अपडेट करता है।

दो संस्करण दिखाए गए हैं: एक ऐसा संस्करण जो कार्टेशियन विमान में पाठ को प्लॉट करता है, और दूसरा वह जो ग्रिड में पाठ वर्ण प्रदर्शित करता है।

यह संस्करण कार्टेसियन विमान में पात्रों को प्लॉट करता है।

d = Dynamic; t = Table; x = Text;i_~u~k_ := {Sin[2 \[Pi] i/k], Cos[2 \[Pi] i/k]};
d[{f = Date[], Clock[{1, 1}, 1]}]
Graphics[d@{t[x[".", u[i, 60]], {i, 60}],t[x[i, u[i, 12]], {i, 12}],
x["H", .7 u[f〚4〛, 12]],x["M", .8 u[f〚5〛, 60]],x["S", .9 u[f〚6〛, 60]]}]

नीचे दी गई घड़ी 3:08:17 का समय दिखाती है

घड़ी

टर्मिनल या ग्रिड संस्करण : 430 316 चार्ट (253 बोनस छूट के साथ)

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

d = Dynamic; i_~u~k_ := Round /@ (10 {Sin[2 \[Pi] (i + 3 k/4)/k], 
Cos[2 \[Pi] (i + 3 k/4)/k]}); d[{f = Date[], Clock[]}]
z = Round /@ (# u[f[[#2]], #3] + 11) -> #4 &;
t = Table[( u[i, 12] + 11) -> i, {i, 12}];
d@Grid[ReplacePart[ConstantArray["", {21, 21}],
Join[z @@@ {{.9, 5, 60, "M"}, {.8, 4, 12, "H"}},
DeleteCases[Table[( u[i, 60] + 11) -> "*", {i, 60}], x_ /; MemberQ[t[[All, 1]], x[[1]]]], t]]]

नीचे दी गई घड़ी 11:06 प्रदर्शित होती है ।

टर्मिनल घड़ी


सिर्फ मनोरंजन के लिए:

यहाँ एनालॉग घड़ी का गैर-असिसी संस्करण है। (60 वर्ण) कोई बाहरी पुस्तकालयों का उपयोग नहीं किया गया था।

Dynamic@Refresh[ClockGauge@AbsoluteTime[], UpdateInterval -> 1]

clock3


2
मुझे ASCII कला नहीं लगती।
जो जेड

3
मैंने विकिपीडिया में दी गई परिभाषा का पालन किया: "ASCII कला एक ग्राफिक डिज़ाइन तकनीक है, जो प्रस्तुति के लिए कंप्यूटर का उपयोग करती है और इसमें 19 प्रिन्ट से ASCII मानक द्वारा परिभाषित 95 प्रिंट करने योग्य (कुल 128) वर्णों से एक साथ पाई गई तस्वीरें होती हैं और ASCII अनुरूप चरित्र। मालिकाना विस्तारित वर्णों के साथ सेट (मानक 7-बिट ASCII के 128 वर्णों से परे)। यह शब्द सामान्य रूप से पाठ आधारित दृश्य कला को संदर्भित करने के लिए भी शिथिल रूप से उपयोग किया जाता है। "
डेविड एफसी 23'13

2
हम्म। मुझे लगता है कि काम करता है। मुझे उम्मीद है कि vsz टर्मिनल कला की उम्मीद कर रहा था, हालांकि। शायद वह स्पष्ट कर सकता है।
जो जेड

14

जावास्क्रिप्ट 370 - 74 = 296

http://jsfiddle.net/wBKQ6/7/

(यह केवल क्रोम में काम करता है क्योंकि मैं इस तथ्य का दुरुपयोग कर रहा हूं कि तत्व आईडी वैश्विक दायरे में जोड़े जाते हैं)।

(function loop(){
    M=Math;p=M.PI/2;z=M.pow;q=M.sqrt;d=new Date();h=(d.getHours()%12/3*p+p)%(p*4);m=(d.getMinutes()/15*p+p)%(p*4);s=(d.getSeconds()/15*p+p)%(p*4);e=49;o='';

    for(r=0;r<99;r++){
        for(c=0;c<99;c++){           
            d=q(z(r-e,2)+z(c-e,2));
            a=(M.atan2(e-r,e-c)+p*4)%(p*4);
            E=(d<e*.8&&M.abs(m-a)*d<.5) || (d<e*.5&&M.abs(h-a)*d<.5) || (d<e*1&&M.abs(s-a)*d<.5);
            o+=d-e>0||d<1||E||(e-d<5&&a%p==0)?'●':'○';
            //■□●○
        }
        o+='\n';
    }
    O.innerText=o
    setTimeout(loop,1000);
})()

गोल्फ (370):

!function L(){p=M.PI/2;q=p*4;P=M.pow;d=new Date();s=(d.getSeconds(S=d.getMinutes(e=40))/15*p+p)%q;m=(S/15*p+p)%q;h=(d.getHours(A=M.abs)%12/3*p+S/180*p+p)%q;for(r=o='';r<81;r++,o+='\n')for(c=0;c<81;){d=M.sqrt(P(r-e,2)+P(c-e,2));a=(M.atan2(e-r,e-c++)+q)%q;o+='○●'[d-e>0|d<e*.8&A(m-a)*d<1|d<e/2&A(h-a)*d<1|d<e&A(s-a)*d<1|e-d<5&a%p==0]}O.innerText=o;setTimeout(L,9)}(M=Math)

नमूना आउटपुट (डेमो में अधिक संघनित):

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●○○○○○○●○○○○○○●●●●●●●●●●●●●●
●●●●●●●●●●●●○○○○○○○○●○○○○○○○○●●●●●●●●●●●●
●●●●●●●●●●○○○○○○○○○○●○○○○○○○○○○●●●●●●●●●●
●●●●●●●●○○○○○○○○○○○○●○○○○○○○○○○○○●●●●●●●●
●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○●●●●●●●
●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○●●●●●●
●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○●●●●●
●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○●●●●
●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○●●●●
●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○●●●
●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○●●●
●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○●●
●●○○○○○○○○○○○○○○○○○○○○○○○○○●○○○○○○○○○○○●●
●○○○○○○○○○○○○○○○○○○○○○○○○○●●○○○○○○○○○○○○●
●○○○○○○○○○○○○○○○○○○○○○○○○●●○○○○○○○○○○○○○●
●○○○○○○○○○○○○○○○○○○○○○○○●●○○○○○○○○○○○○○○●
●○○○○○○○○○○○○○○○○○○○○○○●●○○○○○○○○○○○○○○○●
●○○○○○○○○○○○○○○○○○○○○○●○○○○○○○○○○○○○○○○○●
●○○○○○○○○○○○○○○○○○○○○●○○○○○○○○○○○○○○○○○○●
●●●●●○○○○○○○○○○○○○○○●○○○○○○○○○○○○○○○●●●●●
●○○○○○○○○○○○○○○○○○○●○●○○○○○○○○○○○○○○○○○○●
●○○○○○○○○○○○○○○○○○○●○○●○○○○○○○○○○○○○○○○○●
●○○○○○○○○○○○○○○○○○●○○○○●●○○○○○○○○○○○○○○○●
●○○○○○○○○○○○○○○○○○●○○○○○●●○○○○○○○○○○○○○○●
●○○○○○○○○○○○○○○○○●○○○○○○○●●○○○○○○○○○○○○○●
●○○○○○○○○○○○○○○○●●○○○○○○○○●●○○○○○○○○○○○○●
●●○○○○○○○○○○○○○○●○○○○○○○○○○○●○○○○○○○○○○●●
●●○○○○○○○○○○○○○●○○○○○○○○○○○○○●○○○○○○○○○●●
●●●○○○○○○○○○○○○●○○○○○○○○○○○○○○●○○○○○○○●●●
●●●○○○○○○○○○○○●○○○○○○○○○○○○○○○○●○○○○○○●●●
●●●●○○○○○○○○○○●○○○○○○○○○○○○○○○○○●○○○○●●●●
●●●●○○○○○○○○○●○○○○○○○○○○○○○○○○○○○●●○○●●●●
●●●●●○○○○○○○●●○○○○○○○○○○○○○○○○○○○○●●●●●●●
●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○○○●●●●●●
●●●●●●●○○○○○○○○○○○○○○○○○○○○○○○○○○○●●●●●●●
●●●●●●●●○○○○○○○○○○○○●○○○○○○○○○○○○●●●●●●●●
●●●●●●●●●●○○○○○○○○○○●○○○○○○○○○○●●●●●●●●●●
●●●●●●●●●●●●○○○○○○○○●○○○○○○○○●●●●●●●●●●●●
●●●●●●●●●●●●●●○○○○○○●○○○○○○●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

अगर मैं दूसरा हाथ हटाता तो शायद मैं स्कोर 263 से नीचे ला सकता था, लेकिन मुझे यह पसंद है!
श्मिट

3
स्माइली चेहरे घड़ियाँ भी पसंद करते हैं: jsfiddle.net/wBKQ6/17/show/light
Shmiddty

फेल्ट काम नहीं कर रहा है ...
गणित चिलर

@tryingToGetProgrammingStandard यह Chrome 30 में मेरे लिए काम कर रहा है
Shmiddty

im रनिंग 24.0 फ़ायरफ़ॉक्स, बस इसे क्रोम में आज़माया - यह काम किया, अगर आप संपादित करते हैं तो मैं केवल अपना वोट बदल सकता हूं ...
मैथ चिलर

12

पायथन, 328 - 65 = 263

हर सेकंड एक नई घड़ी प्रिंट करता है, जिसमें मिनट हाथ हर मिनट अपडेट होता है।

import math,time
def p(t,r):c[int(25-r*math.cos(t))][int(25+r*math.sin(t))]='*'
while 1:
 time.sleep(1);c=[[' ']*50 for i in range(50)];t=time.localtime();h=t.tm_hour*6.283+t.tm_min/9.549
 for i in range(999):
    p(i/158.0,24);p(h,i*.02);p(h/12,i*.01)
    for q in range(12):p(q/1.91,24-i*.005)
 for y in range(50):print''.join(c[y])

यह जिस घड़ियों को प्रिंट करता है, वह इस तरह दिखता है (यह मेरे टर्मिनल में फैला नहीं है):

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

सेकंड से कोई कैसे पढ़ता है?
डेविड एफसी

1
एक नहीं है यह हर सेकंड प्रिंट करता है लेकिन केवल हर मिनट अपडेट होता है।
कार्डबोर्ड_बॉक्स

8

100% शुद्ध केवल! बिना कांटा!

एक अंतिम और उन्नत संस्करण वहाँ या इस पृष्ठ पर पाया जा सकता है : geeks के लिए ascii- घड़ी । लेकिन इसका इस्तेमाल न करें! इस उत्तर के अंत में नोट पढ़ें, आपको चेतावनी दी गई है! इसके बजाय इस पर्ल संस्करण का उपयोग करें !

दूसरी टिक के बिना पहली साधारण घड़ी।

स्केलेबल और संपादन योग्य:

time 2>&1 /tmp/asci-art.sh 10 10 10
              . . . 12. . .               
          11.               . 1           
        .                       .         
      .                           .       
    .                               .     
  10                                  2   
  .     H                           M .   
.                                       . 
.                                       . 
.                                       . 
9                                       3 
.                                       . 
.                                       . 
.                                       . 
  .                                   .   
  8                                   4   
    .                               .     
      .                           .       
        .                       .         
          7 .               . 5           
              . . . 6 . . .               


real    0m0.356s
user    0m0.348s
sys     0m0.004s

एक 21x21 (10x2 + 1) घड़ी को 10H10 पर एक सेकंड से भी कम समय में ड्रा करें।

यह 3 तर्क स्वीकार करता है: Usage: ascii-clock.sh [ray of clock] [Hour] [Min]जहां डिफ़ॉल्ट किरण 12 है, घड़ी का आकार 2 x ray + 1लाइनों की ऊंचाई और दोहरी चौड़ाई है क्योंकि अंतरिक्ष को एक गोल आकार प्राप्त करने का प्रयास करने के लिए जोड़ा गया है।

यदि स्क्रिप्ट को तर्क 0या 1तर्क के साथ कहा जाता है, तो यह प्रत्येक मिनट को फिर से तैयार करने के लिए लूप करेगा। यदि कम से कम घंटा (दूसरा परम) निर्दिष्ट है, तो यह केवल एक बार ही निकलेगा और बाहर निकलेगा।

Hमार्कर रे के 70% पर स्थित है और Mमार्कर रे के 90% पर स्थित है।

datebcड्रॉ की तरह या बाहरी बायनेरिज़ का कोई उपयोग नहीं !

( अगर जगह में अंतर्निहित के लिए @manatwork करने के लिए धन्यवाद )।read -t/bin/sleep

तो यह सब बिलिन शेल कमांड्स द्वारा किया जाता है ।

यह एएनएसआई अनुक्रम का उपयोग करता है, लेकिन केवल लूप के लिए और मार्करों को बोल्ड बनाने के लिए।

#!/bin/bash
# Analog clock in Ascii-Art written in BASH V4.2 +=

RAY=${1:-12} NowH=$2 NowM=$3

sqrt() {
    local -a _xx=(600000 200000)
    local _x1=${_xx[$(($1&1))]} _x0=1
    while [ $_x0 -ne $_x1 ] ;do
        _x0=$_x1
        [ $_x0 -eq 0 ] && _x1=0000 || 
        printf -v _x1 "%u" $(( (${_x0}000 + ${1}00000000000/${_x0} )/2 ))
        printf -v _x1 "%.0f" ${_x1:0:${#_x1}-3}.${_x1:${#_x1}-3}
    done
    _x1=0000$_x1
    printf ${2+-v} $2 "%.3f" ${_x1:0:${#_x1}-4}.${_x1:${#_x1}-4}
}
clksin() { # $1:moment [0-60], $2:path length, $3:variable name
    local _csin=(0 104528 207912 309017 406737 500000 587785 669131
        743145 809017 866025 913545 951057 978148 994522 1000000)
    local xsign=1 x=$1 ysign=-1 y=$1
    [ $x -gt 30 ] && xsign=-1 x=$((60-x)) 
    [ $x -gt 15 ] && x=$((30-x))
    x=00000$((RAY*1000000+xsign*${2:-10}*${_csin[$x]}))
    [ $y -gt 30 ] && y=$((60-y))
    [ $y -gt 15 ] && ysign=1 y=$((30-y))
    y=00000$((RAY*1000000+ysign*${2:-10}*${_csin[15-$y]}))
    printf ${3+-v} $3 "%.0f %.0f" \
        ${y:0:${#y}-6}.${y:${#y}-6} ${x:0:${#x}-6}.${x:${#x}-6} 
};

MLEN=000$((900*RAY))
printf -v MLEN "%.0f" ${MLEN:0:${#MLEN}-3}.${MLEN:${#MLEN}-3}
HLEN=000$((700*RAY))
printf -v HLEN "%.0f" ${HLEN:0:${#HLEN}-3}.${HLEN:${#HLEN}-3}

declare -A ticks
for ((i=1;i<=12;i++));do
    clksin $((5*(i%12))) $RAY tick
    ticks[$tick]=$i
done

while :;do
    [ "$NowM" ] || printf -v NowM "%(%M)T\n" -1
    clksin ${NowM#0} $MLEN NowM
    [ "$NowH" ] || printf -v NowH "%(%H)T\n" -1
    clksin $((5*(${NowH#0}%12))) $HLEN NowH

    [ "$2" ] || echo -en \\e[H; # ANSI sequence for top left of console
    for ((i=0;i<=2*RAY;i++));do
        x=$((RAY-i))
        sqrt $((RAY**2 - ${x#-}**2 )) y0
        printf -v y0 "%.0f" $y0
        for ((l=0;l<=2*RAY;l++));do
            y=$((RAY-l));
            sqrt $((RAY**2 - ${y#-}**2 )) x0
            printf -v x0 "%.0f" $x0
            if [ "${ticks["$i $l"]}" ] ;then
                printf "%-2s" ${ticks["$i $l"]}
            elif [ ${x#-} -eq $x0 ] || [ ${y#-} -eq $y0 ] ;then
                echo -n .\ 
            elif [ "$i $l" = "$NowM" ] ;then
                echo -en \\e[1mM\ \\e[0m
            elif [ "$i $l" = "$NowH" ] ;then
                echo -en \\e[1mH\ \\e[0m
            else
                echo -n \ \ 
            fi
        done
        echo -e \\e[K
    done
    echo -en \\e[J
    [ "$2" ] && break # Exit if at least Hour was specified
    printf -v SleepS "%(%S)T" -1
    read -t $((60-${SleepS#0})) foo
    unset NowH NowM
done

यह निम्नानुसार चल सकता है:

for time in 10:10 15:00 12:30 06:00 09:15 16:40 ;do
    echo - $time -{,}{,}{,}
    ./ascii-clock.sh 5 ${time//:/ }
    echo -{,,,,,}{,}
  done |
    sed 's/\o033\[\(.m\|[JK]\)//g;/-$/!s/$/|/;s/-$/+/' |
    column -c 80

यह कुछ इस तरह का उत्पादन करेगा:

+- 10:10 - - - - - - - + - 12:30 - - - - - - - + - 09:15 - - - - - - - +
|      . . 12. .       |       . . 12. .       |       . . 12. .       |
|    11          1     |     11    H     1     |     11          1     |
|  10              2   |   10              2   |   10              2   |
|.   H           M   . | .                   . | .                   . |
|.                   . | .                   . | .                   . |
|9                   3 | 9                   3 | 9 H               M 3 |
|.                   . | .                   . | .                   . |
|.                   . | .                   . | .                   . |
|  8               4   |   8               4   |   8               4   |
|    7           5     |     7     M     5     |     7           5     |
|      . . 6 . .       |       . . 6 . .       |       . . 6 . .       |
+- - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - +
+- 15:00 - - - - - - - + - 06:00 - - - - - - - + - 16:40 - - - - - - - +
|      . . 12. .       |       . . 12. .       |       . . 12. .       |
|    11    M     1     |     11    M     1     |     11          1     |
|  10              2   |   10              2   |   10              2   |
|.                   . | .                   . | .                   . |
|.                   . | .                   . | .                   . |
|9                 H 3 | 9                   3 | 9                   3 |
|.                   . | .                   . | .                   . |
|.                   . | .                   . | .   M           H   . |
|  8               4   |   8               4   |   8               4   |
|    7           5     |     7     H     5     |     7           5     |
|      . . 6 . .       |       . . 6 . .       |       . . 6 . .       |
+- - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - +

या के रूप में चलाया जा सकता है:

xterm -geom 86x44 -bg black -fg grey -e ./ascii-clock.sh 21 &

xterm -geom 103x52 -fn nil2 -bg black -fg grey -e ./ascii-clock.sh 25 &

gnome-terminal --geometry 103x52 --zoom .5 -e "./ascii-clock.sh 25" &

वैकल्पिक: पूर्ण पथ ड्राइंग के साथ:

#!/bin/bash
# Analog clock in Ascii-Art written in BASH V4.2 +=

RAY=${1:-12} NowH=$2 NowM=$3

sqrt() {
    local -a _xx=(600000 200000)
    local _x1=${_xx[$(($1&1))]} _x0=1
    while [ $_x0 -ne $_x1 ] ;do
        _x0=$_x1
        [ $_x0 -eq 0 ] && _x1=0000 || 
    printf -v _x1 "%u" $(( (${_x0}000 + ${1}00000000000/${_x0} )/2 ))
        printf -v _x1 "%.0f" ${_x1:0:${#_x1}-3}.${_x1:${#_x1}-3}
    done
    _x1=0000$_x1
    printf ${2+-v} $2 "%.3f" ${_x1:0:${#_x1}-4}.${_x1:${#_x1}-4}
}
clksin() { # $1:moment [0-60], $2:path length, $3:variable name
    local _csin=(0 104528 207912 309017 406737 500000 587785 669131
    743145 809017 866025 913545 951057 978148 994522 1000000)
    local xsign=1 x=$1 ysign=-1 y=$1
    [ $x -gt 30 ] && xsign=-1 x=$((60-x)) 
    [ $x -gt 15 ] && x=$((30-x))
    x=00000$((RAY*1000000+xsign*${2:-10}*${_csin[$x]}))
    [ $y -gt 30 ] && y=$((60-y))
    [ $y -gt 15 ] && ysign=1 y=$((30-y))
    y=00000$((RAY*1000000+ysign*${2:-10}*${_csin[15-$y]}))
    printf ${3+-v} $3 "%.0f %.0f" \
    ${y:0:${#y}-6}.${y:${#y}-6} ${x:0:${#x}-6}.${x:${#x}-6} 
};

MLEN=000$((900*RAY))
printf -v MLEN "%.0f" ${MLEN:0:${#MLEN}-3}.${MLEN:${#MLEN}-3}
HLEN=000$((700*RAY))
printf -v HLEN "%.0f" ${HLEN:0:${#HLEN}-3}.${HLEN:${#HLEN}-3}

declare -A ticks
for ((i=1;i<=12;i++));do
    clksin $((5*(i%12))) $RAY tick
    ticks[$tick]=$i
done

while :;do
    [ "$NowM" ] || printf -v NowM "%(%M)T\n" -1
    unset MPath
    declare -A MPath
    for ((i=1;i<=MLEN;i++));do
    clksin ${NowM#0} $i tick
    MPath[$tick]=M
    done
    [ "$NowH" ] || printf -v NowH "%(%H)T\n" -1
    unset HPath
    declare -A HPath
    for ((i=1;i<=HLEN;i++));do
    clksin $((5*(${NowH#0}%12))) $i tick
    HPath[$tick]=H
    done

    [ "$2" ] || echo -en \\e[H; # ANSI sequence for top left of console
    for ((i=0;i<=2*RAY;i++));do
    x=$((RAY-i))
    sqrt $((RAY**2 - ${x#-}**2 )) y0
    printf -v y0 "%.0f" $y0
    for ((l=0;l<=2*RAY;l++));do
        y=$((RAY-l));
        sqrt $((RAY**2 - ${y#-}**2 )) x0
        printf -v x0 "%.0f" $x0
        if [ "${MPath["$i $l"]}" ] ;then
        echo -en \\e[1m${MPath["$i $l"]}\ \\e[0m
        elif [ "${HPath["$i $l"]}" ] ;then
        echo -en \\e[1m${HPath["$i $l"]}\ \\e[0m
        elif [ "${ticks["$i $l"]}" ] ;then
        printf "%-2s" ${ticks["$i $l"]}
        elif [ ${x#-} -eq $x0 ] || [ ${y#-} -eq $y0 ] ;then
        echo -n .\ 
        else
        echo -n \ \ 
        fi
    done
    echo -e \\e[K
    done
    echo -en \\e[J
    [ "$2" ] && break # Exit if at least Hour was specified
    printf -v SleepS "%(%S)T" -1
    read -t $((60-${SleepS#0})) foo
    unset NowH NowM
done

उत्पादन कर सकता है:

+- 10:10 - - - - - - - + - 12:30 - - - - - - - + - 09:15 - - - - - - - +
|      . . 12. .       |       . . 12. .       |       . . 12. .       |
|    11          1     |     11    H     1     |     11          1     |
|  10              2   |   10      H       2   |   10              2   |
|.   H           M   . | .         H         . | .                   . |
|.   H H H   M M M   . | .         H         . | .                   . |
|9                   3 | 9                   3 | 9 H H H H   M M M M 3 |
|.                   . | .         M         . | .                   . |
|.                   . | .         M         . | .                   . |
|  8               4   |   8       M       4   |   8               4   |
|    7           5     |     7     M     5     |     7           5     |
|      . . 6 . .       |       . . 6 . .       |       . . 6 . .       |
+- - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - +
+- 15:00 - - - - - - - + - 06:00 - - - - - - - + - 16:40 - - - - - - - +
|      . . 12. .       |       . . 12. .       |       . . 12. .       |
|    11    M     1     |     11    M     1     |     11          1     |
|  10      M       2   |   10      M       2   |   10              2   |
|.         M         . | .         M         . | .                   . |
|.         M         . | .         M         . | .                   . |
|9           H H H H 3 | 9                   3 | 9                   3 |
|.                   . | .         H         . | .   M M M   H H H   . |
|.                   . | .         H         . | .   M           H   . |
|  8               4   |   8       H       4   |   8               4   |
|    7           5     |     7     H     5     |     7           5     |
|      . . 6 . .       |       . . 6 . .       |       . . 6 . .       |
+- - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - +

या

                                . . . . 12. . . .                                 
                          . . .                   . . .                           
                      . .                               . .                       
                  . 11                                      1 .                   
                .                                               .                 
              .                                                   .               
            .                                                       .             
          .                                                           .           
        .                                                               .         
      .                                                                   .       
      10                                                                  2       
    .                                                                   M   .     
    .                                                             M M M     .     
  .             H                                               M             .   
  .               H H                                       M M               .   
  .                   H                                   M                   .   
.                       H H H                       M M M                       . 
.                             H                   M                             . 
.                               H H           M M                               . 
.                                   H       M                                   . 
9                                     H   M                                     3 
.                                                                               . 
.                                                                               . 
.                                                                               . 
.                                                                               . 
  .                                                                           .   
  .                                                                           .   
  .                                                                           .   
    .                                                                       .     
    .                                                                       .     
      8                                                                   4       
      .                                                                   .       
        .                                                               .         
          .                                                           .           
            .                                                       .             
              .                                                   .               
                .                                               .                 
                  . 7                                       5 .                   
                      . .                               . .                       
                          . . .                   . . .                           
                                . . . . 6 . . . .                                 

सेकंड के साथ अंतिम संस्करण सिंक करने के लिए रेंडरिंग और नैनोस्लीप को टिक करता है ।

यह केवल हाल के लिनक्स पर काम करता है, क्योंकि यह /proc/timer_listप्रत्येक रिफ्रेश के बीच सोने के लिए दूसरे के अंश की गणना करने के लिए उपयोग होता है।

#!/bin/bash
# Analog clock in Ascii-Art written in BASH V4.2 +=

RAY=${1:-12} NowH=$2 NowM=$3

# Hires Sleep Until
# there is a need to store offset in a static var

mapfile  </proc/timer_list _timer_list
for ((_i=0;_i<${#_timer_list[@]};_i++));do
    [[ ${_timer_list[_i]} =~ ^now ]] && TIMER_LIST_SKIP=$_i
    [[ ${_timer_list[_i]} =~ offset:.*[1-9] ]] && \
        TIMER_LIST_OFFSET=${_timer_list[_i]//[a-z.: ]} && \
        break
done
unset _i _timer_list
readonly TIMER_LIST_OFFSET TIMER_LIST_SKIP

sleepUntilHires() {
    local slp tzoff now quiet=false nsnow nsslp
    local hms=(${1//:/ })
    mapfile -n 1 -s $TIMER_LIST_SKIP nsnow </proc/timer_list
    printf -v now '%(%s)T' -1
    printf -v tzoff '%(%z)T\n' $now
    nsnow=$((${nsnow//[a-z ]}+TIMER_LIST_OFFSET))
    nsslp=$((2000000000-10#${nsnow:${#nsnow}-9}))
    tzoff=$((0${tzoff:0:1}(3600*${tzoff:1:2}+60*${tzoff:3:2})))
    slp=$(( ( 86400 + ( now - now%86400 ) +
                10#$hms*3600+10#${hms[1]}*60+10#${hms[2]} -
                tzoff - now - 1
            ) % 86400)).${nsslp:1}
    read -t $slp foo
}

sqrt() {
    local -a _xx=(600000 200000)
    local _x1=${_xx[$(($1&1))]} _x0=1
    while [ $_x0 -ne $_x1 ] ;do
        _x0=$_x1
        [ $_x0 -eq 0 ] && _x1=0000 || 
    printf -v _x1 "%u" $(( (${_x0}000 + ${1}00000000000/${_x0} )/2 ))
        printf -v _x1 "%.0f" ${_x1:0:${#_x1}-3}.${_x1:${#_x1}-3}
    done
    _x1=0000$_x1
    printf ${2+-v} $2 "%.3f" ${_x1:0:${#_x1}-4}.${_x1:${#_x1}-4}
}
clksin() { # $1:moment [0-60], $2:path length, $3:variable name
    local _csin=(0 104528 207912 309017 406737 500000 587785 669131
    743145 809017 866025 913545 951057 978148 994522 1000000)
    local xsign=1 x=$1 ysign=-1 y=$1
    [ $x -gt 30 ] && xsign=-1 x=$((60-x)) 
    [ $x -gt 15 ] && x=$((30-x))
    x=00000$((RAY*1000000+xsign*${2:-10}*${_csin[$x]}))
    [ $y -gt 30 ] && y=$((60-y))
    [ $y -gt 15 ] && ysign=1 y=$((30-y))
    y=00000$((RAY*1000000+ysign*${2:-10}*${_csin[15-$y]}))
    printf ${3+-v} $3 "%.0f %.0f" \
    ${y:0:${#y}-6}.${y:${#y}-6} ${x:0:${#x}-6}.${x:${#x}-6} 
};

SLEN=000$((870*RAY))
printf -v SLEN "%.0f" ${SLEN:0:${#SLEN}-3}.${SLEN:${#SLEN}-3}
MLEN=000$((780*RAY))
printf -v MLEN "%.0f" ${MLEN:0:${#MLEN}-3}.${MLEN:${#MLEN}-3}
HLEN=000$((650*RAY))
printf -v HLEN "%.0f" ${HLEN:0:${#HLEN}-3}.${HLEN:${#HLEN}-3}

declare -A ticks
for ((i=1;i<=12;i++));do
    clksin $((5*(i%12))) $RAY tick
    ticks[$tick]=$i
done

while :;do
    [ "$NowM" ] || printf -v NowM "%(%M)T\n" -1
    unset MPath
    declare -A MPath
    for ((i=1;i<=MLEN;i++));do
    clksin ${NowM#0} $i tick
    MPath[$tick]=M
    done
    [ "$NowH" ] || printf -v NowH "%(%H)T\n" -1
    unset HPath
    declare -A HPath
    for ((i=1;i<=HLEN;i++));do
    clksin $((5*(${NowH#0}%12))) $i tick
    HPath[$tick]=H
    done
    printf -v NowS "%(%S)T\n" -1
    clksin ${NowS#0} $SLEN STick

    [ "$2" ] || echo -en \\e[H; # ANSI sequence for top left of console
    for ((i=0;i<=2*RAY;i++));do
    x=$((RAY-i))
    sqrt $((RAY**2 - ${x#-}**2 )) y0
    printf -v y0 "%.0f" $y0
    for ((l=0;l<=2*RAY;l++));do
        y=$((RAY-l));
        sqrt $((RAY**2 - ${y#-}**2 )) x0
        printf -v x0 "%.0f" $x0
        if [ "$i $l" = "$STick" ] ;then
                echo -en \\e[1ms\ \\e[0m
        elif [ "${MPath["$i $l"]}" ] ;then
        echo -en \\e[1m${MPath["$i $l"]}\ \\e[0m
        elif [ "${HPath["$i $l"]}" ] ;then
        echo -en \\e[1m${HPath["$i $l"]}\ \\e[0m
        elif [ "${ticks["$i $l"]}" ] ;then
        printf "%-2s" ${ticks["$i $l"]}
        elif [ ${x#-} -eq $x0 ] || [ ${y#-} -eq $y0 ] ;then
        echo -n .\ 
        else
        echo -n \ \ 
        fi
    done
    echo -e \\e[K
    done
    echo -en \\e[J
    [ "$2" ] && break # Exit if at least Hour was specified
    printf -v SleepS "%(%s)T" -1
    printf -v SleepS "%(%T)T" $((1+SleepS))
    sleepUntilHires $SleepS
    unset NowH NowM
done

अधिक अस्पष्ट संस्करण (2702 बाइट्स):

जैसा कि @manatwork द्वारा अनुरोध किया गया है , एक अधिक गोल्फ संस्करण है।

यह संस्करण रंगीन है और कोनों पर डिजिटल समय प्रस्तुत करता है।

#!/bin/bash
W=/proc;J=${1:-12} B=$2 A=$3 LANG=C R=$W/timer_list;if [ -f $R ];then Q=10
mapfile <$R e;for ((P=0;P<${#e[@]};P++));do ((Q+=${#e[P]}));[[ ${e[P]} =~ ^now
]]&&U=$Q;[[ ${e[P]} =~ offset:.*[1-9] ]]&&a=${e[P]//[a-z.: ]}&&break;done;c(){
local q p;read -N$U q <$R;q=${q%% nse*};q=$[${q##* }+a];p=$[2000000000-10#${q:
${#q}-9}];read -t .${p:1} M;};else c(){ local H;read -d\  H < $W/upti*;H=$[200
-10#${H#*.}];read -t .${H:1} M;};fi;u(){ local E=({6,2}00000) F=${E[$1&1]} G=1
while [ $G -ne $F ];do G=$F;[ $G -eq 0 ]&&F=0000||printf -v F "%u" $(((${G}000
+${1}00000000000/${G})/2));printf -v F "%.0f" ${F:0:${#F}-3}.${F:${#F}-3};done
F=0000$F;printf -v $2 "%.3f" ${F:0:${#F}-4}.${F:${#F}-4};};g(){ local t=($[7#0
] 104528 207912 309017 406737 500000 587785 669131 743145 809017 866025 913545
951057 978148 994522 1000000) j=1 x=$1 h=-1 y=$1;[ $x -gt 30 ]&&j=-1 x=$[60-x]
((x>15))&&x=$[30-x];x=00000$[J*1000000+j*${2:-10}*${t[$x]}];((y>30))&&y=$[60-y
];((y>15))&&h=1 y=$[30-y];y=00000$[J*1000000+h*${2:-10}*${t[15-y]}];printf -v\
$3 "%.0f %.0f" ${y:0:${#y}-6}.${y:${#y}-6} ${x:0:${#x}-6}.${x:${#x}-6};};v=000
v+=$((870 *J));printf -v v "%.0f" ${v:0:${#v}-3}.${v:${#v}-3};C=000$((780*J));
printf -v C "%.0f" ${C:0:${#C}-3}.${C:${#C}-3};D=000$[650*J];printf -v D %.f \
${D:0:${#D}-3}.${D:${#D}-3};declare -A m;for ((i=1;i<=12;i++));do g $[5*(i%12)
] $J w;m[$w]=$i;done;printf -v T "\e[1m%s\e[0m " . + \* o O;T=(${T});m["${J: \
} $J"]=${T} ;printf "\e[?25l\e[H\e[J";trap "printf '\e[?12l\e[?25h\e[$((2*J +3
))H\e[J';exit" 0 1 2 3 6 9 15; printf -v S "\\e[1;%dH%%(%%H)T\\e[%dH%%(%%M${Z:
})T\\e[%d;%dH%%(%%S)T" $[4*J] $[2*J+1] $[2*J+1] $[4*J];declare -A V;V["$[2 * J
] $[2*$J]"]="  ";while :;do [ "$A" ]||printf -v A "%(%M)T" -1;unset r;declare\
 -A r;for ((i=1;i<=C;i++));do g ${A#0} $i w;r[$w]=M;done;[ "$B" ]||printf -v \
B "%(%H)T" -1;unset s;declare -A s;for ((i=1;i<=D;i++));do g $((5*( ${B#0}%12)
)) $i w;s[$w]=H;done;printf -v z "%(%S)T" -1;g ${z#0} $v n;[ "$2" ]||echo -en\
 \\e[H;for ((i=0;i<=2*J;i++));do x=$[J-i];u $[J*J-${x#-}**2] N;printf -v N${Z:
} %.f $N;for ((l=0;l<=2*J;l++));do y=$[J-l];u $[J*J-${y#-}**2] O;printf -v O \
%.f $O;c="  ";if [ "$i $l" = "$n" ];then c=$'\e[36;1ms \e[m';elif [ "${r["${i:
} $l"]}" ] ;then c=$'\e[32;1m'${r["$i $l"]}$' \e[0m';elif [ "${s["$i $l"]}" ];
then c=$'\e[34;1m'${s["$i $l"]}$' \e[0m';elif [ "${m["$i $l"]}" ];then printf\
 -v c "%-2s" "${m["$i $l"]}";elif [ ${x#-} -eq $O ] || [ ${y#-} -eq $N ] ;then
c=.\ ;else c="  ";fi;[ "$c" != "${V["$i $l"]}" ]&& V["$i $l"]="$c" && printf \
"\e[%s;%sH%-2s" $((1+i)) $[1+l*2] "$c";done;done;[ "$2" ] &&break;printf "${Z:
}\e[H\e[7mS\e[0m";c;printf "\e[H $S" -1 -1 -1;m["$J $J"]=${T[$[10#$z%${#T[@]}]
]};unset B A;done

नोट: वैसे भी इस का उपयोग न करें!

जैसा कि यह प्रोग्राम है और बैश एक प्रोग्राम भाषा नहीं है, यह थोड़ी देर के लिए उपयोग करना ठीक नहीं है।

केवल 5 घंटों में मेमोरी खपत का थोड़ा डेमो होता है, जिसमें 7 कैरेक्टर की लंबाई होती है।

$ ascii-clock.sh 7

After     PMem   PCpu      Mem
    0'30"  0.0%  21.6%   12.98M
   10'30"  1.0%  20.9%   48.91M
 1h 0'30"  5.6%  20.8%  228.63M
 2h 0'31" 11.2%  20.8%  444.25M
 3h 0'32" 16.8%  20.8%  659.91M
 5h 0'00" 27.9%  20.8%   1.064G

इसका मुख्य लाभ यह है कि जब मुझे स्मृति की आवश्यकता होती है, तो मुझे बस घड़ी को मारना पड़ता है।

( नोट: मैंने इसे विलय कर दिया है, पर्ल संस्करण और उसी की एक संस्करण है, जो gksks ;-) पर ascii- घड़ी पर है;


@manatwork क्यों? यह एनालॉग है, लगातार चलाएं और 1 सेकंड से कम समय में ड्रॉ करें ... मुझे क्या गलत पढ़ा गया है?
एफ। हौरी

उफ़। मेरी गलती। पहले मैंने इसे bash4.1 पर आजमाया । 4.2 पर वास्तव में लगातार चलता है और कमांड लाइन मापदंडों की आवश्यकता नहीं है।
मैनटवर्क

आवश्यकता पर कोई आकार सीमा नहीं है । और शुद्ध बैश में ऐसा करना एक वास्तविक चुनौती है! कांटा के बिना इस शोर करना आसान नहीं लगता है (यदि संभव हो तो)।
एफ। होरी

सही है, कोई आकार सीमा नहीं है और इसे शुद्ध रूप bashसे पूरा करना महान कौशल का प्रदर्शन है। (/ मैं उसकी टोपी लेता हूं और अपवोट लिंक पर क्लिक करता हूं) लेकिन उन 2529 वर्णों को अभी भी कोड-गोल्फ चुनौतियों की भावना में कम किया जा सकता है : “कोड-गोल्फ एक विशेष समस्या को हल करने के लिए एक प्रतियोगिता है जो स्रोत कोड के सबसे कम बाइट्स में होती है। "
मैनटवर्क

@manatwork अब एक अधिक गोल्फ वाला संस्करण है, (छोटा नहीं है: 2529bytes से, यह संस्करण अब 2702 बाइट्स है, लेकिन इसमें नई सुविधाएँ हैं)
F. Hauri

6

अजगर 2 - 207

import time as T
while 1:t=T.localtime();m=t.tm_min/5;l=[12]+range(1,12);l[m]='';l[t.tm_hour%12]='H';l[m]+='M';a='  %s\n';print(a+('%s'+a)*5+a)%tuple(str(l[x])for x in[0,11,1,10,2,9,3,8,4,7,5,6]);T.sleep(9)

यह बहुत बदसूरत है, लेकिन पठनीय है। हर 9 सेकंड प्रिंट करता है (आप चाहें तो 1 सेकंड में बदल सकते हैं), हर 5 मिनट में अपडेट करता है। मुझे अजगर में कोड गोल्फिंग का अधिक अनुभव नहीं है, इसलिए मुझे उम्मीद है कि इसमें सुधार किया जा सकता है।

उदाहरण आउटपुट:

  12
11  1
10  2
9  M
8  4
7  H
  6

18
आपकी घड़ी एक डाली प्रतीत होती है। वाहवाही!
श्मिट

3

पर्ल 5 x 65 = 325 - 65 (20%) = 260 वर्ण !!

साफ, परिपत्र, एक दूसरे टिक के साथ और हर सेकंड अपडेट किया गया।

perl -E '
$r=11;$p=atan2(1,1)/7.5;sub c{($A,$R,$C)=@_;$a[$r-$R*cos($A*$p)][
$r+$R*sin($A*$p)]=$C." "x($C!~/../)};while(::){@a=map{[map{"  "}(
0..$r*2)]}(0..$r*2);map{c$_*5,$r,$_}(1..12);@t=localtime;for$i(qw
|H:6:5:2 M:8:1:1 s:9:1:0 |){($S,$P,$F,$T)=split":",$i;map{c$F*$t[
$T],$_,$S}(do{$T?1:$P}/10*$r..$P/10*$r)};map{say@{$_}}@a;sleep 1}
'

24 लाइनों पर कंसोल अच्छा लगता है (यह 00:12:56 है ):

                    12                        
          11                    1             
                s                             


  10                  H                 2     
                      H                       
                      H                       
                      H           M M         
                      H     M M M             
                      M M M                   
9                                           3 




  8                                     4     



          7                     5             

                      6                       

और एक रंगीन, अच्छा और बेहतर संस्करण है:

#!                               /usr/bin/perl
                        use Time::HiRes qw|sleep time|
                     ;$h=11;$h=$ARGV[0]if$ARGV[0];$P=atan2
                 (1,1)/7.5;$V =4*$h; $v= 2* $h+ 1;@r=(0..2*$v)
              ;sub p{printf @_       }sub        b{ return"\e[1m"
            .pop."\e[0m"              };$              |=p"\e[?25".
           "l\e[H\e[" ."J"            ;$             SIG{ 'INT'}=sub
         {p"\e[?1"    ."2l"                        ."\e"     ."[?25h".
      "\e[%dH"        ."\e"                       ."[J"      ,$v+2;exit;
      };@z=map                                                  {[map{" "
     }@r] }(0                                                     ..2*$v);
    @Z=map{[@                                                  {$z[$_]}]}@r
   ;sub c{($A,$r ,$s                                       )=@_;$z[$h-$r*cos
  ($A*$P)    +.5 ][$h+$                                 r*sin($A*$P)+.5]=$s;}
  for$x(        0..$h) {$y=                         int(sqrt($h**2     -$x**2
 )+.5);$         z[$h-$x][$h-$                  y]=".";$z[$h+$x        ][$h-$y
 ]=".";             $z[$h-$x][$h+$           y]=".";$z[$h+$x            ][$h+$
y]=".";                $z[$h-$y][$h-$    x]=".";$z[$h+$y                ][$h-$x
]=".";                    $z[$h-$y][$h+$x]=".";$z[$h+                    $y][$h
+$x]="."};map{               c$_*5,$h,b$_}(1..12);                @R=map{[@{$z[
$_]}]}@r;while                (::){@t=localtime;                   p"\e[H\e[1;$
{V}H%0"                       ."2d\e[${v}H%02d\e"                        ."[${v
};${ V                         }H%02d",$t[2],$t[                         1],$t[
 0];@z=                         map{[     @{$R[                         $_]}]}(
 0..2*$                                                                 v);for
 $i('H:'                                                              .'65:5:'
  .'2:4',     ""                                               x1    .'M:78:'
   ."1:1" .":2",                                               "s:8". "7:1:"
    .'0:6'){($                                                  l,$p,$F,$u,$
     c)=split                                                    ":",$i;map
      {c$F*$t                                                     [$u],$_
       ,b("\e["                                                ."3${c}m$
        l")}(do{$u     ?1:$                         p} /     100*$h..$p
          /100*$h);}  $z[$            h][            $h]=  b((".","+"
            ,"*","o","O")             [$t             [0]%5]);for$x
              (@r){for$y(@r           ){$           Z[$x][$y]ne$z
                 [$x][$y]?p"\e[%d;%dH".$z  [ $x] [$y],$x+1,2*$
                    y+1:''};};@Z=map{[@{$z[$_]}]}@r;$n=1-$1
                        if time=~/(\..*)$/;p"\e[H\e[7m"
                               ."S\e[0m";sleep$n}

यह संस्करण दृढ़ता से इस अन्य उत्तर से जुड़ा हुआ है , मुख्य लाभ के साथ: आप इसे चुपचाप चला सकते थे, थोड़ी देर के लिए! तो आप वहाँ एक उन्नत संस्करण मिल सकता है या geeks वेब पेज के लिए इस ascii- घड़ी पर

एक प्रदर्शन के रूप में जो में लगभग समान है, को कम संसाधनों की आवश्यकता होती है:

$ ascii-clock.pl 7

After     PMem   PCpu      Mem
    0' 0"  0.0%   0.0%    23.5M 
   10'30"  0.0%   0.0%    23.5M 
 1h 0' 0"  0.0%   0.0%    23.5M 
 2h 0' 0"  0.0%   0.0%    23.5M 

लगभग समान सुविधाओं के लिए:

  • रिफ्रेश करने के लिए प्रत्येक सेकंड की शुरुआत का इंतज़ार करें
  • रंग और बोल्ड विशेषताओं के साथ आकर्षित करें
  • डॉट्स, घंटे टिक, घंटे और मिनट पूरे पथ और sदूसरे हैंडलर के लिए एक डॉट के साथ पूर्ण चक्र खींचें ।
  • आकर्षित डिजिटल घड़ी उत्साह घंटे ऊपरी दाएँ भाग में, मिनट और नीचे दाईं ओर सेकंड
  • शीघ्र एक Sशीर्ष पर, छोड़ दिया जब सो (के साथ अंतर के लिए देखो संस्करण के )

प्लस

  • उन्नत संस्करण अधिकृत करता है -a अंश में आरेखित घंटे और मिनट पथ के लिए तर्क को है (12h पर 11h59 स्थान घंटे का पथ)।

एक और पर्ल संस्करण दें !!!

निम्नलिखित (सुंदर) चित्र का उपयोग करना:

पर्ल कोड का एक अद्भुत प्रतिनिधित्व

तुम बस से हो सकता है:

curl http://i.stack.imgur.com/xvbHP.png |
  perl -e 'use GD;GD::Image->trueColor(1);$i=GD::Image->newFromPng(
      STDIN);my($x,$y)=$i->getBounds();for my$k(0..$x-1){for my$l(0
      ..$y-1){$_.=pack"UUU",$i->rgb($i->getPixel($k,$l))};};eval'

ठीक है, यह gd2-perl स्थापित होने की आवश्यकता है। लेकिन आप curlद्वारा प्रतिस्थापित किया जा सकता हैwget -O - ;-)

(नोट: यह चित्र १.५ केबी के पास है। मैंने एक और एक ही चित्र बनाया है , लेकिन इसकी लंबाई १ ९ ०० बाइट्स है। आपको यह चित्र मिल सकता है, साथ ही गीक्स के लिए एएससी-क्लॉक पर उसी का एक संस्करण भी मिल सकता है :-)


पिछले नमूने में, मैं (पुरजोर अनुशंसा करते हैं /) को बदलने के लिए सुझाव है कि evalद्वारा printअज्ञात डाउनलोड किया कोड को चलाने से पहले ;-) क्रम में
एफ HAURI

2

Tcl, 288

while 1 {scan [clock format [clock seconds] -format %k-%M] %d-%d h m
regsub -all \ +|. "oaosocowoeouooovoioxozom   r    n\n" \ {&} p
lset p [set h [expr $h%12*2]] h
lset p [set m [expr $m/5*2]] [expr $h-$m?"m":"x"]
puts [string map /\ $p {rr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru}]}

ठीक है, यहाँ कुछ स्पष्टीकरण है:

  • while 1 {...} - ठीक है, स्पष्टीकरण भूल जाओ।
  • regsub -all \ +|. "oaosocowoeouooovoioxozom r n\n" \ {&} pपरिणाम के +|.साथ बदलता है _{\0}और संग्रहीत करता है ppवास्तव में एक गड़बड़ शब्दकोश है जहां पहली कुंजी गायब है (या तत्वों की एक विषम संख्या के साथ एक सूची)।
  • lset p [set h [expr $h%12*2]] h प्रतिस्थापन सूची में घंटे सेट करता है
  • lset p [set m [expr $m/5*2]] [expr $h-$m?"m":"x"]मिनट सेट करता है। यदि घंटे और मिनट समान हैं, तो xइसके बजाय उपयोग करें ।
  • string map /\ $p {rr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru} /\ $pके बराबर है "/ $p", इसलिए मैं पहली कुंजी जोड़ता हूं ( /)। उसके बाद मैं एक कुंजी की हर घटना को rr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrruउसके मूल्य के साथ बदल देता हूं ।

सामान्य नक्शा है

/ o a o s o c o w o e o u o o o v o i o x o z o m {   } r {    } n {
}

(पढ़ें के रूप में "बदलें /के साथ o, की जगह aके साथ o... की जगह mके साथ___ रिक्त स्थान (कि होना चाहिए))

मैं एक repace oसाथ hऔर के साथ एक अन्य m, m, rऔर nसिर्फ उत्पादन स्ट्रिंग shoren लिए कर रहे हैं (मैं, उनमें से एक के साथ कई रिक्त स्थान की जगह भी \nसाथ n)। मैं पहले तत्व को बाद में जोड़ता हूं इसलिए मैं उस सूचकांक के लिए h * 2 + 1 के बजाय h * 2 का उपयोग कर सकता हूं जिसे मैं प्रतिस्थापित करता हूं। (2 वर्ण बचाता है)

कुछ नोट:

  • Tcl की एक सूची में व्हॉट्सएप को सीमांकक के रूप में उपयोग किया जाता है, यदि किसी तत्व में व्हिलस्पेस होता है, तो आपको इसे संलग्न करना होगा {}। ठीक है, यह थोड़ा और अधिक जटिल है जैसे आप एक के साथ व्हॉट्सएप से बच सकते हैं \, लेकिन इस तरह के विवरण कहीं और दस्तावेज किए जाते हैं ।
  • Tcl में एक तानाशाह सिर्फ एक सूची है जिसमें समान तत्वों की संख्या है: key1 value1 key2 value2
  • आप किसी सूची को स्ट्रिंग या स्ट्रिंग को सूची के रूप में मान सकते हैं। यदि स्ट्रिंग एक मान्य सूची है तो काम करेगा। नि: शुल्क क्रमांकन!

जब यह 14:23 है, तो यह 14:00 के बजाय 13:00 पर गलत तरीके से घंटा सूचक दिखाता है! - Tutorialspoint.com/…
सेरगिओल

वैसे, Tcl टाइमज़ोन के बारे में जानता है। अपने वातावरण को सही ढंग से सेट करें। (ऐसा लगता है कि ट्यूटोरियल यूटीसी का उपयोग करता है)
जोहान्स कुह्न

अरे! माफ़ करना। हो सकता है मैं एक अलग समय सेटअप में हूं। यहाँ यह पुर्तगाल है, हम GMT का उपयोग करते हैं, और गर्मियों में, घंटे +1 है। अतः मेरा वर प्राप्त करो।
सर्गियोल

2

जावास्क्रिप्ट 2169 - 434 = 1735

ठीक है, यह बहुत है, लेकिन वे ठीक हैं और पिछले पोस्ट ( बैश और पर्ल ) में मेरे पिछले संस्करण की तरह ही काम करते हैं ।

यह संस्करण जीक्स के लिए मेरे एससी-क्लॉक पर मिलने वाले से अधिक आपत्तिजनक है

var x='<div class="m">&nbsp;M</div>',v='<div class="s">&nbsp;s</div>',w='&nbsp;'
,r=10,q,w='&nbsp;',y='<div class="h">&nbsp;H</div>',f=new Object();function d(){
q=document.getElementById("asciiclock");var t=document.location.toString().match
(/[?]([0-9]+)/);if (t!=null) r=t[1]*1.0;a();b();}function m(e){r=e;a();}function
a(){f=[];for (var i=1;r>i;i++){var u=Math.round(Math.sqrt(Math.pow(r,2)-Math.pow
(r-i,2)));f[(2*r-i)+"x"+(r+u)]=w+".";f[(i)+"x"+(r+u)]=w+".";f[(2*r-i)+"x"+(r-u)]
=w+".";f[(i)+"x"+(r-u)]=w+".";f[(r+u)+"x"+(2*r-i)]=w+".";f[(r+u)+"x"+(i)]=w+".";
f[(r-u)+"x"+(2*r-i)]=w+".";f[(r-u)+"x"+(i)]=w+".";}for(var i=1;13>i;i++){f[Math.
round(r+r*Math.sin(Math.PI/6*i-Math.PI/2))+"x"+Math.round(r+r*Math.cos(Math.PI/6
*i-Math.PI/2))]='<div class="t">'+(i<10?w+i:i)+'</div>';}}function b(){var z='';
var s=new Date(), o=s.getMinutes()*1.0+1.0*s.getSeconds()/60,p=s.getHours()*1.0+
1.0*o/60,n=s.getSeconds()*1.0,k=s.getHours();if (k<10) k=w+k;var j=s.getMinutes(
);if (j<10) j=w+j;var h=s.getSeconds();if (h<10)h=w+h;var g=new Object();for(var
i=1;r*.78>=i;i++) {g[Math.round(r+i*Math.sin (Math.PI/30*o-Math.PI/2))+"x"+Math.
round(r+i*Math.cos(Math.PI/30*o-Math.PI/2))]=x;};for (var i=1;r*.62 >=i;i++) {g[
Math.round(r+i*Math.sin(Math.PI/6*p-Math.PI/2))+"x"+Math.round(r+i*Math.cos(Math
.PI/6*p-Math.PI/2))]=y;};g[Math.round(r+.87*r*Math.sin(Math.PI/30*n-Math.PI/2))+
"x"+Math.round(r+.87*r*Math.cos(Math.PI/30*n-Math.PI/2))]=v;for (var i=0;2*r>=i;
i++){for(var l=0;2*r>=l;l++){if((i==r)&&(l==i)){z+=w+'<div class="t">'+['.','+',
'*','o','O'][n%5]+'</div>';}else if(f[i+"x"+l]!=undefined){z+=f[i+"x"+l]}else if
(g[i+"x"+l]!=undefined){z+=g[i+"x"+l];}else if(l==2*r){if(i==0){z+=w+'<div clas'
+'s="t">'+k+'</div>';}else if(i==l){z+=w+'<div class="t">'+h+'</div>';}else{z+=w
+w;};}else if(l==0){if(i==2*r){z+='<div class="t">'+j+'</div>';}else if(i==0){z=
'<div class="r">S</div>'+w;}else{z+=w+w}}else{z+=w+w}};z+='<br />';};q.innerHTML
=z;window.setTimeout(b,1000-new Date().getMilliseconds());};function c(){window.
setTimeout(b,0);q.innerHTML=w+q.innerHTML.substring (22);q.setAttribute('style',
'display:none');q.setAttribute('style',null)};window.onload=d;
.asciiclock { margin: 3em 0px 0px 0px;padding: 2px 4px 2px 3px; font-size: .5em;
display:inline-block;font-family:mono,monospace,courier;background:rgba(0,0,0,.7
);color: #888;}.asciiclock div{ display:inline-block;font-weight:bold;}.h{color:
#46F;}.m{color:#0F0;}.s{color:#0FF;}.r{color:#000;background:#aaa;}.t{color:#aaa
;}pre{display:inline-block;}
<head><title>Ascii-clock</title><script type="text/javascript" src="ascii-clock.js"
></script><link rel="stylesheet" href="ascii-clock.css" type="text/css"><style
type="text/css">body{margin:0;padding:0;background:#000;}.asciiclock{margin:0}
</style></head><body><div id="asciiclock" class="asciiclock"></div></body>


1

पायथन, 259 - 52 = 207

from time import*
from math import*
g=[[' ']*61 for _ in[0]*31]
while 1:
 t=localtime()
 for x in range(60):a=pi*x/30-pi/2;g[15+int(15*sin(a))][30+int(30*cos(a))]='m'if x==t.tm_min else'h'if x==t.tm_hour%12*5 else'-'if x%5 else'#'
 for r in g:print''.join(r)

नमूना उत्पादन:

                              #                              
                     -  -  -     -  -  -                     
                  -                       -                  
             -  h                           #  -             
          -                                       -          
        -                                           -        

      m                                               -      
     #                                                 #     
   -                                                     -   

  -                                                       -  
 -                                                         - 

 -                                                         - 
#                                                           #
 -                                                         - 

 -                                                         - 
  -                                                       -  

   -                                                     -   
     #                                                 #     
      -                                               -      

        -                                           -        
          -                                       -          
             -  #                           #  -             
                  -                       -                  
                     -  -  -     -  -  -                     
                              #                              

1

रूबी: 230 228 वर्ण - 46 = 182

M=Math
P=M::PI
x=->n,m=60,r,c{$><<"^[[%d;%dH%s\n"%[M.sin(n*P*2/m-P/2)*r+12,M.cos(n*P*2/m-P/2)*r*2+24,c]}
while t=Time.now
$><<"^[[2J"
1.upto(12){|i|x[i,12,11,i]}
x[t.hour*5+t.min/12,8,?H]
x[t.min,9,?M]
x[t.sec,10,?S]
sleep 0.1
end

(नोट: ^[एकल वर्ण है।)

नमूना रन (21:19:33 पर):

                      12
           11                     1



   10                                     2




       H
 9                                           3


                                       M

   8                                      4



            7   S                 5

                       6

"जैसा कि आप चाहते हैं कि बदसूरत" संस्करण: 191 181 वर्ण - 36 = 145

(छोटे आकार, कम परिशुद्धता, कोई सेकंड, समान त्रिज्या, भयानक चंचल।)

x=->n,m=60,c{$><<"^[[%d;%dH%s\n"%[Math.sin(n*6.3/m-1.6)*8+9,Math.cos(n*6.3/m-1.6)*8+9,c]}
while t=Time.now
$><<"^[[2J"
1.upto(12){|i|x[i,12,i]}
x[t.hour*5+t.min/12,?H]
x[t.min,?M]
end

नमूना रन (21:19 पर):

       12  1
   11

              2
 10


H              3
9


               M
 8

            5
    7   6

त्रिकोणमिति-कम संस्करण: 130 125 वर्ण (कोई बोनस नहीं)

( जोहान्स कुह्न के टीईसी समाधान से प्रेरित । निश्चित रूप से कितना, जैसा कि मैंने अभी भी उनके कोड को डिक्रिप्ट नहीं किया है।)

while t=Time.now
puts"^[[2J  k l a
j\tb
i\tc
h\td
  g f e".tr((t.min/5+96).chr,?M).tr(((t.hour-1)%12+97).chr,?H).tr("a-l",?*)
end

नमूना रन (21:19 पर):

  * * *
*       *
H       M
*       *
  * * *

मैंने अपने समाधान में एक स्पष्टीकरण जोड़ा। बस पूछें कि क्या कुछ स्पष्ट नहीं है।
जोहान्स कुह्न

धन्यवाद @JohannesKuhn, मैं इसे पहले ही पढ़ चुका हूँ। मेरे लिए रहस्य वाक्य रचना नहीं है, बल्कि उन स्ट्रिंग मूल्यों का कूटबन्धन है।
मैनटवर्क

पिछले एक पर मुझे सिंटैक्स त्रुटियां हो रही हैं।
समयटेक

@Timtech, यह है tr': can't convert Fixnum into String (TypeError)”? Now that you mentioned the error I dug for a version 1.8.7 and received the above error of that. Works fine on 1.9.2 and 1.9.3. Seems that ? ” ? M` पुराने संस्करणों में फिक्सनम के रूप में व्याख्या की गई थी और केवल बाद में स्ट्रिंग में बदल दिया गया था।
9

0

HTML और JS: 397 - 20% = 317.6 characters

मेरी पहली यात्रा। मैं इससे बहुत खुश नहीं हूं, लेकिन यह काम करता है और यह बहुत स्पष्ट तरीके से समय दिखाता है।

<canvas id=c width=198 height=198></canvas><script>c=document.getElementById("c")
.getContext("2d");c.r=c.rotate;c.c=c.clearRect;c.translate(99,99);for(i=0;i<60;i++)
{c.fillRect(89,-1,i%5?3:9,5);c.r(p=Math.PI/30);}setInterval(function(){n=new Date();
h=n.getHours()*5*p;c.beginPath();c.arc(0,0,86,0,7);c.fill();c.r(m=n.getMinutes()*p);
c.c(-2,-3,4,-80);c.r(h-m);c.c(-2,-3,4,-50);c.r(-h);},5);</script>

1
प्यारा, लेकिन वास्तव में जिसे हम अस्सी-कला नहीं कहते हैं ।
मैनटवर्क

0

टीआई-बेसिक 84, 587 - 20% = 469.6

:Xmax/2→Xmax:Ymax/2→Ymax:-Xmax→Xmin:-Ymax→Ymin:Degree:15→H:20→M:18→S::Circle(0,0,30):For(X,1,12)::Text(28-int(cos(X*30)*25),46+int(sin(30*X)*25),X):End:{0,0,0}→LANG:While getKey=0::getTime→LTIME::If LTIME(3)≠LANG(3)/6:Line(0,0,sin(LANG(3))*S,cos(LANG(3))*S,0)::If LTIME(2)≠LANG(2)/6:Then:::Line(0,0,sin(LANG(2))*M,cos(LANG(2))*M,0):::Line(0,0,sin(LANG(1))*H,cos(LANG(1))*H,0)::End::"SET ANGS::LTIME(1)*30+LTIME(2)/2→LANG(1)::LTIME(2)*6→LANG(2)::LTIME(3)*6→LANG(3)::Line(0,0,sin(LANG(1))*H,cos(LANG(1))*H::Line(0,0,sin(LANG(2))*M,cos(LANG(2))*M::Line(0,0,sin(LANG(3))*S,cos(LANG(3))*S:End

इसका आउटपुट बहुत सुंदर और विस्तृत है।


0

सी, 554 बाइट्स, अपडेट लगभग एक बार प्रति सेकंड।

#include <time.h>
#include <math.h>
int r=25,i,q,c,i,q,b[999];void v(float a,int f,int m){b[(r/2+(int)(sin(a)*f))*r+r/2+(int)(cos(a)*f)]=m;}void main(){float a,p=6.28,z=1.57,h,m,s;for(;;){time_t u=time(0);struct tm*l=localtime(&u);s=l->tm_sec;m=l->tm_min+s/60.;h=l->tm_hour+m/60.;system("@cls||clear");q=r*r;c=r/2;memset(b,32,q*4);for(i=0,a=p;a>0;a-=0.52,i++)v(a,c,i%3?46:i%6?124:45);v(0,0,79);v(p*s/60.-z,c-4,83);v(p*m/60.-z,c-5,77);v(p*h/12.-z,c-6,72);for(i=0;i<q;i++){c=b[i];putchar(c);if(i%r==r-1)putchar(10);}for(c=0;c<2000000;c++)hypot(3,.4);}}

परिणाम:

           |           
      .          .     



 .                     
                S    . 

       H               


-          O          -



                M      
 .                     
                     . 



     .          .      
           |            

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