On Tuesday, 28 April 2015 at 11:03:09 UTC, bearophile wrote:
Gary Willoughby:

I wondered if it was possible to write a classic fizzbuzz[1] example using a UFCS chain? I've tried and failed.

Is this OK?

void main() {
import std.stdio, std.algorithm, std.range, std.conv, std.functional;

    100
    .iota
    .map!(i => ((i + 1) % 15).predSwitch(
        0,       "FizzBuzz",
        3,       "Fizz",
        5,       "Buzz",
        6,       "Fizz",
        9,       "Fizz",
        10,      "Buzz",
        12,      "Fizz",
        /*else*/ i.text))
    .reverseArgs!writefln("%-(%s\n%)");
}


Bye,
bearophile

I've change your solution to use predSwitch's custom predicate:

    100
    .iota
.map!(i => ((i + 1) % 15).predSwitch!((a, b) => 0x10 * (0 == a % 3) + (0 == a % 5) == b)(
        0x00, i.text,
        0x10, "Fizz",
        0x01, "Buzz",
        0x11, "FizzBuzz"))
    .reverseArgs!writefln("%-(%s\n%)");

Reply via email to