Minha porta da garagem elétrica funciona assim:
- Há apenas um botão para controlar a porta
- Se a porta estiver totalmente fechada e eu apertar o botão, a porta começará a abrir. Leva 10 segundos para abrir totalmente
- Se a porta estiver totalmente aberta e eu apertar o botão, a porta começará a fechar. Demora 10 segundos para fechar completamente
- Se a porta estiver abrindo ou fechando parcialmente e eu apertar o botão, a porta para e fica parcialmente aberta.
- Sempre que a porta parar de se mover, seja pela conclusão automática de uma ação de abertura ou fechamento ou pela interrupção manual pressionando o botão parcialmente, uma ação, o mecanismo será revertido e lembrará sua direção para a próxima ação.
- Se o botão for pressionado quando a porta estiver parada, mas parcialmente aberta, a quantidade de tempo para concluir sua ação será uma fração de 10 segundos na proporção da quantidade necessária para se mover para concluir a ação.
Suponha que a porta esteja totalmente fechada no início.
Uma lista de entrada de números inteiros será fornecida. Esses números inteiros são o número de segundos que eu espero entre toques sucessivos no botão de controle.
Saída duas coisas:
- uma porcentagem indicando o estado da porta quando todos os botões forem pressionados e a porta atingir um estado estável. A saída do
%
símbolo é opcional. - uma indicação inequívoca de qual direção a porta seguirá no próximo pressionamento de botão. Pode ser
up
/down
,U
/D
,+
/-
,1
/0
ou o que você escolher.
Você pode assumir que a porta leva infinitamente menos de 10 segundos para concluir uma ação de abrir ou fechar.
Exemplo de entradas:
<empty list> # button was pushed just once
20 # button was pushed twice with 20 seconds between
10
5
20 20
10 10
5 5
1 2 3
8 9 10 11
11 10 9 8 7
Saídas esperadas correspondentes às entradas acima
100% D
0% U
0% U
50% D
100% D
100% D
0% U
100% D
0% U
20% U
Exemplo resolvido do último teste
- A porta começa fechada. O botão é pressionado
- Aguarde 11 segundos. A porta acaba totalmente aberta. O botão é pressionado.
- Aguarde 10 segundos. A porta acaba totalmente fechada. O botão é pressionado.
- Aguarde 9 segundos. O botão é pressionado. A porta para com 90% de abertura.
- Aguarde 8 segundos. O botão é pressionado. A porta começa a fechar.
- Aguarde 7 segundos. O botão é pressionado. A porta para com 20% de abertura. A próxima direção será ativada.
Respostas:
Lua,
258248242 bytesUngolfed
Não vejo como seus casos de teste podem estar certos ...OP Fixedfonte
Pitão,
504539 bytes6 bytes graças ao Sp3000.
Suíte de teste.
fonte
JavaScript (ES6),
109106 bytesfonte
Ruby, 152 bytes
Casos de teste:
fonte
->v{
para->*v{
(eu acho). Além disso, você precisa os espaços antes o:
, bem como depois? E você tem certeza que o:a<=0
não analisa(:a) <= 0
?:a<=0
, eu receberia umArgumentError: comparison of Symbol with 0 failed
se não funcionasse. Eu acho que porque ele analisou?
e sabe que está em um operador ternário, simplesmente funciona. As regras são realmente estranhas. Eu coloquei espaços ou suportes em lugares que são necessários para evitar erros de sintaxe comoSyntaxError: unexpected tLABEL
eNoMethodError: undefined method
u? `.a=u ? a+w : a-w
e mudar paraa=a+w*d
onded
é1
ou-1
dependendo da direção, mas ainda não o resolvi.Python 3.5,
193187185181175173172 bytes:Recebe entrada na forma de números separados por vírgula, por exemplo
1,2,3,4,5
ou mesmo1.2,3.4,7.8,9.2
. Mostra se a porta na próxima etapa está subindo ou descendo comU
ouD
, respectivamente. Golf mais com o tempo.Experimente Online! (Ideona) (Aqui, a entrada é obtida na forma de uma lista que consiste em números separados por vírgula, por exemplo
[1,2,3,4,5]
).fonte
PHP,
128120 bytesO código é agrupado aqui para caber na caixa de código. Coloque tudo em uma única linha, coloque o marcador aberto PHP na frente dele e salve-o em um arquivo. Ou execute-o na linha de comando usando
php -d error_reporting=0 -r '...the code...' [arguments]
.O código fonte não-protegido, a suíte de testes e exemplos de uso podem ser encontrados no github .
fonte