Este é o meu emoji de estimação, Billy:
-_-
Os emojis não gostam de estar na chuva, então Billy está triste ... Vamos desenhar um guarda-chuva para ele se sentir melhor!
/\
/ \
/ \
-_-
Isso é bom, ele está totalmente coberto por seu guarda-chuva! Aqui está um exemplo em que apenas parte dele é abordada:
/\
/ \
/ \
-_-
Nesse caso, as seções 2 e 3 de seu corpo são expostas à chuva.
Os guarda-chuvas têm várias formas e tamanhos, mas são sempre compostos por uma série de barras ascendentes, /
seguidas por uma série de barras invertidas descendentes \
. Por exemplo, todos esses são guarda-chuvas válidos:
/\
/ \
/ \
/\
/\
/ \
/ \
/ \
/ \
E estes não são:
/ \
\/
\
/ \
/ \
0\
/ \
//\\
/ \
Você precisa determinar quais partes do meu emoji estão expostas à chuva.
Esclarecimentos
Seu programa (ou função) terá uma string 2d como entrada. Isso pode estar no formato que for mais conveniente ou natural para o seu idioma. Uma matriz de seqüências de caracteres, uma matriz de matrizes de caracteres, uma sequência com novas linhas etc.
Você deve mostrar quais seções do emoji estão expostas à chuva. Isso pode ser indexado a zero ou a um, desde que você deixe isso claro. A saída pode estar em qualquer formato razoável. Se o emoji inteiro estiver protegido da chuva, não produza nada (ou uma matriz vazia).
Você pode assumir que todas as entradas terão um guarda-chuva válido, eo mesmo emoji:
-_-
. O emoji sempre estará na última linha da entrada, no entanto, pode haver várias linhas vazias entre o guarda-chuva e o emoji.Tudo o que não faz parte do guarda-chuva ou do emoji será um
caractere espacial ou uma nova linha.
A entrada será preenchida com espaços para que o comprimento de cada linha seja o mesmo.
As brechas padrão se aplicam e a resposta mais curta em bytes vence!
Teste de E / S:
Todos os casos de amostra usarão uma indexação.
/\
/ \
/ \
-_-
Outputs: []
----------------
/\
/ \
-_-
Outputs: [2, 3]
----------------
/\
-_-
Outputs: [1]
----------------
/\
/ \
/ \
/ \
/ \
/ \
-_-
Outputs: [1, 2, 3]
["_","-"]
.Respostas:
05AB1E ,
181715 bytesCódigo:
Explicação:
Usa a codificação CP-1252 . Experimente online! (certifique-se de preencher todas as linhas com espaços do mesmo comprimento.
fonte
JavaScript (ES6), 95 bytes
A entrada deve ser uma matriz de seqüências de caracteres, com cada linha preenchida com espaços para formar um quadrado. A saída é uma matriz de números indexados em 1.
Explicação
fonte
JavaScript (ES6), 92 bytes
Aceita uma matriz irregular de linhas e retorna um resultado indexado em 1. Explicação:
fonte
Caracteres Java 8 lambda,
241218201191185184 (ou 161)Porque você sabe, o Java também precisa de emojis secos.
Ele retorna
um ArrayListum HashSet uma pilha contendo as partes do emoji expostas à chuva (a indexação começa em 0). A coisa toda desembrulhou:Atualizações
Eu pratiquei golfe básico. Isso inclui reunir as declarações, comparar com os valores ascii para salvar alguns caracteres e diminuir os loops.
Obrigado a @ user902383 por apontar meu erro de despejo usando ArrayLists em vez de apenas Lists. Substituí ArrayLists / Lists por HashSets / Sets, que salva mais alguns caracteres. Também obrigado por sua dica de usar um loop foreach no loop interno! Com essa alteração, sou capaz de criar uma variável para o índice da última linha da grade, que a reduz um pouco mais. No total, 17 caracteres foram salvos!
@KevinCruijssen sugeriu remover os genéricos na inicialização, fui um passo adiante: remova todos os genéricos. Isso salva outros 10 caracteres.
Voltei do loop foreach para o loop for. Isso torna possível pular a comparação da última linha, o que, por sua vez, me permite reduzir a comparação dos valores ascii. Nesse contexto, apenas '/', '\' e '_' têm um valor ASCII acima de 46. Se não verificarmos a última linha, podemos usar a
> 46 check
para verificar o valor real.Mais uma vez obrigado a @ user902383 por me mostrar que eu uso um lambda e posso usar List + Stack em vez de Set + HashSet para cortar outro caractere.
Versão de retorno de string
@ user902383 apontou que eu posso apenas criar uma String com os dígitos. Isso parece muito barato, mas outros parecem resolvê-lo dessa maneira, então aqui está uma versão mais curta usando um retorno de String:
Ungolfed:
fonte
always program to an interface
, se você usarList
em vezArrayList
você pode salvar 5 bytes=new HashSet<>();
muita certeza, mas provavelmente pode jogar golfe=new HashSet();
.<>
arquivo salva 2 bytes. :)Set(3)
HashSet(7)
contraList
(4) eStack
(5).V ,
2019 bytes (não concorrente)Versão alternativa alternativa (21 bytes):
Experimente online! (Observe, tryitonline.net usa uma versão um pouco antiga de V. Para compensar isso, ela usa uma versão um pouco mais longa)
Explicação:
Isso por si só produz o resultado correto em 17 bytes. No entanto, também cria algum espaço em branco extra. Não me importo, mas não quero me dar uma vantagem injusta, por isso estou adicionando dois bytes:
fonte
JavaScript (ES6),
117112 bytesAceita uma matriz irregular de
strings,matrizes de caracteres e retorna resultados indexados em 0.Demo
fonte
Retina , 56 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
Esse é um estágio de substituição único, em que o regex corresponde a um dos caracteres emoji, desde que exista um caractere não espacial (ou seja, um
/
ou\
) em algum lugar acima na mesma posição horizontal, e capturamos o número de caracteres emoji até aquele ponto. Essa correspondência é substituída pela duração da última captura, o que nos fornece o índice desse caractere emoji não abrigado. O regex também contém um|\D
para corresponder a todo o resto que é substituído por nada, portanto, removemos todos os outros caracteres.fonte
/
ou\
, eu estou aparecendo desse grupo novamente enquanto combinando o material anterior que , em seguida, certifique-se de que eu esgotado completamente o grupo. Isso basicamente garante que a posição horizontal do emoji e o caractere do telhado correspondam.Pitão,
2723 bytesIndexado a 0.
Experimente online!
Explicação
História
27 bytes:
sM:#"^ *\d"0.T:R"-_-"s`M3.z
( Experimente online! )fonte
Matlab, 43 bytes
Esse código localiza as posições da coluna de caracteres não espaciais na linha final da entrada, soma o número de caracteres não espaciais nessas colunas e localiza onde há apenas um desses caracteres (o caractere do emoji, sem proteção pelo guarda-chuva!) . Esse código só retorna resultados adequados para guarda-chuvas bem formados (assume que qualquer caractere acima do nosso emoji faz parte de um guarda-chuva bem formado).
Aqui está um pouco do código do utilitário para escrever casos de teste e verificar meu trabalho:
Correr
x = thrht(7)
dáOu
x = twht(0)
dáfonte
APL, 31 bytes
Isso leva uma matriz de caracteres como entrada.
Testes:
Explicação:
'-_-'⍷⍵
: em uma matriz de zeros do tamanho da entrada, marque a posição do início de'-_-'
na entrada com 1.+\+\
: Executando soma sobre linhas. O primeiro torna uma0 0 0 1 0 0 ...
em0 0 0 1 1 1 ...
, a segunda uma, em seguida, faz com que seja em0 0 0 1 2 3 ...
.⍵∊'/\'
: marque todas as ocorrências de '/' e '\' na entrada com 1s.∨⌿
:or
sobre colunas. Isso marca com 1 todas as posições na última linha que são cobertas pelo guarda-chuva.~
:not
, porque precisamos do oposto(
...)/
...: selecione todas as colunas descobertas da matriz de soma em execução da anterior,
: Obtenha uma lista de todos os valores na matriz resultante.(⍳3)∩
: Interseção entre isso e1 2 3
(isso elimina os 0s ou valores mais altos selecionados, que seriam espaços).fonte
Python 2,
114111 bytesUsa indexação baseada em 0.
Experimente aqui .
fonte