Apa Inning itu?

15

Tujuan

Mengingat World Series berada di tikungan, saya membutuhkan sebuah program yang dapat membaca skor kotak dan memberi tahu saya apa itu inning. Ini sedikit rumit karena enggak menggunakan metode aneh untuk mencatat skor. Mereka tidak menuliskan skor tim at-kelelawar untuk inning sampai mereka mencetak skor lari (dan masih berjalan) atau telah menyelesaikan at-kelelawar mereka. Jadi 0 di papan skor selalu berarti selesai di-kelelawar. Sebagai contoh:

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)
  • Contoh A: Kita tahu bahwa kita berada di atas tanggal 7 karena Kami memiliki 0 yang tercatat di Bawah ke-6 dan Atas dari ke-7 kosong.
  • Contoh B: Ini bisa menjadi Bawah ke-6 atau Atas ke-7.
  • Contoh C: Ini bisa menjadi Atas atau Bawah ke-6.

Tugas Anda adalah mengembalikan inning yang mungkin.

Memasukkan

Dua daftar bilangan bulat non-negatif. Daftar akan dianggap bergerigi dengan daftar tim Tamu yang berukuran sama atau satu elemen lebih besar dibandingkan dengan tim Tuan Rumah. Anda dapat mengambil skor dalam urutan mana pun tetapi nyatakan dalam jawaban Anda jika Anda tidak menggunakan default. Yakni, Tim Tamu kemudian tim Tuan Rumah (default), atau tim Tuan Rumah kemudian Tim Tamu (terbalik). Mereka juga dapat diisi dengan data boneka jika Anda mau, sebutkan jawaban Anda jika Anda melakukannya.

Keluaran

String atau sesuatu yang setara yang mengidentifikasi nomor inning dan apakah itu atas atau bawah. Misalnya 7B 8T, B7 T8, ['7B','8T']semua baik-baik saja. Jika ada dua jawaban, Anda harus menampilkan keduanya. Formatnya cukup fleksibel.

Aturan

  • Masukan akan selalu valid
  • Game dapat masuk ke babak tambahan tak terbatas. Program Anda harus dapat mendukung hingga 255 inning.
  • Celah Standar dilarang
  • Ini adalah sehingga kode terpendek menang

Uji Kasus

#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
sumber
Bisakah kita mengambil dua daftar dalam urutan terbalik? yaitu bawah lalu atas?
Jo King
@ JoKing Tentu, selama itu dicatat dan jawabannya masih cocok dengan benar.
Veskah
Apakah nilai pengembalian integer positif / negatif dapat diterima?
@ Radem Itu mendorongnya sedikit tapi membaca tulisanmu, tidak apa-apa. Saya memang mengatakan outputnya cukup fleksibel.
Veskah

Jawaban:

4

C (gcc) , 50 byte

