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, siaes un valor yges una función,Γagcorresponde a la funciónfdefinida por el fragmento de HaskellDefino el caso base como
a = 0ydonde se
line0refiere a toda la línea. En el código Husk,xyxsson argumentos implícitos para la función lambda, yline0es₀. 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[]<aguardar 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
xen orden ordenado. Recuerda el umbral superiorppara el tamaño actual al emparejado con el anterior. Si es así (x>p), restablezca el umbral a0para que sea imposible emparejar el siguiente. De lo contrario, incremente el recuento de salidacy establezca el siguiente umbralpenx+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 enSTDOUTpor 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 6es un barrio único, como son2 4 6 6, y1 2 3 5 7 8 10 12por ejemplo,
1 1 1 4 5 6contiene dos barrios:1 1 1y4 5 6.Bases del algoritmo.
Hay dos tipos de vecindario:
De tamaño par
Para estos, los
n/2pares siempre son suficientes:por ejemplo,
3 3 4 5 5 6requiere tres pares para3 3,4 5y5 6De tamaño impar
Para estos, los
ceil(n/2)pares siempre son suficientes:por ejemplo,
12 13 13 14 15requiere tres pares para12 13,13 14y15solo.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
UpToPerl, 103 bytes
Toma una lista de argumentos de la línea de comando (as
@ARGV), imprime enSTDOUTpor 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