अंतिम काल्पनिक XV एकजुट!


9

चूँकि मैं INSANELY अंतिम फंतासी XV को उजागर घटना के लिए सम्मोहित हूं, इसलिए मैं चाहता हूं कि आप मुझे यह बताने के लिए एक कार्यक्रम लिखें कि यह कब है!

इनपुट

के रूप में आपका ले इनपुट HH:MM XDT, जहां HHरेंज में एक संख्या है 1-12, MMके बीच एक संख्या है 0-60, और XDT, एक समय क्षेत्र है साथ Xमें से एक होने E(पूर्वी, UTC-4), C(केंद्रीय, UTC-5), P(प्रशांत, UTC-7), या M(पर्वत, UTC-6)। यह पीएम बनने का समय है। मान्य इनपुट में शामिल हैं:

1:00 EDT (1 PM Eastern Daylight Time)
4:05 MDT (4:05 PM Mountain Daylight Time)
12:23 PDT (12:23 PM Pacific Daylight Time)
1:10 CDT (1:10 PM Central Daylight Time)

इनपुट को मान्य माना जा सकता है।

उत्पादन

आपके कार्यक्रम को निम्नलिखित करना चाहिए:

  1. दिए गए समय को पीडीटी और आउटपुट में परिवर्तित करें It is XX:XX PM PDT., जहां XX:XXपरिवर्तित समय है। ध्यान दें कि आपको किसी भी मामले को संभालने की आवश्यकता नहीं है जहां समय परिवर्तित करने से एएम / पीएम सीमा पार हो जाएगी।

  2. निम्न में से कोई एक प्रिंट करें:

    1. यदि परिवर्तित समय शाम 6:00 बजे से पहले है , तो प्रिंट करें X minutes until the pre-show!, X6:00 पीएमटी तक मिनटों की संख्या के साथ प्रिंट करें ।

    2. यदि परिवर्तित समय 6:00 PM PDT के बाद या बराबर है और 7:00 PM PDT से पहले , प्रिंट करें Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!, X6:00 PM PDT के बाद से पारित होने वाले मिनटों की संख्या कितनी है, और Y7:00 बजे तक मिनटों की संख्या है पीएम पी.डी.टी.

    3. यदि परिवर्तित समय 7:00 PM PDT के बाद या बराबर है , तो प्रिंट करें UNCOVERED started X minutes ago!, X7:00 PM PDT के बाद से पारित होने वाले मिनटों की संख्या कहां है।

मुद्रित प्रत्येक स्ट्रिंग को एक नई पंक्ति द्वारा पालन किया जाना चाहिए।

स्कोरिंग

यह कोड गोल्फ है, इसलिए सबसे छोटा कार्यक्रम जीतता है।


क्या सभी इनपुट वैध माने जाते हैं?
लीक नन

1
है HH:MM XDTलिखने में कोई त्रुटि? यह हो सकता है CST
लीक नन

1
चाहेंगे 2:45 EDTदिखाई तो हम पता लगाने के लिए कि क्या परिवर्तित समय प्रधानमंत्री या AM है की ज़रूरत है?
लीके नन

यह अच्छा होता अगर आप वास्तव में चार समय क्षेत्रों के यूटीसी ऑफसेट को शामिल करते ताकि मुझे उन्हें खुद को देखना न पड़े।
नील

@KennyLau CSTएक टाइपो था, और कोई भी समय ऐसा प्रतीत नहीं होता जो AM / PM सीमा को पार कर सके। पद का संपादन किया।
kirbyfan64sos

जवाबों:


1

जावास्क्रिप्ट (ईएस 6), 257 बाइट्स

s=>(t=` minutes`,a=s.match(/(\d+):(\d+) (.)/),h=+a[1]+"PMCE".search(a[3]),m=420-h*60-a[2],`It is ${h}:${a[2]} PM PDT
${h<6?m-60+t+` until the pre-show`:h<7?`Pre-show started ${60-m+t} ago; UNCOVERED is starting in ${m+t}`:`UNCOVERED started ${-m+t} ago`}!`)

