Einführung
Sie haben kürzlich ein Stellenangebot bei einer Pretty Good Software Company angenommen. Sie sind ziemlich zufrieden mit der Größe Ihres Büros, aber haben Sie das größte Büro? Es ist schwer zu sagen, wenn man nur die Büros seiner Kollegen ansieht, wenn man vorbeischaut. Der einzige Weg, dies herauszufinden, ist die Überprüfung der Baupläne für das Gebäude ...
Deine Aufgabe
Schreiben Sie ein Programm, ein Skript oder eine Funktion, die einen Grundriss für Ihr Gebäude erstellt und angibt, ob Ihr Büro das größte ist. Der Grundriss ist leicht zu lesen , weil das Gebäude ist eine n von n Platz.
Die Eingabe besteht aus n + 1- \n
begrenzten Zeilen. In der ersten Zeile steht die Nummer n . Die nächsten n Zeilen sind der Grundriss des Gebäudes. Ein einfaches Eingabebeispiel:
6
......
. . .
.X . .
. . .
. . .
......
Die Regeln für den Grundriss lauten wie folgt:
.
(ASCII 46) Wird zur Darstellung von Wänden verwendet.(Leerzeichen [ASCII 32]) wird verwendet, um den offenen Raum darzustellen.
- Sie werden durch ein
X
(ASCII 88) dargestellt. Sie sind in Ihrem Büro. - Der Grundriss besteht aus n Zeilen mit jeweils n Zeichen.
- Das Gebäude ist rundum von Mauern umgeben. Dies impliziert, dass die 2. Eingabezeile (die erste Zeile des Grundrisses) und die letzte Eingabezeile alle
.
s sind. Dies impliziert auch, dass das erste und das letzte Zeichen jeder Grundrisslinie.
s sind. - Eine Bürogröße ist definiert als die Summe benachbarter Räume (zusammenhängend durch Bewegen in 4 Richtungen, N, S, E, W, ohne durch eine Wand zu gehen).
- Für die Bürogröße gilt das X, das Sie darstellt, als
(offener Bereich).
- 4 <= n <= 80
Sie sollten ausgeben, ob Ihr Büro streng größer ist als alle anderen Büros. Die Ausgabe kann alles sein, was in der Programmiersprache Ihrer Wahl eindeutig Wahr oder Falsch bedeutet und den Standardkonventionen Null, Null und Leer entspricht, was Falsch bedeutet. Richtig bedeutet, dass Ihr Büro das größte ist.
Beispielausgabe für obige Eingabe:
1
Weil Ihr Büro 8 Quadratmeter groß ist und das einzige andere Büro 4 Quadratmeter groß ist.
I / O-Richtlinien
- Die Eingabe kann von stdin gelesen und die Ausgabe auf stdout beantwortet werden.
Oder
- Die Eingabe kann ein einzelnes Zeichenfolgenargument für eine Funktion sein und answer der Rückgabewert dieser Funktion.
FAQ
- Das gesamte Gebäude besteht aus Mauern und Büros.
- Das Gebäude ist nur eine Etage
- In der Eingabe ist ein X garantiert, es sind jedoch keine Leerzeichen garantiert. Sie könnten ein 1x1 Büro haben und der Rest des Gebäudes sind Wände (Sie haben das größte Büro! Hurra!).
Anderes Beispiel
10
..........
. . . .
. . . .
. . . .
. .. . .
.. .
..........
. X .
. .
..........
Hier gibt es 3 Büros, Ihr Südbüro ist rechteckig, das Nordwestbüro ist ein Dreieck (ish) und das Nordostbüro ist merkwürdig unförmig, aber größer als deins. Die Ausgabe sollte False sein.
Dies ist eine Herausforderung, um den kürzesten Code zu schreiben, glückliches Code-Golfen !
quelle
X
zulässigen in der Eingabe hinzufügen . :)Antworten:
Ruby 2.0, 133 Zeichen
Eine Zusammenarbeit mit @Ventero. Immer ein gutes Zeichen, wenn es anfängt, den Syntax-Textmarker zu brechen!
Dies ist eine rekursive Flood-Fill-Lösung. Liest von STDIN und gibt an STDOUT aus:
Sehen Sie , wie es auf Ideone läuft .
quelle
f
ein Bit:f=->l{a=[*l];a.product([~n,-1,1,n+1]){|p,d|a|=[p+d]if$_[p+d]<?.};a!=l ?f[a]:l.size}
. Und korrigieren Sie mich, wenn ich falsch liege, aber es scheint eigentlich egal zu sein, ob die erste Zeile, die die Länge enthält, noch vorhanden ist$_
,gets$e;n=$_.to_i
gets(p)
wiep
tut nichts und kehrt ,nil
wenn ohne Argument aufgerufen.product
der Empfänger zurückgegeben wird,l
vollständig eliminieren :f=->*a{a.product([~n,-1,1,n+1]){|p,d|a|=[p+d]if$_[p+d]<?.}!=a ?f[*a]:a.size}
- Leider können wir die Links und Rechts nicht umschalten!=
, um das Leerzeichen zu entfernen, da ansonsten beide Seiten auf das unveränderte Array zeigen.String#scan
undARGV
kann die Suche nach dem größten Raum etwas verkürzt werden:$_.scan(/ /){$*<<f[$
.size]}; p $ *. Max <f [~ / X /] `n
inf
mit so etwas[~n=$_.to_i,...]
können Sie dann die erste und dritte Zeile ingets(p).scan(...
für insgesamt 134 Zeichen kombinieren .GolfScript (85 Bytes)
Online-Demo
Dies hat drei Abschnitte:
Eine anfängliche Eingabetransformation, die ein 2D-Array erzeugt, mit
0
dem eine Wand dargestellt wirdN
(die Gesamtzahl der Zellen), um meine Startposition darzustellen, und eine eindeutige Zahl zwischen diesen für den jeweils anderen offenen Raum.Eine Überflutung.
Die endgültige Zählung. Dies nutzt eine Variante auf der Spitze für am häufigsten verwendete Element in einem Array verwendet , wobei ein Verbindungsunterbrecher hinzugefügt wird, gegen den eine Vorspannung vorliegt
N
.quelle
qN/(~_*:T:U;{[{i5%[0_U(:UT]
=}/]}%{{[{_2$*!!{[\]$W=_}*}*]}%z}T*:+0-:A{_T=A@-,2*+}$0=T=
.Javascript (E6) 155
292Ungolfed Basisversion
Prüfung
Javascript-Konsole in Firefox
F('6\n......\n. . .\n.X . .\n. . .\n. . .\n......')
F('10\n..........\n. . . .\n. . . .\n. . . .\n. .. . .\n.. .\n..........\n. X .\n. .\n..........\n')
quelle
1
für mich (in FirefoxC #,
444372 / (342 danke HackerCow) BytesZiemlich schlecht und spät zur Party, scheint aber zu funktionieren. Gibt 1 aus, wenn Sie das größte Einzelbüro haben, und 0, wenn Sie dies nicht tun. Ich war noch nicht sehr kompliziert mit dem Golfen. Bildet disjunkte Mengen aus der Eingabe (erste Schleife), zählt die Größe jeder Menge (zweite Schleife) und prüft dann, ob meine Menge die größte ist (dritte Schleife).
Es werden zwei Versionen bereitgestellt, eine ist ein kompilierbares Programm, das die Eingabe von der Befehlszeile akzeptiert, die andere ist nur eine Funktion, die eine Zeichenfolge als Eingabe erwartet und ein int als Ergebnis zurückgibt (und nur eine überarbeitete Kopie der ersten ist). es braucht keine using-Klauseln oder ähnliches, sollte es irgendwo ablegen können und es wird funktionieren.
Programm 372 Bytes :
Funktion 342 Bytes :
Weniger golfen:
quelle
Main
Funktion ablegen und die Funktion durch ersetzen, sagenint f(string s)
Sie , Sie könntens.Split('\n')[0]
anstelle vonConsole.ReadLine()
und return1
oder verwenden0
. Dies sollte Ihnen viel Code sparenCJam, 106 Bytes
Ein anderer Ansatz zum Füllen von Fluten. Obwohl, macht es länger ...
Probieren Sie es hier aus
quelle
Python 2 - 258 Bytes
Verwendet stdin für die Eingabe
Hinweis: Zunächst
if
wird ein einzelnes Leerzeichen eingerückt, für andere eingerückte Zeilen wird entweder ein einzelnes Tabulatorzeichen oder ein Tabulatorzeichen und ein Leerzeichen verwendet.quelle
J:
150121 BytesEdit :
id
undcomp
waren lächerlich kompliziert und langsam. Jetzt können Sie die Karte viermal verschieben, anstatt sie mitcut
(;.
) in einem 3x3-Fenster zu scannen .Nimmt als Argument die Blaupause als String. Erklärt unten:
quelle
Python 2 - 378 Bytes
Wow. Ich bin aus der Übung.
Dies ist eine Funktionsantwort, die jedoch den globalen Namespace verschmutzt. Wenn dies nicht akzeptabel ist, kann es auf Kosten von 1 Byte behoben werden:
Ich hatte eine lange Erklärung geschrieben, aber anscheinend hat sie nicht richtig gespeichert und ich mache das nicht noch einmal, lmao
quelle