वृद्धिशील खेल समय प्रारूप


18

वृद्धिशील खेल समय प्रारूप

लक्ष्य

वृद्धिशील खेलों में अक्सर एक उलटी गिनती घड़ी होती है जो किसी कार्य के पूरा होने तक दिन, घंटे, मिनट और सेकंड को व्यक्त करती है। उपलब्ध स्थान के आधार पर, उन्हें निम्नानुसार स्वरूपित किया जा सकता है:

2d 13h
23h 59m 48s
14m
3h 0m 0s

इस कोड गोल्फ का लक्ष्य एक फ़ंक्शन या प्रोग्राम लिखना है जो इस प्रारूपण को निष्पादित करता है।

इनपुट

  • सेकंड की कुल संख्या।
  • आउटपुट के लिए सेगमेंट की अधिकतम संख्या।

उत्पादन

  • खंडों में शामिल हैं:
    • 0 सप्ताह
    • 0 दिन
    • 0 घंटे
    • 0 मी मिनट
    • 0 सेकंड
  • प्रत्येक खंड को एक ही स्थान से अलग किया जाता है।
  • प्रदर्शित सेगमेंट सन्निहित होना चाहिए। उदाहरण के लिए, आप मिनट दिखाए बिना घंटे और सेकंड नहीं दिखाएंगे, भले ही शून्य मिनट हों।
  • एकल-अंकीय मानों में अग्रणी शून्य नहीं होता है, हालांकि शून्य का मान अवश्य दिखाया जाना चाहिए 0
  • मूल्यों को गोल कर दिया जाता है।
  • पहला खंड प्रदर्शित किया गया पहला गैर-शून्य मान है।

परीक्षण के मामलों

seconds  segments  output
     0      1      0s
   123      1      2m
   123      2      2m 3s
   123      3      2m 3s
 82815      3      23h 0m 15s
307891      2      3d 13h
307891      4      3d 13h 31m 31s
604800      1      1w
604800      6      1w 0d 0h 0m 0s

जीतना

एक सप्ताह में सबसे कम बाइट-गिनती समाधान "स्वीकृति" जीतेंगे।

संपादित करता

  • स्पष्ट है कि कौन सा खंड पहले है, जैसा कि उदाहरणों में दिखाया गया है।
  • अनुरोध के अनुसार परीक्षण केस 4 जोड़ा गया।

के लिए अपेक्षित आउटपुट क्या है 307891 1? 0wया 1w
13 सितंबर को jnovacho

1
@jnovacho यह नहीं होगा 3d? "पहला खंड प्रदर्शित किया गया पहला गैर-शून्य मान है"
लुइगी

@ लुइगी ट्रू। मुझे वह याद आ गया है।
जन्नोचो जू '

क्या मैं केवल यह सोच रहा हूं कि यह "कोई मेरे लिए यह कोड लिख सकता है" सवाल है?
fho

यह हर दिन एक कोड गोल्फ कार्य वास्तव में उपयोगी हो सकता है नहीं है। मैं कहता हूं कि इसके साथ चलें: D
Geobits

जवाबों:


7

CJam (स्नैपशॉट), 41 38 बाइट्स

q~"<<^X^G"{imd\}%W%"wdhms":s.+_{0=}#><S*

ऊपर दिए गए कैरेट नोटेशन का उपयोग करता है, क्योंकि दो अक्षर अप्राप्य हैं।

2 बाइट बंद करने के लिए @ Sp3000 का धन्यवाद।

परिक्षण

नवीनतम स्थिर रिलीज़ (0.6.5) में एक बग है जो पैदा कर सकता है{}# को वापस करने का है। विरोधाभासी रूप से, यह पूर्णांक ( i) में कास्टिंग द्वारा दरकिनार किया जा सकता है ।

ऑनलाइन इंटरप्रेटर के साथ कोड के साथ इसे चलाने के लिए, इस पर्मलिंक पर क्लिक करें या से कोड को कॉपी करें इस पेस्ट कॉपी करें

वैकल्पिक रूप से, आप निम्न कमांड को निष्पादित करके नवीनतम स्नैपशॉट डाउनलोड और निर्माण कर सकते हैं:

hg clone http://hg.code.sf.net/p/cjam/code cjam-code
cd cjam-code/
ant

