นับจำนวนครั้ง


17

แรงบันดาลใจจากสถานการณ์ในชีวิตจริงซึ่งฉันได้ขอคำตอบจากที่นี่: /superuser/1312212/writing-a-formula-to-count-how-many-times-each-date- ปรากฏใน-a-ชุดจากวันที่วิ่ง

กำหนดอาร์เรย์ของ timespans (หรือคู่ startdate-enddate) ให้นับจำนวนครั้งที่ครอบคลุมกี่ครั้งต่อวันสำหรับทุกวันในช่วงทั้งหมด

ตัวอย่างเช่น:

  #      Start      End
  1    2001-01-01 2001-01-01
  2    2001-01-01 2001-01-03
  3    2001-01-01 2001-01-02
  4    2001-01-03 2001-01-03
  5    2001-01-05 2001-01-05

รับข้อมูลข้างต้นผลลัพธ์ควรเป็นดังนี้:

2001-01-01: 3 (Records 1,2,3)
2001-01-02: 2 (Records 2,3)
2001-01-03: 2 (Records 2,4)
2001-01-04: 0
2001-01-05: 1 (Record 5)

คุณจะต้องส่งออกการนับสำหรับแต่ละวัน (ตามลำดับเรียงลำดับที่เก่าแก่ที่สุด); ไม่ใช่ระเบียนที่จะปรากฏ

คุณสามารถสมมติได้ว่าแต่ละช่วงเวลามีเฉพาะวันที่เท่านั้นไม่ใช่เวลา ดังนั้นทั้งวันจะถูกนำเสนอเสมอ

I / O

อินพุตสามารถเป็นรูปแบบใด ๆ ที่แสดงถึงชุดของช่วงเวลา - ดังนั้นชุดของเวลาหรือชุดของวัตถุ (บิวด์อิน) ที่มีวันที่เริ่มต้นและวันที่สิ้นสุด เวลาวันที่จะถูก จำกัด อยู่ระหว่างปีพ. ศ. 2444-2542 ตามปกติสำหรับความท้าทาย PPCG

คุณสามารถสมมติว่าอินพุตถูกเรียงลำดับล่วงหน้าตามที่คุณต้องการ (ระบุในคำตอบของคุณ) รวมวันที่ที่ป้อนเข้า (ดังนั้นช่วงจึงรวมวันที่เริ่มต้นและวันที่สิ้นสุดทั้งหมด)

นอกจากนี้คุณยังสามารถสันนิษฐานได้ว่าในสองวันที่ในช่วงที่กำหนดช่วงแรกจะเก่ากว่าหรือเท่ากับวินาที (เช่นคุณจะไม่มีช่วงวันที่ติดลบ)

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

ดังนั้นผลลัพธ์สำหรับตัวอย่างข้างต้นจะเป็น {3,2,2,0,1}

เป็นไปได้ว่าบางวันจะไม่รวมอยู่ในช่วงเวลาใด ๆ ซึ่งในกรณี0นั้นจะถูกส่งออกสำหรับวันที่นั้น

เกณฑ์การชนะ

นี่คือโค้ดกอล์ฟดังนั้นไบต์ที่ต่ำที่สุดจึงชนะ ใช้การยกเว้นตามปกติ

ตัวอย่างอัลกอริธึมหลอก

For each time range in input
    If start is older than current oldest, update current oldest
    If end is newer than current newest, update current newest
End For
For each day in range oldest..newest
   For each time range
       If timerange contains day
            add 1 to count for day
End For
Output count array

อัลกอริทึมอื่น ๆ เพื่อให้ได้ผลลัพธ์เดียวกันนั้นใช้ได้


3
จำเป็นต้องมีอาร์เรย์ของจำนวนเต็มหรือเราได้รับอนุญาตให้ส่งคืนสิ่งอื่นพูดพจนานุกรมที่มีคีย์เป็นแต่ละวันหรือไม่ หากเราได้รับอนุญาตให้ส่งคืนพจนานุกรมเราสามารถละเว้นวันที่ที่ไม่อยู่ในช่วงเวลาใด ๆ ได้หรือไม่
JungHwan Min