बचत का पता नहीं है, लेकिन वहाँ कुछ स्ट्रिंग है जो दोहराया जाता है कि आप अधिक गोल्फ के साथ कर सकते हैं। उदाहरण के लिए "री-शो" और "UNCOVERED"।
मैट

@ मैट एक स्ट्रिंग के लिए जिसे केवल एक बार ओवरहेड 13 बाइट्स दोहराया जाता है, इसलिए इसे इसके लायक होने के लिए 14 बाइट्स की आवश्यकता होगी। "मिनट" को समय के बगल में होने और चार बार आवश्यकता होने के कारण बोनस मिला।
नील

4

पायथन (335 बाइट्स)

t=raw_input().replace(*': ').split();x='PMCE'.index(t[2][0]);t[0]=int(t[0])+x;print '%s:%s PM PDT' % tuple(t[:1]);x=t[0]*60+int(t[1]);print ['%s minutes until the pre-show!'%(360-x),'Pre-show started %s minutes ago; UNCOVERED is starting in %s minutes!'%((x-360),(420-x)), 'UNCOVERED started %s minutes ago!'%(x-420)][(x>360)+(x>420)]

आउटपुट:

1:00 MDT
2:00 PM PDT
240 minutes until the pre-show!

6:00 CDT  
8:00 PM PDT
UNCOVERED started 60 minutes ago!

6:50 PDT
6:50 PM PDT
Pre-show started 50 minutes ago; UNCOVERED is starting in 10 minutes!

PPCG में आपका स्वागत है ! आशा है कि आपके पास यहाँ एक अच्छा समय होगा।
लीके नन

यहाँ एक अप्रकाशित गोल्फ संस्करण है जो 340 बाइट्स है:t=raw_input().replace(' ',':').split(':');x='PMCE'.index(t[2][0]);t[0]=int(t[0])+x;t[2]='PDT';print'%s:%s PM %s'%tuple(t);x=t[0]*60+int(t[1]);print['%s minutes until the pre-show!'%(360-x),'Pre-show started %s minutes ago; UNCOVERED is starting in %s minutes!'%((x-360),(420-x)),'UNCOVERED started %s minutes ago!'%(x-420)][(x>360)+(x>420)]
लीक

PPCG में आपका स्वागत है, हम आशा करते हैं कि आप वही पाएंगे जो आप यहाँ चाहते हैं और हमारे साथ अपने समय का आनंद लेंगे! यदि आपके पास समय और इच्छा है, तो अपने कोड का एक ungolfed संस्करण डालना न भूलें (शायद टिप्पणियों के साथ?), जो लोगों को आपके कोड को समझने में बहुत मदद करेगा, और आपको इसे और भी अधिक गोल्फिंग के लिए टिप्स प्रदान करने में मदद करेगा;)
कैटेन्को

आप बदल सकते हैं .replace(' ', ':').split(':')के साथ .replace(*': ').split(), बचत 6 बाइट्स
ब्लू


2

लुआ, 357 335 332 बाइट्स

22 बाइट्स काटने के लिए @Katenkyo को धन्यवाद ।

golfed:

h,m,t=(...):match("(%d+):(%d+) (.)")f=tonumber h=(f(h)-("PMCE"):find(t))%12+1m=f(m)print("It is "..h..":"..m.." PM PDT.")a=" minutes"b="UNCOVERED"n=(6-h)*60-m r=h<6 and n..a.." until the pre-show!"or h<7 and"Pre-show started "..m..a.." ago; "..b.." is starting in "..(n+60)..a.."!"or b.." started "..(m+(h-7)*60)..a.." ago!"print(r)

( इसे ऑनलाइन आज़माएं )

Ungolfed:

n = "7:10 CST"

