Что это за иннинг?

15

Цель

В свете того, что World Series уже не за горами, мне нужна программа, которая может считывать оценки в боксах и рассказывать мне, что это за иннинг. Это немного сложнее, потому что бейсбол использует странный метод для записи счета. Они не записывают счет команды в летучей мыши за подачу, пока они не набрали пробег (и все еще идут) или не закончили свою летучую мышь. Таким образом, 0 на табло всегда означает готовый бит. Например:

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)
  • Пример A: Мы знаем, что мы на вершине 7-го, потому что у нас есть записанный 0 в нижней части 6-го, а вершина 7-го пуста.
  • Пример Б: Это может быть либо нижняя часть шестого, либо верхняя часть седьмого.
  • Пример C: это может быть верх или низ шестого.

Ваша задача состоит в том, чтобы вернуть какой иннинг (ы) это может быть.

вход

Два списка неотрицательных целых чисел. Предполагается, что списки будут зубчатыми, а список гостей - того же размера или на один элемент больше, чем у хозяев. Вы можете выставлять оценки в любом порядке, но указывать в своем ответе, если вы не используете значение по умолчанию. То есть, Away Team, затем Home team (по умолчанию), или Home team, затем Away team (в обратном порядке). Они также могут быть дополнены фиктивными данными, если хотите, укажите в своем ответе, если вы это сделаете.

Выход

Строка или что-то эквивалентное, которая идентифицирует номер иннинга и является ли он верхом или низом. Например 7B 8T, B7 T8, ['7B','8T']все в порядке. Если есть два ответа, вы должны вывести оба. Формат довольно гибкий, хотя.

правила

  • Ввод всегда будет действительным
  • Игры могут войти в неопределенные дополнительные возможности. Ваша программа должна поддерживать до 255 подач.
  • Стандартные лазейки запрещены
  • Это поэтому выигрывает самый короткий код

Тестовые случаи

#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
источник
Можем ли мы взять два списка в обратном порядке? то есть снизу то сверху?
Джо Кинг,
@JoKing Конечно, пока это отмечено, и ответ все еще совпадает правильно.
Веска
Является ли положительное / отрицательное целочисленное возвращаемое значение приемлемым выходом?
@Rogem Это немного подталкивает, но, читая вашу статью, это нормально. Я сказал, что вывод довольно гибкий.
Веска

Ответы:

4

C (gcc) , 50 байтов

Принимает ввод как указатель на чередующийся список (т.е. {them#1, us#1, them#2,...}).

Возвращает одну опцию через модификацию, а другую через возвращаемое значение.

Отрицательные значения указывают на нижнюю часть иннинга, положительные значения указывают на верхнюю часть иннинга. Нули "пустые". Абсолютным значением выхода является номер тайма. Таким образом, -4,5указывает на возможности, являющиеся вершиной пятой и нижней четвертой, и 1,0указывает на единственную возможность, являющуюся вершиной первой.

Возвращаемое значение макроса может использоваться, чтобы определить, есть ли один или два возможных иннинга; возвращаемое значение, 0если нет другого иннинга. В противном случае это номер иннинга.

Ноль байтов исходного кода. Используйте следующее в качестве флага препроцессора:

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

Попробуйте онлайн!

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.

источник
Кроме того, это может быть добавлено еще 4 байта, если я могу предположить, что список находится в обратном порядке (от последнего к первому) или указатель указывает на последний элемент в массиве. Не пошел на это, потому что это было похоже на читерство.
Мне бы очень хотелось услышать от @veskah, если вы принимаете вводные данные, как вы, это нормально, потому что они кажутся весьма отличными (и полезными) от оригинальной спецификации.
BLT
2
@BLT По соглашению, чередование - это то, как списки списков создаются в C; множественная разыменование очень обременительно для ресурсов. Другим вариантом было бы иметь один список за другим, но тогда было бы очень непрактично добавлять новые элементы.
3

Perl 6 , 52 48 45 байт

-3 байта благодаря некоторой реструктуризации из nwellnhof!

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

Попробуйте онлайн!

Блок анонимного кода, который принимает входные данные в виде двух списков сверху вниз. Выход - это список кортежей, где первый элемент - это номер иннинга, а второй - True или False, что соответствует Bottom или Top.

Объяснение:

       {                                    }  # 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 байт

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`

Попробуйте онлайн!

@digEmAll сохранено 7 байтов!

Принимает два списка векторов в качестве входных данных и выводит одно или два целых числа, представляющих возможные значения. Положительные целые числа являются верхней частью иннинга, а отрицательные целые числа - нижней частью иннинга.

В R положительные целые числа являются правдивыми, поэтому я могу использовать разницу в длине в качестве первого аргумента if().

BLT
источник
Вам, вероятно, повезет больше [[в качестве ifзамены, поскольку вы используете [в своем коде.
Джузеппе
@ Giuseppe Я попробовал это с <и ^. Я думаю, что это [был тот пример, который я помню.
BLT
Вы можете также дать другое имя 'if'(и удалить {}и переместиться f=наружу): 96 байт
digEmAll
2

Желе , 11 байт

ZẎṖṠṪ$СẈd2

Попробуйте онлайн!

Первый элемент: индекс столбца на основе 0.
Второй элемент: 0сверху, 1снизу.

Вывод представляет собой список из одной или двух пар, как указано выше (предварительно подтвержденный, чтобы показать его лучше). Выходные данные в обратном порядке.

Эрик Outgolfer
источник
2

Python 2 , 135 129 126 125 123 119 байт

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]

Попробуйте онлайн!

-1 благодаря @ovs

-4 еще раз спасибо @ovs

ElPedro
источник
if d else"11BT"[c<1::2]за -3
ов
if dЯ могу видеть (не должен был пропустить это!), Но else"11BT"[c<1::2]не выходит для меня короче, если я что-то упускаю.
ElPedro
Не беспокойся @ovs, так как я if dвсе равно нашел другой способ, вдохновленный твоим .
ElPedro
Вместо того, что if dвы можете сделать if b, тогда вам не нужно хранить len(b)в переменной.
ovs
@ovs Я смотрел на это, но тоже нужно dдля [d<c]. Не могу обойти это. Есть идеи?
ElPedro
1

Python 2 , 65 байт

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

Попробуйте онлайн!

Печатает две строки, сначала нижнюю возможность иннинга, а затем верхнюю, в виде одноэлементного списка. Если какой-либо из них невозможен, этот список пуст.

XNOR
источник
1

Чисто , 84 75 байт

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

Попробуйте онлайн!

Определяет функцию @ :: [Int] [Int] -> (Int, Int)и некоторые помощники.
Дает вывод в форме, (Top, Bottom)где ноль означает нулевую возможность.

Οurous
источник