Final Fantasy XV DÉCOUVERT!

9

Étant donné que je suis incroyablement excité pour l' événement Final Fantasy XV Uncovered , je veux que vous m'écriviez un programme pour me dire quand c'est !!!

L'entrée

Votre entrée de prise sous la forme de HH:MM XDT, où HHest un nombre dans la plage 1-12, MMest un nombre entre 0-60et XDTest un fuseau horaire, avec Xétant l'un de E(est, UTC-4), C(central, UTC-5), P(pacifique, UTC-7), ou M(montagne, UTC-6). Il s'agit d'une heure supposée PM. Les entrées valides incluent:

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)

L'entrée peut être considérée comme valide.

Le résultat

Votre programme doit faire ce qui suit:

  1. Convertissez l'heure donnée en PDT et en sortie It is XX:XX PM PDT., où XX:XXest l'heure convertie. Notez que vous n'avez pas besoin de gérer les cas où la conversion de l'heure franchirait la frontière AM / PM.

  2. Imprimez l'un des éléments suivants:

    1. Si l'heure convertie est antérieure à 18 h 00 HAP, imprimez X minutes until the pre-show!en remplaçant Xpar le nombre de minutes jusqu'à 18 h 00 HAP.

    2. Si l'heure convertie est postérieure ou égale à 18 h 00 HAP et avant 19 h 00 HAP , imprimez Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!, où Xest le nombre de minutes qui se sont écoulées depuis 18 h 00 HAP et Yle nombre de minutes jusqu'à 7 h 00. PM PDT.

    3. Si l'heure convertie est postérieure ou égale à 19 h 00 HAP , imprimez UNCOVERED started X minutes ago!, où Xest le nombre de minutes qui se sont écoulées depuis 19 h 00 HAP.

Chaque chaîne imprimée doit être suivie d'une nouvelle ligne.

Notation

C'est le golf de code, donc le programme le plus court gagne.

kirbyfan64sos
la source
Toutes les entrées sont-elles supposées être valides?
Leaky Nun
1
Est-ce HH:MM XDTune faute de frappe? Ça peut l'être CST.
Leaky Nun
1
Apparaîtrait 2:45 EDTdonc nous devons détecter si l'heure convertie est PM ou AM?
Leaky Nun
Cela aurait été bien si vous aviez réellement inclus les décalages UTC des quatre fuseaux horaires, donc je n'ai pas eu à les rechercher moi-même.
Neil
@KennyLau Le CSTétait une faute de frappe, et aucun temps ne pourrait traverser la frontière AM / PM. Modifié le message.
kirbyfan64sos

Réponses:

1

JavaScript (ES6), 257 octets

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`}!`)
Neil
la source
Je ne connais pas les économies mais il y a quelques cordes qui se répètent avec lesquelles vous pourriez jouer davantage. "re-show" et "UNCOVERED" par exemple.
Matt
@Matt Pour une chaîne qui n'est répétée qu'une fois que la surcharge est de 13 octets, elle devrait donc être longue de 14 octets pour en valoir la peine. "minutes" a obtenu un bonus pour être à côté du temps et avoir été nécessaire quatre fois.
Neil
4

Python (335 octets)

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)]

Production:

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!
Shubham Mishra
la source
Bienvenue chez PPCG ! J'espère que vous passerez un bon moment ici.
Leaky Nun
Voici une version golfée non testée de 340 octets: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)]
Leaky Nun
Bienvenue chez PPCG, nous espérons que vous trouverez ce que vous voulez ici et que vous apprécierez votre temps avec nous! Si vous avez le temps et que vous voulez, n'oubliez pas de mettre une version non golfée de votre code (peut-être avec des commentaires?), Cela aidera grandement les gens à comprendre votre code et les aidera à vous donner des conseils pour le jouer encore plus;).
Katenkyo
Vous pouvez remplacer .replace(' ', ':').split(':')par .replace(*': ').split(), en économisant 6 octets
Blue
Nous sommes même !
Leaky Nun
2

Lua, 357 335 332 octets

Merci à @Katenkyo d' avoir coupé 22 octets.

Golfé:

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)

( Essayez-le en ligne )

Non golfé:

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)
Leaky Nun
la source
Vous n'avez jamais à utiliser tonumber lorsque votre numéro n'est pas dans une autre base que 10, au lieu de cela, vous pouvez écrire h=h+0, l'ajout de 0 convertira automatiquement le résultat en un nombre. Aussi, est-ce n=(...)obligatoire? ne serait-il pas préférable d'inclure l'utilisation de ...comme suit -> h,m,t=(...):match("(%d+):(%d+) (.)"), vous ne le réutiliserez pas de toute façon, car vous modifiez ensuite la valeur de l' nutilisation de het m:)
Katenkyo
De plus, vous devriez pouvoir vous changer si / elseif / else pour une seule déclaration ternaire du formulaire 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!". Il faudra peut-être le retravailler un peu, mais son utilisation permettra d'économiser beaucoup d'octets. Pour information, la structure d'un ternaire à lua est<condition> and <case true, have to be evaluated to true> or <case false, can be anything>
Katenkyo
(n'avait toujours pas l'espace pour terminer ce que je voulais dire) N'oubliez pas de vérifier les conseils pour lua , ils ne sont pas encore exhaustifs, mais il y a quelques petites choses utiles :)
Katenkyo
Voici une solution de golf non testée si vous voulez qu'une base inclue tout ce qui 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) est en fait 329 octets;).
Katenkyo
Je l'ai mis à jour. 0 + m ne fonctionne pas ici.
Leaky Nun
1

C, 333 octets

#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 octets après la suppression des sauts de ligne inutiles (tous sauf celui après le #define).

mIllIbyte
la source
Je ne suis pas sûr des économies mais vous avez des littéraux de chaîne que vous pourriez ajouter comme "minutes" et "UNCOVERED"
Matt
1

PHP, 347 328 327 322 octets

<?=$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!"));?>

vue éclatée

<?=
  $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!"));
?>

Fonctionne comme php script.php HH:MM XDT . Prend le temps et le fuseau horaire comme $argventrées, regexes $argv[1]dans $i = [HH, MM], détermine le fuseau horaire à partir du premier caractère $argv[2], calcule combien de minutes après 6PM PDT qui est, puis ternaire le echo.

Pourrait supprimer 2 octets en utilisant $u=UNCOVERED , mais ce serait la seule erreur ici et j'aime que cela fonctionne correctement.

ricdesi
la source
0

PowerShell 292 octets

$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!"}}

Explication moins golfée

# 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!"
    }
}

Le littéral pour "il y a" a été supprimé dans le code mais pour l'instant laissé dans l'explication en cas d'autres changements.

Mat
la source
Je pense que je suis allé à la mer sur certains littéraux et ça l'a rendu plus long ....
Matt