webentwicklung-frage-antwort-db.com.de

FizzBuzz schreiben

Beim Lesen des Coding-Horrors bin ich gerade ein anderes Mal auf den FizzBuzz gestoßen.

Der ursprüngliche Beitrag ist hier: Coding Horror: Warum können Programmierer nicht programmieren?

Für diejenigen, die es nicht wissen: FizzBuzz ist ein ziemlich beliebtes Kinderspiel. Zählen von 1 bis 100, Und jedes Mal, wenn eine Zahl durch 3 teilbar ist, rufen Sie "Fizz". Jedes Mal Eine Zahl ist teilbar durch 5, die "Buzz" nennt und jedes Mal eine Zahl ist durch 3 teilbar und 5: "FizzBuzz statt der Nummer" aufrufen

Aber dieses Mal habe ich gerade angefangen, es zu kodieren. Es war ein Job von einer Minute, aber es gibt einige Dinge, die ich nicht mag.

Hier ist mein Code

public void DoFizzBuzz()
{
    var combinations = new Tuple<int, string>[] 
    { 
        new Tuple<int, string> (3, "Fizz"), 
        new Tuple<int, string> (5, "Buzz"), 
    };

    for (int i = 1; i <= 100; ++i)
    {
        bool found = false;

        foreach (var comb in combinations)
        {
            if (i % comb.Item1 == 0)
            {
                found = true;
                Console.Write(comb.Item2);
            }
        }

        if (!found)
        {
            Console.Write(i);
        }

        Console.Write(Environment.NewLine);
    }
}

Meine Fragen sind also:

  1. Wie kann man den gefundenen Bool loswerden? 
  2. Gibt es eine bessere Möglichkeit, .__ als das foreach zu testen?
20
Mare Infinitus

Ich denke, was Sie erreichen wollen, ist eine generische Lösung für FizzBuzz, die für eine beliebige Anzahl von Zahlen-Wort-Kombinationen geeignet ist.

Sie haben einen guten Start - ich glaube, ich kann Ihre Fragen mit diesem Beispiel beantworten:

public void DoFizzBuzz()
{
    var combinations = new List<Tuple<int, string>>
    { 
        new Tuple<int, string> (3, "Fizz"), 
        new Tuple<int, string> (5, "Buzz"), 
    };

    Func<int, int, bool> isMatch = (i, comb) => i % comb == 0;
    for (int i = 1; i <= 100; i++)
    {
        Console.Write(i);

        var matchingCombs = combinations.Where(c => isMatch(i, c.Item1)).ToList();
        if (matchingCombs.Any())
        {
            Console.Write(string.Join("", matchingCombs.Select(c => c.Item2)));
        }
        else
        {
            Console.Write(i);
        }
        Console.Write(Environment.NewLine);
    }
}

In der Praxis würden Sie combinations an die Methode übergeben, ich habe sie aber nur kurz gesagt.

18
Rob H

Ich denke, Ihre Implementierung ist unnötig komplex. Dieser macht die Arbeit und ist einfacher zu verstehen:

public void DoFizzBuzz()
{
    for (int i = 1; i <= 100; i++)
    {
        bool fizz = i % 3 == 0;
        bool buzz = i % 5 == 0;
        if (fizz && buzz)
            Console.WriteLine ("FizzBuzz");
        else if (fizz)
            Console.WriteLine ("Fizz");
        else if (buzz)
            Console.WriteLine ("Buzz");
        else
            Console.WriteLine (i);
    }
}
174
Thomas Levesque

Profitieren Sie von bedingten Formatbezeichnern, um eine schöne Golfversion zu erhalten:

public void DoFizzBuzz()
{
    for(int i=1;i<101;i++)Console.WriteLine("{0:#;}{1:;;Fizz}{2:;;Buzz}",i%3*i%5==0?0:i,i%3,i%5);
}
24
MikeP

Abgerollt für maximale Effizienz. Dieses Programm kann alle anderen ausstatten.

