Що це за іннінг?


15

Мета

Зважаючи на те, що Всесвітня серія знаходиться за кутом, мені потрібна програма, яка зможе прочитати підсумки та повідомити, що це за іннінг. Це трохи ускладнюється, оскільки бейсбол використовує непарний метод для запису балу. Вони не записують рахунок команди ат-бит за іннінг, поки не набрали пробіг (і все ще збираються) або не закінчили свою команду. Таким чином, 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-го порожнє.
  • Приклад B: Це може бути дно 6-го, або верхнє число 7-го.
  • Приклад C: Це може бути верхня або нижня частина 6-ї.

Ваше завдання - повернути, який саме розміщення він міг би бути.

Вхідні дані

Два списки невід’ємних цілих чисел. Списки вважатимуться зазубрилими, коли список гостях буде або того ж розміру, або на один елемент більший порівняно зі списком команди. Ви можете брати бали в будь-якому порядку, але зазначте у своїй відповіді, якщо ви не використовуєте за замовчуванням. Тобто, команда гостя, потім команда господарів (за замовчуванням), або команда господарів, а потім гостьова команда (зворотна). Вони також можуть бути заповнені фіктивними даними, якщо ви хочете, вказуйте свою відповідь, якщо ви це робите.

Вихідні дані

Рядок або щось еквівалентне, що ідентифікує номер вставки та верхній або нижній. Наприклад 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

Чи можемо ми взяти два списки у зворотному порядку? тобто знизу, то вгорі?
Джо Кінг

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

Спробуйте в Інтернеті!

Дегольф

-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", що відповідає "Дно" або "Вгорі".

Пояснення:

       {                                    }  # 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().


Ви, мабуть, матимете більше удачі [[в якості ifзаміни, оскільки використовуєте [в своєму коді.
Джузеппе

@Giuseppe Я спробував це з <і ^. Я думаю, що це [було в тому прикладі, який я пам’ятаю.
BLT

Ви також можете дати інше ім’я 'if'(і видалити {}та переміститись f=назовні): 96 байт
digEmAll


2

Желе , 11 байт

ZẎṖṠṪ$СẈd2

Спробуйте в Інтернеті!

Перший елемент: індекс стовпця на основі 0.
Другий елемент: 0для верху, 1для низу.

Вихід - це список однієї або двох пар, як зазначено вище (попередньо продемонстровано для кращого показу). Вихідні подачі в зворотному порядку.


2

Python 2 , 135 129 126 125 123 119 bytes

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


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 я дивився на це , а й необхідно 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

Спробуйте в Інтернеті!

Друкує два рядки, спочатку нижня можливість введення, а потім верхня, як однотонний список. Якщо жоден із них неможливий, цей список порожній.


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)де нуль означає нульову можливість.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.