Skip to content

Instantly share code, notes, and snippets.

@lethern
Created December 9, 2018 08:07
Show Gist options
  • Save lethern/a9897ef75817c3f13cdfefb1daaa581c to your computer and use it in GitHub Desktop.
Save lethern/a9897ef75817c3f13cdfefb1daaa581c to your computer and use it in GitHub Desktop.
#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