public void FizzBuzz()
{
    const string FIZZ = "Fizz";
    const string BUZZ = "Buzz";
    const string FIZZBUZZ = "FizzBuzz";

    int i = 0;
    while (i < 150)
    {
        Console.WriteLine(++i);
        Console.WriteLine(++i);
        Console.WriteLine(FIZZ); ++i;
        Console.WriteLine(++i);
        Console.WriteLine(BUZZ); ++i;
        Console.WriteLine(FIZZ); ++i;
        Console.WriteLine(++i);
        Console.WriteLine(++i);
        Console.WriteLine(FIZZ); ++i;
        Console.WriteLine(BUZZ); ++i;
        Console.WriteLine(++i);
        Console.WriteLine(FIZZ); ++i;
        Console.WriteLine(++i);
        Console.WriteLine(++i);
        Console.WriteLine(FIZZBUZZ); ++i;
    }
}
23
Wug

3. Bearbeitung:

Hier ist eine Möglichkeit, "den Bool loszuwerden" aus Ihrer Version (dh ersetzen Sie die for-Schleife in Ihrer ursprünglichen Frage damit):

for (int i = 1; i <= 100; i++)
{
  var x = combinations.Where(n => i % n.Item1 == 0);

  if (x.Count() == 0)
    Console.Write(i);
  else
    Console.Write(string.Join("",x.Select(e => e.Item2)));

  Console.Write(Environment.NewLine);
}

Vorherige Antworten:

Eine reine C # -Lösung finden Sie unter - Lösung von Keith Thompson .

using System;
class FizzBuzz {
    static void Main() {
        for (int n = 1; n <= 100; n ++) {
            if (n % 15 == 0) {
                Console.WriteLine("FizzBuzz");
            }
            else if (n % 3 == 0) {
                Console.WriteLine("Fizz");
            }
            else if (n % 5 == 0) {
                Console.WriteLine("Buzz");
            }
            else {
                Console.WriteLine(n);
            }
        }
    }
}

Ich habe ein bisschen an FixBuzz mit linq gearbeitet. Dies sind die Lösungen, die ich mir ausgedacht habe - ich glaube, sie sind der beste Weg, um die Lösung dieses Problems mit Linq auszudrücken. ( GitHub )

using System;
using System.Linq;

class FizzBuzz {
  static void Main() {
    var list = Enumerable.Range(1,100)
                .Select(n => {
                      if (n % 15 == 0) {
                        return "FizzBuzz";
                      }
                      if (n % 3 == 0) {
                        return "Fizz";
                      }
                      if (n % 5 == 0) {
                        return "Buzz";
                      }
                      return n.ToString();
                    });

    foreach(string item in list)
      Console.WriteLine(item);
  }
}

und die verrückte einzeilige Version: 

using System;
using System.Linq;

class FizzBuzz {
    static void Main() {
      Console.WriteLine(
      String.Join(
        Environment.NewLine,
        Enumerable.Range(1, 100)
          .Select(n => n % 15 == 0 ? "FizzBuzz" 
                     : n % 3 == 0 ? "Fizz" 
                     : n % 5 == 0 ? "Buzz" 
                     : n.ToString())
      ));
    }
}
19
Hogan
public void DoFizzBuzz()
{
    for (int i = 1; i <= 100; i++)
    {
        if (i % 3 == 0)
            Console.Write("Fizz");
        if (i % 5 == 0)
            Console.Write("Buzz");
        if (!(i % 3 == 0 || i % 5 == 0))
            Console.Write(i);

        Console.Write(Environment.NewLine);
    }
}

Dadurch wird die bool found entfernt, Sie müssen jedoch eine doppelte Auswertung durchführen. Es unterscheidet sich geringfügig von einigen anderen Antworten, die i % 15 == 0 für die FizzBuzz-Qualifizierung verwenden. Ob dies besser ist oder nicht, steht zur Debatte. Es ist jedoch ein anderer Weg.

13
Jason Down

Hat das schon jemand gemacht?

Enumerable.Range(1, 100).Select(x =>
                (x % 15 == 0) ? "FIZZBUZZ"
                : (x % 5 == 0) ? "BUZZ"
                : (x % 3 == 0) ? "FIZZ"
                : x.ToString()
                )
                .ToList()
                .ForEach(console.WriteLine);
11
shenku

