Final Fantasy XV KEŞFEDİLMEDİ!


9

Ben delicesine için sinirli am yana Final Fantasy XV ele geçen olay , bunu istiyorum sen bana o zaman söyle bir program yazmak için !!!

Girdi

Şeklinde Kişisel almak girişi HH:MM XDT, HHaralığında bir sayı olduğu 1-12, MMarasında bir sayıdır 0-60, ve XDTile, bir zaman dilimi olan Xbiri olan E(Doğu, UTC-4), C(merkezi, UTC-5), P(Pasifik, UTC-7) veya M(dağ, UTC-6). Bu, PM olarak kabul edilen bir zamandır. Geçerli girişler şunları içerir:

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)

Girişin geçerli olduğu varsayılabilir.

Çıktı

Programınız aşağıdakileri yapmalıdır:

  1. Verilen zamanı PDT'ye ve çıktıya dönüştürün, dönüştürülen zamanın It is XX:XX PM PDT.nerede XX:XXolduğu. Eğer anlamına Not değil AM / PM sınırını aşacağı zaman dönüştürme herhangi durumun ele alınması gerekir.

  2. Aşağıdakilerden birini yazdırın:

    1. Dönüştürülen süre, 18:00 PDT'den önce ise, 18:00 PM PDT'ye kadar olan dakika sayısı ile X minutes until the pre-show!değiştirerek yazdırın X.

    2. Dönüştürülen süre PDT'ye 18:00 ve daha sonra ve PDT'ye 17: 00'dan önce eşitse , yazdırın Pre-show started X minutes ago; UNCOVERED is starting in Y minutes!, burada X18:00 PDT'den bu yana geçen Ydakika sayısı ve 7: 00'a kadar geçen dakika sayısı PM PDT.

    3. Dönüştürülen süre PDT saatinden sonra veya 19: 00'a eşitse , yazdırın UNCOVERED started X minutes ago!, burada X19:00 PDT'den bu yana geçen dakika sayısıdır.

Yazdırılan her dizenin ardından bir yeni satır gelmelidir .

puanlama

Bu kod golf, bu yüzden en kısa program kazanır.


Tüm girdilerin geçerli olduğu varsayılıyor mu?
Leaky Nun

1
HH:MM XDTbir yazım hatası? Olabilir CST.
Leaky Nun

1
Misiniz 2:45 EDTbiz dönüştürülen zaman PM veya AM olup olmadığını algılamak gerekir böylece görünür?
Leaky Nun

Aslında dört zaman diliminin UTC ofsetlerini dahil etseydiniz iyi olurdu, bu yüzden onları kendim aramak zorunda kalmadım.
Neil

@KennyLau CSTBir yazım hatasıydı ve AM / PM sınırını aşabilecek hiçbir zaman görünmüyordu. Yayını düzenledi.
kirbyfan64sos

Yanıtlar:


1

JavaScript (ES6), 257 bayt

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

Tasarruf bilmiyorum ama orada daha fazla golf ile tekrarlanan birkaç dize vardır. "yeniden göster" ve "KEŞFEDİLMEDİ" gibi.
Matt

@Matt Yalnızca 13 bayt olduğunda tekrarlanan bir dize için değerinin 14 bayt olması gerekir. "dakika" zamanın yanında olmak ve dört kez ihtiyaç için bir bonus var.
Neil

4

Python (335 bayt)

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

Çıktı:

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'ye Hoşgeldiniz ! Umarım burada iyi vakit geçirirsiniz.
Leaky Nun

İşte 340 bayt olan denenmemiş bir golf versiyonu: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'ye hoş geldiniz, burada ne istediğinizi bulacağınızı ve bizimle zaman geçireceğinizi umuyoruz! Zamanınız ve iradeniz varsa, kodunuzun çözülmemiş bir sürümünü (belki yorumlarla?) Koymayı unutmayın, bu da insanların kodunuzu anlamalarına yardımcı olur ve size daha da golf oynamak için ipuçları vermelerine yardımcı olur;).
Katenkyo

Sen yerini alabilir .replace(' ', ':').split(':')ile .replace(*': ').split()tasarruf 6 bayt
Mavi


2

Lua, 357 335 332 bayt

@Katenkyo'ya 22 bayt ayırdığı için teşekkürler .

golfed:

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)

( Çevrimiçi deneyin )

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)

Numaranız 10'dan farklı bir tabandayken asla ton numarasını kullanmanız gerekmez, bunun yerine yazabilirsiniz h=h+0, 0 eklenmesi sonucu otomatik olarak bir sayıya dönüştürür. Ayrıca n=(...)zorunlu mu? kullanımı ...aşağıdaki gibi satır içi yapmak daha iyi olmaz -> h,m,t=(...):match("(%d+):(%d+) (.)"), yine de kullanmazsınız, çünkü daha sonra nkullanma değerini değiştirirsiniz hve m:)
Katenkyo

Ayrıca, formun tek bir üçlü ifadesi için / elseif / else komutunu değiştirebilmeniz gerekir 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!". Biraz yeniden işlenmesi gerekebilir, ancak bunu kullanmak çok fazla bayt kazandıracaktır. Bilgi için, <condition> and <case true, have to be evaluated to true> or <case false, can be anything>
lua'daki bir üçlünün

(hala söylemek istediğim şeyi bitirmek için yer yoktu) Lua ipuçlarını kontrol etmeyi unutma , henüz ayrıntılı değiller, ama bazı yararlı şeyler var :)
Katenkyo

Eğer bir üs 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)aslında 329 bayt;) tüm dahil etmek istiyorsanız test edilmemiş bir golf çözümü .
Katenkyo

Güncelledim. 0 + m burada çalışmıyor.
Leaky Nun

1

C, 333 bayt

#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);}

Gereksiz satırsonlarını kaldırdıktan sonra 333 bayt (#define'den sonra olanlar hariç tümü).


Tasarruf emin değilim ama "dakika" ve "KEŞFEDİ" gibi ekleyebilirsiniz edebileceğiniz bazı dize değişmezleri var
Matt

1

PHP, 347 328 327 322 bayt

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

parçalarına ayrıştırılmış görünüm

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

Olarak çalışır php script.php HH:MM XDT. Zaman ve saat dilimini $argvgiriş olarak alır, $argv[1]içine girer $i = [HH, MM], ilk karakterden saat dilimini belirler, $argv[2]6PM PDT'nin kaç dakika geçtiğini, sonra üçlüleri belirler echo.

Kullanarak 2 bayt düşebilir $u=UNCOVERED, ama burada tek hata olurdu ve bu temiz çalışır gibi.


0

PowerShell 292 Bayt

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

Daha Az Golfçü Açıklama

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

"Önce" değişmezi kodda kaldırıldı, ancak şimdilik başka değişiklikler olması durumunda açıklamada bırakıldı.


Sanırım bazı değişmezlere denize gittim ve daha uzun yaptı ....
Matt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.