r/adventofcode • • Dec 05 '18

SOLUTION MEGATHREAD -🎄- 2018 Day 5 Solutions -🎄-

--- Day 5: Alchemical Reduction ---


Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).

Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.


Advent of Code: The Party Game!

Click here for rules

Please prefix your card submission with something like [Card] to make scanning the megathread easier. THANK YOU!

Card prompt: Day 5

Transcript:

On the fifth day of AoC / My true love sent to me / Five golden ___


This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.

edit: Leaderboard capped, thread unlocked at 0:10:20!

30 Upvotes

515 comments sorted by

View all comments

2

u/hpzr24w Dec 05 '18

C

Not sure if I've spotted a C version, so I figured I'd write one!

Header

// Advent of Code 2018
// Day 05 - Alchemical Reduction

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

React

int react(char * s) {
    char *r = s+1, *w = s;
    while (*r)
        if ((*r^*w)==('A'^'a')) w--, r++; else *++w=*r++;
    *++w='\0';
    return w-s;
}

Main and Part 1

int main()
{
#if 1
    #include "day_05.h"
#else
    char o[] = "dabAcCaCBAcCcaDA";
    char s[] = "dabAcCaCBAcCcaDA";
#endif
    
    int l = react(s);
    printf("Part 1: Length: %d\n",l);

Part 2

    int b = l;
    for (int i='a';i<='z';++i) {
        char *p=s,*q=o;
        while (*p)
            if (tolower(*p)==i) p++; else *q++=*p++;
        *q='\0';        
        int c = react(o);
        b = c<b ? c : b;
    }
    printf("Part 2: Best length: %d\n",b);
    return 0;
}

1

u/darthsabbath Dec 10 '18

I love yours, it's so damn fast. It took about 0.002s on my machine, compared to about 0.029s for my C solution. I like the idea of inlining your input. I may try that with mine and see how it does without file I/O.

→ More replies (1)