Wird meine Lösung von Linq um 5 Cent ergänzen. Jeder nutzt Select, was im Grunde eine Map-Funktion ist. IMHO foldl-Funktion eignet sich besser, um dieses Quiz zu lösen:

Console.WriteLine(
                Enumerable
                .Range(1, 100)
                .Aggregate(new StringBuilder(), (builder, i)
                    => i % 15 == 0 ? builder.AppendLine("FizzBuzz")
                     : i % 3 == 0 ? builder.AppendLine("Fizz")
                     : i % 5 == 0 ? builder.AppendLine("Buzz")
                     : builder.AppendLine(i.ToString()))
                .ToString());
8
PompolutZ

Linq:

Enumerable.Range(1, 100).ToList().ForEach(i => Console.WriteLine( i % 3 * i % 5 == 0 ? (i % 3 == 0 ? "Fizz" : "") + (i % 5 == 0 ? "Buzz" : "") : i.ToString()));
8
Xela

Ich glaube, Sie haben mit einem komplizierten Weg begonnen. Die Verbesserung dieses Codes wäre komplizierter. Sie können eine temporäre Variable verwenden, um diese Variable am Ende der FizzBuzz-Prüfung zu verfolgen und anzuzeigen. Im Folgenden finden Sie den Code, den Sie auch sehen können: c # FizzBuzz-Youtube-Video ( http://www.youtube.com/watch?v=OX5TM3q-JQg ). Dort wird erläutert, wie der folgende Code implementiert wird. 

    for (int j = 1; j <= 100; j++)
    {
    string Output = "";

    if (j % 3 == 0) Output = "Fizz";// Divisible by 3 --> Fizz

    if (j % 5 == 0) Output += "Buzz"; // Divisible by 5 --> Buzz

    if (Output == "") Output = j.ToString(); // If none then --> number

    Console.WriteLine(Output); // Finally print the complete output
    }
7

Nicht die effizienteste, aber hier ist eine, die C # -6 Zeichenketteninterpolation verwendet:

void Main()
{
    for (int i = 1; i <= 100; i++)
    {
       Console.WriteLine($"{(i % 15 == 0 ? "FizzBuzz" : 
                             i % 3 == 0 ? "Fizz" : 
                             i % 5 == 0 ? "Buzz" : i.ToString())}");
    }
}
4
Yuval Itzchakov
Enumerable.Range(1, 100).ToList().ForEach(i=>Console.WriteLine($"{(i%3*i%5==0?0:i):#;}{i%3:;;Fizz}{i%5:;;Buzz}"));

Diese Antwort hat alles:

  • LINQ
  • Bedingte Formatierung
  • String-Interpolation
  • Alles in einer Zeile

Sieg!

4
csells

Ok, was zum Teufel, hier ist die Lösung, die mir gefallen hat :)

public void DoFizzBuzz()
{
    for (int i = 1; i <= 100; ++i)
    {
        bool isDivisibleByThree = i % 3 == 0;
        bool isDivisibleByFive = i % 5 == 0;

        if (isDivisibleByThree || isDivisibleByFive)
        {
            if (isDivisibleByThree)
                cout << "Fizz";

            if (isDivisibleByFive)
                cout << "Buzz";
        }
        else
        {
            cout << i;
        }
        cout << endl;
    }
}

Natürlich ist dies nicht die schnellste Lösung, aber ich mag es, weil es die Lesbarkeit unterstreicht und den Fall "FizzBuzz" nicht länger zu einem Sonderfall macht, sondern etwas, das natürlich über den Codepfad geschieht.

Am Ende liebe ich an dieser Frage am meisten, wenn wir auftauchen, wie viele verschiedene Lösungen von ppl gefunden werden können.

3
Cdaragorn

Sie möchten es wahrscheinlich konfigurierbar machen, aber die Frage ist, was konfigurierbar gemacht werden soll - das wissen wir nicht. Vielleicht sollten wir den gesamten Zyklus konfigurierbar machen (FizzBuzz hat den Zyklus). Hier ist eine sehr kleine und lustige Version mit konfigurierbarem Zyklus:

string[] fizzBuzzCycle = 
    "FizzBuzz,{0},{0},Fizz,{0},Buzz,Fizz,{0},{0},Fizz,Buzz,{0},Fizz,{0},{0}"
    .Split(',');

