¡Final Fantasy XV DESCUBIERTO!

9

¡Ya que estoy locamente entusiasmado por el evento Final Fantasy XV Uncovered , quiero que me escribas un programa para decirme cuándo es!

La entrada

Su entrada de entrada en forma de HH:MM XDT, donde HHhay un número en el rango 1-12, MMes un número entre 0-60y XDTes una zona horaria, Xsiendo uno de E(oriental, UTC-4), C(central, UTC-5), P(pacífico, UTC-7), o M(montaña, UTC-6). Este es un tiempo que se supone PM. Las entradas válidas incluyen:

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)

Se puede suponer que la entrada es válida.

La salida

Su programa debe hacer lo siguiente:

  1. Convierta el tiempo dado a PDT y salida It is XX:XX PM PDT., donde XX:XXes el tiempo convertido. Tenga en cuenta que no necesita manejar ningún caso en el que la conversión de la hora cruzaría el límite AM / PM.

  2. Imprima uno de los siguientes:

    1. Si el tiempo convertido es antes de las 6:00 p.m. PDT, imprima X minutes until the pre-show!y reemplace Xcon el número de minutos hasta las 6:00 p.m. PDT.

    2. Si el tiempo convertido es posterior o igual a las 6:00 PM PDT y antes de las 7:00 PM PDT , imprima Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!, donde Xes el número de minutos que han pasado desde las 6:00 PM PDT, y Yes el número de minutos hasta las 7:00 PM PDT.

    3. Si el tiempo convertido es posterior o igual a las 7:00 PM PDT , imprima UNCOVERED started X minutes ago!, donde Xes el número de minutos que han pasado desde las 7:00 PM PDT.

Cada cadena impresa debe ir seguida de una nueva línea.

Puntuación

Este es el código de golf, por lo que gana el programa más corto.

kirbyfan64sos
fuente
¿Se supone que todas las entradas son válidas?
Leaky Nun
1
Es HH:MM XDTun error tipográfico? Puede ser CST.
Leaky Nun
1
¿ 2:45 EDTAparecería así que necesitamos detectar si el tiempo convertido es PM o AM?
Leaky Nun
Hubiera sido agradable si realmente hubieras incluido las compensaciones UTC de las cuatro zonas horarias, por lo que no tuve que buscarlas yo mismo.
Neil
@KennyLau El CSTfue un error tipográfico, y no aparecería ningún tiempo que pudiera cruzar el límite AM / PM. Editado el post.
kirbyfan64sos

Respuestas:

1

JavaScript (ES6), 257 bytes

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
fuente
No conozco los ahorros, pero hay algunas cadenas que se repiten con las que podría jugar más golf. "re-show" y "UNCOVERED" por ejemplo.
Matt
@Matt Para una cadena que solo se repite una vez que la sobrecarga es de 13 bytes, por lo que debería tener 14 bytes de longitud para que valga la pena. Los "minutos" obtuvieron una bonificación por estar al lado del tiempo y ser necesitados cuatro veces.
Neil
4

Python (335 bytes)

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

Salida:

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
fuente
Bienvenido a PPCG ! Espero que lo pases muy bien aquí.
Leaky Nun
Aquí hay una versión de golf no probada que tiene 340 bytes: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
Bienvenido a PPCG, ¡esperamos que encuentre lo que desea aquí y disfrute de su tiempo con nosotros! Si tiene el tiempo y la voluntad, no se olvide de poner una versión no codiciada de su código (¿tal vez con comentarios?), Que ayudará enormemente a las personas a comprender su código y les ayudará a brindarle consejos para jugarlo aún más;).
Katenkyo
Puede reemplazar .replace(' ', ':').split(':')con .replace(*': ').split(), ahorrando 6 bytes
Azul
Estamos incluso !
Leaky Nun
2

Lua, 357 335 332 bytes

Gracias a @Katenkyo por cortar 22 bytes.

Golfizado:

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)

( Pruébalo en línea )

Sin 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)
Monja permeable
fuente
Nunca tiene que usar tonumber cuando su número no está en una base diferente a 10, en cambio, puede escribir h=h+0, la adición de 0 convertirá automáticamente el resultado en un número. Además, ¿es n=(...)obligatorio? ¿no sería mejor inline el uso de ...la siguiente manera -> h,m,t=(...):match("(%d+):(%d+) (.)"), no tendrá que volver a utilizar de todos modos, a medida que se cambia el valor de nuso hy m:)
Katenkyo
Además, debería poder cambiarlo si / elseif / else para una sola declaración ternaria del formulario 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!". Es posible que deba modificarse un poco, pero usar esto ahorrará mucho byte. Para información, la estructura de un ternario en lua es<condition> and <case true, have to be evaluated to true> or <case false, can be anything>
Katenkyo
(todavía no tenía espacio para terminar lo que quería decir) No te olvides de consultar los consejos para lua , todavía no son exhaustivos, pero hay algunas pequeñas cosas útiles :)
Katenkyo
Aquí hay una solución de golf no probada si desea que una base incluya todo lo que 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)realmente es 329 bytes;).
Katenkyo
Lo he actualizado. 0 + m no funciona aquí.
Leaky Nun
1

C, 333 bytes

#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 bytes después de eliminar las nuevas líneas innecesarias (todas menos la que está después de #define).

milIbyte
fuente
No estoy seguro de los ahorros, pero tiene algunos literales de cadena que puede agregar como "minutos" y "DESCUBIERTO"
Matt
1

PHP, 347 328 327 322 bytes

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

vista en despiece ordenado

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

Corre como php script.php HH:MM XDT. Toma la hora y zona horaria como $argventradas, regexes $argv[1]en$i = [HH, MM] , determina la zona horaria desde el primer carácter $argv[2], calcula cuántos minutos después de las 6PM PDT que es, y luego terna echo.

Podría eliminar 2 bytes mediante el uso $u=UNCOVERED, pero sería el único error aquí y me gusta que esto funcione limpiamente.

ricdesi
fuente
0

PowerShell 292 Bytes

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

Explicación menos golfizada

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

El literal para "ago" se eliminó en el código, pero por ahora se dejó en explicación en caso de otros cambios.

Mate
fuente
Creo que me excedí en algunos literales y lo hizo más largo ...
Matt