आप सीजेएम फाइल को इस तरह बना सकते हैं:

base64 -d > game-time.cjam <<< cX4iPDwYByJ7aW1kXH0lVyUid2RobXMiOnMuK197MD19Iz48Uyo=

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

q~        e# Read an evaluate the input.
"<<^X^G"  e# Push the string corresponding to the array [60 60 24 7
{         e# For each character:
  i       e#   Replace it by its code point.
  md      e#   Push divisor and residue of the division by that code point.
  \       e#   Swap their order.
}%
W%        e# Reverse the resulting array.
"wdhms":s e# Push ["w" "d" "h" "m" "s"].
.+        e# Perform vectorized concatenation.
_         e# Push a copy.
{0=}#     e# Find the index of the first pair with positive integer.
>         e# Remove the preceding pairs.
<         e# Truncate to the number of pairs specified in the input.
S*        e# Join, separating by spaces.

6

जावा, 197 191 बाइट्स

String p(int s,int m){String a[]={s%60+"s",(s/=60)%60+"m",(s/=60)%24+"h",(s/=24)%7+"d",(s/7)+"w"},b="",z="";for(s=5;s>0&&a[--s].charAt(0)=='0';);for(;s>=0&&--m>=0;z=" ")b+=z+a[s--];return b;}

मैंने अभी देखा कि जावा घोषणा की तरह समर्थन करता है String a[]। इसने मुझे उसी पंक्ति में bऔर उस घोषणा को खींचने की अनुमति दी z, जिसने मुझे Stringफिर से लिखने से बचाया ।


1
जैसे ;z=" ")- बहुत चतुर।
OldCurmudgeon

5

सी, 134 127 110 104 103 बाइट्स

नया संस्करण:

a,e=5;f(n,x){for(;e;n%=a)a=(int[]){1,60,3600,86400,604800}[--e],x>e?printf("%u%c ",n/a,"smhdw"[e]):0;}

पुराना वर्जन:

#define p(a) x>--e?printf("%u%c ",n/a,"smhdw"[e]):0;n%=a;
e=5;f(n,x){p(604800)p(86400)p(3600)p(60)p(1)}

4

पायथ, 39 43 बाइट्स

jd_>vz+V?u?GeGPG+m%~/QddCM"<<"Q)Q]0"smhdw

edit: +4 chars, क्योंकि मैं 0sटेस्ट केस भूल गया ।

इसमें 2 अनपेक्षित वर्ण शामिल हैं। वास्तविक कोड प्राप्त करें और इसे ऑनलाइन आज़माएं: प्रदर्शन

स्पष्टीकरण:

                                         z = 1st input line (segments, as string)
                                         Q = 2nd input line (time, as int)
                         "<<.."          string with 4 chars
                       CM                convert to ASCCI-values => [60,60,24,7]
                m                        map each d of ^ to:
                   /Qd                     Q / d 
                  ~                        update Q, but use the old value for
                 %  Q d                    Q mod d
                                         this gives [sec, min, hour, day]
               +               Q         add Q (week)
        u                       )        apply the following expression to G, 
                                         starting with G = [s,m,h,d,w], until
                                         G stops changing:
         ? eG                              if eG != 0:
          G                                  update G with G (stop changing)
                                           else:
             PG                              update G with G[-1]
                                         this gets rid of trailing zeros
      +V                         "smhdw  vectorized add with "smhdw"
   >vz                                   only use the last eval(z) items
  _                                      reverse order
jd                                       join by spaces and print

3

पायथन 2.7 - 181 178 174 बाइट्स

गोल्फ के लिए मेरा पहला प्रयास।

def I(s,M):
 z=[0]*5;j=0
 for i in [604800,86400,3600,60,1]:z[j],s=s/i,s%i;j+=1
 l=[z.index(n)for n in z if n][0]
 return" ".join([str(i)+n for n,i in zip('wdhms',z)][l:l+M])

1
पहला पहला प्रयास! मेरे छठे प्रयासों में से कुछ से बेहतर ...;) आप if n!=0बस को बदलकर 3 बाइट्स काट सकते हैं if n
kirbyfan64sos

अरे हाँ, भूल गया कि 0 गलत मूल्यांकन करता है। धन्यवाद।
f.rodrigues