for (int i = 1; i <= 100; i++)
    Console.WriteLine(fizzBuzzCycle[i%fizzBuzzCycle.Length], i);

Wenn also die Zeichenketten oder der gesamte Zyklus geändert werden soll, ist es leicht zu ändern. Sie wissen aber einfach nicht, was Sie konfigurieren können. Vielleicht ändert sich der Zustand: "Für Primzahlen drucken Pizz" und für diese Änderung ist die Lösung von @ThomasLevesque besser, weil sie einfacher zu ändern ist.

3
CoperNick

Ich habe versucht, dieses Problem zu lösen, ohne auf die Antworten zu schauen ... Ich brauchte 3 Stunden, um erfolgreich zu sein. (Ich bin übrigens nur ein Hobby-Programmierer, also hau mich bitte nicht hart:)) Dies ist meine c # -Version:

        static void Main(string[] args)
    {

        for (int i = 1; i <= 100; i++)
        {
            if(  ((i % 3) != 0) && ((i % 5) != 0))
            {
                WriteLine($"{i}");
            }
            else
            {
                if ((i % 15) == 0)
                {
                    WriteLine("FizzBuzz");
                }
                else if ((i % 3) == 0)
                {
                    WriteLine("Fizz");
                }
                else if ((i % 5) == 0)
                {
                    WriteLine("Buzz");
                }
            }                 
        }
    }
2

Ich bin ein Anfänger, hier ist mein Versuch:

public void DoFizzBuzz()
   {
       for (int i = 1; i < 101; i++)
       {

           if ((i % 3 == 0) && (i % 5 == 0))
           {
               Console.WriteLine("{0} FizzBuzz", i);
           }
           else if (i % 3 == 0)
           {
               Console.WriteLine("{0} Fizz", i);
           }
           else if (i % 5 == 0)
           {
               Console.WriteLine("{0} Buzz", i);
           }
           else
           {
               Console.WriteLine(i);
           }

       }
       Console.ReadLine();
   }

Stimmt irgendetwas mit meiner Vorgehensweise nicht? Meine scheint viel einfacher als alle anderen, also muss es falsch sein.

2
stirredo

Ein funktionaler Ansatz ...

Console.WriteLine(Enumerable
    .Range(1,100)
    .Aggregate("", 
        (a,i) => a + "\n" + (i%15==0 ? "fizzbuzz" : 
                                (i%5==0 ? "buzz" :
                                    (i%3==0 ? "fizz" : i.ToString())))));
2
EFVincent

Relativ einfache Lösung mit einer for-Schleife.

Kein Linq oder irgendetwas - nur eine einfache Kurzform von Aussagen

for(int x=1;x<101;x++)
    Console.WriteLine(x%3==0?"Fizz"+(x%5==0?"Buzz":""):x%5==0?"Buzz":x+"");

Die Linq-Lösung, die csells (sans string interpolation) sehr ähnlich ist und auf eine Zeile passt, wäre:

Enumerable.Range(1,100).ToList().ForEach(x=>Console.WriteLine(x%3==0?"Fizz"+(x%5==0?"Buzz":""):x%5==0?"Buzz":x+""));
2
user1274820

Meines Erachtens ist das FizzBuzz-Problem immer eine Herausforderung für den Interviewpartner, das Word-FizzBuzz-Image erscheinen zu lassen, ohne es explizit zu drucken. Hier ist meine Lösung in C #.

internal void PrintFizzBuzzAlternative(int num)
{
    if (num % 5 == 0)
        Console.Write("Fizz");
    if (num % 3 == 0)
        Console.Write("Buzz");
    if (num % 5 != 0 && num % 3 != 0)
        Console.Write(num);
    Console.WriteLine();
}
2
Sai

Ich füge meine hinzu, obwohl bereits 20 andere Lösungen geschrieben wurden: Es geht so ...

var x = 1;
while (x <= 100)
{
     if (x % 3 == 0 && x % 5 == 0)
        {Console.Writeline("FizzBuzz");}
     else if (x % 3 == 0)
        {Console.Writeline("fizz");}
     else if (x % 5 == 0)
        {Console.Writeline("Buzz");}
     else
        {Console.Writeline(x);}
     x++ 
}

