বর্ধমান গেমের সময় ফর্ম্যাট


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
jnovacho

1
@ jnovacho এটা হবে না 3d? "প্রদর্শিত প্রথম বিভাগটি হ'ল প্রথম শূন্যের মান"
লুইজি

@ লুইগি সত্য আমি এটা মিস করেছি
jnovacho

আমি কি কেবল একজনই ভাবছি যে এটি একটি "কেউ কি দয়া করে আমার জন্য এই কোডটি লিখতে পারেন" প্রশ্ন?
ফো

এটি প্রতিদিন নয় যে কোনও কোড গল্ফ কার্য সম্ভবত কার্যকর হতে পারে। আমি বলি এটির সাথে যান: ডি
জিওবিটস

উত্তর:


7

সিজেএম (স্ন্যাপশট), 41 38 বাইট

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

উপরেরগুলি ক্যারেট স্বরলিপি ব্যবহার করে, যেহেতু দুটি চরিত্রই অপ্রিনিত।

2 বাইট বন্ধ করে গল্ফ করার জন্য @ স্প3000 কে ধন্যবাদ

পরীক্ষামূলক

সর্বশেষতম স্থিতিশীল রিলিজ (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=" ")- খুব চালাক।
ওল্ডরুকমুডিজিয়ন

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

সম্পাদনা: +4 অক্ষর, কারণ আমি ভুলে গেছি 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

লাইভ ডেমো এবং সমস্ত পরীক্ষার কেস।

অগোছালো, অগোছালো, অগোছালো ...

অ্যান্ড্রয়েডের জন্য ক্রোমে পরীক্ষার কেসগুলি কার্যকর করতে প্রায় 3-7 সেকেন্ড সময় নেয়। ডিবাগ মোড ব্যবহার করবেন না , যা মুদ্রিত হবে এমন সমস্ত আউটপুট কারণে এই ক্ষেত্রে আপনার ব্রাউজারকে হিমশীতল করতে পারে।


আরএস কি? -----
কালেব পল

@ ওয়াইডশ্যাঙ্কস আমি শিরোনামে একটি লিঙ্ক যুক্ত করেছি। এটি আমি লিখলাম একটি রেজেক্স ভিত্তিক ভাষা-ইশ জিনিস।
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();
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.