Dada la entrada de un "hotel" en el arte ASCII con una habitación individual marcada, envíe el número de la habitación de acuerdo con ciertas reglas.
Aquí hay un ejemplo de un hotel ASCII:
##
##
##### ##
##### ###### ##
##### ###### ##
##### ###### ##
Aquí hay algunas cosas más sobre los hoteles ASCII:
Cada "edificio" está representado por un rectángulo de
#
caracteres, donde cada uno#
representa una "habitación".El hotel anterior consta de tres edificios. Cada edificio está separado por dos columnas de espacios, y el "piso" más bajo siempre estará en la última línea.
Cada edificio siempre tendrá entre 1 y 9 "pisos" (filas) y entre 1 y 9 "habitaciones" en cada piso. También siempre habrá 1-9 edificios.
Las habitaciones están numeradas de la siguiente manera:
[building #][floor #][room on floor #]
. Por ejemplo, marquemos algunas habitaciones en el dibujo anterior:## ## ##### ## ##### ####$# ## ##%## ###### ## ##### ###### #@
La habitación marcada con la
%
es la habitación 123 (edificio 1, planta 2, tercera habitación en el piso). De manera similar, la habitación marcada con la$
es la habitación 235 y la@
habitación 312.Los edificios, los pisos y la "enésima habitación en el piso" siempre están indexados en 1.
La entrada consistirá en un hotel ASCII con una habitación individual reemplazada por un asterisco ( *
). Esta es la habitación para la que debe generar el número de habitación. La entrada debe tomarse como una sola cadena, pero puede usar comas como separadores de línea en lugar de nuevas líneas (en caso de que su idioma de elección no pueda tomar una entrada de varias líneas o si es más corto para tomar una entrada de una sola línea). Opcionalmente, puede requerir una coma / nueva línea final. También puede rellenar líneas con espacios finales para hacer que la entrada sea un rectángulo completo.
Como se trata de código de golf , gana el código más corto en bytes.
Casos de prueba (contenidos dentro de un solo bloque de código para conservar el espacio vertical):
Input:
*
Output: 111
Input:
# # * # #
Output: 311
Input:
#####
#####
####*
#####
#####
Output: 135
Input:
#####
##### ######
##### ######
# # # ##### # # # ###### *
Output: 911
Input:
#
# #
# # ##
# # ## ###
# # ## ### #####
# # ## ### ##*## ########
# # ## ### ##### ########
Output: 523
Input:
#
*
#
#
#
#
#
#
######### # #
Output: 281
Input:
########*
#########
#########
#########
#########
#########
#########
#########
# # # # # # # # #########
Output: 999
Respuestas:
CJam,
3431 bytesEsto requiere que la entrada se rellene a un rectángulo con espacios.
Pruébalo en línea! Alternativamente, ejecute todos los casos de prueba.
Explicación
fuente
Pyth, 34 bytes
Demostración
Esto usa un truco de golf que nunca he usado antes: Asignar a una variable (
K
) dentro de una función (y
) para guardar un resultado parcial de esa función.Explicación:
fuente
JavaScript (ES6),
142136 bytes¡6 bytes guardados gracias a @nderscore !
Explicación
Prueba
Mostrar fragmento de código
fuente
.map((t,i,l)=>
,slice(0,r=t.indexOf`*`+1)
,o=++b&&s+2
,[b]+f+r
[b]+f+r
sugerencia!awk, 70
Ejemplo:
fuente
C,
131130119113 bytesToma entrada en stdin; la entrada no debe tener una nueva línea de terminación. Asume el complemento de 2.
Sin golf:
fuente
Stackgoat , 73 bytes [no compitiendo]
Stackgoat es un lenguaje basado en la pila que no tiene nada que ver con las cabras.
Es un lenguaje bastante nuevo, así que avíseme si tienen algún problema. Me di un fuerte dolor de cabeza al descubrir esto, así que esto es casi tanto como estoy jugando al golf.
Explicación
Este programa tiene 3 partes por cada 3 dígitos del número de habitación.
fuente
Ruby, 103
Sin golf en el programa de prueba
fuente
$`
este.JavaScript (ES6), 121
Menos golf y explicado
PRUEBA
fuente
Python 2.7,
153168 caracteres¡Me gustó este desafío! Si una lista de Python está bien como entrada (ver ejemplos de prueba), esta solución funciona.
Editar 2016-01-05: se agregó una línea (10 caracteres) para dividir la cadena en varias líneas.
Breve explicación:
t
es la fila en la que se encuentra la habitación (contada desde la fila superior como índice de matriz = 0);i
es el índice de la habitación en su fila;i
;t
;i
el comienzo del piso con la habitación, agregada por un espacio en blanco para cubrir el caso de que la habitación esté en el primer edificio.Código:
Banco de pruebas:
fuente
Caracoles , 32 bytes
fuente
C,
142138137 bytes(
123119118 bytes + 19 para#include
línea)Robé la idea de fusión de valores de ecatmur, pero los fusioné de una manera bastante diferente (
al final, ahorra 8 bytes). Esto también supone lo mismoEOF == -1
.La entrada se toma de stdin, y no debe tener espacios en blanco o nuevas líneas después del último edificio en la última línea, por lo que una entrada de ejemplo sería:
Descompostura:
fuente
&&(f=p,p=x)
a?f=p,p=x:0
: el segundo operando de un condicional ternario tiene paréntesis implícitos.Haskell,
128125bytesEjemplo de uso:
f "# # * # #"
->311
.Cómo funciona:
fuente
Lua, 165 bytes
Sin golf
fuente
CoffeeScript, 110 bytes y JavaScript, 121 bytes
Legible
Básicamente lo mismo en Javascript:
fuente
Java, 231 bytes
De golf
fuente
Powershell, 154 bytes
Menos guión de prueba de golf:
Salida:
fuente
05AB1E , 34 bytes
Zip con listas de cadenas está actualmente dañado.
€SζJ
podría haber sido soloζ
en la antigua versión heredada de Python de 05AB1E, pero por alguna razón ya no funciona en la versión de reescritura de Elixir.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Dart , 165 bytes
Pruébalo en línea!
fuente