Hangi Inning?


15

Hedef

Dünya Serisinin köşede olduğu ışığında, kutu puanlarını okuyabilen ve bana ne tonlama olduğunu söyleyen bir programa ihtiyacım var. Beyzbol skoru kaydetmek için garip bir yöntem kullandığından bu biraz karmaşıktır. At-bat takımının atış için puanını bir koşuyu atmadan (ve hala devam edene) ya da at-bat'ını bitirene kadar yazmazlar. Böylece skorborddaki 0 ​​her zaman bitmiş bir yarasa anlamına gelir. Örneğin:

Example A:
Inning| 1| 2| 3| 4| 5| 6| 7| 8| 9|
  Them| 0| 0| 0| 0| 0| 2|  |  |  |
    Us| 0| 0| 2| 0| 0| 0|  |  |  |

Example B:
Inning| 1| 2| 3| 4| 5| 6| 7| 8| 9|
  Them| 0| 0| 0| 0| 0| 2|  |  |  |
    Us| 0| 0| 2| 0| 0| 1|  |  |  |

Example C:
Inning| 1| 2| 3| 4| 5| 6| 7| 8| 9|
  Them| 0| 0| 0| 0| 0| 2|  |  |  |
    Us| 0| 0| 2| 0| 0|  |  |  |  |

#Them is the Away Team, Us is the Home Team (who are the guys you root for)
  • Örnek A: Biz 7'nin tepesinde olduğumuzu biliyoruz, çünkü Bize 6'nın dibinde 0 ve 7'nin tepesinde boş bir kayıt var.
  • Örnek B: 6'nın Altında veya 7'nin Üstünde olabilir.
  • Örnek C: 6'nın Üstü veya Altı olabilir.

Senin görevin hangi tonları olabileceğini döndürmektir.

Giriş

Negatif olmayan tamsayıların iki listesi. Listeler, Deplasman takımının listesi Ev sahibi takımla karşılaştırıldığında aynı boyutta veya bir öğe daha büyük olacak şekilde pürüzlü sayılacaktır. Skorları her iki sırayla da alabilir, ancak varsayılanı kullanmazsanız cevabınızda belirtebilirsiniz. Yani, Deplasman Takımı sonra Ev sahibi takım (varsayılan) veya Ev Takımı sonra Deplasman takımı (ters). İsterseniz kukla verilerle de doldurulabilirler, eğer cevabınızda belirtin.

Çıktı

Inning numarasını ve üst ya da alt olup olmadığını tanımlayan bir dize ya da eşdeğeri bir şey. Örneğin 7B 8T, B7 T8, ['7B','8T']tüm iyi. İki cevap varsa, her ikisini de vermelisiniz. Biçim oldukça esnektir.

kurallar

  • Giriş her zaman geçerli olacak
  • Oyunlar sınırsız ekstra inning'e girebilir. Programınız en fazla 255 inning'i destekleyebilmelidir.
  • Standart Loopholes yasaktır
  • Bu bu yüzden en kısa kod kazanır

Test Durumları

#Input:
[[], 
 []] 
#Output: 1T

#Input:
[[0], 
 []] 
#Output: 1B

#Input:
[[0,0,0,1], 
 [0,0,0,0]] 
#Output: 5T

#Input:
[[0,0,0,1], 
 [0,0,0,1]] 
#Output: 4B, 5T

#Input:
[[0,0,0,1,0,0,1,0,0,1],
 [0,0,0,0,1,0,0,1,0,1]] 
#Output: 10B, 11T

#Input:
[[0,0,0,1], 
 [0,0,0]] 
#Output: 4T, 4B

#Input:
[[0,0,0,0], 
 [0,0,0]] 
#Output: 4B

İki listeyi ters sırayla alabilir miyiz? yani alttan üste?
Jo King

@JoKing Elbette, not edildiği ve cevap hala doğru bir şekilde eşleştiği sürece.
Veskah

Pozitif / negatif tamsayı dönüş değeri kabul edilebilir çıktı mı?

@Rogem Bu biraz zorlayıcı ama yazınızı okumak, sorun değil. Çıktının oldukça esnek olduğunu söyledim.
Veskah

Yanıtlar:


4

C (gcc) , 50 bayt

