In dieser Herausforderung berechnen Sie, wie groß Ihr Land ist.
Schreiben Sie ein Programm oder eine Funktion, die die Größe Ihres Landes berechnet, vorausgesetzt, Sie haben eine Mauer gebaut. Sie erhalten eine nicht leere Eingabezeichenfolge mit 4 verschiedenen Zeichen Ihrer Wahl, die die vier Richtungen "hoch", "runter", "links" und "rechts" darstellen (ich werde sie ^ v < >
in dieser Herausforderung verwenden). Es ist nicht möglich, sich um 180 Grad zu drehen ( <>
oder ^v
), aber Sie können Ihre Wand überqueren.
Sie "erobern" Land, indem Sie es mit Ihrer Mauer umgeben. Die Mauer selbst gilt auch als Teil Ihres Landes. Einige Beispiele werden es klarer machen. Ich werde o
Land verwenden, das von der Mauer umgeben ist, x
für die Mauer selbst und S
für den Ausgangspunkt der Mauer, um nur zu veranschaulichen, wie die Mauer gebaut ist. Die Ausgabe sollte die Gesamtgröße Ihres Landes (die Anzahl der sein o
, x
und S
in den Testfällen unten).
Input: >>>>
Land: Sxxxx
Output: 5
Input: <<<^^^>>>vv
Land:
xxxx
xoox
xoox
xxxS
Output: 16
Input: <<<^^^>>>v
Land:
xxxx
x x
x
xxxS
Output: 11
Input: <
Land: xS
Output: 2
Input: >>>>>>vvvvvvvvv<<<<<^^^^>>>>>>>>vvvvvvvvvv<<<<<<<<<<<<<<<^^^^^^^^^>>>vvvvvv<<<<<
Land:
Sxxxxxx
x
x
x
x
xxxxxxxxx
xxxx xoooox x
xoox xoooox x
xoox xoooox x
xoox xxxxxx x
xoox x
xoox x
xxxxxx x
x x
x x
xxxxxxxxxxxxxxxx
Output: 101
Input: >>vvvv>>^^<<<<^
Land:
Sxx
xox
xxxxx
xox
xxx
Output: 17
Input: <<^^^>>>vv
Land:
xxxx
x x
x x
xxS
Output: 11 <- Note, diagonal edges do not close the "loop"
Klarstellungen:
- Sie müssen die Wand nicht zeichnen, die Ausgabe sollte nur eine Ganzzahl sein
- Das Eingabeformat ist optional. Sie können einen String mit
<>^v
, eine Liste von Ziffern(1, -1, i, -i)
, eine Liste von ZeichenABCD
usw. nehmen.
Das ist Code-Golf, also gewinnt der kürzeste Code in jeder Sprache . Denken Sie daran, Erklärungen sind wichtig, auch in "normalen" Sprachen!
Antworten:
Python 2 ,
385345332 BytesProbieren Sie es online! oder Probieren Sie alle Testfälle aus
Die Eingabe erfolgt numerisch, 0 ~ 3, der 0-Index der Symbole hier:
>v<^
Dies ist die resultierende Matrix:
quelle
Oktave,
83858379 BytesProbieren Sie es auf Octave Online aus!
Eine Funktion, die als Eingabe einen Spaltenvektor verwendet, der Folgendes enthält
(1, -1, i, -i)
Verwenden Sie den Ansatz von @ lanlock4s Mathematica-Antwort und addieren Sie die Länge der Eingabe zu den Koordinaten, um nicht positive Koordinaten zu vermeiden, anstatt min Koordinaten von ihnen zu subtrahieren. 4 Bytes gespeichert.
Vorherige Antwort:
Probieren Sie es auf Octave Online aus!
Geändert zur besseren Visualisierung.
Erläuterung:
quelle
Haskell,
579.530Bytesm
ist die Hauptfunktion, die eine Zeichenfolge übernimmtv^<>
und die entsprechende Ganzzahl zurückgibt.Ungolfed:
quelle
Mathematica, 124 Bytes
Sie werden wahrscheinlich nicht überrascht sein zu erfahren, dass Mathematica eine integrierte Funktion zum Messen des von einer Wand umgebenen Bereichs besitzt. Leider ist es ziemlich bytey:
ComponentMeasurements[..., "FilledCount", CornerNeighbors -> False]
.In diesem Sinne ist hier meine vollständige Antwort. Es ist eine Funktion, die eine Liste von 1, i, -1 oder -i annimmt:
Erläuterung:
FoldList[#+#2&,2(1+I)Length@#,#]
Erstellt die Wand, indem Sie bei Koordinate 2 (1 + i) (Länge der Wand) beginnen und nacheinander die Elemente der Eingabeliste hinzufügen. (Wir müssen bei der lächerlich großen Koordinate 2 (1 + i) (Länge der Wand) beginnen, um sicherzustellen, dass die Wandkoordinaten positiv bleiben, da sonst die Dinge brechen.)SparseArray[{Re@#,Im@#}&/@...->1]
wandelt diese Koordinaten von komplexen Zahlen in Ganzzahlpaare um und erstellt ein Array mit 1s an der Stelle, an der sich die Wand befindet, und 0s an einer anderen Stelle.1/.ComponentMeasurements[...,"FilledCount",CornerNeighbors->1<0]&
misst mit eingebauter Mathematica-Magie den von der Wand umschlossenen Bereich.quelle
PHP> = 5.6.2, 888 Bytes
Online Version
quelle