Dies ist, was ich diese Frage dachte würde, bevor ich sie vollständig gelesen habe.
Eine Gruppe von Code-Golfern betritt die The Nineteenth Bite Pizzeria und bestellt eine Pizza. Es kommt in einer unregelmäßigen Form, bestehend aus Quadraten. Ihre Aufgabe ist es, ihnen zu helfen, es in identische Scheiben zu schneiden. Das heißt, die Scheiben müssen exakt die gleiche Form und Größe haben. Sie können gedreht, aber nicht gespiegelt werden. Wenn es sich beispielsweise um Tetris-Teile handelt, muss es sich um die gleiche Art handeln. Sie können nicht sowohl ein L-Stück als auch ein J-Stück verwenden.
Eingang
In der ersten Zeile wird die Anzahl der Personen in der Gruppe angegeben (immer eine ganze Zahl von 2 bis einschließlich 10), gefolgt von einer rechteckigen Matrix aus '' (Leerzeichen) und '#' Zeichen, die die Pizza darstellen. Alle '#' Zeichen sind durch ihre Kanten verbunden. Die Anzahl der '#' Zeichen ist garantiert ein Vielfaches der Anzahl der Personen.
Ausgabe
Sie sollten dieselbe Matrix drucken, wobei jedes '#' Zeichen durch eine Ziffer von 0 bis n-1 ersetzt wird (n ist die Anzahl der Personen). Jede Ziffer sollte eine Scheibe markieren. Die Scheibenform muss durch die quadratischen Kanten verbunden werden. Die Slice-Nummerierung muss nicht in einer bestimmten Reihenfolge erfolgen. Wenn es mehrere Möglichkeiten zum Schneiden der Pizza gibt, ist jede davon akzeptabel.
Wenn es nicht möglich ist, die Pizza nach Bedarf zu schneiden, sollten Sie die Zeichenfolge "Keine Pizza für Sie!" Drucken. stattdessen.
Wertung
Das ist Code Golf. Ihre Punktzahl ist die Anzahl der Bytes im Programm. Zeichen werden durch ihre UTF-8-Codierung gezählt. Die niedrigste Punktzahl gewinnt.
Beispiele
Eingang:
3
#
###
####
#
Ausgabe:
0
100
1122
2
Eingang:
4
###
# #
###
Ausgabe:
001
2 1
233
Eingang:
2
# #
######
Ausgabe:
No pizza for you!
Eingang:
5
#
####
#####
#####
#####
####
#
Ausgabe:
0
1000
21110
32221
43332
4443
4
Eingang:
4
#
####
######
#####
####
Ausgabe:
0
1000
111203
12233
2233
Bedarf
- Sie sollten ein vollständiges Programm schreiben, das von der Standardeingabe liest und in die Standardausgabe schreibt.
- Das Programm muss unter Linux mit frei verfügbarer Software lauffähig sein.
- Ihr Programm sollte jedes der oben genannten Beispiele auf einem modernen Computer in weniger als 1 Minute beenden.
- Keine Standardlücken.
quelle
Antworten:
PHP Code,
1808971 BytesSchnelle und schmutzige Implementierung in PHP. Erstens alle möglichen Schnittformen brachial erzwingen, zweitens alle Positionen und Ausrichtungen der Schnitte brachial erzwingen.
Verwendung:
cat pizza.txt | php pizza.php
Bearbeiten: Reduziert die Codegröße um mehr als 45%, indem der Algorithmus mithilfe von Rekursion und nicht mit verschachtelten Schleifen neu gestartet wird. Dies frisst jedoch Speicher (und Pizza ;-)). Pizza größer als 8x8 wird wahrscheinlich keinen Speicher mehr haben. Die Variante mit verschachtelten Schleifen kann problemlos mit jeder Größe umgehen, ist jedoch doppelt so groß wie der Code.
Ungolfed, dokumentierter Code
Unten finden Sie den dokumentierten Originalcode. Um meinen Verstand zu wahren, habe ich mit dem vollständigen Quellcode gearbeitet und ein einfaches Minifier-Skript geschrieben, um Anweisungen wie
assert()
und zuerror_reporting()
entfernen, unnötige Klammern zu entfernen, Variablen, Funktionen und Konstanten umzubenennen und den oben genannten Code zu generieren.quelle
define('_',98)
, steht das nicht im Widerspruchfunction _
? Ich kenne kein PHP, also kann ich nicht sagen ...