Die Herausforderung
Erstellen Sie eine Funktion, die bei Eingabe von ASCII-Zeichen (zum Leiten eines Pfads, der möglicherweise eine Schleife enthält) die Länge der Schleife (falls vorhanden) und die Länge des "Schwanzes" ausgibt, der in eine der Schleifen führt Formen unten.
Eingang
Ihre Eingabe muss an eine Funktion übergeben werden. Unten sehen Sie ein Beispiel für eine einfache Eingabe.
# --> # --> #
^ |
| |
| v
# <-- #
Sie könnten die obigen Blöcke so visualisieren
Der "Schwanz" ist ein Gegenstand, während die Schleife vier lang ist.
Ein schwierigeres:
# --> # --> #
^ |
| |
| v
# --> # <-- # # --> #
^ ^ |
| | |
| | v
# --> # # <-- # <-- #
Ausgabe
Sie müssen über STDOUT oder die nächstgelegene Alternative Ihrer Sprache ausgeben.
Ihre zwei Ausgabe-Ganzzahlen sollten die Länge des Schwanzes und die Länge der Schleife sein. Diese Ausgabe kann in zwei Formen vorliegen.
- eine durch Leerzeichen getrennte Zeichenfolge:
"2 10"
- eine Reihe von ganzen Zahlen:
[2, 10]
Regeln
Jeder Block oder
#
wird nur einen einzigen Weg von sich selbst haben.Jeder Pfeil besteht aus zwei Liniensegmenten und einem Kopf.
Der Startblock befindet sich immer in der linken Spalte.
Die Eingabe wird niemals nur eine Schleife sein.
Beispiel
# --> # --> # --> #
^ ^ |
| | |
| | v
# # <-- # <-- #
Dieser hat eine Schwanzlänge von 2 und eine Schleifenlänge von 6. Unten sind der Schwanz und die Schleife voneinander getrennt.
Schwanz
# -->
^
|
|
#
Schleife
# --> # --> #
^ |
| |
| v
# <-- # <-- #
Die korrekten Ausgänge sind [2, 6]
und "2 6"
.
Wenn die Eingabe nur ein Tail ist , ist die Schleifenlänge Null.
# --> # --> # --> #
|
|
v
<-- # <-- #
Die korrekten Ausgaben für die obigen Eingaben sind [6, 0]
und"6 0"
quelle
Antworten:
JavaScript (ES6), 221
229Eine Funktion mit der Eingabe als Parameter, die als String über ein Popup-Fenster ausgegeben wird (alert).
Scannen Sie die Eingabe wiederholt:
bei jedem Schritt
Wenn nicht mehr Schwanz zu entfernen ist, entspricht die Anzahl der bisherigen Schritte der Größe des Schwanzes und die Anzahl der verbleibenden '#' der Größe der Schleife.
Alle Zeilenumbrüche in Backticks sind signifikant und werden gezählt
Testen Sie das folgende Snippet mit Firefox (nicht Chrome, da es nicht unterstützt
...
)quelle
Ruby,
287278 BytesProbieren Sie es hier aus .
Dadurch wird ein Hash (Wörterbuch) von Knoten erstellt. Für jeden Knoten werden die Anzahl der eingehenden Verbindungen und der (möglicherweise null) nächste Knoten gespeichert.
Schließlich:
Die lesbare Version des Codes finden Sie hier .
quelle
Rubin, 276
quelle