Final Fantasy XV KHÔNG GIỚI HẠN!


9

Vì tôi KHÔNG HỀ được quảng cáo cho sự kiện Khám phá Final Fantasy XV , tôi muốn bạn viết cho tôi một chương trình để cho tôi biết khi nào nó xảy ra !!!

Đầu vào

Đầu vào của bạn ở dạng HH:MM XDT, trong đó HHmột số trong phạm vi 1-12, MMlà một số ở giữa 0-60XDTlà múi giờ, với Xmột trong số E(phía đông, UTC-4), C(trung tâm, UTC-5), P(Thái Bình Dương, UTC-7), hoặc M(núi, UTC-6). Đây là một thời gian được coi là PM. Đầu vào hợp lệ bao gồm:

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)

Đầu vào có thể được coi là hợp lệ.

Đầu ra

Chương trình của bạn phải làm như sau:

  1. Chuyển đổi thời gian đã cho thành PDT và đầu ra It is XX:XX PM PDT., XX:XXthời gian được chuyển đổi. Lưu ý rằng bạn không cần xử lý bất kỳ trường hợp nào khi chuyển đổi thời gian sẽ vượt qua ranh giới AM / PM.

  2. In một trong những điều sau đây:

    1. Nếu thời gian chuyển đổi là trước 6:00 PM PDT, hãy in X minutes until the pre-show!, thay thế Xbằng số phút cho đến 6:00 PM PDT.

    2. Nếu thời gian chuyển đổi là sau hoặc bằng 6:00 PM PDT và trước 7:00 PM PDT , hãy in Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!, Xsố phút đã trôi qua kể từ 6:00 PM PDT và Ylà số phút cho đến 7:00 Thủ tướng PDT.

    3. Nếu thời gian chuyển đổi là sau hoặc bằng 7:00 PM PDT , hãy in UNCOVERED started X minutes ago!, Xsố phút đã trôi qua kể từ 7:00 PM PDT.

Mỗi chuỗi được in phải được theo sau bởi một dòng mới.

Chấm điểm

Đây là mã golf, vì vậy chương trình ngắn nhất sẽ thắng.


Có phải tất cả các đầu vào được coi là hợp lệ?
Leaky Nun

1
HH:MM XDTmột lỗi đánh máy? Nó có thể được CST.
Leaky Nun

1
Sẽ 2:45 EDTxuất hiện để chúng tôi cần phát hiện xem thời gian chuyển đổi là PM hay AM?
Leaky Nun

Sẽ thật tuyệt nếu bạn thực sự bao gồm các độ lệch UTC của bốn múi giờ vì vậy tôi không phải tự mình tìm kiếm chúng.
Neil

@KennyLau Đây CSTlà một lỗi đánh máy và sẽ không có thời gian nào có thể vượt qua ranh giới AM / PM. Chỉnh sửa bài.
kirbyfan64sos

Câu trả lời:


1

JavaScript (ES6), 257 byte

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`}!`)

Không biết tiết kiệm nhưng có một vài chuỗi được lặp đi lặp lại mà bạn có thể chơi gôn nhiều hơn. "Hiển thị lại" và "UNCOVERED" chẳng hạn.
Matt

@Matt Đối với một chuỗi chỉ được lặp lại một lần khi tổng phí là 13 byte, do đó, nó sẽ cần dài 14 byte để có giá trị. "phút" nhận được tiền thưởng khi ở bên cạnh thời gian và cần bốn lần.
Neil

4

Python (335 byte)

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

Đầu ra:

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!

Chào mừng đến với PPCG ! Hy vọng bạn sẽ có một thời gian tuyệt vời ở đây.
Leaky Nun

Đây là một phiên bản golf chưa được kiểm tra có 340 byte: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

Chào mừng bạn đến với PPCG, chúng tôi hy vọng bạn sẽ tìm thấy những gì bạn muốn ở đây và sẽ tận hưởng thời gian của bạn với chúng tôi! Nếu bạn có thời gian và ý chí, đừng quên đặt một phiên bản mã không được mã hóa (có thể có ý kiến?), Điều đó sẽ giúp mọi người hiểu mã của bạn rất nhiều và giúp họ cung cấp cho bạn các mẹo để chơi mã hơn nữa;).
Katenkyo

Bạn có thể thay thế .replace(' ', ':').split(':')bằng .replace(*': ').split(), tiết kiệm 6 byte
Blue


2

Lua, 357 335 332 byte

Cảm ơn @Katenkyo vì đã cắt 22 byte.

Chơi gôn

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)

( Dùng thử trực tuyến )

Ung dung:

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)

Bạn không bao giờ phải sử dụng tonumber khi số của bạn không ở trong một cơ sở khác ngoài 10, thay vào đó, bạn có thể viết h=h+0, việc thêm 0 sẽ tự động chuyển đổi kết quả thành một số. Ngoài ra, là n=(...)bắt buộc? Sẽ tốt hơn nếu sử dụng nội tuyến ...như sau -> h,m,t=(...):match("(%d+):(%d+) (.)"), dù sao bạn cũng sẽ không sử dụng lại, vì sau đó bạn thay đổi giá trị nsử dụng hm:)
Katenkyo

Ngoài ra, bạn sẽ có thể thay đổi bạn nếu / otherif / khác cho một tuyên bố tạm thời của biểu mẫu 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!". Nó có thể phải được làm lại một chút, nhưng sử dụng điều này sẽ tiết kiệm rất nhiều byte. Để biết thông tin, cấu trúc của một con <condition> and <case true, have to be evaluated to true> or <case false, can be anything>
chim nhạn

(vẫn không có không gian để hoàn thành những gì tôi muốn nói) Đừng quên kiểm tra các mẹo cho lua , chúng chưa đầy đủ, nhưng có một số điều hữu ích nhỏ :)
Katenkyo

Đây là một giải pháp chơi golf chưa được thử nghiệm nếu bạn muốn một cơ sở bao gồm tất cả những gì 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)thực sự là 329 byte;).
Katenkyo

Tôi đã cập nhật nó. 0 + m không hoạt động ở đây.
Rò rỉ Nun

1

C, 333 byte

#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 byte sau khi loại bỏ các dòng mới không cần thiết (tất cả trừ một dòng sau #define).


Không chắc chắn về khoản tiết kiệm nhưng bạn có một số chuỗi ký tự mà bạn có thể có thể thêm như "phút" và "UNCOVERED"
Matt

1

PHP, 347 328 327 322 byte

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

xem nổ

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

Chạy như php script.php HH:MM XDT. Lấy múi giờ và múi giờ làm $argvmục nhập, $argv[1]biểu thị lại $i = [HH, MM], xác định múi giờ từ ký tự đầu tiên $argv[2], tính toán xem PDT sau 6 giờ tối bao nhiêu phút, sau đó phát hiện raecho .

Có thể giảm 2 byte bằng cách sử dụng $u=UNCOVERED, nhưng đó là lỗi duy nhất ở đây và tôi thích điều này hoạt động sạch sẽ.


0

PowerShell 292 byte

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

Giải thích ít chơi gôn

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

Nghĩa đen của "trước đây" đã bị xóa trong mã nhưng bây giờ được giải thích trong trường hợp có những thay đổi khác.


Tôi nghĩ rằng tôi đã quá nhiệt tình với một số chữ và nó làm cho nó dài hơn ....
Matt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.