Dada uma lista de tarefas, que devem ser executadas em ordem, com cada uma ocupando um slot, quanto tempo levará para executá-las todas se, depois de fazer uma tarefa, a mesma tarefa não puder ser executada para os próximos dois slots (esfriando os slots )? No entanto, um trabalho diferente pode ser atribuído nesses slots de resfriamento.
Por exemplo,
[9,10,9,8] => output: 5
Porque os trabalhos serão alocados como [9 10 _ 9 8]
.
1. Primeiro, 9 precisa de dois pontos de reflexão _ _. Então começamos com 9 _ _
.
2. O próximo trabalho 10 é diferente do trabalho anterior 9, para que possamos alocar um dos _ _. Então nós teremos 9 10 _
.
3. Terceiro, 9 não pode ser alocado agora, pois o primeiro trabalho 9 é o mesmo trabalho e precisa de tempo de reflexão. 9 10 _ 9
.
4. Por último, 8 não é o mesmo que os outros dois trabalhos anteriores; portanto, pode ser alocado logo após 9 e, como esse é o último, não precisa de tempo para se refrescar. A lista final é 9 10 _ 9 8
e a saída esperada é 5, que é o número de pontos (ou número de slots)
Casos de teste:
[1,2,3,4,5,6,7,8,9,10] => output : 10 ([1 2 3 4 5 6 7 8 9 10])
[1,1,1] => output: 7 ([1 _ _ 1 _ _ 1])
[3,4,4,3] => output: 6 ([3 4 _ _ 4 3])
[3,4,5,3] => output: 4 ([3 4 5 3])
[3,4,3,4] => output : 5 ([3 4 _ 3 4])
[3,3,4,4] => output : 8 ([3 _ _ 3 4 _ _ 4])
[3,3,4,3] => output : 7 ([3 _ _ 3 4 _ 3])
[3,2,1,3,-4] => output : 5 ([3 2 1 3 -4])
[] => output : 0 ([])
[-1,-1] => output : 4 ([-1 _ _ -1])
O valor de entrada pode ser qualquer número inteiro (negativo, 0, positivo). O comprimento da lista de tarefas é 0 <= comprimento <= 1.000.000.
A saída será um número inteiro, o número total de slots, que é indicado no caso de teste como saída. A lista entre parênteses é como a saída seria gerada.
Critério vencedor
código-golfe
fonte
[]
?Respostas:
Gelatina , 14 bytes
Experimente online!
fonte
05AB1E , 22 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Braquilog , 10 bytes
É sempre bom ver o problema em que o Brachylog tem melhor desempenho
Explicação
Experimente online!
fonte
R , 123 bytes
Experimente online - programa único!
Experimente online - vários exemplos!
Um programa completo que lê uma lista de números inteiros separados por vírgula como entrada e gera os slots necessários. Tenho certeza de que isso poderia ser um pouco mais divertido, e implementar essa solução baseada em regex em alguns outros idiomas seria mais eficiente em bytes.
Observe no segundo TIO que eu a envolvi em uma função para permitir que vários exemplos sejam mostrados. Esta função também mostra a lista final, mas isso não é exibido no meu programa principal se for executado isoladamente.
fonte
Consulta TSQL, 158 bytes
Insira dados como uma tabela.
A consulta é recursiva, portanto
é necessário, porque a lista de números pode exceder 100, embora possa lidar apenas com 32.767 recursões - a limitação é realmente necessária nesta tarefa?
Experimente online
fonte
R ,
8170 bytesExperimente online!
Após várias tentativas malsucedidas, o código ficou feio e não tão curto, mas pelo menos funciona agora ...
Primeiro, avaliamos o comprimento das execuções consecutivas do mesmo trabalho. Por exemplo, para
3, 3, 4, 3
isso dá:Cada uma dessas execuções produz
(len - 1) * 3 + 1
etapas (+ 1
é tratada separadamente).Em seguida, processamos ocorrências do mesmo trabalho em dois locais, como
x, y, x
:, usandodiff(s, lag=2)
. O vetor resultante também é dividido em execuções consecutivas (r
) porrle
função. Agora, devido a várias alternâncias intercaladas, precisamos adicionarceiling(r$len/2)
etapas para todas as execuções de zeros. Por exemplo:x y x
(comprimento 1) ex y x y
(comprimento 2) precisam de uma etapa extra:x y _ x (y)
x y x y x
(comprimento 3) ex y x y x y
(comprimento 4) precisam de 2 etapas extras:x y _ x y _ x (y)
Finalmente, precisamos compensar as ocorrências dessas alternâncias no meio de uma longa execução do mesmo trabalho:
x, x, x, x...
portanto, em1-l%/%6
vez de simplesmente1
.fonte
diff(s,lag=2)
para detectar a proximidade! Agora você é um byte menor que minha solução ...Python 2 , 67 bytes
Experimente online!
Implementa o desafio literalmente. Usa cópias da lista em si como "espaços em branco", pois não podem ser iguais a nenhum número.
fonte
Carvão ,
2723 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Repetir os trabalhos.
Adicione pontos de resfriamento enquanto o trabalho é um dos dois últimos no resultado.
Adicione o trabalho atual ao resultado.
Imprima o número de pontos.
fonte
R ,
7468 bytesExperimente online!
Constrói a matriz de trabalho (no sentido inverso) e, em seguida, assume o comprimento. Um pouco mais
curtoque a resposta de Kirill L. , às vezes, a abordagem ingênua é muito boa. EDIT: mais curto novamente! Também emprestei o modelo de teste de Kirill.-6 bytes substituindo
max(0,which(y==x[2:1]))
pormatch(y,x,0)
.fonte
c
função faz?c
significacombine
, emboraconcatenate
possa ser melhor; que combina os seus argumentos em uma única lista.Perl 6 , 98 bytes
Experimente online!
Blergh, tem que haver uma maneira melhor de fazer isso. Não tenho 100% de certeza de que isso esteja totalmente correto, apesar de passar por todos os casos extremos em que pude pensar.
Basicamente, isso começa agrupando todos os trigêmeos da lista de entrada, com preenchimento para ambos os lados. Por exemplo,
[1,2,1,2]
torna-se(Any,1,2), (1,2,1), (2,1,2), (1,2,Nil)
. Obtemos osrepeated
elementos em cada trigêmeo, tornando-se(), (1), (2), ()
.Em seguida,
squish
são apresentados elementos consecutivos que não são da mesma lista, mas têm o mesmo tamanho (para não pressionar algo parecido[1,1,1]
), e o primeiro elemento não é igual ao elemento anterior (porque não podemos mesclar as horas[1,1,2,2]
), e finalmente, o elemento anterior também não foi esmagado ([1,2,1,2,1,2]
). Assim,(1), (2)
no exemplo acima, seriam esmagados juntos.Por fim, obtemos
sum
todos os comprimentos desta lista, que representam nossas horas inseridas, e adicionamos o comprimento da lista original.Por exemplo:
fonte
JavaScript (ES6), 57 bytes
Experimente online!
Comentado
fonte
C (gcc) , 69 bytes
Experimente online!
Recursão direta.
fonte
Perl 6 , 48 bytes
Experimente online!
45 bytes se a lista tiver pelo menos dois elementos:
Experimente online!
fonte
Smalltalk, 125 bytes
Explicação
fonte
Perl 5
-pl
,4240 bytesExperimente online!
fonte
-p
e refazendo a substituição: Experimente online!Lote, 184 bytes
A entrada é via argumentos da linha de comando e a saída é via código de saída. Explicação:
Acompanhe os dois últimos trabalhos.
Inicialize a contagem.
Processe cada trabalho.
Saída a contagem final.
Para cada trabalho:
Se tivermos processado o trabalho recentemente, adicione um número apropriado de pontos de reflexão. Além disso, limpe o último trabalho para que o próximo trabalho apenas acione a refrigeração se for o mesmo que este trabalho.
Atualize os dois últimos trabalhos e aloque um local para esse trabalho.
fonte
Rápido, 114 bytes
Experimente online!
fonte
3,4,3,4
, deve apostar 5, não 6.s = a
pode sers=a
, e você pode fazer, ems+=
vez de vários,s=s+...
e remover espaços após o?
:for i in 1...a.count-1{s+=a[i-1]==a[i] ?3:i>1&&a[i-2]==a[i] ?2:1}
para salvar 9 bytes.Python 3 ,
7975 bytes-3 bytes graças a mypetlion
-1 byte graças a Sara J
Experimente online!
fonte
a[0]in b[:2]and f(a,['']+b)or f(a[1:],[a[0]]+b)
pode tornarf(*[a[1:],a,[a[0]]+b,['']+b][a[0]in b[:2]::2])
- se para salvar 2 bytes.[a[0]]+b
pode tornara[:1]+b
- se para salvar 1 byte.['']+b
por[b]+b
salva um byte -b
é uma lista, portanto nunca será igual a nenhum dos valores ema
Java (JDK) , 110 bytes
Experimente online!
Código comentado não-golfado:
fonte
3,4,3,4,3,4
, retorna 7 em vez de 8Gelatina , 20 bytes
Experimente online!
Embora isso seja bastante semelhante à resposta mais curta de @ EriktheOutgolfer , escrevi sem ver a dele. De qualquer forma, o dele é melhor!
Explicação
Link diádico auxiliar, leva a lista atual como item esquerdo e o próximo item como direito
Link monádico principal, recebe a lista de números inteiros como entrada
fonte
Python 2 , 75 bytes
Experimente online!
fonte
JavaScript (Node.js) , 52 bytes
Experimente online!
fonte
APL (Dyalog Classic) , 22 bytes
Experimente online!
fonte
JavaScript (V8), 101 bytes
Experimente online!
O código descompactado tem a seguinte aparência:
Minha primeira tentativa de código-golfe, provavelmente pode ser muito otimizada diminuindo a matriz e passando-a recursivamente.
fonte
Zsh ,
6660 bytes-6 bytes de implícito
"$@"
Experimente online! Eu recomendo adicionar
set -x
ao início para que você possa acompanhar.a
sempre contém os dois últimos trabalhos, portanto, se a pesquisa encontrar um trabalho correspondentea[2]
, aumentamos em três (já que os slots de trabalho serão[... 3 _ _ 3 ...]
).E se
a
não estiver definido, a pesquisa falhará e a expansão aritmética retornará um erro, mas isso só acontece no primeiro trabalho e não é fatal.Podemos salvar mais um byte se usarmos
$[x+=i+1]
, e não há comandos no sistema de usuários compostos inteiramente por dígitos.fonte
K (ngn / k) , 27 bytes
Experimente online!
fonte