Erste Lösung, die ich mir ausgedacht habe. Einfach, auf den Punkt und erledigt die Arbeit. Keine Notwendigkeit für bool.

2
Koosh

Der nullkoaleszierende Operator ist wirklich nützlich:

string output = null;
for (int i = 1; i <= 100; i++)
{
     if (i % 3 == 0) output += "fizz";
     if (i % 5 == 0) output += "buzz";
     Console.WriteLine(output ?? i.ToString());
     output = null;
}
Console.ReadKey();
2
Donnoh

Mit der Eingabe von Rob H und Jacob Krall habe ich im Moment das, was ich im Moment habe ... Vielleicht werde ich in Zukunft damit rumspielen ... wollte es nur liefern.

public void DoFizzBuzz()
{
    // expect this to come in as parameter
    var combinations = new Tuple<int, string>[] 
    { 
        new Tuple<int, string> (3, "Fizz"), 
        new Tuple<int, string> (5, "Buzz"), 
    };

    Func<int, int, bool> isMatch = (i, comb) => i % comb == 0;

    // expect the borders 1, 100 to come in as parameters
    for (int i = 1; i <= 100; ++i)
    {
        var matchingCombs = combinations.Where(c => isMatch(i, c.Item1)).DefaultIfEmpty(new Tuple<int, string>(i, i.ToString())).Aggregate((v, w) => new Tuple<int, string>(v.Item1, v.Item2 + w.Item2)).Item2;
        Console.WriteLine(matchingCombs);
    }
}
2
Mare Infinitus

Ich würde diesen kompakten Code als Ergänzung zu den vorherigen einfachen und Nice-Versionen vorschlagen.

for (int i = 1; i <= 100; i++) // i++ but not ++i as in your example, be careful here
{
    bool fizz = i % 3 == 0;
    bool buzz = i % 5 == 0;
    string output = fizz && buzz ? "FizzBuzz" :
                            fizz ? "Fizz" :
                            buzz ? "Buzz" :
                            i.ToString();

    Console.WriteLn(output);
}
2

Die FizzBuzz-Frage ist eine großartige Interviewfrage. Wir haben es in unserem Interviewprozess eingesetzt. Es ist verblüffend wie viele Leute ein so einfaches Problem nicht lösen können.

Denken Sie daran, dass der ursprüngliche Blogeintrag aufgrund einer Flut von Leuten, die mehr Lösungen veröffentlichen, gesperrt wurde. Hahaha.

Egal, hier ist meins in C++! ^ _ ^

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
    for (int i = 1; i <= 100; ++i)
    {
        bool isMultipleOfThree = (i % 3) == 0;
        bool isMultipleOfFive = (i % 5) == 0;

        if (isMultipleOfThree) cout << "Fizz";
        if (isMultipleOfFive) cout << "Buzz";
        if (!isMultipleOfThree && !isMultipleOfFive) cout << i;

        cout << '\n';
    }

    return 0;
}
2
TheBuzzSaw

Offensichtlich liegt dies etwas außerhalb des Geistes der FizzBuzz-Herausforderung. In meinem Benchmark war dies jedoch das schnellste, das ich während des Single-Threads schaffen konnte und bei 100 endete. Es ist halb abgerollt und verwendet eine StringBuilder. Es ist ungefähr dreimal schneller als der Standardansatz.

const string FIZZ = " Fizz\n";
const string BUZZ = " Buzz\n";
const string FIZZBUZZ = " FizzBuzz\n";
    ...
var sb = new StringBuilder();
int i = 0;

while(true)
{       
    sb.Append(i+3);
    sb.Append(FIZZ);        
    sb.Append(i+5);
    sb.Append(BUZZ);        
    sb.Append(i+6);
    sb.Append(FIZZ);        
    sb.Append(i+9);
    sb.Append(FIZZ);        
    sb.Append(i+10);
    sb.Append(BUZZ);        
    if(i+12 > 100)
        break;
    sb.Append(i+12);
    sb.Append(FIZZ);    
    i+=15;
    sb.Append(i);
    sb.Append(FIZZBUZZ);
}

