Los caballitos de mar, por supuesto, necesitan zapatos. Sin embargo, un caballito de mar, que tiene una sola cola, necesita solo un zapato. Desafortunadamente, los zapatos solo vienen en pares. El dinero es escaso para el gobierno del caballito de mar, por lo que necesitan comprar la menor cantidad posible de pares. Cada caballito de mar tiene una talla de zapato x donde x es un número entero positivo. Sin embargo, un caballito de mar puede usar un zapato de tamaño x - 1 o x + 1 si es necesario.
Su tarea es producir el número mínimo de pares que el gobierno de caballitos de mar debe comprar para poner zapatos en todos sus caballitos de mar.
Puede tomar la entrada como quiera, lagunas estándar, etc.
Como se trata de código de golf , gana el código más corto en bytes.
Casos de prueba
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
Respuestas:
05AB1E , 13 bytes
Utiliza el enfoque OP descrito en los comentarios.
Pruébalo en línea!
Explicación
fuente
Casco ,
1514 bytesUtiliza el algoritmo codicioso: ordenar y emparejar desde la izquierda. Pruébalo en línea!
Gracias a Leo por guardar 1 byte.
Explicación
Esta es la primera respuesta de Husk que utiliza
Γ
, la función para el patrón que coincide con una lista. En este caso de uso, sia
es un valor yg
es una función,Γag
corresponde a la funciónf
definida por el fragmento de HaskellDefino el caso base como
a = 0
ydonde se
line0
refiere a toda la línea. En el código Husk,x
yxs
son argumentos implícitos para la función lambda, yline0
es₀
. La lista se ordena nuevamente en cada llamada recursiva, pero eso no importa en un desafío de golf.fuente
Python 3 ,
696660 bytes9 bytes gracias a xnor.
Pruébalo en línea!
fuente
a.sort()
.lambda
:f=lambda a:a[1:a.sort()]and-~f(a[1+(a[1]-a[0]<3):])or len(a)
or[]<a
guardar 3 bytesJalea ,
2018 bytesPruébalo en línea!
Tenedor de mi respuesta Python .
fuente
IḢ<3+2⁸ṫß‘µLḊ?
(básicamente no veo ninguna razón para hacerloṢ
antesL
, yḊ
regresaría[]
si la lista es de longitud 1 o 0, y luego puedo eliminar unµ
deLµḊ?
)Ṣ
a mi golf si lo entiendo correctamente.Python 2 , 49 bytes
Pruébalo en línea!
Basado en la solución recursiva de Leaky Nun .
Python 2 , 59 bytes
Pruébalo en línea!
Itera a través de los tamaños
x
en orden ordenado. Recuerda el umbral superiorp
para el tamaño actual al emparejado con el anterior. Si es así (x>p
), restablezca el umbral a0
para que sea imposible emparejar el siguiente. De lo contrario, incremente el recuento de salidac
y establezca el siguiente umbralp
enx+2
.El nuevo umbral
p=(x>p)*(x+2)
es una expresión hinchada. Me gustaría encontrar una manera de acortarlo.fuente
C #,
111108137102 bytesEsto nunca ganará, pero de todos modos quería resolver el ejercicio:
Gracias al comentario de @grabthefish, pude picar algunos bytes más:
Siguiendo las reglas especiales de PC&G C #:
Usando una función lambda:
fuente
Perl, 113 bytes
Toma una lista de argumentos de la línea de comando (como
@ARGV
), imprime enSTDOUT
por defecto.En Seahorseville ...
Un barrio es una secuencia de tamaños de zapatos vecinos. Cuando se clasifican, cada caballito de mar tiene vecinos inmediatos que pueden compartir el mismo tamaño de zapato. Puede haber varios vecinos en el vecindario y ningún vecino puede diferir en valor en más de dos:
por ejemplo,
3 3 4 5 5 6
es un barrio único, como son2 4 6 6
, y1 2 3 5 7 8 10 12
por ejemplo,
1 1 1 4 5 6
contiene dos barrios:1 1 1
y4 5 6
.Bases del algoritmo.
Hay dos tipos de vecindario:
De tamaño par
Para estos, los
n/2
pares siempre son suficientes:por ejemplo,
3 3 4 5 5 6
requiere tres pares para3 3
,4 5
y5 6
De tamaño impar
Para estos, los
ceil(n/2)
pares siempre son suficientes:por ejemplo,
12 13 13 14 15
requiere tres pares para12 13
,13 14
y15
solo.Código no protegido para probar el algoritmo
Resultados de muestra
(Barrios encerrados en
[ ]
)fuente
Mathematica, 67 bytes
Prueba en el sandbox de Wolfram .
fuente
UpTo
Perl, 103 bytes
Toma una lista de argumentos de la línea de comando (as
@ARGV
), imprime enSTDOUT
por defecto.Este es un enfoque alternativo, basado en la siguiente relación:
(Vea esta respuesta para ver cómo se define el vecindario )
fuente
Javascript, 67 bytes
Fragmento de código de ejemplo:
fuente