Et si nous avions un couloir composé de deux miroirs parallèles?
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
Maintenant, nous lançons un laser
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \|
| /|
| / |
Oh regarde. Il a rebondi, vers la fin, là-bas.
Et si on dessinait deux lasers MAIS dans la direction opposée?
| \ / |
| \ / |
| \/ |
| /\ |
| / \ |
| / \ |
| / \ |
|/ \|
|\ /|
| \ / |
Hmm, ils ne semblaient pas se rencontrer, là-bas. C'est pratique. Que se passe-t-il si les deux lasers occupent le même espace?
| \ / |
| \ / |
| \ / |
| X |
| / \ |
| / \ |
| / \ |
| / \|
|/ /|
|\ / |
Je suppose que c'était assez évident, hein?
Dessiner ces diagrammes à la main est assez laborieux (croyez-moi là-dessus). Peut-être que du code pourrait le faire pour nous?
- Ecrivez du code pour produire deux miroirs parallèles, avec deux lasers qui se croisent et qui rebondissent.
- Entrée (tous les entiers):
- La largeur du couloir
- La longueur du couloir
- Position de départ du laser de droite (index zéro, doit être inférieur à la largeur)
- Position de départ du laser de gauche (index zéro, doit être inférieur à la largeur)
- Processus
- Si un laser fonctionne correctement, il sera tracé d’un espace vers la droite sur la ligne suivante.
- Si un laser est laissé en cours, il sera dessiné d'un espace à gauche sur la ligne suivante.
- Si un laser ne peut pas faire son pas de côté, il changera de direction, mais pas sa position.
- Si les deux lasers se trouvent au même index, imprimez un X majuscule à cet index.
- Sortie
- Une ficelle à plusieurs lignes
- Chaque ligne commence et finit par un caractère de pipe (|)
- Les lasers à droite sont signalés par une barre oblique inversée (\)
- Les lasers de gauche sont signalés par une barre oblique (/)
- L'intersection de deux lasers est désignée par un X majuscule.
- N'importe quel langage
- J'aimerais voir des liens TIO
- Essayez de le réparer dans le plus petit nombre d'octets
Cas de test
largeur: 6 longueur: 10 à droite: 1 à gauche: 4
| \ / |
| \/ |
| /\ |
| / \ |
|/ \|
|\ /|
| \ / |
| \/ |
| /\ |
| / \ |
largeur: 6 longueur: 10 à droite: 0 à gauche: 1
|\/ |
|/\ |
|\ \ |
| \ \ |
| \ \ |
| \ \|
| \/|
| /\|
| / /|
| / / |
largeur: 4 longueur: 10 à droite: 2 à gauche: 0
|/ \ |
|\ \|
| \ /|
| X |
| / \|
|/ /|
|\ / |
| X |
|/ \ |
|\ \|
largeur: 20 longueur: 5 à droite: 5 à gauche: 15
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
largeur: 5 longueur: 6 à droite: 2 à gauche: 2
| X |
| / \ |
|/ \|
|\ /|
| \ / |
| X |
largeur: 1 longueur: 2 à droite: 0 à gauche: 0
|X|
|X|
Réponses:
Stax , 40 octets
Exécuter et déboguer
Essayez-le en ligne!
Je suis sûr que cela peut encore être joué au golf.
La saisie est donnée sous la forme de
width [right-going left-going] length
(par commentaire par @EngineerToast).Équivalent ASCII:
la source
width [right-going left-going] length
JavaScript (ES6), 149 octets
Prend des entrées dans la syntaxe de currying
(w)(h)([a,b])
.Essayez-le en ligne!
Commenté
la source
Python 2 , 119 octets
Essayez-le en ligne!
la source
\\/
au golf\/
? Même si la barre oblique inverse est interprétée deux fois, elle n'échappera toujours pas à la barre oblique.Python 2 , 168 octets
Essayez-le en ligne!
la source
d
!Python 2 ,
187181179177174172 172171 octetsEssayez-le en ligne!
Récursif:
Python 2 , 172 octets
Essayez-le en ligne!
Impression récursive, alternative:
Python 2 , 172 octets
Essayez-le en ligne!
la source
C (clang) ,
240236208 octetsEssayez-le en ligne!
f () prend les paramètres comme suit:
x
= largeur,y
= longueur,r
= position de départ de la ligne initiale droitel
= position de départ de la ligne initiale gauche-4 octets. crédits Kevin Cruijssen. Merci
la source
while
enfor
pour supprimer le{}
et un des points-virgules. Et 1 octet supplémentaire en changeantc&&d
pourc&d
. Essayez-le en ligne 236 octets .Toile ,
66 à40 octetsEssayez-le ici!
la source
Charbon de bois ,
56 à50 octetsEssayez-le en ligne! Le lien est vers la version verbeuse du code. Éditer: sauvegardé 6 octets en réduisant le recours au pivotement. Explication:
Imprimer les côtés.
Boucle sur les deux lasers.
Déplacer au début du laser.
Boucle sur la hauteur.
Dessinez a
\
ou/
dans la direction appropriée, à moins que le carré ne soit pas vide, auquel cas dessinez unX
.Avons-nous frappé un côté?
Si c'est le cas, faites un pas de côté et inversez le sens de la marche.
la source
Java (JDK 10) , 186 octets
Essayez-le en ligne!
la source
PHP,
177 169166 octetsrequiert PHP 7.1 pour les index de chaîne négatifs, PHP 5.5 ou supérieur pour l'indexation des littéraux de chaîne.
pour PHP <7.1 , supprimez
^L
, remplacez"X\/"
par"/X\\"
,:0
avec+1:1
,[$e]
avec[$e+1]
, supprimez."|"
et insérez|
avant la nouvelle ligne. (+3 octets)pour PHP <5.5 , remplacez
"/X\\"
par$p
et insérez$p="/X\\";
au début. (+2 octets)accepte les arguments de la ligne de commande. Courez avec
-nr
ou essayez-les en ligne .la source
Python 3 , 162 octets
Essayez-le en ligne!
la source
Ruby , 117 octets
Essayez-le en ligne!
Anonyme lambda prenant en entrée largeur
w
, hauteurh
et un tableau de points de départa
.la source
PowerShell ,
243233222205 octetsEssayez-le en ligne!
Oooof. ces blocs logiques sont gros et sales et la plupart du temps dupliqués. La prochaine étape consisterait à les réécrire afin qu'ils n'aient pas besoin de la déclaration else.
la source
Python 2,
165164 octetsEnregistrement d'un octet grâce à Jonathan Frech.
Essayez-le en ligne!
la source
\\/
est équivalent à\/
.K (ngn / k) , 58 octets
Essayez-le en ligne!
fonction anonyme qui accepte trois arguments:
x
la largeur,y
la longueur,z
une paire de positions de départ pour les lasersla source
C (gcc) , 169 octets
Essayez-le en ligne!
la source
Kotlin ,
322311302 octetsChangement de la façon dont j'ai mis la direction du laser dans une chaîne de 11 octets. Affectation déplacée de quand pour 9 octets.
Essayez-le en ligne!
la source