Einführung
Angesichts dieser Visualisierung eines Spielfelds:
(0,0)
+----------------------+(map_width, 0)
| A |
|-----+-----------+----|
| D | W | B |
|-----+-----------+----|
| C |
+----------------------+(map_width, map_height)
(0, map_height)
Die gesamte Karte, auf der das Spiel gespielt wird, ist das Rechteck mit den Eckkoordinaten (0,0) und (map_width, map_height). Die Punkte, die für das Laichen von Feinden in Frage kommen, sind: Union
Die Herausforderung
Schreiben Sie Code, der einen zufälligen Punkt (x, y) zurückgibt, der garantiert innerhalb von S liegt. Ihr Code kann keine zusätzliche Verzerrung einführen, was bedeutet, dass die Wahrscheinlichkeit jeder Koordinate unter der Annahme, dass Sie Zufälligkeit erzeugen (z. B. Funktion), gleichmäßig verteilt ist | library | dev / urandom) ist unvoreingenommen.
Kürzeste Lösungen in Bytes gewinnen!
Eingang
Sie erhalten insgesamt 6 positive ganzzahlige Eingabevariablen in der Reihenfolge:
map_width, map_height, W_top_left_x, W_top_left_y, W_width, W_height
. Sie können davon ausgehen, dass die (berechnete) Oberfläche aller Regionen (A, B, C, D, W) jeweils> 10 ist, sodass keine Leerstellen / Regionen vorhanden sind.
Beispiel Eingabe: 1000, 1000, 100, 100, 600, 400
Die Eingabe muss die oben beschriebenen 6 Werte enthalten, kann jedoch als weniger Argumente und in beliebiger Reihenfolge übergeben werden. Zum Beispiel vorbei(map_width, map_height)
als Python-Tupel erlaubt. Was natürlich nicht erlaubt ist, sind berechnete Parameter wie der untere rechte Punkt des W.
Ausgabe
2 zufällig generierte ganze Zahlen (x, y) wobei
ODER
Mindestens einer der obigen logischen Ausdrücke muss wahr sein.
Beispiele
Input Output(valid random samples)
1000 1000 100 100 600 400 10 10
1000 1000 100 100 600 400 800 550
1000 1000 100 100 600 400 800 10
1000 1000 100 100 600 400 10 550
Einzelheiten und Einschränkungen für die Ein- / Ausgabe finden Sie in den Standard-Ein- / Ausgaberegeln
2 randomly generated integers (x, y)
Antworten:
Python 2 ,
114106102101 BytesProbieren Sie es online!
quelle
[i%w, i/w]
weil der Bereichw*h/w=h
aber x auf die Breite in diesem Beispiel nicht die Höhe gebunden ist.a/b
es bereits Bodenteilung , wenna
undb
sind ganze Zahlen (die sie hier sind).R ,
8973 BytesProbieren Sie es online!
Übernimmt die Eingabe als
width,height,c(X,Y),c(W,H)
.Samples von[ 0 , w ] × [ 0 , h ] gleichmäßig, bis ein Punkt außerhalb des inneren Rechtecks gefunden wird.
quelle
05AB1E ,
2321201817 BytesDie Eingabe erfolgt im Format
[map_width, map_height], [W_top_left_x, W_top_left_y], [W_width, W_height]
.Dank an @Grimy für -1 Byte und auch dafür, dass ich , dass ich nach meiner letzten Bearbeitung einen Fehler eingeführt habe.
Probieren Sie es online aus und geben Sie 10 mögliche Ausgaben gleichzeitig aus oder überprüfen Sie alle möglichen Koordinaten . (Kleinere Anmerkung: Ich habe die Beispieleingabe um den Faktor 10 verringert, da der Filter und die Zufallsauswahl für große Listen ziemlich langsam sind.)
Erläuterung:
Die Eingänge
map_width, map_height, [W_top_left_x, W_top_left_y], [W_width, W_height]
werden wie[Wm, Hm], [x, y], [w, h]
folgt bezeichnet:quelle
[map_height, 0]
als mögliche Zufallsausgabe ohne den ein¨
. :)*ݨ¹‰
könnte sein,L`â<
indem man die ersten beiden eingaben als[map_height, map_width]
. KönnteII
auch seinŠ
, es sei denn ich habe etwas verpasst.L`â<
. Wie für dieII+
zuŠ+
Englisch: www.mjfriendship.de/en/index.php?op...=view&id=167 angeht, hast du in der Tat Recht, dass es das Gleiche wäre. Leider habe ich selbst einen Fehler gemacht und es hätte²³+
stattdessen sein müssenII+
, da es den dritten Eingang für beide verwenden würdeI
(genau wie es das Zweifache dauern würde) dritte Eingabe mitŠ
) nach der ersten Iteration des Filters. Also implizit danke, dass ich gemerkt habe, dass ich einen Fehler hatte. :)C # (Visual C # Interactive Compiler) , 110 Byte
Probieren Sie es online!
quelle
Power ,
8573 Bytes-12 bytes dank mazzy
Probieren Sie es online!
Schöne einfache Antwort, die ein Array aus den Wertebereichen für jede Dimension zusammenfügt und dann nach dem Zufallsprinzip für
x
und auswählty
. Leitet die meisten des Codes durch erste Bearbeitung wiederverwendenx
, dann das Überschreiben$x
mit$y
und läuft es wieder.quelle
Julia ,
767167 BytesProbieren Sie es online!
quelle
Jelly , 11 Bytes
Probieren Sie es online!
Eine dyadische Verbindung, die zwei Argumente annimmt,
[map_width, map_height], [W_width, W_height]
undW_left, W_top
einen zufällig ausgewählten Punkt zurückgibt, der den Anforderungen entspricht.Erläuterung
quelle
Python 2 , 100 Bytes
Die Eingabe sollte in Form von erfolgen
((map_width, W_top_left_x, W_width),(map_height, W_top_left_y, W_height))
Die Ausgabe erfolgt in der Form:
[[x],[y]]
Probieren Sie es online!
Zufällige Ausgaben aus der Beispieleingabe:
quelle
Java (OpenJDK 8) , 100 Byte
Probieren Sie es online!
Verwendet
java.awt.Rectangle
als Inhaber einiger der Parameter. Natürlich verwenden dieseint
Felder und nichtfloat
oderdouble
.quelle
Rectangle#contains
eingebauten zu nehmen! : DWolfram Language (Mathematica) ,
846860 BytesProbieren Sie es online!
Eingaben übernehmen als
{map_width, map_height}, {W_width, W_height}, {W_top_left_x, W_top_left_y}
.quelle
Holzkohle ,
5543 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Geben Sie die Kartengröße ein. (Wenn sie das letzte Mal wären, könnte ich die Höhe inline eingeben, um 1 Byte zu sparen.)
Geben Sie das innere Rechteck ein. (Wenn ich in der Reihenfolge
left, width, top, height
eingeben könnte, könnte ichF²⊞υE²N
für eine 3-Byte-Einsparung verwenden.)Generieren Sie eine Liste aller Koordinaten im Feld.
Einträge herausfiltern, bei denen beide Koordinaten innerhalb des Rechtecks liegen.
Drucken Sie ein zufälliges Element der verbleibenden Elemente.
quelle
Perl 5
-ap
, 84 BytesProbieren Sie es online!
quelle
Scala , 172 Bytes
Zufälligkeit? Erwischt.
Eine spaßige Implementierung, die mir einfiel.
So funktioniert es : Erzeugen Sie ein zufälliges Paar in der Karte. Wenn es sich im inneren Rechteck befindet, versuchen Sie es erneut.
Probieren Sie es online!
quelle
J ,
54474539 BytesProbieren Sie es online!
Nimm die Eingabe als 3 x 2 Gitter wie folgt:
0?@{[
(-1&{)~
(<*/@,0<:[)
des ähnlich verschobenen inneren Rechtecks befindet2{[
. Anderenfalls geben Sie den ursprünglichen, nicht verschobenen Zufallspunkt zurück.{~&1
Ein weiterer Ansatz, 45 Bytes
Probieren Sie es online!
Dieser ist konzeptionell einfacher und kümmert sich nicht um Looping. Stattdessen konstruieren wir eine Matrix aller Zahlen von 0 bis (wxh), verschieben sie um den inneren Startpunkt, greifen nur die Punkte im Untergitter (0, 0) bis (inneres w, inneres h) und entfernen sie aus dem Gesamten Nachdem Sie beide abgeflacht haben, wählen Sie eine zufällige Zahl aus dem Rest aus und konvertieren Sie die Ganzzahl mit divmod zurück in einen Punkt
<.@% , |~
quelle