Da Sie kein Geld mehr haben, haben Sie sich dazu angemeldet, Donuts für The Donut Shop ™ zu bauen, das größte digitale Donut-Unternehmen der Welt, hauptsächlich, weil es Donuts jeder erdenklichen Größe verkauft.
Angesichts der Tatsache, dass Handelsstandards heutzutage sehr schwierig sind, müssen Sie einen Code schreiben, der so kurz wie möglich ist, um diese Donuts zu erstellen, damit der Quellcode, der sie erstellt hat, außerhalb des Pakets platziert werden kann.
Herausforderung
Bei 4 Eingaben, Radius des Außenrings, Radius des Innenrings, den möglichen Streuseln und der Wahrscheinlichkeit, dass eine Zelle streut, wird ein Ring ausgegeben, der mit den Streuseln bedeckt ist, die die richtigen Innen- und Außenradien aufweisen.
- Die Eingabe kann nach Belieben (Argumente zu einer Funktion, stdin, Programmargumente) und in beliebiger Reihenfolge erfolgen.
- Die Streusel werden in Form von 1 Zeichen pro Streuselart angegeben
^+*-
als bestreuen Eingabe wäre eine Liste von 4 besprüht sein,^
,+
,*
,-
- : Die Wahrscheinlichkeit eines Streuen wird als ein Gleitkommawert zwischen 0 und 1 zum Beispiel eingegeben werden
0.1
,0.23
- Sie müssen die Ausgabe als Standardausgabe oder gleichwertig ausdrucken.
- Streusel dürfen nicht an den Rändern des Donuts sein.
- Jede Art von Streuung muss die gleiche Wahrscheinlichkeit haben, in jeder Zelle zu sein.
- Die Radien sind in 1-Zellen-Einheiten angegeben.
- Wenn der innere Radius entweder 0 ODER der äußere Radius ist, hat der Ring keinen Ring.
- Beide Radien sind nicht negative ganze Zahlen.
- Die inneren und äußeren Ränder des Donuts müssen mit Hashes (
#
) dargestellt werden Ein Test, um zu sehen, ob sich ein Punkt in einem Kreis befindet, wenn ein Radius und der Mittelpunkt des Kreises gegeben sind:
(x-center)**2+(y-center)**2 < radius**2
Beispiel Eingabe mit Ausgabe
(Außenradius, Innenradius, Streusel, Streuwahrscheinlichkeit)
10, 4, ^ + * -, 0,1
######### # # ## ++ * *## # # # ^^ - * # # ##### ^ # #+ # # # # # #- # # # # * # # # #+ # # # # # #^ +# # # # # # # # * ##### # # + - # # ^ # ## ^ + ## # ^ # #########
5, 2, 0,9
##### #^^+ ^# #**### # #:# #^# #^# #*# #:# #*# #:+###* # # *:^:# #####
Dies ist Codegolf, die kürzeste Antwort in Bytes gewinnt
10, 4
und5, 2
ziemlich unterschiedlich sind. Ich wollte einen Kommentar zu der Antwort hinterlassen, aber mir wurde klar, dass ich nicht wirklich verstand, wie die Ausgabe für alle Dimensionen aussehen sollte, außer für die in den Beispielen. Wenn Sie Ihre ursprüngliche Idee an die Ausgabe der Antwort anpassen möchten, liegt es an Ihnen, aber die Herausforderung sollte klar definieren, wie die Grenzen in beide Richtungen gezogen werden sollen.Antworten:
MATLAB, 231 Bytes
Hier eine Matlab-Lösung:
Einige Beispiele:
quelle
Python, 263 Bytes
So sah ich eine Herausforderung ohne Antworten, die relativ einfach, aber auch interessant aussah und dachte für mich:
Hmm ... Wenn ich der einzige bin, der eine Antwort hat, werde ich gewinnen, bis unweigerlich eine bessere Antwort auftaucht.
Also habe ich mich ein paar Minuten mit Python zusammengesetzt und mir einen groben Entwurf überlegt, den ich mithilfe der Vorschläge der Community optimiert habe, um seine Größe zu reduzieren.
Für die obigen Beispiele wird dies erstellt
und
Ich bezweifle sehr, dass dies die kürzestmögliche Lösung ist, aber ich denke, es hat ziemlich gut geklappt, wenn ein autodidaktischer Teenager versucht hat, die Zeit totzuschlagen. Da dies so klein wie möglich ist, habe ich keine Kommentare eingefügt und Verknüpfungen zu jedem Variablennamen verwendet. Daher dient dieses Programm eher der Benutzerfreundlichkeit als der Lesbarkeit.
Wenn Sie diesen Code aus einem mir unbekannten Grund verwenden möchten, führen Sie ihn einfach in IDLE aus und geben Sie den Befehl ein
im oben beschriebenen Format.
quelle
abs
Aufruf zu entfernen , da die Radien garantiert nicht negativ sind. Ich empfehle auch, die Tipps zum Golfen in Python zu Rate zu ziehen, um zusätzliche Hinweise zu erhalten. Nochmals herzlich willkommen!N=False if I==0 or I>=O else True
könnte sein ,not (I==0 or I>=O)
und die Funktion C eine Lambda sein könnte. Aber es ist ein wirklich guter erster Eintrag!P
mehr als einmal verwenden, so gibt es keinen Grund, das*100
in einer Variablen zu speichern .