Araya eklenmiş bir listeye (yani {them#1, us#1, them#2,...}) bir işaretçi olarak girdi alır .

Bir seçeneği değişiklik yoluyla, diğerini de dönüş değeri aracılığıyla döndürür.

Negatif değerler inning'in altını, pozitif değerler inning'in üstünü gösterir. Sıfırlar "boş" dur. Çıktının mutlak değeri, vuruş sayısıdır. Yani, -4,5olasılıklar dördüncü ve beşinci seviyenin en altında 1,0, tek olasılık birincinin en tepesinde olmaktır.

Makronun dönüş değeri, bir veya iki olası inning olup olmadığını belirlemek için kullanılabilir; dönüş değeri 0başka bir vuruş yoksa. Aksi takdirde, atış sayısıdır.

Kaynak kodunun sıfır baytı. Önişlemci bayrağı olarak aşağıdakileri kullanın:

-Df(o,n,l)=({o=n%2?~n/2:n/2+1;l[n-1]?-o-~n%2:0;})

Çevrimiçi deneyin!

Degolf

-Df(o,n,l)=({
// Define a function-like macro f(o,n,l)
// o is the output variable, n is the size of the list, 
// l is a pointer to the first element of the list.
o=n%2?~n/2:n/2+1;
// If there's an odd number of elements, first possible inning is -(n+1)/2. 
// Else, it is (n/2)+1.
l[n-1]?-o-~n%2:0})
// If the score from the last inning is non-zero, the other possible inning
// needs to be determined; flip the sign of first output value then deduct 
// 1 from it if the number of elements is even.

Ayrıca, listenin ters sırada (sondan ilke) olduğunu veya dizideki son öğeyi işaret eden işaretçiyi varsayabilirseniz, bu ek bir 4 bayt golf olabilir. Çok fazla hile gibi hissettim, bunun için gitmedi.

Yaptığınız gibi giriş almak tamam @veskah duymak isterim, çünkü orijinal spec oldukça farklı (ve kullanışlı) görünüyor.
BLT

2
@BLT Kural olarak, serpiştirme, liste listelerinin C'de nasıl yapıldığıdır; çoklu kayıt dışı bırakma kaynakları çok vergilendirir. Diğer seçenek, bir listeyi arka arkaya tutmak olabilir, ancak daha sonra yeni öğeler eklemek çok pratik olmayacaktır.

3

Perl 6 , 52 48 45 bayt

Nwellnhof'tan bazı yeniden yapılandırma sayesinde -3 bayt!

->\a,\b{(+a,a==b if (b,a)[a>b].tail;b+1,a>b)}

Çevrimiçi deneyin!

Girişi üst ve alt olmak üzere iki liste olarak alan anonim kod bloğu. Çıktı, ilk öğenin vuruş numarası ve ikinci öğenin Alt veya Üst'e karşılık gelen Doğru veya Yanlış olduğu bir grup listesidir.

Açıklama:

       {                                    }  # Anonymous code block
->\a,\b   # That takes input lists a and b
        (                                  )   # Return a list of
                                    b+1,a>b    # A list of 
                                               #  The length of the second list plus 1
                                               #  And top/bottom
         +a,a==b     # And the length of the first list
                     # And the other of top/bottom
                 if  # Only if:
                    (b,a)[a>b]      # The current of top/bottom's
                              .tail # Last element exists and is not 0

3

R , 103 96 bayt

function(a,b,l=sum(a|1),k=sum(b|1))I(l,I(l-k,I(a[l],c(l,-l),-l),I(b[l],c(-l,l+1),l+1)),1)
I=`if`

Çevrimiçi deneyin!

@digEmTüm 7 bayt kaydedildi!

İki liste vektörü girdi olarak alır ve olası inning'i temsil eden bir veya iki tamsayı çıktılar. Pozitif tamsayılar inning'in üst kısmıdır ve negatif tamsayılar inningin alt kısmıdır.

R'de, pozitif tamsayılar doğrudur, bu yüzden uzunluk farkını ilk argüman olarak kullanabilirim if().


Kodunuzda kullandığınız için muhtemelen yedek [[olarak daha iyi şansınız olacaktır . if[
Giuseppe

@Giuseppe <ve ile denedim ^. Sanırım [hatırladığım örnekte kullanılan bence .
BLT

Ayrıca başka bir ad verebilirsiniz 'if'(ve çıkarmak {}ve hareket f=dışında): 96 bayt
digEmAll


2

Jöle , 11 bayt

ZẎṖṠṪ$СẈd2

Çevrimiçi deneyin!

İlk öğe: 0 tabanlı sütun dizini.
İkinci eleman: 0üst 1için, alt için.

Çıktı, yukarıda belirtildiği gibi bir veya iki çiftin listesidir (daha iyi göstermek için önceden ayarlanmış). Çıktı inning'leri ters sıradadır.


2

Python 2 , 135 129 126 125 123 119 bayt

a,b=input()
c=len(a)
e,f=`c+1`+"T",`c`+"B"
print((f+e,e)[b[-1]<1],(`c`+"T"+f,f)[a[-1]<1])[len(b)<c]if b else"1"+"TB"[c]

Çevrimiçi deneyin!

@Ovs sayesinde -1

@Ovs'a tekrar -4 teşekkürler


if d else"11BT"[c<1::2]-3
ovs

if dGörebiliyorum (bunu kaçırmamalıydım!) Ama bir else"11BT"[c<1::2]şey eksik olmadıkça benim için daha kısa çıkmaz.
ElPedro

Hiçbir endişe @ovs ben if dyine de ilham başka bir yol buldum .
ElPedro

Yerine if dyapabileceğiniz if b, o zaman saklamak gerekmez len(b)değişkeninde.
ovs

@ovs O baktım ama aynı zamanda ihtiyaç diçin [d<c]. Bunun bir yolunu göremiyorum. Herhangi bir fikir?
ElPedro

1

Python 2 , 65 bayt

a,b=input()
exec"a,b=[0]+b,a;print[len(b)][a[-1]<len(a+b)%2:];"*2

Çevrimiçi deneyin!

Öncelikle alt tonlama seçeneği, sonra en üstte olmak üzere iki satırı tek bir liste olarak yazdırır. İkisinden biri mümkün değilse, bu liste boştur.


1

Temiz , 84 75 bayt

import StdEnv
$ =length
?v|last[0:v]>0= $v=0
@a b| $b< $a=(?a,$a)=($a+1,?b)

Çevrimiçi deneyin!

İşlevi @ :: [Int] [Int] -> (Int, Int)ve bazı yardımcıları tanımlar . Sıfırın boş bir olasılığı ifade
ettiği biçimde çıktı verir (Top, Bottom).

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.