Final Fantasy XV TIDAK DITEMUKAN!

9

Karena saya benar-benar hyped untuk acara Final Fantasy XV Uncovered , saya ingin Anda menulis saya sebuah program untuk memberi tahu saya kapan itu !!!

Input

Input take Anda dalam bentuk HH:MM XDT, di mana HHangka dalam rentang 1-12, MMadalah angka di antara 0-60, dan XDTmerupakan zona waktu, dengan Xmenjadi salah satu E(timur, UTC-4), C(pusat, UTC-5), P(pasifik, UTC-7), atau M(gunung, UTC-6). Ini adalah waktu yang dianggap sebagai PM. Input yang valid meliputi:

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)

Input dapat dianggap valid.

Hasil

Program Anda harus melakukan hal berikut:

  1. Konversi waktu yang diberikan ke PDT dan output It is XX:XX PM PDT., di mana XX:XXwaktu yang dikonversi. Perhatikan bahwa Anda tidak perlu menangani kasus apa pun di mana mengonversi waktu akan melewati batas AM / PM.

  2. Cetak salah satu dari yang berikut:

    1. Jika waktu yang dikonversi adalah sebelum 18:00 PDT, cetak X minutes until the pre-show!, ganti Xdengan jumlah menit hingga 18:00 PDT.

    2. Jika waktu yang dikonversi adalah setelah atau sama dengan 6:00 PM PDT dan sebelum 19:00 PDT , cetak Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!, di mana Xjumlah menit yang telah berlalu sejak 18:00 PDT, dan Yadalah jumlah menit hingga 7:00 PM PDT.

    3. Jika waktu yang dikonversi adalah setelah atau sama dengan 19:00 PDT , cetak UNCOVERED started X minutes ago!, di mana Xjumlah menit yang telah berlalu sejak 19:00 PDT.

Setiap string yang dicetak harus diikuti oleh baris baru.

Mencetak gol

Ini kode golf, jadi program tersingkat menang.

kirbyfan64sos
sumber
Apakah semua input dianggap valid?
Leaky Nun
1
Apakah HH:MM XDTsalah ketik? Itu bisa saja CST.
Leaky Nun
1
Akan 2:45 EDTmuncul sehingga kita perlu mendeteksi apakah waktu yang dikonversi adalah PM atau AM?
Leaky Nun
Akan lebih baik jika Anda benar-benar memasukkan offset UTC dari empat zona waktu jadi saya tidak perlu mencarinya sendiri.
Neil
@ KennyLau Itu CSTsalah ketik, dan tidak ada waktu yang muncul yang bisa melewati batas AM / PM. Mengedit pos.
kirbyfan64sos

Jawaban:

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`}!`)
Neil
sumber
Tidak tahu penghematan tetapi ada beberapa string di sana yang berulang Anda bisa bermain golf lebih banyak. "tampilkan kembali" dan "TIDAK DITCARI" misalnya.
Matt
@ Matt Untuk string yang hanya diulangi sekali biaya overhead adalah 13 byte sehingga perlu panjang 14 byte untuk menjadi layak. "menit" mendapat bonus karena berada di samping waktu dan dibutuhkan empat kali.
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)]

Keluaran:

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
sumber
Selamat datang di PPCG ! Semoga Anda bersenang-senang di sini.
Leaky Nun
Berikut adalah versi golf yang belum diuji yaitu 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
Selamat datang di PPCG, kami harap Anda akan menemukan apa yang Anda inginkan di sini dan akan menikmati waktu Anda bersama kami! Jika Anda punya waktu dan kemauan, jangan lupa untuk menempatkan versi kode Anda yang tidak diseragamkan (mungkin dengan komentar?), Itu akan sangat membantu orang memahami kode Anda, dan membantu mereka memberikan tips untuk bermain golf lebih banyak lagi;).
Katenkyo
Anda dapat menggantinya .replace(' ', ':').split(':')dengan .replace(*': ').split(), menghemat 6 byte
Blue
Kami bahkan !
Leaky Nun
2

Lua, 357 335 332 byte

Terima kasih kepada @Katenkyo karena telah memangkas 22 byte.

Golf:

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)

( Coba online )

Tidak Disatukan:

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)
Biarawati Bocor
sumber
Anda tidak perlu menggunakan tonumber ketika nomor Anda tidak ada di pangkalan selain 10, sebagai gantinya, Anda bisa menulis h=h+0, penambahan 0 akan secara otomatis mengonversi hasilnya menjadi angka. Juga, apakah n=(...)wajib? bukankah lebih baik untuk inline penggunaan ...sebagai berikut -> h,m,t=(...):match("(%d+):(%d+) (.)"), Anda tidak akan menggunakannya kembali, karena Anda kemudian mengubah nilai nmenggunakan hdan m:)
Katenkyo
Juga, Anda harus dapat mengubah Anda jika / elseif / else untuk pernyataan terner tunggal formulir 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!". Mungkin harus dikerjakan ulang sedikit, tetapi menggunakan ini akan menghemat banyak byte. Sebagai informasi, struktur terner di lua adalah<condition> and <case true, have to be evaluated to true> or <case false, can be anything>
Katenkyo
(masih belum memiliki ruang untuk menyelesaikan apa yang ingin saya katakan) Jangan lupa untuk memeriksa tip untuk lua , mereka belum lengkap, tetapi ada beberapa hal yang berguna :)
Katenkyo
Ini solusi golf yang belum teruji jika Anda ingin basis menyertakan semua yang 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)sebenarnya 329 byte;).
Katenkyo
Saya sudah memperbaruinya. 0 + m tidak berfungsi di sini.
Leaky 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 setelah menghapus baris baru yang tidak perlu (semua kecuali satu setelah #define).

mIllIbyte
sumber
Tidak yakin dengan penghematan tetapi Anda memiliki beberapa string literal yang mungkin dapat Anda tambahkan seperti "menit" dan "TIDAK DITETAPKAN"
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!"));?>

tampilan meledak

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

Berjalan sebagai php script.php HH:MM XDT. Dibawa dalam zona waktu dan waktu sebagai $argventri, regex $argv[1]keluar ke $i = [HH, MM], menentukan zona waktu dari karakter pertama di $argv[2], menghitung berapa menit melewati 6PM PDT itu, kemudian ternaries the echo.

Bisa menjatuhkan 2 byte dengan menggunakan $u=UNCOVERED, tetapi itu akan menjadi satu-satunya kesalahan di sini dan saya suka ini bekerja dengan baik.

ricdesi
sumber
0

PowerShell 292 Bytes

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

Penjelasan Kurang Golf

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

Literal untuk "lalu" telah dihapus dalam kode tetapi untuk sekarang dibiarkan penjelasan jika ada perubahan lain.

Mat
sumber
Saya pikir saya berlebihan dalam beberapa literal dan itu membuatnya lebih lama ....
Matt