view 2017/01/app.d @ 0:0fa6cd63af21

day 1
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Thu, 07 Dec 2017 11:44:42 -0500
parents
children
line wrap: on
line source

import std.getopt;
import std.stdio;
import std.conv: to;
import std.traits: isNumeric;

numType day1(numType)(string input, size_t stride = 0)
  if(isNumeric!numType)
{
  auto n = input.length;
  if(stride == 0) {
    stride = n/2;
  }
  int sum = 0;
  foreach(idx, c; input) {
    auto prev = input[(idx + stride)%n];
    if (c == prev) {
      sum += to!(numType)(c - '0');
    }
  }
  return sum;
}

void main(string[] args) {
  string input;
  auto opts = getopt(
    args,
    "input|i", "Input captcha to process", &input
  );

  if (opts.helpWanted) {
    defaultGetoptPrinter("Day 1 of AoC", opts.options);
  }

  auto result1 = day1!(int)(input, 1);
  auto result2 = day1!(int)(input);
  writeln(result1);
  writeln(result2);
}