Created
December 9, 2018 08:07
-
-
Save lethern/a9897ef75817c3f13cdfefb1daaa581c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
const int ArrSize = 44; | |
struct ArrNode{ | |
int size; | |
ArrNode* prev; | |
ArrNode* next; | |
int arr[ArrSize] = { 0 }; | |
ArrNode() : size( 0 ), prev( nullptr ), next( nullptr ) {} | |
ArrNode( ArrNode* p, ArrNode* n ) : size( 0 ), prev( p ), next( n ) | |
{ | |
p->next= this; | |
n->prev= this; | |
}; | |
}; | |
struct ArrNode_insertPos { | |
ArrNode* node; | |
int index; | |
}; | |
ArrNode_insertPos insert( ArrNode* node, int index, int elem ); | |
ArrNode_insertPos remove( ArrNode* node, int index, int* out_elem ); | |
ArrNode_insertPos append_wrap_2( ArrNode_insertPos pos, int elem ) | |
{ | |
return insert( pos.node, pos.index + 2, elem ); | |
} | |
ArrNode_insertPos remove_wrap_7( ArrNode_insertPos pos, int* out_elem ) | |
{ | |
return remove( pos.node, pos.index - 7, out_elem ); | |
} | |
void day_09( ArrNode* root1, int max_elem, int max_players ) | |
{ | |
ArrNode* current = root1; | |
insert( current, 0, 0 ); | |
ArrNode_insertPos pos = ArrNode_insertPos{ root1, 0 }; | |
int player = 1; | |
int64_t* score = new int64_t[max_players](); | |
for( int elem=1; elem <= max_elem; ++elem ) { | |
if( elem % 23 == 0 ) { | |
int out_elem; | |
pos = remove_wrap_7( pos, &out_elem ); | |
score[player] += (int64_t) (elem + out_elem); | |
} | |
else { | |
pos= append_wrap_2( pos, elem ); | |
} | |
player = (player+1)%max_players; | |
} | |
int64_t max = 0; | |
for( int i=0; i < max_players; ++i ) { | |
if( score[i] > max ) max= score[i]; | |
} | |
} | |
int main() | |
{ | |
ArrNode* root1 = new ArrNode(); | |
ArrNode* root2 = new ArrNode( root1, root1 ); | |
const int N = 1; | |
const int players = 1; | |
day_09( root1, N, players ); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment