Was ist, wenn wir einen Korridor haben, der aus zwei parallelen Spiegeln besteht?
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
Jetzt strahlen wir einen Laser runter ...
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \|
| /|
| / |
Oh schau. Es prallte dort gegen Ende ab.
Was ist, wenn wir zwei Laser zeichnen, die sich jedoch in die entgegengesetzte Richtung bewegen?
| \ / |
| \ / |
| \/ |
| /\ |
| / \ |
| / \ |
| / \ |
|/ \|
|\ /|
| \ / |
Hmm, sie schienen sich dort nicht zu treffen. Das ist praktisch. Was passiert, wenn beide Laser den gleichen Raum einnehmen?
| \ / |
| \ / |
| \ / |
| X |
| / \ |
| / \ |
| / \ |
| / \|
|/ /|
|\ / |
Ich denke, das war ziemlich offensichtlich, oder?
Das Zeichnen dieser Diagramme von Hand ist ziemlich mühsam (vertrau mir dabei). Vielleicht könnte ein Code das für uns tun?
- Schreiben Sie Code, um zwei parallele Spiegel mit zwei sich überschneidenden, springenden Lasern auszugeben.
- Eingabe (alle ganzen Zahlen):
- Die Breite des Korridors
- Die Länge des Korridors
- Startposition des rechtslaufenden Lasers (nullindexiert, muss kleiner als die Breite sein)
- Startposition des linkslaufenden Lasers (Null-Index, muss kleiner als die Breite sein)
- Prozess
- Wenn ein Laser richtig ausgerichtet ist, wird er in der folgenden Zeile um ein Feld nach rechts gezeichnet.
- Wenn ein Laser weiterläuft, wird er in der folgenden Zeile um eine Stelle nach links gezeichnet.
- Wenn ein Laser seinen Seitenschritt nicht ausführen kann, ändert er seine Richtung, aber nicht seine Position.
- Wenn sich beide Laser auf demselben Index befinden, drucken Sie an diesem Index ein X in Großbuchstaben.
- Ausgabe
- Eine Zeichenfolge mit mehreren Zeilen
- Jede Zeile beginnt und endet mit einem Pipe-Zeichen (|)
- Rechtslaser werden durch einen Backslash (\) gekennzeichnet
- Linkslaufende Laser werden durch einen Schrägstrich (/) gekennzeichnet
- Der Schnittpunkt zweier Laser ist mit einem Großbuchstaben X gekennzeichnet.
- Jede Sprache
- Ich würde gerne TIO- Links sehen
- Versuchen Sie, es in der kleinsten Anzahl von Bytes zu beheben
Testfälle
Breite: 6 Länge: 10 Rechtslauf: 1 Linkslauf: 4
| \ / |
| \/ |
| /\ |
| / \ |
|/ \|
|\ /|
| \ / |
| \/ |
| /\ |
| / \ |
Breite: 6 Länge: 10 Rechtslauf: 0 Linkslauf: 1
|\/ |
|/\ |
|\ \ |
| \ \ |
| \ \ |
| \ \|
| \/|
| /\|
| / /|
| / / |
Breite: 4 Länge: 10 Rechtslauf: 2 Linkslauf: 0
|/ \ |
|\ \|
| \ /|
| X |
| / \|
|/ /|
|\ / |
| X |
|/ \ |
|\ \|
Breite: 20 Länge: 5 Rechtslauf: 5 Linkslauf: 15
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
Breite: 5 Länge: 6 Rechtslauf: 2 Linkslauf: 2
| X |
| / \ |
|/ \|
|\ /|
| \ / |
| X |
Breite: 1 Länge: 2 Rechtslauf: 0 Linkslauf: 0
|X|
|X|
Antworten:
Stax , 40 Bytes
Führen Sie es aus und debuggen Sie es
Probieren Sie es online!
Ich bin mir ziemlich sicher, dass dies weiter Golf spielen kann.
Die Eingabe erfolgt in Form von
width [right-going left-going] length
(per Kommentar von @EngineerToast).ASCII-Äquivalent:
quelle
width [right-going left-going] length
JavaScript (ES6), 149 Byte
Übernimmt Eingaben in der Currying-Syntax
(w)(h)([a,b])
.Probieren Sie es online!
Kommentiert
quelle
Python 2 , 119 Bytes
Probieren Sie es online!
quelle
\\/
zu\/
? Auch wenn der Backslash zweimal interpretiert wird, bleibt er dem Slash erhalten.Python 2 , 168 Bytes
Probieren Sie es online!
quelle
d
!Python 2 ,
187181179177174172171 BytesProbieren Sie es online!
Rekursiv:
Python 2 , 172 Bytes
Probieren Sie es online!
Rekursiver Alternativdruck:
Python 2 , 172 Bytes
Probieren Sie es online!
quelle
C (Klappern) ,
240236208 BytesProbieren Sie es online!
f () nimmt folgende Parameter an:
x
= Breite,y
= Länge,r
= Anfangsposition der Startlinie rechts = Anfangsposition der Startliniel
links-4 Bytes. Credits Kevin Cruijssen. Vielen Dank
quelle
while
zu a ändernfor
, um das{}
und eines der Semikolons zu entfernen . Und 1 weiteres Byte durch Ändernc&&d
vonc&d
. Versuchen Sie es online 236 Bytes .Canvas ,
6640 BytesProbieren Sie es hier aus!
quelle
Kohle ,
5650 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 6 Bytes gespart, indem die Abhängigkeit vom Pivoting verringert wird. Erläuterung:
Drucken Sie die Seiten.
Schleife über die beiden Laser.
Gehen Sie zum Start des Lasers.
Schlaufe über die Höhe.
Zeichnen Sie ein
\
oder/
in die entsprechende Richtung, es sei denn, das Quadrat ist nicht leer. In diesem Fall zeichnen Sie einX
.Haben wir eine Seite getroffen?
Wenn ja, dann machen Sie einen Schritt zur Seite und kehren Sie die Fahrtrichtung um.
quelle
Java (JDK 10) , 186 Byte
Probieren Sie es online!
quelle
PHP,
177 169166 Byteserfordert PHP 7.1 für negative String-Indizes, PHP 5.5 oder höher für die Indizierung von String-Literalen. Entfernen Sie
für PHP <7.1 ,
^L
ersetzen Sie es"X\/"
durch"/X\\"
,:0
mit+1:1
,[$e]
mit[$e+1]
, entfernen Sie es."|"
und fügen Sie es|
vor der neuen Zeile ein. (+3 Bytes)für PHP <5.5 , ersetzen
"/X\\"
mit$p
und$p="/X\\";
am Anfang einfügen . (+2 Bytes)Nimmt Eingaben von Befehlszeilenargumenten entgegen. Laufen Sie mit
-nr
oder probieren Sie sie online aus .quelle
Python 3 , 162 Bytes
Probieren Sie es online!
quelle
Ruby , 117 Bytes
Probieren Sie es online!
Anonymes Lambda, das Eingaben wie Breite
w
, Höheh
und eine Reihe von Startpunkten vornimmta
.quelle
PowerShell ,
243233222205 ByteProbieren Sie es online!
Oooof. Diese Logikblöcke sind groß und schmutzig und werden größtenteils dupliziert. Der nächste Schritt wäre, sie neu zu schreiben, damit sie die else-Anweisung nicht benötigen.
quelle
Python 2,
165 bis164 BytesEin Byte dank Jonathan Frech gespeichert.
Probieren Sie es online!
quelle
\\/
ist äquivalent zu\/
.K (ngn / k) , 58 Bytes
Probieren Sie es online!
Anonyme Funktion, die drei Argumente akzeptiert:
x
die Breite,y
die Länge,z
ein Paar Startpositionen für die Laserquelle
C (gcc) 169 Bytes
Probieren Sie es online!
quelle
Kotlin ,
322311302 BytesÄnderte, wie ich Laserrichtung in Schnur für 11 Bytes setzte. Verschobene Zuweisung aus dem Zeitpunkt für 9 Bytes.
Probieren Sie es online!
quelle