Also, hier ist eine Karte von, sagen wir, einem Dungeon ...
##########
# #####
# #####
##########
##########
##########
##########
#### ##
#### ##
##########
Nehmen wir an, der Held befindet sich in Raum A (oben links) und sein Ziel (ein Prinz in Not?) Befindet sich in Raum B (unten rechts). Unsere Karte erlaubt es dem Helden nicht, ihr Ziel zu erreichen.
Wir müssen einen Durchgang hinzufügen ...
##########
# #####
# #####
####.#####
####.#####
####.#####
####.#####
#### ##
#### ##
##########
Dort viel besser!
Regeln
- Ein Programm oder eine Funktion, die eine Dungeon-Map akzeptiert (bestehend aus Hashes und Leerzeichen, wobei die Zeilen durch neue Zeilenzeichen getrennt sind).
- Es wird eine Karte mit Punkten ausgegeben, die Passagen in allen Räumen kennzeichnen, die sich auf einem direkten Pfad zwischen den Leerzeichen befinden.
- Die Zeilenlänge oder die Anzahl der Zeilen wird nicht geändert.
- Passagen verlaufen alle in direkter Linie von Raum zu Raum.
- Durchgänge können nicht um Ecken drehen
- Sie befinden sich nicht zwischen Leerzeichen und dem Rand der Karte.
- Verwenden Sie eine beliebige Sprache.
- Versuchen Sie, die Konvertierung in den wenigsten Bytes durchzuführen.
- Wenn keine Durchgänge gezeichnet werden können, geben Sie die Karte unverändert zurück.
- Die Karte sollte immer um alle Kanten herum mit Hashes versehen sein (Leerzeichen am Rand müssen nicht behandelt werden).
- Eingabe-Maps sind immer rechteckig. Jede Zeile sollte dieselbe Breite haben.
Testfälle
#### ####
# # => # #
# # # #
#### ####
########## ##########
# ##### # #####
# ##### # #####
########## ####.#####
########## => ####.#####
########## ####.#####
########## ####.#####
#### ## #### ##
#### ## #### ##
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## ##########
########## => ##########
########## ##########
########## ##########
###### ## ###### ##
###### ## ###### ##
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## ####.#####
########## => ####.#####
#### ### #### ###
########## ######.###
###### ## ###### ##
###### ## ###### ##
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## ##..######
########## => ##..######
########## ##..######
########## ##..######
## ####### ## .######
## ###### ## ######
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## #.########
########## => #.########
########## #.########
####### # #.##### #
####### # #.##### #
# ##### # # ..... #
########## ##########
########## ##########
# ##### # #####
# ##### # #####
########## #.########
##### ### => #.### ###
##### ### #.### ###
####### # #.##### #
####### # #.##### #
# ##### # # ..... #
########## ##########
########## ##########
## # ## #
########## ##......##
########## ##......##
########## => ##......##
########## ##......##
########## ##......##
########## ##......##
# ## # ##
########## ##########
########## ##########
#### #### #### ####
####### ## ####..# ##
###### ### ####.. ###
# ### ## # => # ... .. #
# ## ### # # .. ... #
### ###### ### ..####
## ####### ## #..####
#### #### #### ####
########## ##########
#
und verwenden.
?Antworten:
Gelee , 17 Bytes
Probieren Sie es online!
Tricky -1 dank user202729 .
Erläuterung:
quelle
Perl 5
-p0
, 56 BytesProbieren Sie es online!
quelle
APL + WIN, 87 Bytes
Eingabeaufforderungen für die Zeichenmatrix:
quelle
Haskell ,
209165162 Bytes.Probieren Sie es online!
Ich bin mir sicher, dass dies in Haskell nicht die effizienteste Methode ist.
Es gibt zu viele Klammern für meinen Geschmack, aber ich bin nicht sicher, wie ich sie wieder entfernen soll.quelle
$
((k(take 2 c))
wird(k$take 2 c)
) reduzieren . Sie können!!0
statthead
in einigen Fällen auch verwenden.(k(take 2 c))
können Sie einfach die äußeren Klammern entfernen, sie werden nicht benötigt. Aber im Falle, dassdrop(length(head d))
Sie immer noch das verwenden können$
, ersetzen Sie es durchdrop(length$head d)
(und sogardrop(length$d!!0)
).k
anstelle von++
verwenden, die letzte Zeile stark reduzieren.k[' '<$k(take 2 c),'.'<$d!!0,drop(length$d!!0)$f$k$d]
.f b|(e:g:d@(h:_:_))<-group b=k[' '<$e++g,'.'<$h,drop(length h)$f$k d]|1>0=' '<$b
kann. Hierbei wird ein Mustervergleich verwendet, um einen Großteil des zuvor durchgeführten schweren Trainings durchzuführen.Python 2 ,
173148 BytesProbieren Sie es online!
quelle
Retina 0.8.2 , 95 Bytes
Probieren Sie es online! Erläuterung:
Dies sucht nach
#
Zeichen, die über Leerzeichen oder.
s liegen, und wandelt sie in Punkte um, bis keine mehr übrig sind. Der Lookbehind findet die#
Spalte s und der Lookahead springt dann zur nächsten Zeile und atomar zur gleichen Spalte darunter, so dass das Leerzeichen oder.
nur, wenn es genau unter dem übereinstimmt#
.Das sucht
.
s, die sich nicht unter Leerzeichen oder.
s befinden, und wandelt sie wieder in#
s um, bis keine mehr übrig sind. Der Lookahead findet die.
Spalte 's' und der Lookbehind springt in etwa der gleichen Weise in die vorherige Zeile und atomar in die gleiche Spalte darüber, sodass das Leerzeichen oder.
nur dann übereinstimmen kann, wenn es genau über dem ist#
. Ein negativer Lookbehind wird verwendet, damit dies auch für.
s in der oberen Reihe funktioniert .(Beachten Sie das nachfolgende Leerzeichen in beiden Zeilen.) Dies sucht einfach nach allen Durchläufen von Nicht-Leerzeichen zwischen Leerzeichen und stellt sicher, dass sie alle
.
s sind.quelle
Rubin , 104 Bytes
Probieren Sie es online!
Nun, es ist nicht großartig, aber zumindest ist es verworren. Ich bin sicher, dass es verbessert werden kann.
quelle
Stax , 19 Bytes
Führen Sie es aus und debuggen Sie es
quelle
JavaScript (Node.js) ,
205193190186181175172 ByteProbieren Sie es online!
Kommentiert
quelle