El mes pasado tomé prestados muchos libros de la biblioteca. Todos eran buenos libros, llenos de emociones y giros en la trama. Desafortunadamente, en algunos momentos me enojé mucho / triste / decepcioné, así que arranqué algunas páginas.
Ahora la biblioteca quiere saber cuántas páginas he arrancado para cada libro.
Su objetivo es escribir un programa, que toma una lista ordenada y delimitada por comas de números como entrada e imprime el recuento de páginas mínimo y máximo posible que podría haber arrancado. Cada línea representa un libro, cada número representa una página faltante del libro.
Entrada de ejemplo:
7,8,100,101,222,223
2,3,88,89,90,103,177
2,3,6,7,10,11
1
1,2
Salida de ejemplo:
4/5
5/6
3/6
1/1
1/2
4/5
significa que podría haber arrancado 4 o 5 páginas, dependiendo de qué lado comience la numeración de páginas del libro. Uno podría haber arrancado la página 6/7, la página 8/9, la página 100/101 y la página 222/223 (4 páginas). Alternativamente, uno podría haber arrancado la página 7/8, la página 99/100, la página 101/102, la página 221/222 y la página 223/224 (5 páginas).
Recuerde que una página de libro siempre tiene un anverso y un reverso. Además, la numeración de las páginas difiere de un libro a otro. Algunos libros tienen números de página pares en la página izquierda; algunos en la página correcta. Todos los libros se leen de izquierda a derecha.
El código más corto en bytes gana. Se formato de E / S estricta no es necesario. Sus programas deben poder tomar uno o más libros como entrada. Que te diviertas.
4/5
y5/4
)min/max
o todosmax/min
. (¡Aunque, personalmente, preferiría que no sea parte de la especificación!)programs must be able to take one or more books as input
gobernar? La mayoría (si no todos) simplemente envolverán el código para verificar un solo libro en un bucle o algo así. En mi humilde opinión, solo agrega una sobrecarga a la respuesta con poco o ningún beneficio para el desafío. Estas preguntas ya tienen muchas respuestas, por lo que es mejor mantener esto como está, pero tenga esto en cuenta para sus desafíos futuros.1,3,5,7,9,11,13,15,17,18
- en beneficio de los lenguajes cuyosort
método incorporado clasifica lexicográficamente por defecto (suponiendo que el requisito de salida ordenada consistentemente se agrega a la especificación).Respuestas:
05AB1E , 13 bytes
Pruébalo en línea!
Gracias a Emigna por el aviso de cambios de especificaciones.
Explicación
fuente
Python 2 ,
72566867 bytesPruébalo en línea!
fuente
JavaScript,
104939285807974 bytesSería 57 bytes si no fuera por el requisito innecesario (en mi opinión) de que cada par de números en la salida se clasifique consistentemente, o 47 bytes si solo necesitáramos tomar un libro como entrada.
La entrada y la salida son ambas una matriz de matrices.
Casos de prueba
Los casos de prueba se dividen en libros individuales para una mejor legibilidad con el último caso (que incluye el
[1,2]
caso límite) que sirve para ilustrar que esta solución admite varios libros en la entrada.Historia
Mostrar fragmento de código
fuente
[1,3,5,7,9,11,13,15,17,18]
.[0,.5]
lugar de usarg
cuando vi tu comentario. ¡No sé por qué tengo un bloqueo mental con operadores bit a bit! Tenía la esperanza de que la clasificación de salida no se convertiría en un requisito y que nadie se daría cuenta de mi rupturasort()
mientras tanto;) Necesito hacer un trabajo, por lo que volveré en un tiempo para actualizar.y/2
? ¿Cuál es el razonamiento de dividir el número de página a la mitad para este algoritmo?Retina 0.8.2 , 60 bytes
Pruébalo en línea! Explicación:
Convierta los números de página a unario.
Duplicar la lista, interponiendo a
/
.Incremente los números de página en una copia de la lista.
Cuente el número de páginas, pero los números pares e impares consecutivos solo cuentan como una página.
Ordenar los recuentos en orden.
Convierta los recuentos a decimales.
fuente
,(?=.*/)¶1,
ser algo así,.*/¶1$&
?Haskell , 62 bytes
Pruébalo en línea!
fuente
Your goal is to write a program, which takes a sorted, comma-delimmited list of numbers as input
)Java (OpenJDK 9) , 163 bytes
Pruébalo en línea!
Explicaciones
Nota: dado que no hay requisitos al respecto, no se ordenan los números mínimo y máximo de páginas.
fuente
size
conadd
en Java que puede que ahorrar unos pocos bytes? por ejemplo,s.add(p/2).size
.APL (Dyalog Unicode) , 37 bytes
Pruébalo en línea!
Esto se puede hacer por menos de la mitad del conteo de bytes si el orden de salida de las páginas no importa:
¿Cómo?
fuente
Perl 5 , 95 + 1 (
-a
) = 96 bytesPruébalo en línea!
fuente
Wolfram Language (Mathematica) , 37 bytes
¡Gracias @MartinEnder por 8 bytes!
Pruébalo en línea!
Explicación
En:
{3, 4, 5}
Tomar (entrada) y (entrada + 1).
{{3, 4, 5}, {4, 5, 6}}
Para cada número de arriba, tome el número par más grande menos.
{{2, 4, 4}, {4, 4, 6}}
Para cada lista de arriba, divida la lista por los mismos elementos.
{{{2}, {4, 4}}, {{4, 4}, {6}}}
y toma la longitud de cada uno:
{2, 2}
Ordenar la salida.
fuente
SplitBy
:Length@Split@⌊#/2⌋&/@{#,#+1}&
funciona. Pero entonces es aún más corto para hacer el suelo antes de que el mapa:Length@*Split/@⌊{#,#+1}/2⌋&
. Y si lo desea, puede obtener el mismo número de bytes sin Unicode:Length@*Split/@{#,#+1}~Floor~2&
Limpio ,
222210204196 bytesPruébalo en línea!
Los requisitos del programa completo asesinan absolutamente la capacidad de Clean de competir.
Para aquellos que han estado prestando atención a mis respuestas en Clean, notarán
import qualified
, que es un truco feo para moverse usando módulos que no deberían usarse juntos, juntos, que solo es necesario aquí debido a otro truco feo para hacer conGenLib
dependiendo deData.Maybe
en lugar deStdMaybe
, que es el resultado de otro truco feo en las bibliotecas traducidos de HaskellData
para obtener funcionalidad antes propias bibliotecas de limpias son igualmente completa.Toma entrada a través de argumentos de línea de comandos.
fuente
Perl, 40 bytes
Inluye
+1
paraa
La salida no está ordenada.
Asume números de página positivos (especialmente sin página
0
). Asume que las páginas faltantes solo se mencionan una vez. No le importa si la entrada está ordenada o no.Procesar solo un libro por ejecución ahorra
3
bytes para37
:fuente