1
เราสามารถรับข้อมูลเป็นสองรายการหนึ่งรายการที่มีวันที่เริ่มต้นและอีกรายการที่มีวันที่สิ้นสุดที่สอดคล้องกันได้หรือไม่
Giuseppe

ใช่ทุกสิ่งเหล่านั้นเป็นเรื่องปกติยกเว้นวันที่ออกไป - ฉันบอกอย่างชัดเจนว่า 0 ควรส่งออกในกรณีนั้น
simonalexander2005

3
ฉันขอถาม0ได้ไหมว่าทำไมจึงควรอยู่ในพจนานุกรม ดูเหมือนว่าจะบังคับให้ผู้ใช้ทำซ้ำตั้งแต่min(input)ถึงถึงmax(input)ซึ่งดูเหมือนจะไม่เพิ่มอะไรเลยลงไปในแก่นของความท้าทาย
JungHwan Min

2
@JungHwanMin ฉันเดาว่ามันจะไม่เปลี่ยนหรอก แต่เนื่องจากฉันมีมันอย่างชัดเจนในสเปคเมื่อฉันโพสต์มันฉันไม่ต้องการไปยุ่งกับมันและทำให้คนอื่นทำซ้ำคำตอบของพวกเขา
simonalexander2005

คำตอบ:


3

APL (Dyalog Unicode) , 32 ไบต์SBCS

โปรแกรมเต็มรูปแบบ แสดง stdin สำหรับรายการคู่ของตัวเลขวันที่ระหว่างประเทศ (เช่นที่ Excel และ MATLAB ใช้) ทั้งรายการและคู่อาจได้รับในลำดับใด ๆ เช่น (จบ, เริ่ม) พิมพ์รายการการนับเป็น stdout

¯1+⊢∘≢⌸(R,⊢)∊(R←⌊/,⌊/+∘⍳⌈/-⌊/)¨⎕ลองออนไลน์!

หากสิ่งนี้ไม่ถูกต้องสามารถแปลงรายการของคู่ (YMD) เป็น 21 ไบต์เพิ่มเติมรวม 53:

