Einführung:
Wenn wir an Marienkäfer denken, denken wir normalerweise an einen roten oder dunkelorangen Käfer mit schwarzen Flecken. Obwohl dies nicht unbedingt erforderlich ist, da es auch schwarz mit rot / orange gefleckten Marienkäfern oder Marienkäfer ohne Flecken gibt , stellen wir uns hauptsächlich Marienkäfer wie diesen asiatischen Marienkäfer vor:
Ebenfalls zu beachten ist, dass die Flecken auf den Marienkäfern fast immer symmetrisch sind. Und hier kommt diese Herausforderung ins Spiel.
Herausforderung:
Geben Sie mit einer Ganzzahl n( >= 0) den folgenden ASCII-Marienkäfer ein- oder mehrmals aus, wobei die symmetrischen Punkte gleichmäßig zwischen den beiden Seiten sowie den zwei oder mehr Marienkäfern aufgeteilt sind.
Hier ist das Standard-Marienkäfer-Layout:
_V_
/(@I@)\
/ | \
| | |
\ | /
''-!-''
Wenn n=0ja, geben wir den Marienkäfer so aus, wie er ist.
Wenn ngrößer als Null ist, füllen wir entweder die Leerzeichen des ASCII-art-Fehlers mit Kleinbuchstaben aus ooder ersetzen die |in der Mitte mit einem Großbuchstaben O. Das Ziel ist es, nÄnderungen an den 'leeren' Marienkäfern vorzunehmen, während immer noch eine symmetrische Ausgabe (pro Marienkäfer) erzeugt wird und so wenig Marienkäfer wie möglich ausgegeben werden.
Gültige Ausgaben für n=1sind also:
_V_
/(@I@)\
/ O \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| | |
\ O /
''-!-''
Das wäre aber ungültig:
_V_
/(@I@)\
/ | \
| o | |
\ | /
''-!-''
Gültige Ausgaben für n=2sind:
_V_
/(@I@)\
/ O \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ O \
| | |
\ O /
''-!-''
_V_
/(@I@)\
/ o|o \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| o | o |
\ | /
''-!-''
etc. There are a lot of possible outputs.
Das erste n, das nicht mehr in einen einzelnen Marienkäfer passt, ist n=24. In diesem Fall müssen Sie es so gleichmäßig wie möglich in zwei Marienkäfer aufteilen (Sie können wählen, ob Sie sie nebeneinander oder untereinander ausgeben möchten - wahlweise mit einem Leerzeichen oder einer neuen Zeile dazwischen). Beispielsweise:
_V_ _V_
/(@I@)\ /(@I@)\
/o o|o o\ /o o|o o\
|o o | o o||o o | o o|
\o o|o o/ \o o|o o/
''-!-'' ''-!-''
ODER:
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
Herausforderungsregeln:
nwird im Bereich von liegen0-1000.- Sie können wählen, ob Sie auf STDOUT ausgeben, als String oder als 2D-Zeichen-Array / -Liste usw. zurückkehren möchten. Ihr Anruf.
- Das Setzen von Zeilenumbrüchen oder unnötigen Leerzeichen ist nicht zulässig. Es sind abschließende Leerzeichen und eine einzelne abschließende neue Zeile zulässig.
- Wie oben erwähnt, können Sie, wenn zwei oder mehr Marienkäfer erforderlich sind, wählen, ob Sie diese nebeneinander oder untereinander (oder in einer Mischung aus beiden) ausgeben möchten.
- Wenn zwei oder mehr Marienkäfer nebeneinander gedruckt werden, ist ein einzelnes optionales Leerzeichen dazwischen zulässig. Wenn zwei oder mehr Marienkäfer aufeinander gedruckt werden, ist eine einzelne optionale Zeile dazwischen zulässig.
- Sie können das Layout der Marienkäfer in jedem Schritt der Sequenz auswählen, sofern sie symmetrisch und eingabeberecht sind
n. - Da das Ziel darin besteht,
nÄnderungen UND so wenig Marienkäfer wie möglich zu haben, werden Sie oben mehr als einen Marienkäfer verwendenn=23. Das Layout dieser Marienkäfer muss nicht unbedingt gleich sein. Tatsächlich ist dies nicht einmal für einige Eingaben möglich, wie zum Beispieln=25odern=50um zwei zu nennen. - Außerdem ist es manchmal nicht möglich, die Punkte gleichmäßig auf zwei oder mehr Marienkäfer aufzuteilen. In diesem Fall müssen Sie sie so gleichmäßig wie möglich aufteilen, mit einem Unterschied von höchstens 1 zwischen ihnen.
Unter n=50Berücksichtigung der letzten beiden Regeln wäre dies eine gültige Ausgabe (wobei der erste Fehler 16 Stellen hat und die anderen beiden 17):
_V_ _V_ _V_
/(@I@)\ /(@I@)\ /(@I@)\
/oooOooo\ / O \ /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
\ | / \oooOooo/ \o oOo o/
''-!-'' ''-!-'' ''-!-''
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
ound O. Ich habe den Wortlaut ein wenig geändert.
n=50Beispiel glaube ich, dass Sie meinen, der erste Fehler hat 16 Stellen und die anderen beiden haben jeweils 17.


Wir beginnen mit der Initialisierung der Newline und der letzte Teil der Initialisierung der Lookup-Tabelle ist eine Schleife, die berechnet, welche der kleinen Punkte angezeigt werden müssen. Der Algorithmus lautet im Wesentlichen: Wenn , dann muss der Spot angezeigt werden.
Als nächstes lesen wir die Anzahl der Spots von stdin ein und berechnen die Anzahl der benötigten Marienkäfer.
Wir können dann die äußere Schleife für die Menge der Fehler starten und die Anzahl der Punkte für den nächsten zu rendernden Marienkäfer berechnen.
Für jeden Marienkäfer berechnen wir, ob der große Mittelpunkt angezeigt werden muss (wenn
In ähnlicher Weise berechnen wir, ob das andere Paar großer Punkte angezeigt werden muss (falls 
Als nächstes schieben wir die codierte Zeichenfolgendarstellung des Marienkäfers auf den Stapel. Dies ist im Wesentlichen nur eine einfache Zeichenfolge, die sich jedoch etwas verwickelt hat, als ich versuchte, sie in die Lücken im Code einzudrücken, damit die Quelle ein Rechteck bildet.
Jetzt können Sie die Ausgabeschleife starten, die Zeichen einzeln verarbeiten und die Sonderfälle (Punkte, Zeilenumbrüche usw.) über die zuvor erstellte Nachschlagetabelle konvertieren.
Zum Schluss prüfen wir, ob wir alle benötigten Marienkäfer angezeigt haben, ansonsten fahren wir mit dem Start der äußeren Schleife fort.