อินนิ่งคืออะไร


15

เป้าหมาย

ในแง่ของ World Series ที่อยู่ใกล้ ๆ ฉันต้องการโปรแกรมที่สามารถอ่านคะแนนกล่องและบอกฉันว่ามันคืออะไร มีความซับซ้อนเล็กน้อยเนื่องจากเบสบอลใช้วิธีแปลก ๆ ในการบันทึกคะแนน พวกเขาไม่ได้เขียนคะแนนของทีม at-bat สำหรับโอกาสจนกว่าพวกเขาจะได้คะแนน (และยังคงดำเนินต่อไป) หรือจบ at-bat ดังนั้น 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

เราสามารถรับทั้งสองรายการในลำดับย้อนกลับได้หรือไม่ คือด้านล่างแล้วด้านบน?
Jo King

@ โจกิ้งแน่ใจว่าตราบใดที่มันถูกบันทึกไว้และคำตอบยังคงตรงกับที่ถูกต้อง
Veskah

เอาต์พุตที่ยอมรับได้เป็นบวก / ลบจำนวนเต็ม?

@ Rogem มันดันไปหน่อย แต่อ่านบทความของคุณมันก็ใช้ได้ ฉันพูดว่าเอาต์พุตค่อนข้างยืดหยุ่น
Veskah

คำตอบ:


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

ลองออนไลน์!

บล็อกโค้ดแบบไม่ระบุชื่อที่รับอินพุตเป็นสองรายการด้านบนแล้วล่าง เอาท์พุทเป็นรายการของสิ่งอันดับที่องค์ประกอบแรกคือหมายเลขอินนิงและองค์ประกอบที่สองคือจริงหรือเท็จสอดคล้องกับด้านล่างหรือด้านบน

คำอธิบาย:

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

@Giuseppe ฉันพยายามมันด้วยและ< ^ฉันคิดว่า[เป็นสิ่งที่ใช้ในตัวอย่างที่ฉันจำได้
BLT

นอกจากนี้คุณยังสามารถให้ชื่ออื่นแก่'if'(และลบ{}และย้ายf=ออกไปข้างนอก): 96 ไบต์
digEmAll


2

เยลลี่ 11 ไบต์

ZẎṖṠṪ$СẈd2

ลองออนไลน์!

องค์ประกอบแรก: ดัชนีตามคอลัมน์ 0
องค์ประกอบที่สอง: 0สำหรับด้านบน1สำหรับด้านล่าง

เอาท์พุทเป็นรายการของหนึ่งหรือสองคู่ตามที่ระบุไว้ข้างต้น (prettified เพื่อแสดงให้ดีขึ้น) โอกาสเอาท์พุทอยู่ในลำดับที่กลับกัน


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


if d else"11BT"[c<1::2]สำหรับ -3
ovs

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

ลองออนไลน์!

พิมพ์สองบรรทัดแรกที่เป็นไปได้ของโอกาสด้านล่างจากนั้นจึงเป็นอันดับหนึ่งในฐานะรายการเดี่ยว หากไม่สามารถทำได้อย่างใดอย่างหนึ่งรายการนั้นจะว่างเปล่า


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)ที่ศูนย์หมายถึงความเป็นไปได้ที่เป็นโมฆะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.