Final Fantasy XV UNCOVERED!

9

Ponieważ jestem NAPRAWDĘ zafascynowany wydarzeniem Final Fantasy XV Uncovered , chcę, żebyś napisał mi program, który powie mi, kiedy to nastąpi !!!

Dane wejściowe

Twoje dane wejściowe w postaci HH:MM XDT, gdzie HHjest liczbą z zakresu 1-12, MMjest liczbą pomiędzy 0-60i XDTjest strefą czasową, przy Xczym jest jedną z E(wschodnia, UTC-4), C(centralna, UTC-5), P(pacyficzna, UTC-7) lub M(góra, UTC-6). Przyjmuje się, że jest to czas PM. Prawidłowe dane wejściowe obejmują:

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)

Dane wejściowe można uznać za prawidłowe.

Wyjście

Twój program musi wykonać następujące czynności:

  1. Przelicz podany czas na PDT i wyjście It is XX:XX PM PDT., gdzie XX:XXjest przeliczony czas. Pamiętaj, że nie musisz zajmować się żadnym przypadkiem, w którym konwersja czasu przekroczyłaby granicę AM / PM.

  2. Wydrukuj jedną z następujących opcji:

    1. Jeśli przeliczony czas przypada przed 18:00 czasu pacyficznego, wydrukuj X minutes until the pre-show!, zastępując Xliczbą minut do 18:00 czasu pacyficznego.

    2. Jeśli przeliczony czas jest późniejszy lub równy 18:00 PDT i przed 19:00 PDT , wydrukuj Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!, gdzie Xjest liczba minut, które upłynęły od 18:00 PDT, i Yliczba minut do 7:00 PM PDT.

    3. Jeśli przeliczony czas jest późniejszy lub równy 7:00 PM PDT , wydrukuj UNCOVERED started X minutes ago!, gdzie Xjest liczba minut, które upłynęły od 19:00 PDT.

Po każdym wydrukowanym łańcuchu musi następować nowy wiersz.

Punktacja

To jest golf golfowy, więc wygrywa najkrótszy program.

kirbyfan64sos
źródło
Czy zakłada się, że wszystkie dane wejściowe są prawidłowe?
Leaky Nun
1
Czy HH:MM XDTliterówka? Może być CST.
Leaky Nun
1
Pojawiłby 2:45 EDTsię, więc musimy wykryć, czy przeliczony czas to PM czy AM?
Leaky Nun
Byłoby miło, gdybyś faktycznie uwzględnił przesunięcia UTC czterech stref czasowych, więc nie musiałem sam ich sprawdzać.
Neil
@KennyLau To CSTbyła literówka i nie pojawi się czas, który mógłby przekroczyć granicę AM / PM. Edytowałem post.
kirbyfan64sos

Odpowiedzi:

1

JavaScript (ES6), 257 bajtów

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
źródło
Nie znam oszczędności, ale jest kilka ciągów, które się powtarzają, z którymi można grać w golfa więcej. Na przykład „re-show” i „UNCOVERED”.
Matt
@Matt Dla łańcucha, który jest powtarzany tylko wtedy, gdy narzut ma 13 bajtów, więc aby był tego wart, musiałby mieć długość 14 bajtów. „minuty” dostały bonus za bycie tuż przed czasem i bycie potrzebnym cztery razy.
Neil
4

Python (335 bajtów)

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

Wynik:

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
źródło
Witamy w PPCG ! Mam nadzieję, że dobrze się tutaj bawisz.
Leaky Nun
Oto nieprzetestowana wersja gry w golfa, która ma 340 bajtów: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
Witamy w PPCG, mamy nadzieję, że znajdziesz tutaj to, czego chcesz i będziesz się dobrze bawić z nami! Jeśli masz czas i wolę, nie zapomnij umieścić niepolecanej wersji swojego kodu (może z komentarzami?), Co znacznie pomoże ludziom zrozumieć Twój kod i pomoże im w dalszym ciągu udzielać wskazówek dotyczących gry w golfa;).
Katenkyo
Można wymienić .replace(' ', ':').split(':')z .replace(*': ').split(), oszczędzając 6 bajtów
Niebieski
Jesteśmy nawet !
Leaky Nun
2

Lua, 357 335 332 bajtów

Dzięki @Katenkyo za odcięcie 22 bajtów.

Gra w golfa:

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)

( Wypróbuj online )

Nie golfowany:

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
źródło
Nigdy nie musisz używać liczby, gdy twój numer nie jest w innej podstawie niż 10, zamiast tego możesz napisać h=h+0, dodanie 0 automatycznie zamieni wynik na liczbę. Czy jest również n=(...)obowiązkowy? czy nie lepiej byłoby wstawić użycie ...następującego -> h,m,t=(...):match("(%d+):(%d+) (.)"), i tak nie użyjesz go ponownie, ponieważ wtedy zmienisz wartość nużywania hi m:)
Katenkyo
Ponadto powinieneś być w stanie zmienić cię, jeśli / elseif / else dla pojedynczego trójkowego zestawienia formularza 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!". Być może trzeba go trochę przerobić, ale użycie tego pozwoli zaoszczędzić wiele bajtów. Dla informacji, struktura trójskładnika w lua jest<condition> and <case true, have to be evaluated to true> or <case false, can be anything>
Katenkyo
(wciąż nie miałem miejsca na dokończenie tego, co chciałem powiedzieć) Nie zapomnij sprawdzić wskazówek dla Lua , nie są one jeszcze wyczerpujące, ale jest kilka przydatnych rzeczy :)
Katenkyo
Oto niesprawdzone rozwiązanie do gry w golfa, jeśli chcesz, aby baza zawierała całe to, że 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)tak naprawdę to 329 bajtów;).
Katenkyo,
Zaktualizowałem to. 0 + m tutaj nie działa.
Leaky Nun
1

C, 333 bajty

#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 bajty po usunięciu niepotrzebnych znaków nowej linii (wszystkie oprócz tej po #define).

Mllllbyte
źródło
Nie jestem pewien oszczędności, ale masz dosłowne ciągi znaków, które możesz dodać, np. „Minuty” i „ODKRYTE”
Matt
1

PHP, 347 328 327 322 bajtów

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

widok rozstrzelony

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

Działa jako php script.php HH:MM XDT. Uwzględnia strefę czasową i czasową jako $argvwpisy, wyrazy $argv[1]do niej $i = [HH, MM], określa strefę czasową od pierwszego znaku $argv[2], oblicza, ile minut po 18:00 PDT to jest, a następnie potrójny echo.

Można użyć 2 bajtów przy użyciu $u=UNCOVERED, ale byłby to jedyny błąd tutaj i podoba mi się, że działa to czysto.

ricdesi
źródło
0

PowerShell 292 bajtów

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

Wyjaśnienie dla mniej golfistów

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

Literał „temu” został usunięty z kodu, ale na razie pozostawiono w wyjaśnieniu w przypadku innych zmian.

Matt
źródło
Myślę, że poszedłem za burtę i dosłownie wydłużyło to czas ...
Mat.