Search code examples
c#.netvisual-studiofilefizzbuzz

C# Reading a text file provided via the command line in the way of StandardInput


I am trying to figure out the old FizzBuzz challenge. I figured out the logic behind the FizzBuzz part (printing Fizz for numbers divisible by 3, Buzz for numbers divisible by 5, and FizzBuzz for numbers divisible by both).

Instructions:

Players generally sit in a circle. The first player says the number “1”, and each player says next number in turn. However, any number divisible by X (for example, three) is replaced by the word fizz, and any divisible by Y (for example, five) by the word buzz. Numbers divisible by both become fizz buzz. A player who hesitates, or makes a mistake is eliminated from the game. Write a program that prints out the final series of numbers where those divisible by X, Y and both are replaced by “F” for fizz, “B” for buzz and “FB” for fizz buzz.

INPUT SAMPLE: Your program should accept a file as its first argument. The file contains multiple separated lines; each line contains 3 numbers that are space delimited. The first number is the first divider (X), the second number is the second divider (Y), and the third number is how far you should count (N). You may assume that the input file is formatted correctly and the numbers are valid positive integers.

For example: 3 5 10 2 7 15

OUTPUT SAMPLE: Print out the series 1 through N replacing numbers divisible by X with “F”, numbers divisible by Y with “B” and numbers divisible by both with “FB”. Since the input file contains multiple sets of values, your output should print out one line per set. Ensure that there are no trailing empty spaces in each line you print.

1 2 F 4 B F 7 8 F B 1 F 3 F 5 F B F 9 F 11 F 13 FB 15

CONSTRAINTS:

• The number of test cases ≤ 20

• "X" is in range [1, 20]

• "Y" is in range [1, 20]

• "N" is in range [21, 100]

I am not looking for someone to do this for me, just help me better understand how I am to read the text file. My apologies if this is a "dumb" question. I have researched Microsoft's Development Network page for clarification but that just confused me even more.... Thank you.


Solution

  • The standard output (stdout) is just the regular console output;

    to send something to it, just do Console.WriteLine.

    to send to stderr Console.Error.WriteLine, but it's not required by the challange.

    The challange on CodeEval doesn't require you to input anything from the stdin, you just take the file name from the first argument of your Main method:

    public static void Main(string[] args)
    {
        var fileContent = File.ReadAllText(args[0]);
    }
    

    If you have to read effectively from the stdin, you could just use Console.ReadLine:

    string line;
    
    while ((line = Console.ReadLine()) != null)
    {
        // Do whatever you need to do with the line variable read from the stdin.
    }
    

    or integrating with the code you provided:

    using (var reader = new StreamReader(Console.OpenStandardInput()))
    {
        Console.WriteLine(FizzBuzz.ParseInput(reader));
    }
    

    And, yet another option if you just need to parse text: Console.In