h,m,t = n:match("(%d+):(%d+) (.)")
h = (tonumber(h) - ("PMCE"):find(t))%12 + 1
m = tonumber(m)
print("It is "..h..":"..m.." PM PDT.")

n = (6-h)*60-m

if h<6 then
  r=n.." minutes until the pre-show!"
elseif h<7 then
  r="Pre-show started "..m.." minutes ago; UNCOVERED is starting in "..(n+60).." minutes!"
else
  r="UNCOVERED started "..(m+(h-7)*60).." minutes ago!"
end

print(r)

जब आपका नंबर 10 के अलावा किसी अन्य आधार में नहीं है, तो आपको कभी भी टोनर का उपयोग नहीं करना होगा, इसके बजाय, आप लिख सकते हैं h=h+0, 0 का जोड़ स्वचालित रूप से परिणाम को एक संख्या में बदल देगा। साथ ही, n=(...)अनिवार्य है? ...निम्नलिखित के रूप में इसके उपयोग को बेहतर करना आसान h,m,t=(...):match("(%d+):(%d+) (.)")नहीं होगा -> , आप इसे वैसे भी फिर से उपयोग नहीं करेंगे, जैसा कि आप तब nउपयोग करने के मूल्य में बदलाव करते हैं hऔर m:)
Katenkyo

इसके अलावा, आप को बदलने में सक्षम होना चाहिए अगर / फारस / अन्यथा फार्म के एक एकल विवरण के लिए r=(h<6 and n.." minutes until the pre-show!" )or h<7 and "Pre-show started "..m.." minutes ago; UNCOVERED is starting in "..(n+60).." minutes!" or "UNCOVERED started "..(m+(h-7)*60).." minutes ago!"। इसे थोड़ा फिर से काम करना पड़ सकता है, लेकिन इसके उपयोग से बहुत सी बाइट बच जाएगी। जानकारी के लिए, लुआ में एक त्रिगुट की संरचना है<condition> and <case true, have to be evaluated to true> or <case false, can be anything>
काटेंको

(अभी भी मैं क्या कहना चाहता था खत्म करने के लिए जगह नहीं थी) लुआ के लिए युक्तियों की जांच करने के लिए मत भूलना , वे अभी तक संपूर्ण नहीं हैं, लेकिन कुछ छोटी उपयोगी चीजें हैं :)
कैटेन्को

यदि आप एक आधार है कि आप h,m,t=(...):match("(%d+):(%d+) (.)")h=(h-("PMCE"):find(t))%12+1m=m+0print("It is "..h..":"..m.." PM PDT.")a=" minutes"b="UNCOVERED"n=(6-h)*60-m r=(h<6 and n.." minutes until the pre-show!" )or h<7 and"Pre-show started "..m..a.." ago; "..b.." is starting in "..(n+60)..a.."!"or b.." started "..(m+(h-7)*60)..a.." ago!"end print(r)यह सब वास्तव में 329 बाइट्स है;
कैटेन्को

मैंने इसे अपडेट किया है। 0 + मी यहां काम नहीं करता है।
लीके नन

1

सी, 333 बाइट्स

#define p printf
char s[9];main(t){gets(s);s[5]=0;s[1]-=2+s[6]%2-s[6]%3;s[1]<48&&(s[1]+=10,--*s);
t=*s*600+s[1]*60+s[3]*10+s[4]-32568;p("It is %s PM PDT.",s);
t<0?p("%d minutes until the pre-show!",-t):t<60?p(
"Pre-show started %d minutes ago; UNCOVERED is starting in %d minutes!",t,60-t):
p("UNCOVERED started %d minutes ago!",t-60);}

