introduction
Compte tenu de cette visualisation d'un terrain de jeu:
(0,0)
+----------------------+(map_width, 0)
| A |
|-----+-----------+----|
| D | W | B |
|-----+-----------+----|
| C |
+----------------------+(map_width, map_height)
(0, map_height)
La carte entière sur laquelle le jeu est joué est le rectangle avec les coordonnées des coins (0,0) et (map_width, map_height). Les points éligibles pour le frai des ennemis sont l'Union
Le défi
Écrivez du code qui renvoie un point aléatoire (x, y) qui est garanti d'être à l'intérieur de S. Votre code ne peut pas introduire de biais supplémentaire, ce qui signifie que la probabilité de chaque coordonnée est uniformément distribuée étant donné l'hypothèse que votre choix de générer de l'aléatoire (par exemple, fonction | bibliothèque | dev / urandom) est impartiale.
Les solutions les plus courtes en octets gagnent!
Contribution
Vous recevrez un total de 6 variables d'entrée entier positif dans l' ordre:
map_width, map_height, W_top_left_x, W_top_left_y, W_width, W_height
. Vous pouvez supposer que la surface (calculée) de toutes les régions (A, B, C, D, W) est chacune> 10, donc il n'y a pas d'espaces / régions vides.
Exemple d'entrée: 1000, 1000, 100, 100, 600, 400
L'entrée doit contenir les 6 valeurs décrites ci-dessus mais elle peut être transmise sous forme de moins d'arguments et dans n'importe quel ordre. Par exemple, le passage en (map_width, map_height)
tant que tuple python est autorisé. Ce qui n'est pas autorisé, bien sûr, ce sont les paramètres calculés comme le point inférieur droit du W.
Production
2 entiers générés aléatoirement (x, y) où
OU
ce qui signifie qu'au moins une des expressions logiques ci-dessus doit être vraie.
Exemples
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
Pour plus de détails et les limitations d'entrée / sortie, veuillez vous référer aux règles d'entrée / sortie par défaut
2 randomly generated integers (x, y)
Réponses:
Python 2 ,
114106102 102101 octetsEssayez-le en ligne!
la source
[i%w, i/w]
parce que la plagew*h/w=h
mais x est liée à la largeur dans cet exemple et non à la hauteur.a/b
est déjà la division au sol, sia
etb
sont des entiers (qu'ils sont ici).R ,
8973 octetsEssayez-le en ligne!
Prend l'entrée comme
width,height,c(X,Y),c(W,H)
.la source
05AB1E ,
2321201817 octetsL'entrée est au format
[map_width, map_height], [W_top_left_x, W_top_left_y], [W_width, W_height]
.Merci à @Grimy pour -1 octet, et aussi pour m'avoir fait réaliser que j'avais introduit un bug après ma dernière édition.
Essayez-le en ligne , sortez 10 sorties possibles en même temps ou vérifiez toutes les coordonnées possibles . (Remarque mineure: j'ai diminué l'exemple d'entrée d'un facteur 10, car le filtre et le choix aléatoire intégré sont assez lents pour les grandes listes.)
Explication:
Les entrées
map_width, map_height, [W_top_left_x, W_top_left_y], [W_width, W_height]
sont désignées[Wm, Hm], [x, y], [w, h]
ci-dessous:la source
[map_height, 0]
comme sortie aléatoire possible sans le¨
. :)*ݨ¹‰
pourrait êtreL`â<
en prenant les deux premières entrées comme[map_height, map_width]
. AussiII
pourrait êtreŠ
, à moins que quelque chose me manquait.L`â<
. Quant à l'II+
àŠ+
, vous êtes en effet droit que ce serait la même .. Malheureusement , je fait une erreur moi - même et il aurait dû être au²³+
lieu deII+
, car il utiliserait la troisième entrée pour les deuxI
(comme cela prendrait deux fois les troisième entrée avecŠ
) après la première itération du filtre .. Donc implicitement merci de m'avoir fait réaliser que j'avais un bug. :)C # (Visual C # Interactive Compiler) , 110 octets
Essayez-le en ligne!
la source
PowerShell ,
8573 octets-12 octets grâce à mazzy
Essayez-le en ligne!
Belle réponse simple qui bricole un tableau composé de la plage de valeurs pour chaque dimension, puis en choisit une au hasard pour
x
ety
. Parvient à réutiliser la plupart du code en premier traitementx
, puis écraser$x
avec$y
et courir à nouveau.la source
Julia ,
767167 octetsEssayez-le en ligne!
la source
Gelée , 11 octets
Essayez-le en ligne!
Un lien dyadique qui prend deux arguments,
[map_width, map_height], [W_width, W_height]
et ,W_left, W_top
et retourne un point choisis au hasard répondant aux exigences.Explication
la source
Python 2 , 100 octets
L'entrée doit être sous la forme de
((map_width, W_top_left_x, W_width),(map_height, W_top_left_y, W_height))
La sortie est donnée sous la forme:
[[x],[y]]
Essayez-le en ligne!
Sorties aléatoires obtenues à partir de l'exemple d'entrée:
la source
Java (OpenJDK 8) , 100 octets
Essayez-le en ligne!
Utilise
java.awt.Rectangle
comme détenteur de certains paramètres. Naturellement, ceux-ci utilisent desint
champs, et nonfloat
oudouble
.la source
Rectangle#contains
pied de la lettre avec la fonction intégrée! : DWolfram Language (Mathematica) ,
846860 octetsEssayez-le en ligne!
Prenez les entrées comme
{map_width, map_height}, {W_width, W_height}, {W_top_left_x, W_top_left_y}
.la source
Fusain ,
5543 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Saisissez la taille de la carte. (S'ils étaient les derniers, je pourrais entrer la hauteur en ligne pour une sauvegarde d'un octet.)
Saisissez le rectangle intérieur. (Si je pouvais entrer dans la commande,
left, width, top, height
je pourrais l'utiliserF²⊞υE²N
pour une économie de 3 octets.)Générez une liste de toutes les coordonnées sur le terrain.
Filtrer les entrées où les deux coordonnées se trouvent à l'intérieur du rectangle.
Imprime un élément aléatoire de ceux qui restent.
la source
Perl 5
-ap
, 84 octetsEssayez-le en ligne!
la source
Scala , 172 octets
Aléatoire? Je t'ai eu.
Une mise en œuvre amusante à laquelle je pouvais penser.
Comment ça marche : Générez une paire aléatoire dans la carte. S'il se trouve dans le rectangle intérieur, réessayez.
Essayez-le en ligne!
la source
J ,
54474539 octetsEssayez-le en ligne!
Prenez l'entrée comme une grille 3 x 2 comme:
0?@{[
(-1&{)~
(<*/@,0<:[)
le rectangle intérieur décalé de façon similaire2{[
. Sinon, renvoyez le point aléatoire d'origine non décalé.{~&1
Une autre approche, 45 octets
Essayez-le en ligne!
Celui-ci est conceptuellement plus simple et ne dérange pas avec la boucle. Au lieu de cela, nous construisons une matrice de tous les nombres de 0 à (lxh), la décalons par le point de départ interne, prenons uniquement les points de la sous-grille (0, 0) à (w interne, h interne), les supprimons de l'ensemble grille après aplatissement des deux, choisissez-en un au hasard parmi le reste, et reconvertissez l'entier en un point en utilisant divmod
<.@% , |~
la source