Dada uma string 2D como entrada, como uma string com novas linhas ou uma lista de linhas, produza as coordenadas (x, y)
de todos os hashes ( #
) na lista. A entrada conterá apenas hashes e espaços. (e novas linhas, se você optar por receber a entrada como uma sequência 2D)
Se não houver hashes, você pode produzir qualquer coisa.
A saída deve ser inequívoca quanto a quais números estão emparelhados com os quais.
Exemplo:
##
Saída deve:
(0,0), (1,0)
Isso pressupõe a indexação baseada em 0, iniciando no canto superior esquerdo. Você pode começar de qualquer canto, usar indexação com base em 0 ou 1 e / ou saíday
primeiro. (por exemplo, no formulário y,x
).
Mais casos de teste (novamente, todos usando o canto superior esquerdo com base em 0 (x, y)
indexação ):
#
#####
#
(4, 0), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (0, 2)
# ###
### #
(0, 0), (2, 0), (3, 0), (4, 0), (0, 1), (1, 1), (2, 1), (4, 1)
Observe que todos esses casos de teste são listados por linhas, não seguindo o caminho.
Você pode assumir que os hashes formarão uma trilha contínua, ou seja, # #
, nunca será a entrada. (provavelmente não importará, mas caso alguém queira regexar isso)
Você também pode produzir as coordenadas na ordem que desejar, como colunas verticais, linhas horizontais ou apenas uma lista não classificada.
Respostas:
Deslizamento , 2 + 1 = 3 bytes
+1 byte para o
p
sinalizador. Código:Explicação:
O
p
-flag retorna a posição de cada ocorrência do seguinte:Experimente aqui!
fonte
Grime , 5 bytes
Experimente online! O formato de saída é um pouco descolado, mas o OP afirmou que é válido.
Explicação
Grime é minha linguagem de correspondência de padrões 2D. A parte depois
`
é o padrão , neste caso, um quadrado 1 × 1 contendo um#
caractere. O Grime procurará uma correspondência na grade de entrada e imprimirá a primeira que encontrar por padrão. A parte anterior`
contém opções, neste caso, significando que todas as correspondências (a
) devem ser impressas, juntamente com suas posições e tamanhos (p
).fonte
MATL ,
7 65 bytesIsso está usando a indexação baseada
(1,1)
em 1 no canto superior esquerdo.Explicação:
Obrigado @DJMcMayhem e @LuisMendo por cada -1 byte!
Experimente online!
fonte
ooH#fh
para salvar um byte. (convertido em inteiros, MOD2) desde que o espaço é ainda (mod 2 == 0, Falsas) e#
é estranho (mod 1 == 1, truthy)Python , 67 bytes
Na verdade, este é apenas um argumento da minha resposta do Stack Overflow sobre um tópico semelhante.
Experimente online!
Os loops na lista 2D, gravando os caracteres hash, e retornam o resultado. Salvamos um byte usando, em
char > '!'
vez dechar == '#'
, porque a entrada consistirá apenas de hashes e espaços e, portanto, hashes (0x23
) serão os únicos caracteres maiores que pontos de exclamação (0x21
).fonte
JavaScript (ES6),
7067 bytesGera uma lista de coordenadas separadas por nova linha e espaço, por exemplo
Você pode ficar muito mais curto com um formato de saída estranho:
Isso gera
para o segundo caso de teste. Ainda está claro quais números estão emparelhados com quais ...
fonte
J , 12 bytes
Experimente online!
Explicação
fonte
Gelatina , 8 bytes
Experimente online!
Dada uma matriz 2D de caracteres (= uma lista de cadeias):
fonte
Dyalog APL 16.0, 5 caracteres = 9 bytes ou 6 caracteres = 8 bytes
Fornece uma lista de (y, x) pares do canto superior esquerdo.
⍸
Onde⎕
entrada=
é igual a'#'
esse personagem** É possível salvar um caractere ao custo de um byte, substituindo
'#'
por⍕#
(formate o espaço para nome raiz)TryAPL online! Observe que
⍸
foi emuladoi
porque o TryAPL executa a versão 14.0.fonte
⍸
não está incluído na versão de byte único. Veja o link "bytes".JavaScript (Firefox 30-57), 61 bytes
Retorna coordenadas com base em 1. Facilmente selecionável entre
[y, x]
e[x, y]
pedidos. Ungolfed:fonte
Vim, 37 bytes
Como o V é principalmente compatível com versões anteriores, você pode experimentá-lo online!
Uma solução simples de regex, em que substitui cada '#' pelo local em que foi encontrado (indexação baseada em um). Ao escrever isso, fiquei um pouco preocupado que o local mudaria depois de substituir o primeiro de uma linha, mas isso não parece ser um problema. TBH Estou agradavelmente chocado com o quão simples essa solução acabou sendo.
Infelizmente, o vimscript é muito detalhado, portanto, a maioria dos bytes vem da separação dos resultados, para que ainda seja legível. Caso contrário, poderíamos fazer
Mas isso cria uma saída que é bastante difícil de interpretar. Além disso, ele funcionará apenas na grade sempre 9x9 ou menor.
Essa é uma solução realmente divertida, pois mostra cada par de coordenadas no local do hash que representa. Por exemplo, a entrada
saídas
Obviamente, se estivéssemos usando V, poderíamos remover a nova linha à direita e compactar a regex. Então poderia ser simplesmente
(32 bytes)
Mas como essa é exatamente a mesma abordagem e ainda é dolorosamente detalhada, não parece valer a pena usar uma linguagem de golfe.
fonte
Haskell, 53 bytes
A entrada é tomada como uma lista de cadeias. A saída é uma lista de
(x,y)
pares (0 indexado), por exemplofonte
Lua, 141 bytes
São duas e meia da manhã, estou na cama, no meu telefone. Por que estou fazendo isto?
fonte
Mathematica, 12 bytes
Forma do operador de
Position
. Assume uma matriz 2D de caracteres. Indexado em 1 a partir da entrada superior esquerda. Produz uma lista de coordenadas no formulário{row,column}
.fonte
char[]
, que é realmente uma maneira comum de armazenar seqüências de caracteres em linguagens baseadas em C. Além disso, esta descrição da tarefa menciona especificamente "como uma sequência com novas linhas ou uma lista de linhas" e não menciona lista de listas de caracteres ou matriz 2D de caracteres.PHP, 69 bytes
Usa indexação baseada em 1, começando no canto superior esquerdo.
Use como:
Saída:
fonte
C, 113 bytes
Saídas de casos de teste:
Experimente online!
fonte
RBX.Lua, 131 bytes
Tem que assumir que a entrada é válida (Z é o eixo plano, os espaços em branco são
White
ladrilhos, os hashes podem ser de qualquer outra cor, a parte superior esquerda está localizada em0, 0, 0
) e todas as partes fazem parte do mesmo modeloM
e o modelo está vazio.Entrada / saída de amostra:
fonte
Perl 6 , 25 bytes (22 caracteres)
Recebe a entrada como uma lista de linhas.
Gera uma lista por linha, cada uma contendo tuplas (y, x) para as coordenadas.
Experimente online!
Como funciona
fonte
Groovy,
8068 bytesExemplo de entrada:
Saída de exemplo:
fonte
Ruby , 24 + 1 = 25 bytes
+1 byte para
-n
sinalizador. As coordenadas são baseadas em 1, um número por linha.Experimente online!
fonte
C, 80 bytes
Requer entrada como matriz de caracteres delimitada por nova linha, imprime a saída na tela.
Ungolfed & uso:
fonte
x,y;f(char*s){for(x=y=0;*s;*s++==10?++y,x=0:++x)*s==35&&printf("%d,%d ",x,y);}