¯1+⊢∘≢⌸(R,⊢)∊(R⌊/,⌊/+∘⍳⌈/-⌊/)¨{2⎕NQ#'DateToIDN'⍵}¨¨⎕ลองออนไลน์!


 พร้อมต์คอนโซลสำหรับอินพุตที่ประเมิน

(...  ใช้ฟังก์ชั่นโดยปริยายต่อไปนี้กับแต่ละคู่

⌊/ ขั้นต่ำ (ลดความสว่างขั้นต่ำ) คือวันที่เริ่มต้น

⌈/- สูงสุด (เช่นวันที่สิ้นสุด) ลบด้วย

⌊/+∘⍳ วันที่เริ่มต้นบวกช่วงที่ 1 ถึงถึงนั้น

⌊/, วันที่เริ่มต้นซึ่งรวมอยู่ในนั้น

R← กำหนดฟังก์ชั่นนี้ให้กับR(สำหรับR ange)

ε nlist (เรียบ) รายการช่วงเป็นรายการเดียว

(... ) ใช้ฟังก์ชัน tacit ต่อไปนี้กับสิ่งนั้น:

R,⊢ ผลลัพธ์ของการใช้R(เช่นช่วงวันที่) ตามด้วยอาร์กิวเมนต์
  (เพื่อให้แน่ใจว่าแต่ละวันในช่วงจะแสดงอย่างน้อยหนึ่งครั้งและวันที่ปรากฏตามลำดับที่เรียง)

 สำหรับแต่ละคู่ที่ไม่ซ้ำกัน (วันที่, ดัชนีการเกิดขึ้นในอินพุท), ทำ:

⊢∘≢ ละเว้นวันที่เกิดขึ้นจริงเพื่อสนับสนุนการนับดัชนี

¯1+ เพิ่ม -1 ให้กับการนับเหล่านั้น (เนื่องจากเราได้เตรียมหนึ่งวันในแต่ละช่วงในช่วง


9

JavaScript (ES6), 85 ไบต์

รับอินพุตเป็นรายการของDateคู่ คาดว่ารายการจะเรียงตามวันที่เริ่มต้น ส่งคืนอาร์เรย์ของจำนวนเต็ม

f=(a,d=+a[0][0])=>[a.map(([a,b])=>n+=!(r|=d<b,d<a|d>b),r=n=0)|n,...r?f(a,d+864e5):[]]

ลองออนไลน์!

หรือ84 ไบต์หากเราสามารถใช้ JS timestamps เป็นอินพุต (ตามที่แนะนำโดย @Shaggy)



บันทึกไบต์โดยใช้ค่าดั้งเดิมเป็นอินพุต: TIO
Shaggy

7

JavaScript, 75 73 ไบต์

รับอินพุตเป็นอาร์เรย์ที่เรียงลำดับแล้วของอาร์เรย์ของคู่ดึกดำบรรพ์วันที่ส่งออกวัตถุที่คีย์เป็นดั่งเดิมของแต่ละวันที่และค่านับของวันที่เหล่านั้นในช่วง

a=>a.map(g=([x,y])=>y<a[0][0]||g([x,y-864e5],o[y]=~~o[y]+(x<=y)),o={})&&o

ลองมัน


ฉันทำงานกับเวอร์ชัน 60 ไบต์นี้จนกว่าจะได้รับการยืนยันว่าวันที่ที่ไม่ปรากฏในช่วงใดช่วงหนึ่งจะต้องรวมอยู่ด้วยดังนั้นจึงอัปเดตอย่างเร่งด่วนเป็นโซลูชันด้านบน

a=>a.map(g=([x,y])=>x>y||g([x+864e5,y],o[x]=-~o[x]),o={})&&o

ลองออนไลน์ (หรือด้วยวันที่มนุษย์อ่านได้ในผลลัพธ์ )


ดูเหมือนว่า ES6 จะกำหนดลำดับสำคัญสำหรับวัตถุ JS ( stackoverflow.com/a/31102605/8127 ) ลำดับการแทรกแบบพื้นฐานสำหรับคีย์สตริงและสัญลักษณ์ (และโหนด Nodejs ของ TIO ดูเหมือนจะทำตามนั้น: tinyurl.com/ybjqtd89 ) และโดยทั่วไปความคิดเห็นของฉันคือรายละเอียดการใช้งาน (ซึ่งเป็นสิ่งที่วัตถุอยู่ที่นี่) ไม่ควรกำหนดการตีความกฎท้าทาย แต่ฉันจะรอ Meta โพสต์
sundar - Reinstate Monica

6

อ็อกเทฟ 63 ไบต์

@(x)histc(t=[cellfun(@(c)c(1):c(2),x,'un',0){:}],min(t):max(t))

ลองออนไลน์!

ตอนนี้มันน่าเกลียด!

คำอธิบาย:

รับอินพุตเป็นอาร์เรย์เซลล์ของdatenumองค์ประกอบ (เช่นสตริงที่"2001-01-01"แปลงเป็นค่าตัวเลขซึ่งมีลักษณะดังนี้:

{[d("2001-01-01") d("2001-01-01")]
[d("2001-01-01") d("2001-01-03")]
[d("2001-01-01") d("2001-01-02")]
[d("2001-01-03") d("2001-01-03")]
[d("2001-01-05") d("2001-01-05")]};

ซึ่งเป็นฟังก์ชั่นd() datenumจากนั้นเราจะใช้cellfunเพื่อสร้างเซลล์ที่มีช่วงจากคอลัมน์แรกไปยังเซลล์ที่สองสำหรับแต่ละแถวเหล่านั้น เราต่อช่วงเหล่านี้เข้าด้วยกันในแนวนอนเพื่อให้เรามีเวกเตอร์แนวนอนที่ยาวพร้อมวันที่ทั้งหมด

จากนั้นเราจะสร้างฮิสโตแกรมโดยใช้histcค่าเหล่านี้โดยมีช่องเก็บของตามช่วงระหว่างวันที่ต่ำสุดและสูงสุด


5

R , 75 ไบต์

function(x,u=min(x):max(x))rowSums(outer(u,x[,1],">=")&outer(u,x[,2],"<="))

ลองออนไลน์!

อินพุตเป็นเมทริกซ์ที่มีคอลัมน์แรกคือเริ่มและคอลัมน์ที่สองคือสิ้นสุด ถือว่า Start <= End แต่ไม่ต้องการเรียงลำดับวันที่เริ่มต้น


นี่คือเท่าที่ฉันสามารถไปพยายามทำซ้ำคำตอบ Octave โดย Stewie Griffin ... ฉันทำอะไรผิด
JayCe

มันเป็นเพราะวิธีที่ไม่ R ถังขยะในhist; คุณสามารถทำได้c(-25668,min(x):max(x))ตั้งแต่เมื่อ-25568ก่อน1900แต่สิ่งนี้จบลงได้นานกว่าคำตอบที่คุณแนะนำ ที่ถูกกล่าวว่ามีวิธีที่ดีกว่าในการสร้างวันที่กว่าapply; ฉันมีหนึ่งที่ 68 ไบต์และฉันไม่ได้พบเวลาที่จะโพสต์ด้วยตัวเอง
Giuseppe

อาไม่ใช้จริง(min(x)-1):max(x)และมันควรจะทำงานตามที่คาดไว้; ถ้าคุณสามารถหาapplyวิธีสร้างวันที่ได้คุณจะได้ 63 ไบต์และคำตอบของอ็อกเทฟ
Giuseppe

@Giuseppe คุณควรโพสต์เป็นคำตอบที่แยกต่างหาก :)
Jayce

โพสต์ :-) ฉันต้องยอมรับว่าฉันใช้อยู่tableและfactorก่อนหน้านี้ฉันใช้งานครั้งแรกที่Map68 ไบต์ แต่histเป็นวิธีที่เรียบร้อยที่ฉันมักจะลืมเสมออาจเป็นเพราะมันน่ารำคาญที่จะได้ถังขยะที่ถูกต้อง (อย่างที่เราเห็น )
จูเซปเป้

4

สีแดง 174 ไบต์

func[b][m: copy #()foreach[s e]b[c: s
until[m/(c): either none = v: m/(c)[1][v + 1]e < c: c + 1]]c: first sort b
until[print[either none = v: m/(c)[0][v]](last b)< c: c + 1]]

การใช้งานค่อนข้างยาวและแท้จริง

ลองออนไลน์!

อ่านได้:

f: func [ b ] [
    m: copy #()
    foreach [ s e ] b [
        c: s
        until [
            m/(c): either none = v: m/(c) [ 1 ] [ v + 1 ]   
            e < c: c + 1
        ]      
    ]
    c: first sort b
    until[
        print [ either none = v: m/(c) [ 0 ] [ v ] ]
        ( last b ) < c: c + 1
    ]      
]

4

Groovy ขนาด 142 ไบต์

{a={Date.parse('yyyy-mm-dd',it)};b=it.collect{a(it[0])..a(it[1])};b.collect{c->b.collect{it}.flatten().unique().collect{it in c?1:0}.sum()}}

ฟอร์แมตแล้ว:

 {                                   // Begin Closure
    a={Date.parse('yyyy-mm-dd',it)}; // Create closure for parsing dates, store in a().
    b=it.collect{                    // For each input date pair...
        a(it[0])..a(it[1])           // Parse and create date-range.
    };
    b.collect{                       // For each date range...
        c->
        b.collect{                   // For each individual date for that range...
           it
        }.flatten().unique().collect{ // Collect unique dates.
            it in c?1:0
        }.sum()                      // Occurrence count.
    }
}

4

Python 2 , 114 87 93 ไบต์

-27 ไบต์ขอบคุณ Jonathan Allan
+6 ไบต์ขอบคุณ sundar

รับอินพุตเป็นรายการคู่ของออบเจ็กต์ datetime
สมมติว่าคู่แรกเริ่มต้นด้วยวันที่ต่ำที่สุด

def F(I):
 d=I[0][0]
 while d<=max(sum(I,[])):print sum(a<=d<=b for a,b in I);d+=type(d-d)(1)

ลองออนไลน์!


daystimedeltaอาร์กิวเมนต์เริ่มต้นสำหรับ
Jonathan Allan

... ในความเป็นจริงผมคิดว่าคุณสามารถวางfrom datetime import*และแทนที่d+=timedelta(days=1)ด้วยd+=type(d-d)(1)เนื่องจากปัจจัยการผลิตที่มีอยู่แล้วdates 87 bytes
Jonathan Allan

1
ดูเหมือนว่าจะถือว่าการเริ่มต้นของช่วงแรกคือวันที่ต่ำที่สุดและจุดสิ้นสุดของช่วงสุดท้ายนั้นสูงที่สุด - แต่ฉันคิดว่าบางครั้งมันเป็นไปไม่ได้แม้ว่า OP จะอนุญาตให้เราป้อนข้อมูลเรียงลำดับ สำหรับเช่น [(2001-01-01, 2001-01-05), (2001-01-02, 2001-01-03)]ถ้าใส่เป็น ยกเว้นว่า OP ทำให้เราสามารถแยกและจัดเรียงช่วงเหล่านี้ใหม่ได้ในระหว่างการประมวลผลล่วงหน้า (ซึ่งไม่น่าจะเกิดขึ้น) โค้ดนี้ไม่สามารถประมวลผลได้อย่างถูกต้อง
sundar - Reinstate Monica

@sundar ใช่ฉันเห็นสิ่งที่คุณพูดถึง ฉันได้อัพเดตโซลูชันเพื่อจัดการกับสิ่งนี้ ขอบคุณ!
Dead Possum

3

ภาษา Wolfram (Mathematica) , 62 ไบต์

Lookup[d=DayRange;Counts[Join@@d@@@#],#[[1,1]]~d~#[[-1,1]],0]&

ลองออนไลน์!

+35 ไบต์เนื่องจาก OP ระบุว่า 0ต้องรวมอยู่ในผลลัพธ์

หากไม่อนุญาตให้ป้อนรายการในพจนานุกรมจะมีขนาด 27 ไบต์

Counts[Join@@DayRange@@@#]&

ลองออนไลน์!

ในตัวDayRangeยอมรับสองDateObjects (หรือเทียบเท่าสตริง) และส่งออกรายการDatesระหว่างวันที่เหล่านั้น (รวม)


3

R , 65 63 ไบต์

function(x)hist(unlist(Map(`:`,x[,1],x[,2])),min(x-1):max(x))$c

ลองออนไลน์!

นี่คือความร่วมมือระหว่างJayCeกับตัวฉันเองซึ่งเป็นคำตอบของ Stewie Griffinให้กับ R

ในการอ้างถึง JayCe:

อินพุตเป็นเมทริกซ์ที่มีคอลัมน์แรกคือเริ่มและคอลัมน์ที่สองคือสิ้นสุด ถือว่า Start <= End แต่ไม่ต้องการเรียงลำดับวันที่เริ่มต้น

อาจ$cจะไม่จำเป็น แต่ก็ไม่ได้อยู่ในจิตวิญญาณของความท้าทายดังนั้นฉันจึงรวมมันเข้าด้วยกัน


1
ต่ำสุด (x-1) สำหรับ 2 ไบต์?
JayCe

^ โดยที่ฉันหมายถึงนี้
JayCe

@ JayCe ใช่ดี! ฉันตั้งใจจะกลับมาที่นี่ก่อนหน้านี้ แต่ฉันลืม
Giuseppe

3

Powershell, 122 121 118 113 ไบต์

filter d{0..($_[-1]-($s=$_[0])).Days|%{$s.AddDays($_)}}$c=@{};$args|d|%{++$c.$_};,($c.Keys.Date|sort)|d|%{+$c.$_}

count-timespan.ps1บันทึกเป็น สคริปต์ทดสอบ:

.\count-timespan.ps1 `
    @([datetime]"2001-01-01", [datetime]"2001-01-01")`
    @([datetime]"2001-01-01", [datetime]"2001-01-03")`
    @([datetime]"2001-01-01", [datetime]"2001-01-02")`
    @([datetime]"2001-01-03", [datetime]"2001-01-03")`
    @([datetime]"2001-01-05", [datetime]"2001-01-05")

คำอธิบาย

filter d{                           # define a function with a pipe argument (it's expected that argument is an array of dates)
    0..($_[-1]-($s=$_[0])).Days|%{  # for each integer from 0 to the Days
                                    # where Days is a number of days between last and first elements of the range
                                    # (let $s stores a start of the range)
        $s.AddDays($_)              # output to the pipe a date = first date + number of the current iteration
    }                               # filter returns all dates for each range
}                                   # dates started from first element and ended to last element
$c=@{}                              # define hashtable @{key=date; value=count}
$args|d|%{++$c.$_}                  # count each date in a array of arrays of a date
,($c.Keys.Date|sort)|d|%{+$c.$_}    # call the filter via pipe with the array of sorted dates from hashtable keys

# Trace:
# call d @(2001-01-01, 2001-01-01) @(2001-01-01, 2001-01-03) @(2001-01-01, 2001-01-02) @(2001-01-03, 2001-01-03) @(2001-01-05, 2001-01-05)
# [pipe]=@(2001-01-01, 2001-01-01, 2001-01-02, 2001-01-03, 2001-01-01, 2001-01-02, 2001-01-03, 2001-01-05)
# $c=@{2001-01-03=2; 2001-01-01=3; 2001-01-05=1; 2001-01-02=2}
# call d @(2001-01-01, 2001-01-02, 2001-01-03, 2001-01-05)
# [pipe]=@(2001-01-01, 2001-01-02, 2001-01-03, 2001-01-04, 2001-01-05)
# [output]=@(3, 2, 2, 0, 1)

ขอบคุณ! $cnt.Keys.Dateแน่นอน.
mazzy

-3 ไบต์: แทนที่ด้วยfunction scriptblockมีการทดสอบรหัส golfed และ ungolfed
mazzy

-5 ไบต์: แทนที่scriptblock filterCall of a filterนั้นกะทัดรัดกว่า
mazzy

3

J, 43 ไบต์

(],.[:+/@,"2="{~)&:((>./(]+i.@>:@-)<./)"1),

อินพุตเป็นรายการของคู่ของจำนวนเต็มโดยที่จำนวนเต็มแต่ละค่าจะถูกชดเชยจากค่า 0 ทั่วไปใด ๆ

ungolfed

(] ,. [: +/@,"2 ="{~)&:((>./ (] + i.@>:@-) <./)"1) ,

คำอธิบาย

โครงสร้างคือ:

(A)&:(B) C
  • C สร้างเบ็ดที่ให้คำกริยาหลัก A&:Bอินพุตด้านซ้ายและอินพุตแบนด้านขวา
  • B aka ((>./ (] + i.@>:@-) <./)"1)ใช้เวลาขั้นต่ำและสูงสุดของรายการและส่งกลับช่วงผลลัพธ์และดำเนินการกับอันดับ 1 ดังนั้นจึงให้ช่วงทั้งหมดทางด้านขวาและแต่ละช่วงทางด้านซ้าย
  • จากนั้นใช้=กับอันดับ"0 _(เช่นอันดับของ{) เพื่อนับจำนวนครั้งที่แต่ละอินพุตปรากฏในช่วงใดช่วงหนึ่ง ในที่สุดมันก็รูดรหัสทุก ๆ ปีด้วยจำนวนเหล่านั้น

ลองออนไลน์!


2

JavaScript (Node.js) , 80 ไบต์

(a,u=[])=>a.map(g=([p,q])=>p>q||g([p,q-864e5],u[z=(q-a[0][0])/864e5]=-~u[z]))&&u

ลองออนไลน์!

undefinedหมายถึงศูนย์ องค์ประกอบแรกควรเริ่มเร็วที่สุด

(a,u=[])=>a.map(g=([p,q])=>p>q||g([p,q-1],u[z=(q-a[0][0])/864e5]=-~u[z]))&&u จะสั้นลงถ้าคุณเห็นองค์ประกอบและใช้สแต็กมากขึ้นเท่านั้น


6
คุณควรขอคำยืนยันว่าการแทนที่ค่าอื่น0เป็นที่ยอมรับได้
Shaggy

1

Ruby , 70 ไบต์

->s{f,=s.min;(p s.count{|a,b|(f-a)*(f-b)<=0};f+=86400)until f>s[0][1]}

ลองออนไลน์!

การป้อนข้อมูล:

อาร์เรย์ของคู่ของวันที่เรียงตามวันที่สิ้นสุดจากมากไปน้อย


1

R (70)

function(x)(function(.)tabulate(.-min(.)+1))(unlist(Map(seq,x$S,x$E,"d")))

สมมติกรอบข้อมูลที่xมีสองคอลัมน์ ( StartและEndหรืออาจเป็นSและE ) กับวันที่ (คลาสDate)

ลองออนไลน์


สวัสดีคุณสามารถรวมลิงค์ TIO (ดูคำตอบอื่น ๆ ) ไว้กับตัวอย่างอินพุต / เอาท์พุตได้หรือไม่? ไม่ใช่การโกงที่จะรวมแพ็คเกจ แต่library(magrittr)ต้องรวมอยู่ในจำนวนไบต์
JayCe

นอกจากนี้ตามการส่งฉันทามติจะต้องมีฟังก์ชั่นเต็มรูปแบบหรือโปรแกรมไม่ตัวอย่างดังนั้นถ้าคุณไปด้วยฟังก์ชั่นที่มีอาร์กิวเมนต์เดียวคือxคำตอบของคุณเริ่มต้นด้วยfunction(x)แล้วร่างกายของฟังก์ชั่น
JayCe

1

Julia 0.6 , 77 bytes

M->[println(sum(dM[r,1]:M[r,2]for r1:size(M,1)))for dM[1]:max(M...)]

ลองออนไลน์!

แรงบันดาลใจจาก @ DeadPossum ของการแก้ปัญหาหลาม

รับอินพุตเป็นเมทริกซ์โดยที่แต่ละแถวมีสองวันที่: วันที่เริ่มต้นและสิ้นสุดของช่วงข้อมูลเข้า สมมติว่าอินพุตมีวันที่ที่เร็วที่สุดก่อนและแต่ละแถวมีวันที่เริ่มต้นก่อน


วิธีแก้ปัญหาที่เก่ากว่า:

Julia 0.6 , 124 bytes

R->(t=Dict();[[dkeys(t)?t[d]+=1:t[d]=1 for dg]for gR];[dkeys(t)?t[d]:0 for dmin(keys(t)...):max(keys(t)...)])

ลองออนไลน์!

ยอมรับอินพุตเป็นอาร์เรย์ของช่วงวันที่ ไม่ถือว่าการเรียงลำดับใด ๆ ในช่วงที่แตกต่างกันในอาร์เรย์

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