introduction
Vous avez récemment accepté une offre d'emploi dans une très bonne société de logiciels. Vous êtes plutôt satisfait de la taille de votre bureau, mais avez-vous le plus grand bureau? C'est un peu difficile à dire de simplement regarder les bureaux de vos collègues lorsque vous vous arrêtez. La seule façon de comprendre cela est d'examiner les plans du bâtiment ...
Ta tâche
Écrivez un programme, un script ou une fonction qui prend un plan d'étage pour votre bâtiment et indique si votre bureau est le plus grand. Le plan d'étage est facile à lire car le bâtiment est un carré n par n .
L'entrée consistera en n + 1 \n
lignes délimitées. La première ligne aura le numéro n dessus. Les n lignes suivantes seront le plan d'étage du bâtiment. Un exemple simple d'entrée:
6
......
. . .
.X . .
. . .
. . .
......
Les règles du plan d'étage sont les suivantes:
.
(ASCII 46) Sera utilisé pour représenter les murs.(Espace [ASCII 32]) sera utilisé pour représenter un espace ouvert.
- Vous êtes représenté par un
X
(ASCII 88). Vous êtes dans votre bureau. - Le plan d' étage sera n lignes, chacun avec n caractères.
- Le bâtiment est totalement entouré de murs de tous les côtés. Cela implique que la 2e ligne d'entrée (la première ligne du plan d'étage) et la dernière ligne d'entrée seront toutes
.
s. Cela implique également que les premier et dernier caractères de chaque ligne de plan d'étage seront.
s. - Une taille de bureau est définie comme la somme des espaces adjacents (contigus en se déplaçant dans 4 directions, N, S, E, W, sans passer par un mur).
- Aux fins de la taille du bureau, le X qui vous représente compte comme
(espace ouvert)
- 4 <= n <= 80
Vous devez indiquer si votre bureau est strictement plus grand que tous les autres bureaux. La sortie peut être tout ce qui signifie sans ambiguïté True ou False dans le langage de programmation de votre choix et adhère aux conventions standard de zéro, null et vide signifiant False. Vrai implique que votre bureau est strictement le plus grand.
Exemple de sortie pour l'entrée ci-dessus:
1
Parce que votre bureau est de 8 pieds carrés, et le seul autre bureau est de 4 pieds carrés.
Consignes d'E / S
- L'entrée peut être lue à partir de stdin et répondre à stdout.
Ou
- L'entrée peut être un argument de chaîne unique pour une fonction, et la réponse doit être la valeur de retour de cette fonction.
FAQ
- L'ensemble du bâtiment se compose de murs et de bureaux.
- Le bâtiment est d'un seul étage
- Il est garanti qu'il y ait un X dans l'entrée, mais il n'y a pas de garantie qu'il y ait des espaces. Vous pourriez avoir un bureau 1x1 et le reste du bâtiment est des murs (vous avez le plus grand bureau! Hourra!).
Autre exemple
10
..........
. . . .
. . . .
. . . .
. .. . .
.. .
..........
. X .
. .
..........
Ici, il y a 3 bureaux, votre bureau sud est rectangulaire, le bureau nord-ouest est un triangle (ish) et le bureau nord-est est étrangement déformé, mais plus grand que le vôtre. La sortie doit être False.
C'est un défi d'écrire le code le plus court, joyeux golf de code !
la source
X
autorisé dans l'entrée. :)Réponses:
Ruby 2.0, 133 caractères
Une collaboration avec @Ventero. Toujours un bon signe quand il commence à casser le surligneur de syntaxe!
Il s'agit d'une solution de remplissage inondable récursive. Lit depuis STDIN et sort vers STDOUT:
Le voir fonctionnement sur Ideone .
la source
f
un peu: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}
. Et corrigez-moi si je me trompe, mais il semble que cela n'ait pas vraiment d'importance si la première ligne contenant la longueur est laissée$_
gets$e;n=$_.to_i
gets(p)
commep
rien et retournenil
s'il est appelé sans argument.product
le récepteur retourne pour éliminerl
complètement:f=->*a{a.product([~n,-1,1,n+1]){|p,d|a|=[p+d]if$_[p+d]<?.}!=a ?f[*a]:a.size}
- malheureusement nous ne pouvons pas changer les lhs et rhs de!=
pour supprimer l'espace, sinon les deux côtés pointent vers le tableau non modifié.String#scan
etARGV
en trouvant la plus grande salle peut être un peu raccourcie:$_.scan(/ /){$*<<f[$
.size]}; p $ *. Max <f [~ / X /] `n
dansf
avec quelque chose comme[~n=$_.to_i,...]
, vous pouvez ensuite combiner la première et la troisième ligne dansgets(p).scan(...
pour un total de 134 caractères.GolfScript (85 octets)
Démo en ligne
Cela comprend trois sections:
Une transformation d'entrée initiale qui produit un tableau 2D en utilisant
0
pour représenter un mur,N
(le nombre total de cellules) pour représenter ma position de départ, et un nombre distinct entre ceux pour l'autre espace ouvert.Une inondation.
Le décompte final. Cela utilise une variante sur la pointe pour l'élément le plus courant dans un tableau , en ajoutant un bris d'égalité contre lequel
N
.la source
qN/(~_*:T:U;{[{i5%[0_U(:UT]
=}/]}%{{[{_2$*!!{[\]$W=_}*}*]}%z}T*:+0-:A{_T=A@-,2*+}$0=T=
.Javascript (E6)
155292Version de base non golfée
Tester
Console Javascript dans Firefox
F('6\n......\n. . .\n.X . .\n. . .\n. . .\n......')
F('10\n..........\n. . . .\n. . . .\n. . . .\n. .. . .\n.. .\n..........\n. X .\n. .\n..........\n')
la source
1
me donne aussi (dans Firefox 30.0)C #,
444372 / (342 merci HackerCow) octetsScore plutôt médiocre et en retard à la fête, mais semble fonctionner. Sorties 1 lorsque vous avez le plus grand bureau unique, 0 lorsque vous n'en avez pas. Je n'ai pas encore été très compliqué avec le golf. Fonctionne en créant des ensembles disjoints à partir de l'entrée (première boucle), en comptant la taille de chaque ensemble (deuxième boucle) et en cherchant ensuite si mon ensemble est le plus grand (troisième boucle).
Deux versions sont fournies, l'une est un programme compilable qui accepte l'entrée de la ligne de commande, l'autre est juste une fonction qui attend une chaîne en entrée et renvoie un int comme résultat (et n'est qu'une copie retravaillée de la première) - il n'a besoin d'aucune clause using ou similaire, devrait pouvoir le mettre n'importe où et cela fonctionnera.
Programme 372 octets :
Fonction 342 octets :
Moins golfé:
la source
Main
fonction et remplacez la fonction par, dites queint f(string s)
vous pouvez utiliser à las.Split('\n')[0]
place deConsole.ReadLine()
et retourner1
ou0
. Cela devrait vous faire économiser beaucoup de codeCJam, 106 octets
Une approche différente du remplissage des inondations. Bien, le rend plus long ...
Essayez-le ici
la source
Python 2 - 258 octets
utilise stdin pour l'entrée
Remarque: le premier
if
est mis en retrait par un seul espace, les autres lignes en retrait utilisent soit un caractère de tabulation unique, soit un onglet et un espace.la source
J:
150121 octetsEdit :
id
etcomp
étaient ridiculement compliqués et lents. Maintenant, cela fonctionne en déplaçant la carte 4 fois, au lieu de la numériser avec une fenêtre 3x3 en utilisantcut
(;.
).Prend comme argument le plan comme chaîne. Expliqué ci-dessous:
la source
Python 2 - 378 octets
Sensationnel. Je suis hors de pratique.
C'est une réponse de fonction, mais elle pollue l'espace de noms global. Si cela est inacceptable, il peut être corrigé au prix d'un octet:
J'ai eu toute une longue explication écrite, mais apparemment, cela n'a pas enregistré correctement et je ne recommence pas lmao
la source