Aqui está um exemplo de uma entrada de monólitos . Existem 4 neste exemplo.
_
| | _
| | _ | |
| | | | | | _
_| |_| |___| |____| |_
O primeiro monólito tem 4 unidades de altura, o segundo é 2, o terceiro é 3 e o último é 1.
A tarefa
Seu programa deve gerar as alturas dos monólitos, da esquerda para a direita. O formato de saída pode estar em qualquer tipo de lista ou matriz.
Notas
- A entrada pode ser tomada como qualquer sequência dimensional, lista de cadeias ou lista de caracteres.
- Isso é código-golfe , então os bytes mais baixos vencem .
- Você deve assumir que os monólitos sempre têm a mesma largura e estão sempre a pelo menos 1 de
_
distância do outro. - Eles podem vir em qualquer altura e quantidade.
I / O
_
| | _
| | _ | |
| | | | | | _
_| |_| |___| |____| |_ >> [4,2,3,1]
_
| |
_ | |
| | _ | | _
_| |_| |__| |_| |_ >> [2,1,4,1]
_ _ _
| |_| |_| |_____ >> [1,1,1]
____________________ >> undefined behavior
_
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | >> [11]
_ _ _ _ _
_ | | _ | | _ | | _ | | _ | |
| |_| |_| |_| |_| |_| |_| |_| |_| |_| | >> [1,2,1,2,1,2,1,2,1,2]
[10]
monólito não é[11]
?Respostas:
Gelatina , (8?) 9 bytes
Um link monádico que aceita uma lista de caracteres conforme especificado e retorna uma lista de números inteiros.
Nota: 8 bytes se uma lista de seqüências de caracteres, uma por linha, realmente pretender ser um formato de entrada permitido - basta remover o
Ỵ
.Experimente online!
Quão?
fonte
Gelatina , 11 bytes
Experimente online!
fonte
JavaScript (ES6),
7978 bytes-1 byte graças a @Shaggy
Recebe entrada como uma matriz de seqüências de caracteres.
Snippet de teste
fonte
a=>a.map((x,y)=>x.replace(/_/g,(_,z)=>c[z]=a.length-y-1),c=[])&&c.filter(n=>n)
replace
. Obrigado!C ++,
171169 bytesExperimente online!
C ++ (GCC), 150 bytes
Graças a @aschepler!
Experimente online!
fonte
f(auto s)
e especificar que ele utilize qualquer contêiner de acesso aleatório de contêineres de acesso aleatório dechar
.05AB1E , 11 bytes
Experimente online!
ζ
foi substituído pelo.Bø
TIO, pois ainda não foi puxado para lá.fonte
Dyalog APL, 29 bytes
Corra com
⎕IO←0
.Experimente online!
Quão?
⌽⍵='_'
- onde⍵
está'_'
, as principais linhas primeiro×
- multiplique por ...(⍳≢⍵)
- o intervalo de⍵
(zero indexado)↑¨
- para cada linha, preencha com zeros por ...(⌈/⍴¨⍵)
- o comprimento máximo↑+/
- somar as linhas compactadas e achatadas0~⍨
- remove zerosfonte
Python 2 , 75 bytes
Experimente online!
fonte
PowerShell, 133 bytes
Parece que não é muito competitivo; ele substitui um regex para transformar as torres em colunas de 1, transforma uma matriz de 0 no comprimento da sequência de entrada e depois percorre as linhas que somam os 1s.
Testes prontos para execução:
fonte
Japonês , 11 bytes
Teste online!
Explicação
fonte
Retina ,
4838 bytesExperimente online! O link inclui o primeiro exemplo. Explicação: É prefixada uma linha que coletará os resultados. Como cada coluna é repetidamente excluída por sua vez, aquelas que contêm um
_
nível acima do solo têm o número de linhas restantes na coluna contado. Finalmente, as linhas agora em branco são excluídas. Editar: salvou 10 bytes graças à inscrição de @FryAmTheEggman.fonte
_
que faz muito mais sentido do que tentar usá- los|
, obrigado!$.%`
, e o estágio final pode ser!`\d+
. E se você mudar o primeiro estágio para um lookahead, não precisará fazer um loop.Java 8,
133117116114 bytesToma a entrada como (← salva 16 bytes). -2 bytes em troca de uma saída menos legível, graças a @ OlivierGrégoire , alterando para .
String[]
char[][]
print(l-j+",")
println(l-j)
Explicação:
Experimente aqui.
fonte
_
se a loja encontrada fosse sua localização e depois pedir, ignorando a linha inferior, é claro. Pode ajudar a salvar bytes ...new[,]
vez da matriz irregular que você está usando comonew[][]
. Se você tiver isso em Java, poderá economizar alguns bytes.System.out.println(l-j);
parece suficientemente vistoso para eu poupar 2 bytes. Além disso, na explicação, você esqueceu de mudarlength()
paralength
(nenhuma incidência na contagem de bytes, pois está correta no envio).Haskell,
7574 bytesA entrada é esperada como uma lista de seqüências de caracteres (linha a linha).
fonte
Ruby , 82 bytes
Recebe uma lista de linhas.
Experimente online!
fonte
APL (Dyalog) , 14 bytes
com
⎕IO←0
Experimente online!
Este trem de função equivalente a
{((⍳≢⍵)+.×('_'=⊖⍵))~0}
fonte
MATL , 12 bytes
A entrada é uma matriz de caracteres, com o
;
separador de linhas.Experimente online! Ou verifique todos os casos de teste .
fonte
C #,
150144137 bytesVersão completa / formatada:
fonte
Java 8 -
229 bytes213 bytesExperimente online!
Ungolfed:
Woo, primeiro post. Qualquer ajuda para melhorá-lo seria ótimo.
Eu sei que posso me livrar dissoSabia! Eu brinquei com a idéia de mudar os tipos no mapa de Inteiro para Longo, mas acho que esse é um beco sem saída.indexOf
escrito duas vezes.Eu sei que já existe uma solução Java 8 muito, muito melhor , mas isso leva
char[][]
como entrada a qual eu acho que é mais fácil trabalhar nesse caso do que String.fonte
Map
mas umint[]
(talvez inicializado paranew int[99]
?). Não é necessário um espaço depoisString[] l
:String[]l
funciona da mesma forma e é mais curto. Use emprintln(l.length-i-1)
vez deprintln(l.length-i-1+",")
. Não inicializarj
: basta escrever:,j;
. Se você usar umint[]
como sugerido anteriormente, declare assim:int m[]=new int[99],i=0,j;
e remova a declaração dofor-loop
.import java.util.*;s->{Map m=new TreeMap();String[]a=s.split("\n");int l=a.length-1,j=-1,i=j;for(;++i<l;)for(s=a[i];(j=s.indexOf("_",j+1))>=0;m.put(j,i));for(Object o:m.values())System.out.println(l-(int)o);}
. Não é necessário<Integer,Integer>
o mapa quando você pode converterint
;a.length-1
é usado duas vezes, para que você possa usar uma variável; colocando tudo dentro de loops, você pode se livrar de todos os colchetes. Bem-vindo ao PPCG! :)MATL , 10 bytes
A entrada é uma matriz de caracteres preenchida.
Experimente online!
fonte
Mathematica,
484739 bytesExperimente online!
Function
que espera uma matriz retangular de caracteres. TomaMost
da matriz (exceto a última linha),Reverse
s, depois pega oTranspose
*, depois encontra todos osPosition
s nos quais o_
caractere aparece. As alturas relevantes são osLast
elementos de cadaPosition
.*
é o3
caractere de uso privado de bytesU+F3C7
que representa\[Transpose]
no Mathematica. Observe que isso não funciona em matemática ; portanto, o link TIO usa apenasTranspose
.fonte
SOGL V0.12 , 9 bytes
Experimente aqui!
Recebe entrada como uma matriz de matrizes de strings (caracteres).
Explicação:
fonte
JavaScript (ES6),
10810488 bytesGuardado 16 bytes graças a @JustinMariner
Entrada tomada como uma matriz de strings
fonte
Array.map
, isso é um truque legal.exec
e salvar alguns bytes.exec
corresponder à primeira. Na verdade, ele trava o editor de trechos de trocas de pilha se você incorporar a regex. A menos que eu esteja perdendo alguma coisa?CJam,
1514 bytes1 byte salvo graças a @BusinessCat
Este é um bloco que pega uma matriz de seqüências de caracteres na pilha e gera uma matriz.
Explicação:
fonte
Pip ,
1817 bytes15 bytes de código, +2 para
-rp
sinalizadores.Recebe entrada de stdin. Experimente online!
Explicação
fonte
Pitão ,
191514 bytesTeste online! A entrada é uma lista de linhas.
Explicações
fonte
Oitava, 31 bytes
Toma uma matriz 2D de caracteres como entrada.
Verifique todos os casos de teste!
fonte
Perl 6 , 65 bytes
Experimente online!
m:exhaustive/^^(\N+)_([\N*\n]+:)/
procura na string de entrada todos os sublinhados e retorna um objeto de correspondência para cada um, onde os primeiros parênteses de captura contêm a parte anterior da linha na qual o sublinhado é encontrado e os segundos parênteses de captura contêm o restante inteiro da string. O restante da string deve conter pelo menos uma nova linha, para não contarmos os sublinhados no nível do solo. A:exhaustive
bandeira permite que essas correspondências se sobreponham..sort(*[0].chars)
classifica esses objetos de correspondência pelo número de caracteres na parte da linha que precede cada sublinhado. Isso os ordena da esquerda para a direita..map(+*[1].comb("\n"))
mapeia cada objeto de correspondência para o número de caracteres de nova linha na parte da sequência de entrada que segue cada sublinhado - ou seja, a altura. O\n
é um caractere de nova linha real, economizando um byte.fonte
PHP, 119 bytes
Vamos quebrar isso! Nossa entrada aqui é uma matriz 2D de caracteres.
fonte
Recebe uma sequência multilinha. O crédito para a instalação (cabeçalho e rodapé) vai para @GarethPW
Python 2 , 29 bytes
Experimente online!
Isso simplesmente dividirá a matriz por nova linha e retornará o comprimento-1.
fonte