Co to jest inning?

15

Cel

W związku z tym, że World Series jest tuż za rogiem, potrzebuję programu, który może odczytać wyniki box i powiedzieć mi, co to jest inning. Jest to nieco skomplikowane, ponieważ baseball stosuje dziwną metodę rejestrowania wyniku. Nie zapisują wyniku drużyny przeciwnej za zmianę, dopóki nie strzelą (i nadal trwają) lub nie ukończą ataku. Zatem 0 na tablicy wyników zawsze oznacza skończonego ataka. Na przykład:

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)
  • Przykład A: Wiemy, że jesteśmy na szczycie siódmej pozycji, ponieważ Us ma zapisane 0 na dole szóstej, a góra siódmej jest pusta.
  • Przykład B: Może to być dół 6. lub góra 7..
  • Przykład C: Może to być góra lub dół szóstej.

Twoim zadaniem jest zwrócenie, jakie to mogą być zmiany.

Wejście

Dwie listy liczb całkowitych nieujemnych. Zakłada się, że listy będą postrzępione, a lista gości drużyny będzie tego samego rozmiaru lub o jeden element większa w porównaniu z drużyną gospodarzy. Możesz wziąć wyniki w dowolnej kolejności, ale podać odpowiedź, jeśli nie używasz wartości domyślnej. Tzn. Drużyna gości, a następnie drużyna gospodarzy (domyślnie), lub drużyna gospodarzy, a następnie drużyna gości (odwrócone). Można je również uzupełnić danymi zastępczymi, jeśli chcesz, w odpowiedzi podaj, jeśli to zrobisz.

Wynik

Ciąg lub coś równoważnego, który identyfikuje numer inningu i czy jest to góra czy dół. Np 7B 8T, B7 T8, ['7B','8T']to wszystko jest w porządku. Jeśli są dwie odpowiedzi, musisz wypisać obie. Format jest jednak dość elastyczny.

Zasady

  • Dane wejściowe zawsze będą prawidłowe
  • Gry mogą przejść w nieokreślone dodatkowe inningi. Twój program powinien obsługiwać do 255 inningów.
  • Standardowe luki są zabronione
  • To jest więc wygrywa najkrótszy kod

Przypadki testowe

#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
Veskah
źródło
Czy możemy wziąć obie listy w odwrotnej kolejności? tj. dolny, a następnie górny?
Jo King
@JoKing Pewnie, o ile jest zaznaczone, a odpowiedź nadal pasuje poprawnie.
Veskah
Czy dodatnia / ujemna liczba całkowita zwracana jest akceptowalna?
@Rogem To trochę popycha, ale czytam twoje pismo, w porządku. Powiedziałem, że wyjście jest dość elastyczne.
Veskah

Odpowiedzi:

4

C (gcc) , 50 bajtów

