Introdução
Você aceitou recentemente uma oferta de emprego em uma empresa de software bastante boa. Você está bastante satisfeito com o tamanho do seu escritório, mas você tem o maior escritório? É meio difícil dizer apenas observando os escritórios de seus colegas de trabalho quando você passa por aqui. A única maneira de descobrir isso é examinar as plantas do edifício ...
Sua tarefa
Escreva um programa, script ou função que tenha uma planta baixa do seu prédio e indique se o seu escritório é o maior. O piso plano é fácil de ler porque o edifício é um n por n quadrado.
A entrada consistirá em linhas delimitadas por n + 1 \n
. A primeira linha terá o número n . As próximas n linhas serão a planta baixa do edifício. Um exemplo simples de entrada:
6
......
. . .
.X . .
. . .
. . .
......
As regras para a planta baixa são as seguintes:
.
(ASCII 46) Será usado para representar paredes.(Espaço [ASCII 32]) será usado para representar o espaço aberto.
- Você é representado por um
X
(ASCII 88). Você está no seu escritório. - A planta terá n linhas, cada uma com n caracteres.
- O edifício é totalmente cercado por paredes por todos os lados. Isso implica que a segunda linha de entrada (a primeira linha da planta baixa) e a última linha de entrada serão todas
.
s. Isso também implica que o primeiro e o último caracteres de cada linha da planta baixa serão.
s. - Um tamanho de escritório é definido como a soma dos espaços adjacentes (contíguos, movendo-se em 4 direções, N, S, E, W, sem passar por uma parede).
- Para fins de tamanho de escritório, o X representando você conta como um
(espaço aberto)
- 4 <= n <= 80
Você deve imprimir se seu escritório é estritamente maior que todos os outros escritórios. A saída pode ser qualquer coisa que signifique inequivocamente Verdadeiro ou Falso na sua linguagem de programação preferida e adira às convenções padrão de zero, nulo e vazio, significando Falso. Verdadeiro implica que seu escritório é estritamente o maior.
Saída de amostra para a entrada acima:
1
Porque o seu escritório mede 8 pés quadrados e o único outro escritório mede 4 pés quadrados.
Diretrizes de E / S
- A entrada pode ser lida em stdin e responder a saída em stdout.
Ou
- A entrada pode ser um argumento de cadeia única para uma função e resposta é o valor de retorno dessa função.
Perguntas frequentes
- Todo o edifício é composto por paredes e escritórios.
- O edifício é apenas um andar
- É garantido que haja um X na entrada, mas não há espaços garantidos. Você pode ter um escritório 1x1 e o restante do edifício é de paredes (você tem o maior escritório! Viva!).
Outro exemplo
10
..........
. . . .
. . . .
. . . .
. .. . .
.. .
..........
. X .
. .
..........
Aqui existem três escritórios, seu escritório sul é retangular, o escritório noroeste é um triângulo (ish) e o escritório nordeste é estranhamente deformado, mas maior que o seu. A saída deve ser falsa.
Este é um desafio para escrever o código mais curto, feliz código-golfe !
fonte
X
permitido na entrada. :)Respostas:
Ruby 2.0, 133 caracteres
Uma colaboração com @Ventero. Sempre um bom sinal quando começa a quebrar o marcador de sintaxe!
Esta é uma solução recursiva de preenchimento de inundação. Lê de STDIN e sai para STDOUT:
Veja-o rodando no Ideone .
fonte
f
um pouco: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}
. E me corrija se eu estiver errado, mas parece que ele realmente não importa se a primeira linha contendo o comprimento é deixado no$_
, que lhe permitiria encurtar a análise de entrada paragets$e;n=$_.to_i
gets(p)
comop
nada e retornanil
se chamado sem argumento.product
retornar o receptor para eliminarl
completamente:f=->*a{a.product([~n,-1,1,n+1]){|p,d|a|=[p+d]if$_[p+d]<?.}!=a ?f[*a]:a.size}
- infelizmente não podemos mudar o lhs e o rhs!=
para remover o espaço, caso contrário os dois lados apontam para o array não modificado.String#scan
eARGV
, encontrar a maior sala pode ser reduzido um pouco:$_.scan(/ /){$*<<f[$
.size]}; p $ *. Max <f [~ / X /] `#n
emf
com algo como[~n=$_.to_i,...]
, você pode combinar a primeira e a terceira linha emgets(p).scan(...
um total de 134 caracteres.GolfScript (85 bytes)
Demonstração online
Isso tem três seções:
Uma transformação de entrada inicial que produz uma matriz 2D usando
0
para representar uma paredeN
(o número total de células) para representar minha posição inicial e um número distinto entre os espaços um do outro.Uma inundação.
A contagem final. Isso usa uma variante na ponta para o elemento mais comum em uma matriz , adicionando um desempatador contra o qual se inclina
N
.fonte
qN/(~_*:T:U;{[{i5%[0_U(:UT]
=}/]}%{{[{_2$*!!{[\]$W=_}*}*]}%z}T*:+0-:A{_T=A@-,2*+}$0=T=
.Javascript (E6)
155292Versão base ungolfed
Teste
Console Javascript no Firefox
F('6\n......\n. . .\n.X . .\n. . .\n. . .\n......')
F('10\n..........\n. . . .\n. . . .\n. . . .\n. .. . .\n.. .\n..........\n. X .\n. .\n..........\n')
fonte
1
também éC #,
444372 / (342 graças HackerCow) bytesPontuação bastante pobre e atrasado para a festa, mas parece funcionar. Produz 1 quando você tem o maior escritório único, 0 quando não possui. Ainda não fui muito complicado com o golfe. Funciona criando conjuntos disjuntos a partir da entrada (primeiro loop), calculando o tamanho de cada conjunto (segundo loop) e procurando ver se meu conjunto é o maior (terceiro loop).
São fornecidas duas versões, uma é um programa compilável que aceita a entrada da linha de comando, a outra é apenas uma função que espera uma string como entrada e retorna um int como resultado (e é apenas uma cópia retrabalhada da primeira) - ele não precisa de cláusulas de uso ou similares, deve poder colocá-lo em qualquer lugar e funcionará.
Programa 372bytes :
Função 342bytes :
Menos golfe:
fonte
Main
função e substituí-la por, diga queint f(string s)
você poderia usar ems.Split('\n')[0]
vez deConsole.ReadLine()
e retornar1
ou0
. Isso deve economizar muito códigoCJam, 106 bytes
Uma abordagem diferente para preenchimento de inundação. Embora, torna mais longo ...
Experimente aqui
fonte
Python 2 - 258 bytes
usa stdin para entrada
Nota: primeiro
if
é recuado por um único espaço, outras linhas recuadas estão usando um único caractere de tabulação ou uma tabulação e um espaço.fonte
J:
150121 bytesEdit :
id
ecomp
eram ridiculamente complicados e lentos. Agora ele funciona deslocando o mapa 4 vezes, em vez de digitalizá-lo com uma janela 3x3 usandocut
(;.
).Toma como argumento o blueprint como string. Explicado abaixo:
fonte
Python 2 - 378 bytes
Uau. Estou sem prática.
Esta é uma resposta de função, mas polui o espaço para nome global. Se isso for inaceitável, poderá ser corrigido ao custo de 1 byte:
Eu tinha uma explicação longa e extensa, mas aparentemente ela não foi salva corretamente e não vou fazer isso de novo.
fonte