Final Fantasy XV UNBEKANNT!

9

Da ich für das Final Fantasy XV Uncovered-Event Wahnsinnig hochgespielt bin, möchte ich dich mir ein Programm schreiben, das mir sagt, wann es ist !!!

Die Eingabe

Ihr nehmen Eingabe in Form von HH:MM XDT, in der HHeine Zahl in dem Bereich liegt 1-12, MMist eine Zahl zwischen 0-60, und XDTeine Zeitzone, die mit Xeinem zu sein E(Eastern, UTC-4), C(Zentral, UTC-5), P(Pacific, UTC-7) oder M(Berg, UTC-6). Dies ist eine Zeit, die als PM angenommen wird. Gültige Eingaben sind:

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)

Die Eingabe kann als gültig angenommen werden.

Die Ausgabe

Ihr Programm muss Folgendes tun:

  1. Konvertieren Sie die angegebene Zeit in PDT und geben Sie sie aus It is XX:XX PM PDT., wobei XX:XXdie konvertierte Zeit ist. Beachten Sie, dass Sie nicht jeden Fall behandeln müssen , wo die Zeit Umwandlung der AM / PM - Grenze würde überqueren.

  2. Drucken Sie eine der folgenden Angaben:

    1. Wenn die konvertierte Zeit vor 18:00 Uhr PDT liegt, drucken Sie X minutes until the pre-show!und ersetzen Sie sie Xdurch die Anzahl der Minuten bis 18:00 Uhr PDT.

    2. Wenn die konvertierte Zeit nach oder gleich 18:00 Uhr PDT und vor 19:00 Uhr PDT liegt , drucken Sie Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!, wobei Xdie Anzahl der Minuten seit 18:00 Uhr PDT und Ydie Anzahl der Minuten bis 19:00 Uhr angegeben ist PM PDT.

    3. Wenn die konvertierte Zeit nach oder gleich 19:00 Uhr PDT liegt , drucken Sie UNCOVERED started X minutes ago!, wobei Xdie Anzahl der Minuten angegeben ist, die seit 19:00 Uhr PDT vergangen sind.

Auf jede gedruckte Zeichenfolge muss eine neue Zeile folgen.

Wertung

Dies ist Code Golf, also gewinnt das kürzeste Programm.

kirbyfan64sos
quelle
Werden alle Eingaben als gültig angenommen?
Undichte Nonne
1
Ist HH:MM XDTein Tippfehler? Es kann sein CST.
Undichte Nonne
1
Wäre 2:45 EDTerscheinen so müssen wir erkennen , ob die umgewandelte Zeit ist PM oder AM?
Undichte Nonne
Es wäre schön gewesen, wenn Sie tatsächlich die UTC-Offsets der vier Zeitzonen einbezogen hätten, damit ich sie nicht selbst nachschlagen musste.
Neil
@KennyLau Das CSTwar ein Tippfehler, und es würde keine Zeit erscheinen, die die AM / PM-Grenze überschreiten könnte. Den Beitrag bearbeitet.
Kirbyfan64sos

Antworten:

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
quelle
Ich kenne die Einsparungen nicht, aber es gibt ein paar Saiten, die wiederholt werden und mit denen man mehr Golf spielen kann. "re-show" und "UNCOVERED" zum Beispiel.
Matt
@Matt Für eine Zeichenfolge, die nur wiederholt wird, wenn der Overhead 13 Byte beträgt, müsste sie 14 Byte lang sein, um sich zu lohnen. "Minuten" erhielten einen Bonus dafür, dass sie neben der Zeit waren und viermal gebraucht wurden.
Neil
4

Python (335 Bytes)

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

Ausgabe:

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
quelle
Willkommen bei PPCG ! Ich hoffe, Sie werden eine tolle Zeit hier haben.
Undichte Nonne
Hier ist eine ungetestete Golfversion, die 340 Bytes umfasst: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
Willkommen bei PPCG, wir hoffen, dass Sie hier finden, was Sie wollen und Ihre Zeit bei uns genießen werden! Wenn Sie Zeit und Willen haben, vergessen Sie nicht, eine ungolfed Version Ihres Codes (möglicherweise mit Kommentaren?) Einzugeben, die den Leuten das Verständnis Ihres Codes erheblich erleichtert und Ihnen hilft, Ihnen Tipps zum Golfen zu geben;).
Katenkyo
Sie können ersetzen .replace(' ', ':').split(':')mit .replace(*': ').split(), Speichern 6 Bytes
Blau
Wir sind sogar !
Undichte Nonne
2

Lua, 357 335 332 Bytes

Vielen Dank an @Katenkyo für das Abhacken von 22 Bytes.

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)

( Probieren Sie es online aus )

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)
Undichte Nonne
quelle
Sie müssen niemals eine Tonne verwenden, wenn sich Ihre Nummer nicht in einer anderen Basis als 10 befindet. Stattdessen können Sie schreiben h=h+0, dass durch Hinzufügen von 0 das Ergebnis automatisch in eine Nummer konvertiert wird. Auch ist n=(...)obligatorisch? Wäre es nicht besser, die Verwendung von ...wie folgt zu integrieren -> h,m,t=(...):match("(%d+):(%d+) (.)"), Sie werden sie sowieso nicht wiederverwenden, da Sie dann den Wert von nusing hund m:)
ändern
Außerdem sollten Sie in der Lage sein, if / elseif / else für eine einzelne ternäre Anweisung des Formulars zu ändern 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!". Möglicherweise muss es ein wenig überarbeitet werden, aber wenn Sie dies verwenden, sparen Sie viel Byte. Zur Information, die Struktur eines <condition> and <case true, have to be evaluated to true> or <case false, can be anything>
Ternärs
(hatte immer noch nicht genug Platz, um das zu beenden, was ich sagen wollte) Vergessen Sie nicht, die Tipps für Lua zu überprüfen , sie sind noch nicht vollständig, aber es gibt einige kleine nützliche Dinge :)
Katenkyo
Hier ist eine nicht getestete Golflösung, wenn Sie möchten, dass eine Basis alles enthält, was 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)tatsächlich 329 Bytes sind;).
Katenkyo
Ich habe es aktualisiert. 0 + m funktioniert hier nicht.
Undichte Nonne
1

C 333 Bytes

#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 Bytes nach dem Entfernen der unnötigen Zeilenumbrüche (alle außer dem nach #define).

mIllIbyte
quelle
Sie sind sich der Einsparungen nicht sicher, aber Sie haben einige String-Literale, die Sie möglicherweise hinzufügen können, wie "Minuten" und "UNCOVERED"
Matt
1

PHP, 347 328 327 322 Bytes

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

Explosionszeichnung

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

Läuft als php script.php HH:MM XDT . Nimmt die Zeit und die Zeitzone als $argvEinträge auf, regexiert $argv[1]in $i = [HH, MM], bestimmt die Zeitzone ab dem ersten Zeichen in$argv[2] , berechnet, wie viele Minuten nach 18:00 Uhr PDT das sind, und ternärisiert dann die echo.

Könnte 2 Bytes mit löschen $u=UNCOVERED , aber es wäre der einzige Fehler hier und ich mag, dass dies sauber funktioniert.

Ricdesi
quelle
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!"}}

Weniger Golf Erklärung

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

Das Literal für "vor" wurde im Code entfernt, aber im Falle anderer Änderungen vorerst zur Erläuterung belassen.

Matt
quelle
Ich glaube, ich bin mit einigen Literalen über Bord gegangen und es hat es länger gemacht ...
Matt