Pobiera dane wejściowe jako wskaźnik do listy z przeplotem (tj {them#1, us#1, them#2,...}.).

Zwraca jedną opcję przez modyfikację, a drugą przez wartość zwracaną.

Wartości ujemne wskazują dolną część zmiany, wartości dodatnie wskazują górną część zmiany. Zera są „puste”. Bezwzględna wartość wyjściowa to numer zmiany. -4,5Oznacza więc, że możliwości są na górze piątej i na dole czwartej, oraz1,0 wskazuje, że jedyną możliwością jest szczyt pierwszej.

Zwracana wartość makra może być wykorzystana do ustalenia, czy istnieje jeden czy dwa możliwe inningi; wartością zwracaną jest, 0jeśli nie ma innej inningu. W przeciwnym razie jest to numer zmiany.

Zero bajtów kodu źródłowego. Użyj następujących flag jako flagi preprocesora:

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

Wypróbuj online!

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.

źródło
Można by dodać do golfa dodatkowe 4 bajty, jeśli mogę założyć, że lista jest w odwrotnej kolejności (od ostatniej do pierwszej) lub wskaźnik wskazujący ostatni element w tablicy. Nie poszedłem na to, ponieważ wydawało się to zbyt wielkim oszustwem.
Chciałbym usłyszeć od @veskah, jeśli przyjmowanie danych w tobie jest w porządku, ponieważ wydaje się zupełnie inne (i przydatne) od oryginalnej specyfikacji.
BLT
2
@BLT Zgodnie z konwencją, przeplatanie to sposób, w jaki listy są wykonywane w C; wielokrotne dereferencje bardzo obciążają zasoby. Inną opcją byłoby utworzenie jednej listy po drugiej, ale dodanie nowych elementów byłoby bardzo niepraktyczne.
3

Perl 6 , 52 48 45 bajtów

-3 bajty dzięki restrukturyzacji z nwellnhof!

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

Wypróbuj online!

Anonimowy blok kodu, który pobiera dane wejściowe jako dwie listy, górną i dolną. Dane wyjściowe to lista krotek, w której pierwszym elementem jest liczba inningu, a drugim elementem jest Prawda lub Fałsz, odpowiadające Dół lub Góra.

Wyjaśnienie:

       {                                    }  # 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
Jo King
źródło
3

R , 103 96 bajtów

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`

Wypróbuj online!

@digEmAll zapisanych 7 bajtów!

Pobiera na wejściu dwie listy wektorów i wysyła jedną lub dwie liczby całkowite reprezentujące możliwe inningi. Dodatnie liczby całkowite są na górze zmiany, a ujemne liczby całkowite są na dole zmiany.

W R dodatnie liczby całkowite są prawdziwe, więc mogę użyć różnicy długości jako pierwszego argumentu if().

BLT
źródło
Prawdopodobnie będziesz mieć więcej szczęścia [[jako ifzamiennik, ponieważ używasz go [w kodzie.
Giuseppe
@Giuseppe Próbowałem z <i ^. Myślę, że [był to ten, który wykorzystałem w przykładzie, który pamiętam.
BLT
Możesz także nadać inną nazwę 'if'(oraz usunąć {}i przenieść na f=zewnątrz): 96 bajtów
digEmAll
2

Galaretka , 11 bajtów

ZẎṖṠṪ$СẈd2

Wypróbuj online!

Pierwszy element: indeks kolumny oparty na 0.
Drugi element: 0u góry, 1u dołu.

Dane wyjściowe to lista jednej lub dwóch par, jak określono powyżej (przygotowana, aby lepiej ją pokazać). Inningi wyjściowe są w odwrotnej kolejności.

Erik the Outgolfer
źródło
2

Python 2 , 135 129 126 125 123 119 bajtów

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]

Wypróbuj online!

-1 dzięki dzięki @ovs

-4 dzięki jeszcze raz @ovs

ElPedro
źródło
if d else"11BT"[c<1::2]dla -3
sierpnia
if dWidzę (nie powinienem tego przegapić!), Ale else"11BT"[c<1::2]nie wydaje mi się krótszy, chyba że coś mi umknie.
ElPedro
Nie martw się @ovs, bo i tak znalazłem inny sposób zainspirowany twoją if d.
ElPedro
Zamiast tego if dmożesz zrobić if b, to nie musisz przechowywać len(b)w zmiennej.
ovs
@ovs Patrzyłem na to, ale również potrzebne ddo [d<c]. Nie mogę tego obejść. Jakieś pomysły?
ElPedro
1

Python 2 , 65 bajtów

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

Wypróbuj online!

Drukuje dwie linie, najpierw dolną możliwość zmiany, a następnie górną, jako listę singletonów. Jeśli jedno z nich nie jest możliwe, lista jest pusta.

xnor
źródło
1

Czysty , 84 75 bajtów

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

Wypróbuj online!

Definiuje funkcję @ :: [Int] [Int] -> (Int, Int)i niektórych pomocników.
Daje wynik w postaci, w (Top, Bottom)której zero oznacza zerową możliwość.

Obrzydliwe
źródło