Dada a entrada de um "hotel" na arte ASCII com um quarto individual marcado, imprima o número do quarto de acordo com certas regras.
Aqui está um exemplo de um hotel ASCII:
##
##
##### ##
##### ###### ##
##### ###### ##
##### ###### ##
Aqui estão mais algumas coisas sobre os hotéis ASCII:
Cada "edifício" é representado por um retângulo de
#
caracteres, onde cada#
um representa uma "sala".O hotel acima consiste em três edifícios. Cada edifício é separado por duas colunas de espaços, e o "piso" mais baixo estará sempre na última linha.
Cada edifício sempre terá de 1 a 9 "andares" (linhas) e 1 a 9 "quartos" em cada andar. Também sempre haverá 1-9 edifícios.
Os quartos são numeradas da seguinte forma:
[building #][floor #][room on floor #]
. Por exemplo, vamos marcar algumas salas no desenho acima:## ## ##### ## ##### ####$# ## ##%## ###### ## ##### ###### #@
A sala marcada com
%
é a sala 123 (edifício 1, piso 2, 3ª sala no piso). Da mesma forma, a sala marcada com a$
sala 235 e a@
sala 312.Prédios, pisos e "enésima sala no andar" são sempre indexados em 1.
A entrada consistirá em um hotel ASCII com um quarto individual substituído por um asterisco ( *
). Esta é a sala para a qual você deve enviar o número da sala. A entrada deve ser tomada como uma única sequência, mas você pode usar vírgulas como separadores de linha em vez de novas linhas (caso o seu idioma de escolha não possa receber entrada com várias linhas ou se for mais curto para receber uma linha). Opcionalmente, você pode exigir uma vírgula / nova linha à direita. Você também pode preencher linhas com espaços à direita para tornar a entrada um retângulo completo.
Como esse é o código-golfe , o código mais curto em bytes vence.
Casos de teste (contidos em um único bloco de código para economizar espaço vertical):
Input:
*
Output: 111
Input:
# # * # #
Output: 311
Input:
#####
#####
####*
#####
#####
Output: 135
Input:
#####
##### ######
##### ######
# # # ##### # # # ###### *
Output: 911
Input:
#
# #
# # ##
# # ## ###
# # ## ### #####
# # ## ### ##*## ########
# # ## ### ##### ########
Output: 523
Input:
#
*
#
#
#
#
#
#
######### # #
Output: 281
Input:
########*
#########
#########
#########
#########
#########
#########
#########
# # # # # # # # #########
Output: 999
Respostas:
CJam,
3431 bytesIsso requer que a entrada seja preenchida em um retângulo com espaços.
Experimente online! Como alternativa, execute todos os casos de teste.
Explicação
fonte
Pitão, 34 bytes
Demonstração
Isso usa um truque de golfe que eu nunca usei antes: Atribuir a uma variável (
K
) dentro de uma função (y
) para salvar um resultado parcial dessa função.Explicação:
fonte
JavaScript (ES6),
142136 bytes6 bytes salvos graças ao @nderscore !
Explicação
Teste
Mostrar snippet de código
fonte
.map((t,i,l)=>
,slice(0,r=t.indexOf`*`+1)
,o=++b&&s+2
,[b]+f+r
[b]+f+r
dica!awk, 70
Exemplo:
fonte
C,
131130119113 bytesRecebe entrada em stdin; A entrada não deve ter uma nova linha final. Assume o complemento de 2.
Ungolfed:
fonte
Stackgoat , 73 bytes [não concorrente]
Stackgoat é uma linguagem baseada em pilha que não tem nada a ver com cabras.
É uma linguagem relativamente nova, então deixe-me saber se há algum problema com ela. Eu me dei muita dor de cabeça para descobrir isso, então isso é tanto quanto eu estou jogando isso.
Explicação
Este programa possui 3 partes para cada 3 dígitos do número do quarto
fonte
Ruby, 103
Ungolfed in program program
fonte
$`
deste.JavaScript (ES6), 121
Menos jogado e explicado
TESTE
fonte
Python 2.7,
153168 caracteresEu gostei desse desafio! Se uma lista Python estiver ok como entrada (consulte exemplos de testes para exemplos), esta solução funcionará.
Editar 05-01-2016: adicionada uma linha (10 caracteres) para dividir a sequência em várias linhas.
Breve explicação:
t
é a linha na qual a sala está localizada (contada a partir da linha superior como índice da matriz = 0);i
é o índice da sala em sua linha;i
;t
;i
até o início do andar com a sala, anexado por um espaço em branco para cobrir o caso em que a sala está no primeiro edifício.Código:
Suíte de teste:
fonte
Caracóis , 32 bytes
fonte
C,
142138137 bytes(
123119118 bytes + 19 para#include
linha)Eu roubei a ideia de mesclagem de valor do ecatmur, mas as mesclei de uma maneira bem diferente (
economiza 8 bytes no final). Isso também faz a mesma suposição de queEOF == -1
.A entrada é obtida de stdin e não deve ter espaços em branco ou novas linhas após a última construção na última linha; portanto, uma entrada de exemplo seria:
Demolir:
fonte
&&(f=p,p=x)
para?f=p,p=x:0
- o segundo operando de uma condicional ternária tem parênteses implícitos.Haskell,
128125 bytesExemplo de uso:
f "# # * # #"
->311
.Como funciona:
fonte
Lua, 165 bytes
Ungolfed
fonte
CoffeeScript, 110 bytes e JavaScript, 121 bytes
Legível
Basicamente a mesma coisa em Javascript:
fonte
Java, 231 bytes
De-Golfed
fonte
PowerShell, 154 bytes
Script de teste com menos golfe:
Saída:
fonte
05AB1E , 34 bytes
O zip com listas de strings está atualmente com erros.
€SζJ
poderia estar apenasζ
na versão antiga herdada do Python do 05AB1E, mas por algum motivo não funciona mais na versão de reescrita do Elixir.Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Dardo , 165 bytes
Experimente online!
fonte