Заключний фентезі XV НЕВІДОМО!


9

Оскільки я НЕВІДОМО розкритий на заході Final Fantasy XV Uncovered , я хочу, щоб ви написали мені програму, щоб сказати мені, коли це !!!

Вхід

Вхід прийому у вигляді 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. Перетворіть заданий час у PDT та виведіть It is XX:XX PM PDT., де XX:XXперетворений час. Зауважте, що вам не потрібно обробляти жоден випадок, коли перетворення часу переходило б межу AM / PM.

  2. Роздрукуйте одне з наступного:

    1. Якщо перетворений час до 18:00 PDT, друкуйте X minutes until the pre-show!, замінюючи Xчислом хвилин до 18:00 PDT.

    2. Якщо перетворений час становить або дорівнює 18:00 PDT та до 19:00 PDT , друкуйте Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!, де Xкількість хвилин, що минули з 18:00 PDT, і Yкількість хвилин до 7:00 PM PDT.

    3. Якщо час, що перетворюється, становить або дорівнює 19:00 PDT , друкуйте UNCOVERED started X minutes ago!, де Xкількість хвилин, що минули з 19:00 PDT.

Кожен надрукований рядок повинен супроводжуватися новим рядком.

Оцінка балів

Це кодовий гольф, тому виграє найкоротша програма.


Чи всі входи вважаються дійсними?
Leaky Nun

1
Це HH:MM XDTдрукарська помилка? Це може бути CST.
Leaky Nun

1
З'явиться 2:45 EDTтак, що нам потрібно виявити, чи перетворений час PM або AM?
Leaky Nun

Було б добре, якби ви насправді включили зміщення UTC чотирьох часових поясів, тому мені не довелося їх самостійно шукати.
Ніл

@KennyLau Це CSTбув друкарський помилок , і не з’явиться час, який міг би перетнути межу AM / PM. Редагував публікацію.
kirbyfan64sos

Відповіді:


1

JavaScript (ES6), 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`}!`)

Не знаєте економії, але є кілька рядків, які повторюються, ви могли б більше гольфу. наприклад, "повторно показувати" та "НЕВІДКЛЮЧЕНО".
Метт

@Matt Для рядка, який повторюється лише після того, як накладні дані становлять 13 байт, тож, для того, щоб воно того вартувало, воно повинно бути 14 байт. "хвилин" отримав бонус за те, що був поруч і був потрібний чотири рази.
Ніл

4

Python (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 ! Сподіваюсь, тут вам буде чудово провести час.
Leaky Nun

Ось неперевірений golfed версія , яка становить 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)]
Дірявий Nun

Ласкаво просимо до PPCG, ми сподіваємось, що ви знайдете те, що хочете тут, і будете насолоджуватися своїм часом разом з нами! Якщо у вас є час і воля, не забудьте поставити версію коду, що не використовується для гольфу (можливо, з коментарями?), Що значно допоможе людям зрозуміти ваш код, а також допоможе вам надати поради щодо гольфу ще більше;).
Katenkyo

Ви можете замінити .replace(' ', ':').split(':') з .replace(*': ').split(), заощадивши 6 байт
Синій


2

Луа, 357 335 332 байт

Дякуємо @Katenkyo за відсічку 22 байтів.

Гольф:

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)

( Спробуйте в Інтернеті )

Безголівки:

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

Крім того, ви можете мати змогу змінити вас, якщо / elseif / else для однієї потрійної заяви форми 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>
трикутника

(досі не було місця, щоб закінчити те, що я хотів сказати) Не забудьте перевірити поради щодо луа , вони ще не є вичерпними, але є кілька корисних речей :)
Katenkyo

Ось не перевірене рішення для гольфу, якщо ви хочете, щоб база включала все, що 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 байт;).
Katenkyo

Я оновив його. 0 + м тут не працює.
Leaky Nun

1

C, 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 байти після видалення зайвих нових рядків (усіх, крім одного після #define).


Не впевнені в економії, але у вас є кілька рядкових літералів, які ви можете додати, як "хвилини" та "НЕЗАПАСНО"
Метт

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записи, зворотно виражається $argv[1]у$i = [HH, MM] , визначає часовий пояс від першого символу в $argv[2], математику виводить, скільки хвилин минуло 6PM PDT, тобто тернарії echo.

Можна скинути 2 байти за допомогою $u=UNCOVERED, але це була б єдина помилка, і мені подобається, що це працює чисто.


0

PowerShell 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.