La gestión del inventario de Minecraft es difícil. Tienes 17 diamantes, pero necesitas 7 para crear una mesa de encantamiento, un pico y una espada. ¿Los recoges y haces clic derecho 7 veces? ¿O haces clic derecho una vez y haces clic derecho dos veces y tomas el 7 izquierdo? ¡Es muy confuso!
para aquellos de ustedes que ahora están confundidos, no se preocupen, lo explicaré todo en un segundo
Desafío
Dado el tamaño de una pila de artículos y la cantidad deseada, determine la menor cantidad de clics para obtener esa cantidad. Solo necesita manejar hasta 64 para ambas entradas y puede asumir que tiene ranuras de inventario infinitas. No puedes usar el truco de arrastrar para distribuir.
Definiciones
El inventario es una colección de máquinas tragamonedas donde puede almacenar artículos.
Una ranura es un espacio de almacenamiento en su inventario donde puede colocar hasta un tipo de artículo.
Una pila es una cantidad de elementos colocados en el mismo grupo. Para los propósitos de este desafío, una pila es simplemente un montón de artículos en el mismo lugar (ignore el tamaño de la pila)
El cursor es tu cosita puntiaguda. Ese cursor Puede tener elementos "en él"; en otros términos, si hizo clic en una ranura y recogió elementos, los elementos que recogió están "en el cursor" hasta que los suelte.
Especificaciones
Hay cuatro situaciones posibles. O tiene un elemento en el cursor o no, y o bien hizo clic con el botón izquierdo o derecho.
Si no tiene un elemento en el cursor y hace clic con el botón izquierdo en una ranura, recoge toda la pila.
Si no tiene un elemento en su cursor y hace clic derecho en una ranura, recoge la mitad de la pila, redondeada.
Si tiene un elemento en el cursor y hace clic con el botón izquierdo en una ranura, coloca todos los elementos en esa ranura. (Para todos los jugadores de Minecraft, no tendrás> 64 elementos para este desafío y todos son apilables en 64, y solo tienes un tipo, por lo que el intercambio de elementos no se aplica aquí)
Si tiene un elemento en el cursor y hace clic derecho en una ranura, coloca un elemento en esa ranura.
Entonces, comienza con todos los elementos proporcionados (primera entrada o segunda; puede elegir el orden) en una ranura, y desea terminar con la cantidad deseada (otra entrada) en su cursor.
Veamos un ejemplo. Digamos que comienza con 17 elementos y desea 7. Primero, haga clic derecho en la pila, lo que significa que ha recogido 9 y hay 8 en esa ranura. Luego, si vuelve a hacer clic derecho en la pila, vuelve a colocar un elemento en la ranura, dejándolo con 8 y la ranura con 9. Finalmente, vuelve a hacer clic derecho y tiene 7 y la ranura tiene 10. Por lo tanto, devolvería 3
(el número de clics).
Si logra hacer clic fuera de mi campo de golf, dígame y editaré el ejemplo: P
Casos de prueba
Estos se generan manualmente, así que dígame si hay algún error. Hago gestión de inventario haciendo clic derecho con jitter, así que no tengo experiencia con una gestión de inventario óptima: P
Given, Desired -> Output
17, 7 -> 3
64, 8 -> 5
63, 8 -> 5
10, 10 -> 1
10, 0 -> 0 # note this case
25, 17 -> 7
Explicaciones
Este desafío puede ser complicado para los jugadores que no son de Minecraft, no tengo idea. Aquí hay algunas explicaciones.
64, 8 -> 5
porque recoge 32 utilizando el botón derecho, colóquelo, recoja 16, colóquelo y luego levante 8.
63, 8 -> 5
por la misma razón.
25, 17 -> 7
porque recoges 13, lo colocas hacia abajo, recoges 6 del resto 12, colocas 2 nuevamente en la pila de restos y luego colocas el 4 en el cursor dentro del 13, y luego los recoges.
Reglas
- Se aplican lagunas estándar
- Puedes suponer que
0 <= desired <= given <= 64
- Puede tomar la entrada en cualquier orden y hacer E / S en cualquier formato razonable
0,[n]
, puede transición: (1) a partir de0,[a,b,...]
aa,[b,...]
,b,[a,...]
,ceil(a/2),[floor(a/2),b,...]
, oceil(b/2),[a,floor(b/2),...]
; o (2) a partir dex,[a,b,...]
(x>0
) parax-1,[a+1,b,...]
,x-1,[a,b+1,...]
,x-1,[a,b,...,1]
,0,[a+x,b,...]
,0,[a,b+x,...]
,0,[a,b,...,x]
. El desafío es, entonces, encontrar las transiciones mínimas posibles desde0,[g]
donde se da g hastat,L
dóndet
está el objetivo deseado y ¿L
hay alguna lista?Respuestas:
C ++ ,
498482457 bytesSi esta función solo se llama una vez, puede tener 455 bytes.
Descubrí que casi todos los compiladores de GCC en línea (incluido TIO) me prohíben omitir el tipo de función
f
. Sin embargo, el GCC en mi computadora lo permite, y no sé por qué.Este puede manejar entradas grandes si una ranura puede contener ese número de elementos (aunque necesita una matriz más grande y probablemente se quedará sin tiempo).
Sin golf:
fuente
Jalea , 74 bytes
Un programa completo con la primera entrada (tercer argumento) la pila actual y la segunda entrada (cuarto argumento) el cursor deseado.
Pruébalo en línea! Debido a la implementación, esto alcanza el tiempo de espera TIO de 60 segundos para el
25, 17
caso de prueba. Esto puede remediarse eliminando las redundancias que quedan para el golf utilizando este 84 byter (que filtra las pilas de tamaño cero y clasifica las que quedanḟ€Ṣ¥0¦€0
al final del enlace 6 y solo mantiene estados únicos en cada paso con el uso deQ$
Main enlace).¿Cómo?
El programa implementa la máquina de estado definida.
Crea el estado original y
[0, [argument 1]]
luego
pasa a todos los siguientes estados posibles repetidamente hasta encontrar uno que coincida
[argument 2, [...]]
.Nota: la entrada del programa se encuentra en el "Enlace principal", que es el más inferior (
Wṭ0WÇ€Ẏ$ÑпL’
)fuente