Jardín de programadores
Al ser un desarrollador de software profesional, no puede arriesgarse a exponerse a la dura luz no artificial del sol, pero también tiene un punto débil para las flores y desea mantener su jardín en buen estado durante todo el año.
Con este fin, se contrata a un jardinero cada mes para ordenar el cantero al pie de su casa. Sin embargo, debe asegurarse de que el jardinero esté haciendo su trabajo correctamente y hacer un pago adecuado para el trabajador. Naturalmente, una solución de software es la mejor.
Entrada
Su programa recibirá información que describa el macizo de flores tal como parece actual y los detalles de los elementos que deben eliminarse. El programa debe dar salida al jardín sin el desorden e imprimir un desglose del pago de los jardineros. La entrada puede ser de STDIN o como un argumento de línea de comando único.
La primera línea de entrada es del formato.
width height unwanted_item_type_count
donde width
es el ancho del macizo de flores, height
es la altura del macizo de flores (ambos en caracteres ASCII) y unwanted_item_type_count
le indica cuántas líneas seguirán con una descripción de un tipo de elemento que se eliminará del jardín.
Cada línea para cada tipo de elemento no deseado tiene el formato
width height string_representation name fee_per_item
donde width
es el ancho del elemento, height
es la altura del elemento (ambos en caracteres ASCII), string_representation
es la representación de cadena del elemento sin saltos de línea, name
es un identificador para el tipo de elemento (los espacios se reemplazarán con guiones bajos) y fee_per_item
es cuánto se debe pagar al jardinero por la eliminación de cada tipo de artículo.
Por ejemplo
3 2 .R.\|/ rouge_flower 3
Representa un tipo de nombre de elemento rouge_flower
, que cuesta 3 eliminar, y se ve así:
.R.
\|/
Los elementos no contendrán espacios, y ningún elemento puede tener un borde que consista completamente en puntos, y la representación de la cadena también tendrá el tamaño exacto descrito. Por lo tanto, todos los siguientes son entradas no válidas:
3 1 ( ) space 0
1 1 . dot 0
2 1 .! bang 0
3 2 .@.\|/. plant 0
Sin embargo, tenga en cuenta que 0 es una tarifa válida (las tarifas siempre serán enteros mayores que -1).
Tenga en cuenta también que el macizo de flores está compuesto principalmente por puntos ( .
) en lugar de espacios, y puede usar espacios en blanco de forma segura como delimitación para todas las entradas. El macizo de flores siempre está limitado por puntos en sí.
Después de que se enumeran los tipos de elementos no deseados, viene la representación ASCII del macizo de flores de ancho y alto dados.
Salida
La salida debe ser STDOUT, o una alternativa adecuada si su idioma no lo admite.
La salida comienza con una impresión del macizo de flores, pero con todos los elementos no deseados eliminados (reemplazados por puntos), para que pueda ver cómo debería aparecer y verificar que el jardinero haya hecho su trabajo. Cada elemento en el macizo de flores estará rodeado por un rectángulo de puntos y será un elemento contiguo (es decir, no habrá puntos de separación dentro del elemento). Por ejemplo
.....
.#.#.
.....
muestra 2 artículos separados
.....
.\@/.
.....
muestra 1 artículo
......
.#....
....|.
....|.
.o--/.
......
es inválido, ya que si bien la piedra (#) puede coincidir, la serpiente (¿no se podía decir que era una serpiente?) no puede porque la piedra interfiere con el entorno requerido de puntos.
...
\@.
...
Esto tampoco es válido, ya que el caracol está en el borde del macizo de flores, y el borde siempre debe estar delimitado por puntos en una entrada válida.
Después de esto, debe haber una lista de cada tipo de artículo no deseado, dando el recuento, el costo por artículo y los costos de todos los artículos (recuento * costo por artículo), en el formato:
<count> <name> at <cost_per_item> costs <cost>
Después de esto, debería haber una sola línea que arroje el costo total (la suma de los costos de los artículos no deseados):
total cost <total_cost>
Ejemplo
Para esta entrada dada
25 18 3
4 2 .\/.\\// weeds 5
2 1 \@ snails 2
1 1 # stones 1
.........................
.\@/.................\@..
............\/...........
......O....\\//..^|^.....
.#...\|/.........^|^.....
..................|......
.................\|/.....
..\@.....\/...........#..
........\\//....#........
....*....................
...\|/......\/......\@/..
...........\\//..........
..................*......
.......\@/.......\|/.....
...O.....................
..\|/.......*............
.......#...\|/....\@.....
.........................
El programa debe producir esta salida.
.........................
.\@/.....................
.........................
......O..........^|^.....
.....\|/.........^|^.....
..................|......
.................\|/.....
.........................
.........................
....*....................
...\|/..............\@/..
.........................
..................*......
.......\@/.......\|/.....
...O.....................
..\|/.......*............
...........\|/...........
.........................
3 weeds at 5 costs 15
3 snails at 2 costs 6
4 stones at 1 costs 4
total cost 25
La salida debe ser terminada por un salto de línea.
Este es el código de golf, que gane el código más corto.
Caso de prueba adicional
Editar: esto solía contener Unicode, que no está permitido en el macizo de flores, demasiado moderno. Esto ha sido rectificado, perdón por eso.
25 15 5
5 3 ..@..\\|//.\|/. overgrown_plants 3
5 3 @-o....|...\|/. semi-articulated_plant 4
3 2 .|.\@/ mutant_plants 5
1 1 $ dollars 0
1 1 # stones 1
.........................
........@................
....$..\|/...........@...
............|.......\|/..
...#.......\@/...........
.........................
.........................
......@.......@......@...
.....\|/....\\|//...\|/..
.............\|/.........
.#....................#..
.........$.......|.......
...\/.......\/..\@/..\/..
..\\//.....\\//.....\\//.
.........................
Rendimiento esperado:
.........................
........@................
.......\|/...........@...
....................\|/..
.........................
.........................
.........................
......@..............@...
.....\|/............\|/..
.........................
.........................
.........................
...\/.......\/.......\/..
..\\//.....\\//.....\\//.
.........................
1 overgrown_plants at 3 costs 3
0 semi-articulated_plants at 4 costs 0
2 mutant_plants at 5 costs 10
2 dollars at 0 costs 0
3 stones at 1 costs 3
total cost 16
\@
y@/
por ejemplo ... ¿O están destinados a apuntar eternamente al oeste?Respuestas:
Perl - 636
Definitivamente hay algo más de golf que se puede hacer. Y probablemente mejores formas de hacerlo también.
635 caracteres + 1 por
-C
bandera para manejar los euros.Si tiene la entrada almacenada
input.txt
, puede ejecutarla con:Aquí está la versión analizada. Lo revisé y agregué algunos comentarios para ayudar a explicar las cosas. Tal vez haga que los nombres de las variables sean más legibles en algún momento. Puede haber algunos casos extremos con los que esto no funciona, pero al menos funciona con los ejemplos.
¡No dude en sugerir mejoras!
fuente
-C
bandera antes de esto. Lo dejaré allí para que sea compatible de todos modos, ya que es solo una diferencia de 1 carácter.Python 3, 459 bytes
Asume que la entrada se dará como una lista de cadenas.
fuente
~H
truco; No puedo probar esto ahora, pero intentaré hacerlo más tarde hoy.ValueError: not enough values to unpack (expected 3, got 1)
, python 3.6.6); ¿Puede proporcionar un enlace TIO o alguna descripción sobre cómo ejecutarlo? Creo que podría estar doblando las reglas asumiendo que la entrada está en una sola línea, pero no estaba del todo claro en la pregunta, así que no me quejaré.