Mengambil input sebagai pointer ke daftar yang disisipkan (yaitu {them#1, us#1, them#2,...}).

Mengembalikan satu opsi melalui modifikasi, dan yang lainnya melalui nilai pengembalian.

Nilai negatif menunjukkan bagian bawah inning, nilai positif menunjukkan bagian atas inning. Nol adalah "kosong". Nilai absolut dari output adalah jumlah inning. Jadi, -4,5tunjukkan kemungkinan berada di atas yang kelima dan terbawah dari yang keempat, dan 1,0tunjukkan satu-satunya kemungkinan menjadi yang teratas.

Nilai pengembalian makro dapat digunakan untuk menentukan apakah ada satu atau dua inning yang memungkinkan; nilai kembali adalah 0jika tidak ada inning lainnya. Kalau tidak, itu adalah jumlah inning.

Nol byte kode sumber. Gunakan yang berikut ini sebagai tanda preprosesor:

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

Cobalah 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.

sumber
Juga, ini dapat mem-golf 4 byte tambahan jika saya dapat menganggap daftar berada dalam urutan terbalik (terakhir ke yang pertama), atau penunjuk untuk menunjuk ke elemen terakhir dalam array. Tidak cocok untuk itu, karena rasanya terlalu banyak cheat.
Saya akan senang mendengar dari @veskah jika mengambil input seperti yang Anda lakukan ok, karena tampaknya sangat berbeda (dan berguna) dari spesifikasi asli.
BLT
2
@ BLT Berdasarkan konvensi, interleaving adalah bagaimana daftar daftar dilakukan dalam C; multiple dereferencing sangat membebani sumber daya. Pilihan lain adalah memiliki satu daftar demi satu, tetapi kemudian akan sangat tidak praktis untuk menambahkan elemen baru.
3

Perl 6 , 52 48 45 byte

-3 byte berkat beberapa restrukturisasi dari nwellnhof!

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

Cobalah online!

Blok kode anonim yang mengambil input sebagai dua daftar, atas lalu bawah. Output adalah daftar tupel, di mana elemen pertama adalah nomor inning dan elemen kedua Benar atau Salah, sesuai dengan Bawah atau Atas.

Penjelasan:

       {                                    }  # 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
sumber
3

R , 103 96 byte

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`

Cobalah online!

@digEmAll menyimpan 7 byte!

Mengambil dua daftar vektor sebagai input, dan menghasilkan satu atau dua bilangan bulat yang mewakili kemungkinan inning. Bilangan bulat positif adalah bagian atas inning, dan bilangan bulat negatif adalah bagian bawah inning.

Dalam R, bilangan bulat positif adalah benar, jadi saya bisa menggunakan perbedaan panjang sebagai argumen pertama if().

BLT
sumber
Anda mungkin lebih beruntung [[sebagai ifpengganti karena Anda menggunakan [kode Anda.
Giuseppe
@ Giuseppe saya mencobanya dengan <dan ^. Saya pikir [adalah yang digunakan dalam contoh yang saya ingat.
BLT
Anda juga dapat memberikan nama lain untuk 'if'(dan menghapus {}dan pindah ke f=luar): 96 byte
digEmAll
2

Jelly , 11 byte

ZẎṖṠṪ$СẈd2

Cobalah online!

Elemen pertama: indeks kolom berbasis 0.
Elemen kedua: 0untuk atas, 1untuk bawah.

Output adalah daftar satu atau dua pasangan seperti yang ditentukan di atas (prettified untuk menunjukkannya dengan lebih baik). Inning output dalam urutan terbalik.

Erik the Outgolfer
sumber
2

Python 2 , 135 129 126 125 123 119 byte

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]

Cobalah online!

-1 dengan terima kasih kepada @ovs

-4 terima kasih lagi kepada @ovs

ElPedro
sumber
if d else"11BT"[c<1::2]untuk -3
ovs
if dSaya bisa melihat (seharusnya tidak melewatkan itu!) Tetapi else"11BT"[c<1::2]tidak keluar lebih pendek untuk saya kecuali saya kehilangan sesuatu.
ElPedro
Jangan khawatir karena saya menemukan cara lain yang terinspirasi dari cara Anda if d.
ElPedro
Alih-alih if dbisa Anda lakukan if b, maka Anda tidak perlu menyimpan len(b)dalam variabel.
Ovs
@ovs Aku memandang bahwa tetapi juga perlu duntuk [d<c]. Tidak bisa melihat jalan keluarnya. Ada ide?
ElPedro
1

Python 2 , 65 byte

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

Cobalah online!

Mencetak dua baris, pertama kemungkinan inning bawah kemudian yang atas, sebagai daftar tunggal. Jika salah satu tidak memungkinkan, daftar itu kosong.

Tidak
sumber
1

Bersih , 84 75 byte

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

Cobalah online!

Menentukan fungsi @ :: [Int] [Int] -> (Int, Int)dan beberapa pembantu.
Memberikan output dalam bentuk di (Top, Bottom)mana nol menandakan kemungkinan nol.

Suram
sumber