2

जूलिया, 158 बाइट्स

मुझे यकीन है कि यह अधिक चतुर दृष्टिकोण के साथ छोटा हो सकता है, लेकिन यह वही है जो मेरे पास है।

(s,g)->(j=0;p=cell(5,1);for i=[604800,86400,3600,60,1] p[j+=1],s=s÷i,s%i end;z=findfirst(p);z>0?join([string(p[i],"wdhms"[i])for i=z:min(z+g-1,5)]," "):"0s")

यह एक अनाम फ़ंक्शन बनाता है जो दो पूर्णांकों को इनपुट के रूप में स्वीकार करता है और एक स्ट्रिंग लौटाता है। इसे कॉल करने के लिए, इसे एक नाम दें, उदाf=(s,g)->...

असंगठित + स्पष्टीकरण:

function f(s, g)
    # Initialize an array and an index
    p = cell(5, 1)
    j = 0

    # Loop over the number of seconds in a week, day, hour,
    # minute, and second
    for i in [604800, 86400, 3600, 60, 1]
        # Set the jth element in p to be the quotient and s
        # to be the remainder of i into s
        p[j+=1], s = s ÷ i, s % i
    end

    # Get the index of the first nonzero value in p
    z = findfirst(p)

    if z > 0
        # We start the string at the first nonzero value
        # and continue until we hit the desired number of
        # units (z+g-1) or the maximum number of units (5),
        # whichever comes first. The appropriate unit is
        # appended to each value and the values are then
        # joined with a space.
        join([string(p[i], "wdhms"[i]) for i in z:min(z+g-1,5)], " ")
    else
        # If there are no nonzero values in p, we just
        # have 0 seconds
        "0s"
    end
end

उदाहरण:

julia> f(82815, 6)
"23h 0m 15s"

julia> f(604800, 4)
"1w 0d 0h 0m"

1

स्काला, 147 बाइट्स

def p(s:Int,i:Int)=List(s/604800+"w",s/86400%7+"d",s/3600%24+"h",s/60%60+"m",s%60+"s").dropWhile(k=>k.head=='0'&&k.tail!="s").take(i).mkString(" ")

1

आरएस , 367 बाइट्स

^(\d+)/(_)^^(\1)
(_*) (\d)/\1!\2
_{60}/#
#{60}/@
@{24}/:
:{7}/;
(_+)/(^^\1)s
(#+)/(^^\1)m
(@+)/(^^\1)h
(:+)/(^^\1)d
(;+)/(^^\1)w
([a-z])/\1 
w ((\d+[^\dd])|!)/w 0d \1
d ((\d+[^\dh])|!)/d 0h \1
h ((\d+[^\dm])|!)/h 0m \1
(m|^) ?!/\1 0s!
!(\d+)/!(_)^^(\1)
#
+#(\d+)([a-z]) ?(.*)!(_*)/\1\2 #\3!\4@
#/
(@+)/ (_)^^((^^\1))
!(_+) \1(_*)/!\2
_+ _+/
+\d+[a-z] ?!_/!
 *!/
^$/0s

लाइव डेमो और सभी परीक्षण मामलों।

गन्दा, गन्दा, गन्दा ...

Android के लिए Chrome पर परीक्षण मामलों को निष्पादित करने में लगभग 3-7 सेकंड लगते हैं। करो नहीं डिबग मोड का उपयोग करें, जो सभी उत्पादन है कि मुद्रित किया जाएगा क्योंकि इस मामले में आपके ब्राउज़र रोक सकते हैं।



@Wideshanks मैंने शीर्षक में एक लिंक जोड़ा। यह एक रेगेक्स-आधारित भाषा है, जो मैंने लिखी थी।
kirbyfan64sos

0

सी #, 239 237 170 164 बाइट्स

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

यह नवीनतम पुनरावृति ईएससी के उत्तर से प्रेरित था

स्पष्टता के लिए प्रस्तुत:

string G(int s,int n){
    int[]x={s%60,(s/=60)%60,(s/=60)%24,(s/=24)%7,s/7};
    for(s=5;x[--s]==0&s>0;);
    var o="";
    while(n-->0&s>=0)
        o+=" "+x[s]+"smhdw"[s--];
    return o.Trim();
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.