파이널 판타지 XV UNCOVERED!


9

나는 미친 듯이에 대한 과대 선전하고 있기 때문에 파이널 판타지 XV 적발 이벤트 , 내가 원하는 당신이 나에게이있을 때 말해 할 수있는 프로그램을 작성!

입력

의 양식 인출 입력 HH:MM XDT, HH범위 내의 숫자는 1-12, MM사이 번호 0-60XDT함께 시간대 인 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. 변환 시간이 6:00 PM PDT 이전 인 경우을 인쇄 X minutes until the pre-show!하고 X6:00 PM PDT까지 분 수로 대체 하십시오.

    2. 변환 된 시간 인 경우 후 또는 태평양 서머 타임 오후 6시과 태평양 서머 타임 오후 7시 앞에 평등 , 인쇄 할 Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!경우, X태평양 서머 타임 오후 6시 이후 경과 한 시간 (분)이며, Y시간 (분) 7:00까지입니다 PM PDT.

    3. 변환 된 시간이 오후 7시 (PDT) 이후 인 경우 print UNCOVERED started X minutes ago!. 여기서 X오후 7시 (PDT) 이후 경과 한 시간 (분)입니다.

인쇄 된 각 문자열 뒤에 줄 바꿈이 와야 합니다 .

채점

이것은 코드 골프이므로 가장 짧은 프로그램이 승리합니다.


모든 입력이 유효한 것으로 간주됩니까?
Leaky Nun

1
인가 HH:MM XDT오타는? 할 수 있습니다 CST.
Leaky Nun

1
겠습니까 2:45 EDT우리가 변환 된 시간이 오후 또는 오전 여부를 감지 할 수 있도록 나타 납니까?
Leaky Nun

네 시간대의 UTC 오프셋을 실제로 포함 시키면 좋았을 것이므로 직접 찾아 볼 필요는 없었습니다.
Neil

@KennyLau CST오타였으며 AM / PM 경계를 넘을 수있는 시간이 없었습니다. 게시물을 수정했습니다.
kirbyfan64sos 2016 년

답변:


1

자바 스크립트 (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`}!`)

저축을 모르지만 더 많은 골프를 할 수있는 몇 가지 줄이 있습니다. 예를 들어 "다시 표시"및 "UNCOVERED"입니다.
Matt

@Matt 오버 헤드가 13 바이트이므로 한 번만 반복되는 문자열의 경우 14 바이트 길이가되어야합니다. "분"은 시간 옆에 있고 네 번 필요한 것에 대한 보너스를 받았습니다.
Neil

4

파이썬 (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

다음은 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 바이트

22 바이트 를 잘라낸 @Katenkyo 에게 감사 합니다.

골프 :

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이 아닌 다른 숫자가 아닌 경우 tonumber를 사용할 필요가 없습니다. 대신을 쓸 수 있습니다. h=h+00을 추가하면 결과가 숫자로 자동 변환됩니다. 또한 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!". 약간 재 작업해야 할 수도 있지만 이것을 사용하면 많은 바이트가 절약됩니다. 자세한 내용은 루아의 3 원 구조는 다음과 같습니다.<condition> and <case true, have to be evaluated to true> or <case false, can be anything>
Katenkyo

체크하는 것을 잊지 마십시오 (아직도 내가 말하고 싶었던 완료 할 수있는 공간이 없었다) 루아에 대한 팁을 그들은 철저한 아직하지 않은,하지만 :) 약간 작은 유용한 것들을있다
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 + m은 여기서 작동하지 않습니다.
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 다음 줄 제외).


절감 효과는 확실하지 않지만 "분"및 "UNCOVERED"와 같이 추가 할 수있는 문자열 리터럴이 있습니다.
Matt

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는 있지만 여기서 유일한 오류 일 수 있으며 이것이 제대로 작동하는 것이 좋습니다.


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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.