Versión más corta de Skyscrapers Challenge
Tarea
Dada una variedad de alturas de edificios y un número entero positivo k
, encuentre todas las permutaciones (sin duplicados) de las alturas de modo que se vean exactamente los k
edificios.
Cualquier edificio ocultará todos los edificios más cortos o de igual altura detrás de él.
Cualquier formato para entrada y salida es válido.
La matriz de entrada nunca estará vacía.
En caso de que no sea posible ver exactamente tantos edificios, envíe cualquier cosa que no pueda ser una respuesta pero no un error.
Ejemplos:
(La longitud de salida se muestra para salidas muy largas, pero su salida debe ser todas las permutaciones posibles)
input:[1,2,3,4,5],2
output: 50
input:[5,5,5,5,5,5,5,5],2
output: []
input:[1,2,2],2
output:[(1,2,2)]
Seeing from the left, exactly 2 buildings are visible.
input:[1,7,4],2
output:[(4, 7, 1), (1, 7, 4), (4, 1, 7)]
input:[1,2,3,4,5,6,7,8,9],4
output:67284
input:[34,55,11,22],1
output:[(55, 34, 11, 22), (55, 22, 34, 11), (55, 34, 22, 11), (55, 11, 34, 22), (55, 22, 11, 34), (55, 11, 22, 34)]
input:[3,4,1,2,3],2
output:31
Este es el código de golf, por lo que el código más corto gana
Opcional: si es posible, ¿puede agregar algo como if length is greater than 20: print length else print answer
? En el pie de página, no en el código.
fuente
[1,2,3,4,5],5 -> [(1,2,3,4,5)]
. Ninguno de los casos de prueba actuales garantiza que las respuestas puedan soportar mostrar todos los edificios (aunque no sé si alguno realmente tiene un problema con eso).Respuestas:
05AB1E ,
109 bytesPruébelo en línea o verifique (casi) todos los casos de prueba (se
[1,2,3,4,5,6,7,8,9],4
agota el tiempo de espera).El pie de página del TIO hace lo que OP pidió en la parte inferior:
Explicación:
fuente
if length is greater than 20: print length; else print answer;
es a̶ ̶b̶y̶t̶e̶ ̶l̶o̶n̶g̶e̶r̶ de igual longitud en comparación con el programa en sí. xDHaskell, 73 bytes
Pruébalo en línea!
fuente
Jalea ,
1210 bytesPruébalo en línea!
-2 bytes por @Erik the Outgolfer
Esta es una función diádica que toma las alturas del edificio y
k
en ese orden.fuente
ʋ
! (es bastante mayor queƇ
, en realidad: P)Pyth,
1816 bytesPruébalo aquí .
Tenga en cuenta que la versión en línea del intérprete Pyth arroja un error de memoria en el caso de prueba más grande.
fuente
Perl 6 ,
8163 bytes-18 bytes gracias a nwellnhof!
Pruébalo en línea!
Bloque de código anónimo que toma la entrada al curry, por ejemplo
f(n)(list)
..unique(:with(*eqv*))
Aunque eso es molestamente largo:(
Explicación:
fuente
;
eventualmente;)Japt , 11 bytes
Pruébalo en línea!
Para las salidas más largas, agregar
} l
al final generará la longitud en su lugar. El intérprete en línea agota el tiempo de espera para el[1,2,3,4,5,6,7,8,9],4
caso de prueba, independientemente de la salida de la longitud o la lista.Explicación:
fuente
Javascript (ES6),
108107 bytesToma entrada como
(k)(array)
. Imprime los resultados conalert()
.Pruébalo en línea!
Comentado
fuente
Python 2 ,
114113 bytesPruébalo en línea!
-1 byte, gracias a los ovs
Python 3 , 113 bytes
Pruébalo en línea!
fuente
J,
4338 bytes-5 bytes después de incorporar una optimización de la respuesta O5AB13 de Kevin
Pruébalo en línea!
sin golf
explicación
simplemente enumeramos todos los permisos posibles
i.@!@#@] A. ]
, tomamos elementos únicos de los mismos~.
y luego los filtramos por el número de edificios visibles, que deben ser iguales a la entrada izquierda.La lógica clave está en el verbo entre paréntesis que calcula el número de edificios visibles:
Aquí usamos un escaneo máximo
>./\
para mantener una cuenta del edificio más alto visto hasta ahora. Luego solo tomamos los elementos únicos del escaneo máximo, y esa es la cantidad de edificios visibles.fuente