Skip to content

Minoka's eventstream puzzler draft #34

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 20 commits into
base: eventstream-puzzler
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 89 additions & 5 deletions src/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,91 @@
//write tests here
import {
firstMockEventStream,
secondMockEventStream,
thirdMockEventStream,
fourthMockEventStream,
firstMockRegion,
secondMockRegion,
} from './mockEventStream'
import { getHighestScoringRegion, findRegionScore, scoreEvent } from "./index"

describe('Tests will go here!', () => {
it('should pass', () => {
expect(true).toBeTruthy()
describe('ScoreEventStream', () => {

describe('getHighestScoringRegion', () => {

it('should return the first highest scoring region array when there is a tie', () => {
const firstHighestScoringRegion = getHighestScoringRegion(firstMockEventStream)
const firstExpected = [
{ timestamp: 123123125, eventType: 'new message' },
{ timestamp: 123123125, eventType: 'view' },
{ timestamp: 123123125, eventType: 'view' },
{ timestamp: 123123125, eventType: 'screenshot' },
{ timestamp: 123123125, eventType: 'screenshot' },
]
expect(firstHighestScoringRegion).toEqual(firstExpected)

const secondHighestScoringRegion = getHighestScoringRegion(thirdMockEventStream)
const secondExpected = [
{ timestamp: 123123125, eventType: 'screenshot' },
{ timestamp: 123123125, eventType: 'screenshot' },
{ timestamp: 123123125, eventType: 'new message' },
{ timestamp: 123123125, eventType: 'new message' },
{ timestamp: 123123123, eventType: 'new message' },
]
expect(secondHighestScoringRegion).toEqual(secondExpected)
})

it('should return the correct array regions if there is less then 5 in event stream', () => {
const highestScoringRegion = getHighestScoringRegion(secondMockEventStream)
const expected = [
{ timestamp: 123123125, eventType: 'view' },
{ timestamp: 123123125, eventType: 'screenshot' },
{ timestamp: 123123125, eventType: 'screenshot' },
]
expect(highestScoringRegion).toEqual(expected)
})

it('should return the highest scoring region of given array ', () => {
const highestScoringRegion = getHighestScoringRegion(fourthMockEventStream)
const expected = [
{ timestamp: 123123125, eventType: 'view' },
{ timestamp: 123123124, eventType: 'screenshot' },
{ timestamp: 123123125, eventType: 'new message' },
{ timestamp: 123123125, eventType: 'view' },
{ timestamp: 123123125, eventType: 'screenshot' },
]
expect(highestScoringRegion).toEqual(expected)
})
})

describe('findRegionScore', () => {

it('should give the correct score for each region', () => {
const firstRegionScore = findRegionScore(firstMockRegion)
expect(firstRegionScore).toEqual(8)

const secondRegionScore = findRegionScore(secondMockRegion)
expect(secondRegionScore).toEqual(9)
})

it('should give the correct score for each region even if there is less then 5', () => {
const thirdRegionScore = findRegionScore(
[
{ timestamp: 123123125, eventType: 'new message' },
{ timestamp: 123123125, eventType: 'view' },
{ timestamp: 123123125, eventType: 'screenshot' },
])
expect(thirdRegionScore).toEqual(6)
})
})

describe('scoreEvent', () => {

it('return the correct score value from each event', () => {
expect(scoreEvent({ timestamp: 123123125, eventType: 'view' })).toEqual(2)

expect(scoreEvent({ timestamp: 123123125, eventType: 'screenshot' })).toEqual(3)

expect(scoreEvent({ timestamp: 123123125, eventType: 'new message' })).toEqual(1)
})
})
})
})
41 changes: 40 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,40 @@
//Define class/functions here
//Define class/functions here
export interface Event {
timestamp: number
eventType: 'screenshot' | 'view' | 'new message'
}

export const scoreEvent = (event: Event): number => {
const { eventType } = event
switch (eventType) {
case "new message":
return 1
case "view":
return 2
case "screenshot":
return 3
default:
return 0
}
}

export const findRegionScore = (eventStream: Array<Event>): number => {
const score = eventStream.reduce((acc, event) => {
return acc + scoreEvent(event)
}, 0)

return score
}

export const getHighestScoringRegion = (eventStream: Array<Event>): Array<Event> => {

const eventStreamScore: number[]= eventStream.reduce((acc, next, index): any => {
const eventRegion = eventStream.slice(index, index + 5)
return [...acc, findRegionScore(eventRegion) ]
}, [])

const max: number = Math.max(...eventStreamScore)
const index: number = eventStreamScore.indexOf(max)

return eventStream.slice(index, index + 5)
}
209 changes: 209 additions & 0 deletions src/mockEventStream.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
import { Event } from "./index"
export const firstMockEventStream: Array<Event> = [
{
timestamp: 123123123,
eventType: "new message",
},
{
timestamp: 123123124,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "screenshot",
},
{
timestamp: 123123125,
eventType: "screenshot",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "new message",
},
]
export const secondMockEventStream: Array<Event> = [
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "screenshot",
},
{
timestamp: 123123125,
eventType: "screenshot",
},
]
export const thirdMockEventStream: Array<Event> = [
{
timestamp: 123123125,
eventType: "screenshot",
},
{
timestamp: 123123125,
eventType: "screenshot",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123123,
eventType: "new message",
},
{
timestamp: 123123124,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "screenshot",
},
]
export const fourthMockEventStream: Array<Event> = [
{
timestamp: 123123124,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123124,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123124,
eventType: "screenshot",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "screenshot",
},
{
timestamp: 123123124,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "view",
},
]
export const firstMockRegion: Array<Event> = [
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "screenshot",
},
{
timestamp: 123123124,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "new message",
},
]
export const secondMockRegion: Array<Event> = [
{
timestamp: 123123125,
eventType: "screenshot",
},
{
timestamp: 123123124,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "new message",
},
{
timestamp: 123123125,
eventType: "view",
},
{
timestamp: 123123125,
eventType: "view",
},
]