Final Fantasy 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). Это время принято считать PM. Допустимые входные данные включают в себя:

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 по тихоокеанскому времени, напечатайте X minutes until the pre-show!, заменив Xколичество минут до 18:00 по тихоокеанскому времени.

    2. Если преобразованное время равно или равно 6:00 вечера по тихоокеанскому времени и до 7:00 вечера по тихоокеанскому времени , выведите Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!, где Xчисло минут, прошедших с 18:00 по тихоокеанскому времени, и Yчисло минут до 7:00. PM PDT.

    3. Если преобразованное время больше или равно 7:00 вечера по тихоокеанскому времени , выведите UNCOVERED started X minutes ago!, где Xчисло минут, прошедших с 7:00 вечера по тихоокеанскому времени.

За каждой напечатанной строкой должна следовать новая строка .

счет

Это код гольф, поэтому выигрывает самая короткая программа.

kirbyfan64sos
источник
Все входные данные считаются действительными?
Утренняя монахиня
1
Это HH:MM XDTопечатка? Это может быть CST.
Утренняя монахиня
1
Появилось бы 2:45 EDTтак, что нам нужно определить, является ли преобразованное время PM или AM?
Утренняя монахиня
Было бы неплохо, если бы вы на самом деле включили смещения 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`}!`)
Нил
источник
Не знаю экономии, но есть несколько строк, которые повторяются, вы можете играть в гольф больше. "re-show" и "UNCOVERED", например.
Мэтт
@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 ! Надеюсь, вы отлично проведете время здесь.
Утренняя монахиня
Вот непроверенная версия для игры в гольф, которая составляет 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)]
Leaky Nun
Добро пожаловать в PPCG, мы надеемся, что вы найдете то, что вы хотите здесь, и приятно проведете время с нами! Если у вас есть время и желание, не забудьте поместить версию вашего кода, в которой нет ничего сложного (возможно, с комментариями?), Это очень поможет людям понять ваш код и даст вам еще больше советов по игре в гольф;).
Katenkyo
Вы можете заменить .replace(' ', ':').split(':')с .replace(*': ').split(), сэкономив 6 байт
Синий
Мы даже !
Утренняя монахиня
2

Луа, 357 335 332 байта

Спасибо @Katenkyo за обрезку 22 байтов.

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)
Дрянная Монахиня
источник
Вам никогда не придется использовать tonumber, если ваш номер не находится в другой базе, кроме 10, вместо этого вы можете написать h=h+0, добавление 0 автоматически преобразует результат в число. Кроме того, является n=(...)обязательным? Не лучше ли включить использование ...следующим образом -> h,m,t=(...):match("(%d+):(%d+) (.)"), вы все равно не будете его повторно использовать, так как затем измените значение nиспользования hи m:)
Katenkyo
Кроме того, вы должны быть в состоянии изменить вас if / 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>
Луа
(все еще не было места, чтобы закончить то, что я хотел сказать) Не забудьте проверить подсказки для lua , они еще не исчерпывающие, но есть некоторые маленькие полезные вещи :)
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 байт;).
Катенкё
Я обновил это. 0 + м здесь не работает.
Утренняя монахиня
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).

mIllIbyte
источник
Не уверен в экономии, но у вас есть строковые литералы, которые вы могли бы добавить, например, «минуты» и «НЕИЗВЕСТНЫЙ»
Мэтт,
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], вычисляет, сколько минут после 6 вечера PDT, то есть троичных echo.

Можно было бы сбросить 2 байта с помощью $u=UNCOVERED, но это будет единственной ошибкой, и мне нравится, что это работает чисто.

ricdesi
источник
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!"
    }
}

Литерал «назад» был удален в коде, но пока оставлен в объяснении в случае других изменений.

Matt
источник
Я думаю, что я переборщил с некоторыми литералами, и это сделало его длиннее ...
Мэтт