ファイナルファンタジーXV未公開!


9

私はファイナルファンタジーXVアンカバードイベントに夢中になっているので、いつか教えてくれるプログラムを書いて欲しいです !!!

入力

形で自分のテイク入力HH:MM XDT、HH範囲の数であるが1-12、MM間の数であり0-60、そしてXDTで、タイムゾーンXの1つである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時PDT より前の場合は、を印刷しX minutes until the pre-show!、X午後6時PDTまでの分数に置き換えます。

    2. 変換された時間が午後6時(太平洋夏時間)以降で午後7時(太平洋夏時間)より前の場合、を印刷しますPre-show started X minutes ago; UNCOVERED is starting in Y minutes!。Xは午後6時(太平洋夏時間)から経過した分数、は午後Y7時までの分数です。 PM PDT。

    3. 変換された時間が午後7時(PDT)UNCOVERED started X minutes ago!以降の場合Xは、を出力します。は、午後7時(PDT)から経過した分数です。

印刷される各文字列の後には改行が必要です。

得点

これはコードゴルフなので、最短のプログラムが勝ちます。


すべての入力は有効であると想定されていますか?
— Leaky Nun

1
あるHH:MM XDTタイプミスは?することができますCST。
— Leaky Nun

1
う2:45 EDT、我々は、変換時間はPMまたはAMであるかどうかを検出する必要があるので、見えますか?
— Leaky Nun

4つのタイムゾーンのUTCオフセットを実際に含めていれば、自分で調べる必要がなかったとしたらすばらしいでしょう。
— Neil

@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回必要になることでボーナスを得ました。
— Neil、

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

ここでは340バイトである未試験golfedバージョンである: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)]
— 漏洩ヌン

PPCGへようこそ。ここであなたが欲しいものを見つけて、私たちとあなたの時間を楽しんでくれることを願っています!時間があり、意志がある場合は、忘れずにコードのバージョン(コメント付きの可能性があります)を置くことを忘れないでください。そうすれば、人々がコードを理解しやすくなり、ゴルフのヒントを提供するのに役立ちます;)。
— カテキョウ2016年

あなたは置き換えることができ.replace(' ', ':').split(':')て.replace(*': ').split()6バイトの保存、
— ブルー


2

Luaの、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+0。0を追加すると、結果が自動的に数値に変換されます。また、n=(...)必須ですか?それがより良いの使用をインライン化しないだろう...、次のように- > h,m,t=(...):match("(%d+):(%d+) (.)")あなたが、その後の値が変更として、あなたはとにかくそれを再利用しないn使用hしてm:)
— Katenkyo

また、フォームの1つの3項ステートメントの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!"。少し手直しする必要があるかもしれませんが、これを使用すると多くのバイトを節約できます。詳細については、Luaの三の構造は<condition> and <case true, have to be evaluated to true> or <case false, can be anything>
— Katenkyo

(私が言いたかったことを終えるためのスペースがまだありませんでした)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バイトです。
— カテキョウ2016年

更新しました。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);}

不要な改行(#defineの後の行を除く)を削除した後の333バイト。


節約額はわかりませんが、「分」や「無制限」などの文字列リテラルを追加できる場合があります
— 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.