Console.Write(sb.ToString());
1
Andrew Hanlon

Sie können beide verwenden und nur den gewünschten Betrag verwenden

static void Main(string[] args)
{
    GetFizzBuzz().Take(100).ToList().ForEach(Console.WriteLine);
}

private static IEnumerable<string> GetFizzBuzz()
{
    for (var i = 0; i < int.MaxValue; i++)
    {
        if (i % 3 == 0 && i % 5 == 0) yield return "FizzBuzz";
        if (i % 3 == 0) yield return "Fizz";
        yield return i % 5 == 0 ? "Buzz" : i.ToString(CultureInfo.InvariantCulture);
    }
}

Oder nutzen Sie einfach dieses: 

Enumerable.Range(1, 100).Select(s => {
    if (s % 3 == 0 && s % 5 == 0) return "FizzBuzz";
    if (s % 3 == 0) return "Fizz";
    return s%5 == 0 ? "Buzz" : s.ToString(CultureInfo.InvariantCulture);
}).ToList().ForEach(Console.WriteLine);
1
Kevin Moore

Ohne Wenn-Bedingungen nur ein ternärer Operator.

string[] s = new string[6]{"Fizz", "Buzz", "", "", "", ""};
for (int i = 1; i <= 100; i++)
{
    string output = s[(i%3)*2] + s[(i%5)+1];
    Console.WriteLine(string.IsNullOrEmpty(output)? "" + i : output);
}
1
pythonic

Die ursprünglichen Fragen lauteten: 1.Wie kann man den gefundenen Bool loswerden? 2. Gibt es eine bessere Testmethode als das foreach?

Dadurch werden Bool und Foreach entfernt und ich denke, es ist immer noch lesbar.

public static void DoFizzBuzz()
{
    var combinations = new Tuple<int, string>[]  
    {  
        new Tuple<int, string> (3, "Fizz"),  
        new Tuple<int, string> (5, "Buzz"),  
    };

    for (int i = 1; i <= 100; i++)
    {
        var fb = combinations.Where(t => {
            if (i % t.Item1 == 0)
            {
                Console.Write(t.Item2);
                return true;
            }
            return false;
        }).ToList();

        if (!fb.Any())
        {
            Console.Write(i);
        }

        Console.Write(Environment.NewLine);
    }
} 

Wer hätte gedacht, dass wir uns so auf ein einfaches Kinderspiel freuen würden? :)

1
grahamesd

Ich empfehle die Verwendung von ++ i anstelle von i ++ in einer for-Schleife, da für i ++ eine Kopie erforderlich ist;)

public void DoFizzBuzz()
{
    for (int i = 1; i < 101; ++i)
    {
        if (i % 15 == 0)
            Console.WriteLine ("FizzBuzz");
        else if (i % 3 == 0)
            Console.WriteLine ("Fizz");
        else if (i % 5 == 0)
            Console.WriteLine ("Buzz");
        else
            Console.WriteLine (i);
    }
}
1
SageMage

Es wurde festgestellt, dass Stringbuilder der schnellste ist.

Ich finde diese Implementierung auch am einfachsten zu lesen.

public static void FizzBuzz() {

    StringBuilder sb = new StringBuilder();

    for (int i = 1; i <= 100; i++) {    
        if (i % 3 == 0 && i % 5 == 0) {
            sb.AppendLine($"{i} - FizzBuzz");
        } else if (i % 3 == 0) {
            sb.AppendLine($"{i} - Fizz");
        } else if (i % 5 == 0) {
            sb.AppendLine($"{i} - Buzz");
        } else {
            sb.AppendLine($"{i}");
        }
    }
    Console.WriteLine(sb);
}
0
levis84
In C#...

using System;
using System.IO;
class Solution {
    static void Main(String[] args) {        
        for(int i=1;i<=100;i++)
        {                       
         string result=(i%3==0 && i%5==0) ? "FizzBuzz" : 
               (i%5==0) ? "Buzz" :
                       (i%3==0) ? "Fizz" : i.ToString();            
         Console.WriteLine(res);
        }
    }
}


In VB.NET...

Imports System
Imports System.IO

