Você é funcionário da nova mercearia Half Foods, e é um dia antes do Natal do Dia de Ação de Graças . Como a loja estará lotada de clientes correndo para comprar seus alimentos, a loja precisa de um gerente de tráfego para enviar todos para as linhas apropriadas. Sendo preguiçoso, você gostaria de automatizar isso para poder ir até a delicatessen antes que todos tomem todo o presunto de peru . No entanto, tudo o que você tem com você é seu telefone, e codificar programas longos é uma verdadeira dor - então você precisa aprimorar suas habilidades de ninja código-golfe .
Desafio
Vamos visualizar o supermercado em uma grade bidimensional. Aqui está uma amostra de grade para dissecar:
e
s
s
s
Y
# # #s #
#s # #s #
#s # #s #
#s #s #s #
#3 #1 #4 #
x x x x
A grade começa com um e
, que representa uma "saída" para o restante da loja. A cada geração, todas as saídas na grade geram um comprador ( s
) diretamente abaixo. Os compradores descem a cada geração até chegarem a você ( Y
). Quando um comprador atinge a mesma linha que você, você deve teleportar o comprador para o início da linha com a menor quantidade de compradores. Um comprador passa imediatamente para a linha quando entraria na linha com o Y
, não há geração entre eles. As linhas são representadas pelo #
s - a coluna após o #
s é uma linha. Os compradores descem até o final da linha (representada por uma saída x
) e depois se transformam em um número aleatório entre 1
e5
. A cada geração, você deve diminuir o número de compradores 1
- quando um cliente chega 0
, eles terminam de fazer check-out e saem da loja.
Dada a entrada de uma grade como essa, produza a próxima geração da mercearia (mova todos os compradores para baixo simultaneamente, redirecione os compradores e deixe-os sair se tiverem terminado).
Amostras
Entrada:
e
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Resultado:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Entrada:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Resultado
e
s
Y
#s # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Entrada:
e
Y
# # # #
# # # #
# # # #
#s # # #
# # # #
x x x x
(Possível) Saída:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Entrada:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Resultado:
e
s
Y
# #s # #
# # # #
# # # #
# # # #
#2 # # #
x x x x
Entrada:
e
Y
# # # #
# # # #
# # # #
# # # #
#1 # # #
x x x x
Resultado:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Isso é código-golfe , então o código mais curto vence.
Respostas:
Python 2 ,
477463453449423402397396393 bytesExperimente online!
Ainda trabalhando nisso, mas resolve o problema por enquanto
fonte
C ++,
898896885841 bytesMuito tempo para codificar ... mas está lá
-2 bytes graças a Conor O'Brien
-45 bytes graças a Zacharý
Então ... alguns detalhes:
Você precisa passar por um
std::vector<std::string>
(eles serão redimensionados no mesmo comprimento que a string mais longa)Todas as linhas de
#
início nas mesmas coordenadas y (verticais) têm o mesmo comprimento e terminam nas mesmas coordenadas y (verticais)Suponha que a grade tenha pelo menos 1
#
linha ou mais, tenha uma letrae
(uma saída) na parte superior, uma letraY
Suponha que a entrada seja uma saída válida para que os compradores que aguardam o redirecionamento sejam sempre um após o outro
Edit: Acabei de ver nos comentários da resposta do Wheat Wizard que ele deve suportar múltiplas entradas, continuarei a trabalhar nisso
fonte
#define C(e)i[j].find(e)!=string::npos
?C(e)
ser#define C(e)if(i[j].find(e)!=string::npos
e alterar as chamadas de acordo.length()
só é aplicadoa
, é possível alterarL
para ser definido comoa.length()
, modificando as chamadas de acordo. Além disso, você pode mover ausing namespace std;
parte inferior, salvando um byte removendo a nova linha