Veja o Buraco 1 se estiver confuso.
O que toda criança faz depois de coletar baldes de doces no Halloween?
Classifique-o por tipo e tamanho, é claro 1 !
O desafio
Dada uma sacola de balas despejada de formas e tamanhos variados, classifique a bala da esquerda para a direita com base em:
- Primeiro: a quantidade de doces (então 5 de um serão mais do que 4 do outro)
- Segundo (se houver empate após o primeiro): Se a quantidade for a mesma, o doce com mais área interna (com base no número de caracteres) terá uma classificação mais alta.
Se após o segundo tipo ainda houver um empate, você poderá optar por ser o primeiro.
Entrada
Você receberá o doce através de stdin; espalhados. Veja exemplos abaixo.
Resultado
Envie os doces encomendados na ordem correta. Note, doces deve sempre ser colocado em muito colunas arrumadas para apaziguar o seu peixe OCD 2 . O doce do mesmo tipo deve ser colocado diretamente um debaixo do outro. Veja exemplos abaixo.
O que você quer dizer com "área interior"?
A área interna de um pedaço de doce é medida pelo total de caracteres que compõem o doce como um todo.
Qualquer espaço em branco dentro de uma "borda" é considerado parte da área do doce.
Uma borda é qualquer loop de caracteres conectado, cada caractere na diagonal ou próximo ao seu vizinho.
Por exemplo,
+--------+
| |
| |
| |
| |
+--------+
tem mais área do que
XXXXXXXX
XXXXXXXX
XXXXXXXX
XXXXXXXX
apesar de ter menos caracteres no geral.
Exemplos
entrada:
_ \| |/ _
_ lllllll -*------------*- -\ /- lllllll
lllllll lllllllll | /\ /\ / | +|\ooooo/|+ lllllllll
lllllllll llll+llll | / \/ \/ | ||o o|| llll+llll
llll+llll lllllllll -*------------*- ||o o|| lllllllll
lllllllll lllllll /| |\ +|/ooooo\|+ lllllll
lllllll | -/ \- |
| | _ |
| -\ /- | lllllll |
| +|\ooooo/|+ | lllllllll |
| ||o o|| | llll+llll |
| ||o o|| + lllllllll rrr--rrr +
+ +|/ooooo\|+ lllllll rr||rr
-/ \- | | || |
| | || |
| | || |
| | || |
| \| |/ | || |
+ -*------------*- | || |
| /\ /\ / | | || |
-\ /- | / \/ \/ | | || |
+|\ooooo/|+ -*------------*- rr||rr
||o o|| /| |\ rrr--rrr
||o o||
+|/ooooo\|+
-/ \-
Se tornaria
_ \| |/ -\ /- rrr--rrr
lllllll -*------------*- +|\ooooo/|+ rr||rr
lllllllll | /\ /\ / | ||o o|| | || |
llll+llll | / \/ \/ | ||o o|| | || |
lllllllll -*------------*- +|/ooooo\|+ | || |
lllllll /| |\ -/ \- | || |
| | || |
| \| |/ -\ /- | || |
| -*------------*- +|\ooooo/|+ | || |
| | /\ /\ / | ||o o|| | || |
| | / \/ \/ | ||o o|| rr||rr
+ -*------------*- +|/ooooo\|+ rrr--rrr
/| |\ -/ \-
_
lllllll \| |/ -\ /-
lllllllll -*------------*- +|\ooooo/|+
llll+llll | /\ /\ / | ||o o||
lllllllll | / \/ \/ | ||o o||
lllllll -*------------*- +|/ooooo\|+
| /| |\ -/ \-
|
|
|
|
+
_
lllllll
lllllllll
llll+llll
lllllllll
lllllll
|
|
|
|
|
+
_
lllllll
lllllllll
llll+llll
lllllllll
lllllll
|
|
|
|
|
+
Um segundo exemplo:
qq \/
qq qq qq +-----+
qq qq qq + |
jjjjjjjj qq qq | |
jjjjjj \/ qq qq | |
jjjj +-----+ <---notice that the left side is not connected qq +-------+
jj jj + | <--> <-->
j j | |
jj <> jj | | <--> qq jjjjjjjj
jj jj +-------+ qq jjjjjj
jjjj qq qq jjjj
qq qq jj jj
j j
+---------------------------------------------------------+ jj <> jj
ooooo +---------------------------------------------------------+ jj jj
o yyyyyy jjjj
o ww - notice diagonal border, allowed
o ww jjjjjjjj
o yyyyyy ooooo ooooo jjjjjj
ooooo o yyyyyy o yyyyyy jjjj
o ww o ww jj jj
o ww o ww j j
o yyyyyy o yyyyyy jj <> jj
ooooo ooooo jj jj
jjjj
Solução:
qq ooooo jjjjjjjj <--> \/ +---------------------------------------------------------+
qq o yyyyyy jjjjjj +-----+ +---------------------------------------------------------+
o ww jjjj <--> + |
qq o ww jj jj | |
qq o yyyyyy j j <--> | |
ooooo jj <> jj +-------+
qq jj jj
qq ooooo jjjj \/
o yyyyyy +-----+
qq o ww jjjjjjjj + |
qq o ww jjjjjj | |
o yyyyyy jjjj | |
qq ooooo jj jj +-------+
qq j j
ooooo jj <> jj
qq o yyyyyy jj jj
qq o ww jjjj
o ww
qq o yyyyyy jjjjjjjj
qq ooooo jjjjjj
jjjj
qq jj jj
qq j j
jj <> jj
qq jj jj
qq jjjj
Observe que as colunas têm um caractere de espaçamento entre elas e estão alinhadas horizontalmente na parte superior. Observe também que cada doce está em uma coluna exata, cada doce com 1 caractere de espaçamento entre eles.
Pontuação
Isso é código-golfe, e o programa mais curto (em bytes) vence.
1 O que mais você faria? Obviamente, você deseja exibir sua incrível força e poder na quantidade de doces que coletou, certo?
2 Eu sei o que você está pensando! Um peixe tem que olhar através de uma tigela curva para o seu doce; portanto, ele estaria distorcido de qualquer maneira! Bem, meus peixes viviam (antes de morrer) em um aquário retangular .
Respostas:
Ruby, 928 caracteres
Uau, este foi divertido!
Você pode fornecer a entrada no STDIN ou pode passar um arquivo de entrada como um argumento (como
ruby organize.rb candy.txt
) e ele tratará o arquivo como STDIN automaticamente.Todos os pontos e vírgulas podem ser substituídos por novas linhas; Apenas colei algumas linhas para reduzir o espaço vertical.
Ungolfed (2367 caracteres):
fonte