Particules de fer autour d'un aimant

14

Il y a des particules de fer sur une planche. Nous passons un fil porteur de courant à travers cette carte et les particules forment des cercles. Montrez ces cercles si l'entrée donnée est la position du fil.

Considérez la carte comme une grille de taille 7x7 (fixe)

Aucun espace blanc supplémentaire n'est autorisé.

L'entrée peut être indexée 0 ou indexée 1. (0 indexé dans les exemples)

Exemples

input:3,3 # 'X' is wire here but can be shown by anything other than '\/|-'
output:
/-----\
|/---\|
||/-\||
|||X|||
||\-/||
|\---/|
\-----/

input:1,2
output:
|/-\|||
||X||||
|\-/|||
\---/||
-----/|
------/
-------

input:0,0
output:
X||||||
-/|||||
--/||||
---/|||
----/||
-----/|
------/

input:0,3
output:
|||X|||
||\-/||
|\---/|
\-----/
-------
-------
-------

input:3,0
output:
---\|||
--\||||
-\|||||
X||||||
-/|||||
--/||||
---/|||

C'est le code-golf donc le code le plus court gagne.

Vedant Kandoi
la source
La fonction peut-elle produire une matrice 7x7 avec les caractères ou devons-nous l'imprimer sur la console?
digEmAll

Réponses:

7

J , 40 octets

7 7{.6 6&-|.0":<^:6@8[9!:7@'/_\___\_/|-'

Essayez-le en ligne!

FrownyFrog
la source
Utilisation soignée du dessin de boîte encore une fois! Pouvez-vous fournir une axplanation de l'ensemble de la solution? Merci!
Galen Ivanov
5

R , 136 119 116 116 octets

function(i,j,m=diag(7),R=row(m)-i,a=j-col(m)){m[]='-'
m[R==a]='\\'
m[R==-a]='/'
m[R<a&R>-a|R>a&-R>a]='|'
m[i,j]=0
m}

Essayez-le en ligne!

  • -3 octets enregistrés grâce à @Giuseppe

Fonction qui prend les coordonnées (ligne, col) du fil (indexé 1) et renvoie une matrice 7x7 avec les caractères.

digEmAll
la source
1

JavaScript (ES7),  105  103 bytes

Prend l'entrée comme (y)(x) , 0 indexé.

Y=>X=>(g=x=>y<7?`/\\-|X
`[h=(X-x)**2,v=(Y-y)**2,x<7?h<v?2:h>v?3:h?x<X^y<Y:4:5]+g(x<7?x+1:!++y):'')(y=0)

Essayez-le en ligne!

Arnauld
la source
1

Perl 6 , 90 octets

{<| v - \ X />[1+([-]($_>>.abs).sign||3+[*]($_).sign)for ^7-$^a X ^7-$^b].rotor(7)>>.join}

Essayez-le en ligne!

Bloc de code anonyme qui prend deux nombres et renvoie une liste de lignes.

Jo King
la source
1

Python 2 , 105 octets

lambda x,y:[''.join(['/-|'[cmp(abs(i-x),abs(j-y))],'\X'[i==x]][i-x==y-j]for j in R)for i in R]
R=range(7)

Essayez-le en ligne!

TFeld
la source
0

Fusain , 21 octets

GL⁷-↙⁶X‖B↘¬‖J±N±NT⁷¦⁷

Essayez-le en ligne! Prend la colonne et la ligne indexées 0 comme entrée. Explication:

GL⁷-

Tracez un triangle de -s.

↙⁶

Tracez une ligne le long de l'hypoténuse. (Ce n'est pas la bonne solution, mais nous corrigerons cela plus tard.)

X

Dessinez le Xqui montre la position du fil. (Bien entendu, tout autre caractère ASCII pourrait être utilisé ici.) Ceci termine un huitième du dessin.

‖B↘¬

Réfléchissez trois fois ( ¬= gauche + bas) tout en transformant les personnages pour presque compléter le diagramme.

Réfléchissez sans transformer pour basculer le /s avec le \s afin qu'ils pointent maintenant autour du Xau lieu de vers lui.

J±N±N

Aller en haut à gauche de la sortie souhaitée.

T⁷¦⁷

Coupez le résultat à la taille souhaitée.

Neil
la source