Os cavalos-marinhos, é claro, precisam de sapatos. No entanto, um cavalo-marinho, com apenas uma cauda, precisa de apenas um sapato. Infelizmente, os sapatos só vêm em pares. O dinheiro é escasso para o governo dos cavalos-marinhos, então eles precisam comprar o menor número possível de pares. Cada cavalo-marinho tem um tamanho de sapato x, onde x é um número inteiro positivo. No entanto, um cavalo-marinho pode usar um sapato do tamanho x - 1 ou x + 1, se necessário.
Sua tarefa é produzir o número mínimo de pares que o governo dos cavalos-marinhos deve comprar para colocar sapatos em todos os seus cavalos-marinhos.
Você pode receber as informações como quiser, brechas padrão etc.
Como esse é o código-golfe , o código mais curto em bytes vence.
Casos de teste
2 4 6 6 8 14 -> 4
2 1 3 1 1 -> 3
4 1 4 9 1 8 9 1 8 4 -> 6
1 2 3 5 7 8 10 12 -> 4
Respostas:
05AB1E , 13 bytes
Usa a abordagem OP descrita nos comentários.
Experimente online!
Explicação
fonte
Casca ,
1514 bytesUsa o algoritmo ganancioso: classifique e emparelhe da esquerda. Experimente online!
Agradecemos a Leo por economizar 1 byte.
Explicação
Esta é a primeira resposta Husk que usa
Γ
, a função para o padrão que corresponde a uma lista. Nesse caso de uso, sea
for um valor eg
uma função,Γag
corresponderá à funçãof
definida pelo snippet HaskellEu defino o caso base como
a = 0
eonde
line0
se refere a toda a linha. No código Husk,x
exs
são argumentos implícitos para a função lambda, eline0
is₀
. A lista é classificada novamente em cada chamada recursiva, mas isso não importa em um desafio de golfe.fonte
Python 3 ,
696660 bytes9 bytes graças ao xnor.
Experimente online!
fonte
a.sort()
.lambda
:f=lambda a:a[1:a.sort()]and-~f(a[1+(a[1]-a[0]<3):])or len(a)
or[]<a
salvar 3 bytesGeléia ,
2018 bytesExperimente online!
Garfo da minha resposta Python .
fonte
IḢ<3+2⁸ṫß‘µLḊ?
(basicamente, eu não vejo nenhuma razão para fazerṢ
antesL
, eḊ
voltaria[]
se a lista se de comprimento 1 ou 0, e então eu posso remover umµ
deLµḊ?
)Ṣ
ao meu golfe, se bem entendi.Python 2 , 49 bytes
Experimente online!
Baseado na solução recursiva de Leaky Nun .
Python 2 , 59 bytes
Experimente online!
Repete os tamanhos
x
na ordem classificada. Lembra o limite superiorp
do tamanho atual ao emparelhado com o anterior. Nesse caso (x>p
), redefina o limite para0
impossibilitar o emparelhamento do próximo. Caso contrário, aumente a contagem de saídac
e defina o próximo limitep
parax+2
.O novo limite
p=(x>p)*(x+2)
é uma expressão inchada. Eu gostaria de encontrar uma maneira de reduzi-lo.fonte
C #,
111108137102 bytesIsso nunca vai ganhar, mas eu queria resolver o exercício de qualquer maneira:
Graças ao comentário de @grabthefish, eu pude morder mais alguns bytes:
Seguindo as regras especiais de C # do PC&G:
Usando uma função lambda:
fonte
Perl, 113 bytes
Leva a lista de argumentos da linha de comando (as
@ARGV
), imprime comoSTDOUT
padrão.Em Seahorseville ...
Um bairro é uma sequência de tamanhos de sapatos vizinhos. Quando classificados, cada cavalo-marinho tem vizinhos imediatos que podem compartilhar o mesmo tamanho de sapato. Pode haver vários vizinhos no bairro e nenhum vizinho pode diferir em valor em mais de dois:
por exemplo,
3 3 4 5 5 6
é um bairro único, como são2 4 6 6
, e1 2 3 5 7 8 10 12
por exemplo,
1 1 1 4 5 6
contém dois bairros:1 1 1
e4 5 6
.Base do algoritmo
Existem dois tipos de vizinhança:
Tamanho uniforme
Para estes,
n/2
pares é sempre suficiente:por exemplo,
3 3 4 5 5 6
requer três pares para3 3
,4 5
e5 6
Tamanho ímpar
Para estes,
ceil(n/2)
pares é sempre suficiente:por exemplo,
12 13 13 14 15
exige três pares de12 13
,13 14
e15
por si só.Código não jogado para testar o algoritmo
Resultados da amostra
(Bairros fechados
[ ]
)fonte
Mathematica, 67 bytes
Experimente na caixa de areia Wolfram .
fonte
UpTo
Perl, 103 bytes
Leva a lista de argumentos da linha de comando (as
@ARGV
), imprime comoSTDOUT
padrão.Essa é uma abordagem alternativa, com base no seguinte relacionamento:
(Vejo esta resposta para saber como bairro é definido)
fonte
Javascript, 67 bytes
Exemplo de trecho de código:
fonte