Class Solution
    Private Shared Sub Main(ByVal args As String())
        For i As Integer = 1 To 100
            Dim res As String = If((i Mod 3 = 0 AndAlso i Mod 5 = 0), "FizzBuzz", If((i Mod 5 = 0), "Buzz", If((i Mod 3 = 0), "Fizz", i.ToString())))
            Console.WriteLine(res)
        Next
    End Sub
End Class
0

Die kürzeste Antwort !!!

habe gelesen .... schau ich meine:

for(;++$i<101;)print($i%15?$i%3?$i%5?$i:Buzz:Fizz:FizzBuzz)."\n"

Sprache PHP. Genießen.

0

Auf den Tod geantwortet, aber nur um eine andere Lösung zu zeigen, die die eigentliche Frage beantwortet

public static void DoFizzBuzz()
{
    var combinations = new (int multiple, string output)[]
    {
        (3, "Fizz"),
        (5, "Buzz")
    };

    for (int i = 1; i <= 100; ++i)
    {
        // Seed the accumulation function with an empty string and add any 'matches' from each combination
        var fb = combinations.Aggregate("", (c, comb) => c + (i % comb.multiple == 0 ? comb.output : ""));

        Console.WriteLine(!string.IsNullOrEmpty(fb) ? fb : $"{i}");
    }
}
0
SteveHayles

Dies ist eine in JavaScript geschriebene Antwort

//returns true if modulus is zero and is reusable        
var isModulusZero = (challenge, modulator) => {
    let answer = challenge % modulator;

    if (answer == 0) {
        return true
    } else {
        return false
    }
}

var printOneToHundred = () => {
    var i = 1;

    for (i; i <= 100; i++) {

        if (isModulusZero(i, 3) && isModulusZero(i, 5)) {
            console.log('FizzBuzz')
        } else if (isModulusZero(i, 3)) {
            console.log('Fizz')
        } else if (isModulusZero(i, 5)) {
            console.log('Buzz')
        } else {
            console.log(i)
        }

    }
}
0
Daggie Blanqx

C++ - Implementierung

vector<string> FizzBuzz::execute(int n) {

    if(n == 0)
        return vector<string>();

    auto Push = n % 15 == 0 ? "fizzbuzz" :
                n % 3 == 0 ? "fizz" :
                n % 5 == 0 ? "buzz" :
                to_string(n);

    auto execution = execute(n-1);
    execution.Push_back(Push);
    return execution;
}
0
Tommaso Resti

Ok - ich beiße. Die schwere LINQ-Lösung, die ich kürzlich in einem ersten Codierungsinterview erfunden habe. Erstaunlich, wie viele verschiedene Lösungen es für dieses einfache Problem gibt.

public static class FizzBuzzUtils
{
    private static List<KeyValuePair<int, string>> map = new List<KeyValuePair<int, string>> {
        new KeyValuePair<int, string>(3, "Fizz"),
        new KeyValuePair<int, string>(5, "Buzz")
    };

    public static string GetValue(int i)
    {
        var matches = map.Where(kvp => i % kvp.Key == 0)
            .Select(kvp => kvp.Value)
            .ToArray();
        return matches.Length > 0 ? string.Join(string.Empty, matches) : i.ToString();
    }

    public static IEnumerable<string> Range(int start, int count)
    {
        return Enumerable.Range(start, count)
            .Select(i => GetValue(i));
    }
}
0
Casey Chester

Ohne Verwendung eines If's, C # -Codes.

 //False = 0, True = 1.
    private void DivisibilityByFiveThreeTest(int num)
    {
        string[,] values = new string [2,2]{
                             {"None","Fizz"},
                             {"Buzz","FizzBuzz"}
                             };
        for(int i=1;i< num;i++)
        Console.WriteLine(values[Convert.ToInt32(i % 5 == 0), Convert.ToInt32(i%3==0)]);

    }
0
CodeR

einfache Lösung in JavaScript

var i = 1;
while (i <= 100){
    console.log((i % 3 === 0 && i % 5 === 0) ? "FizzBuzz" : (i % 3 === 0) ? "Fizz" : (i % 5 === 0 ? "Buzz" : i));
    i++;
}
0
Enogwe Victor