333 बाइट्स अनावश्यक न्यूलाइन्स को हटाने के बाद (सभी (#Dfine के बाद एक)।


बचत के बारे में निश्चित नहीं है, लेकिन आपके पास कुछ स्ट्रिंग शाब्दिक हैं जिन्हें आप "मिनट" और "UNCOVERED" जैसे जोड़ सकते हैं
मैट

1

PHP, 347 328 327 322 बाइट्स

<?=$u="UNCOVERED";$m=" minutes";$s=" started ";$p="re-show";$z=['P'=>0,'M'=>1,'C'=>2,'E'=>3];$i=explode(":",$argv[1]);$h=$i[0]%12-$z[$argv[2][0]];$o=$i[1];$t=60-$o;$a="$s$o$m ago";echo"It is ".(($h+11)%12+1).":$o".($h<0?" A":" P")."M PDT.\n".($h<6?$t."$m until the p$p!":($h<7?"P$p$a; $u is starting in $t$m!":"$u$a!"));?>

एक्स्प्लोडेड वीयू

<?=
  $u = "UNCOVERED";
  $m = " minutes";
  $s = " started ";
  $p = "re-show";
  $z = [ 'P' => 0,
         'M' => 1,
         'C' => 2,
         'E' => 3 ];

  $i = explode(":", $argv[1]);
  $h = $i[0]%12 - $z[$argv[2][0]];
  $o = $i[1];
  $t = 60 - $o;
  $a = "$s$o$m ago";

  echo "It is " . (($h+11)%12+1) . ":$o" . ($h < 0 ? " A" : " P") . "M PDT.\n" .
       ($h < 6 ? $t . "$m until the p$p!"
               : ($h < 7 ? "P$p$a; $u is starting in $t$m!"
                         : "$u$a!"));
?>

के रूप में चलाता है php script.php HH:MM XDT। के रूप में समय और समय क्षेत्र में ले जाता है $argvप्रविष्टियों, regexes $argv[1]बाहर में $i = [HH, MM], में पहले वर्ण से समय क्षेत्र निर्धारित करता है $argv[2], बाहर गणित कितने मिनट अतीत 06:00 पीडीटी है कि, तो ternaries echo

का उपयोग करके 2 बाइट्स को छोड़ सकता है $u=UNCOVERED, लेकिन यह यहां एकमात्र त्रुटि होगी और मुझे यह पसंद है कि यह सफाई से काम करता है।


0

पॉवरशेल 292 बाइट्स

$r,$i,$s,$u="re-show"," minutes"," start","UNCOVERED";$h,$m,$z=$args[0]-split":| ";$h=+$h-"PMCE".IndexOf($z[0]);"It is $h`:$m PM PDT.";if(($t=$h*60+$m-360)-lt0){"$($t*-1)$i until the p$r!"}else{if($t-gt59){"$u$s`ed $($t-60)$i ago!"}else{"P$r$s`ed $t$i ago; $u is$s`ing in $(($t-60)*-1)$i!"}}

कम गोल्फ की व्याख्या

# Some string literals.
$r,$i,$s,$u,$g="re-show"," minutes"," start","UNCOVERED"," ago"
# Get the hours, minutes and zone into variables.
$h,$m,$z=$args[0]-split":| "
# Offset the time based on the passed timezone. 
$h=+$h - "PMCE".IndexOf($z[0])
# Display current PDT time.
"It is $h`:$m PM PDT."

# Based on adjusted time value for PDT determine what string to show. 
# Several string literals were used to save space.
if(($t=$h*60+$m-360)-lt0){
    # Show has not started yet
    "$($t*-1)$i until the p$r!"
}else{
    if($t-gt59){
        # Between 6 and 7
        "$u$s`ed $($t-60)$i$g!"
    }else{
        # It's after 7. Should have check more often. 
        "P$r$s`ed $t$i$g; $u is$s`ing in $(($t-60)*-1)$i!"
    }
}

"पहले" के लिए शाब्दिक कोड में हटा दिया गया था, लेकिन अन्य परिवर्तनों के मामले में अब स्पष्टीकरण के लिए छोड़ दिया गया है।


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