Desafio Tomado com permissão do meu Concurso de Desafio de Código da Universidade
Há alguns anos, o número de alunos na minha escola tem crescido constantemente. Primeiro, o número de alunos foi aumentado em sala de aula, mas depois foi necessário converter alguns espaços para alguns grupos darem aulas lá, como a academia ou, neste último curso, até a sala de vassouras.
No ano passado, as autoridades acadêmicas conseguiram o orçamento para a construção de um novo prédio e iniciaram as obras. Finalmente, eles terminaram e o novo prédio já pode ser usado, para que possamos nos mudar (o antigo prédio será reabilitado e será usado para outra função), mas nos pegou no meio do percurso. O diretor quer saber se a mudança será possível sem a divisão ou a junção de grupos ou se alguns alunos precisam mudar de grupo.
Desafio
Dada a quantidade de alunos dos grupos atuais e as novas salas de aula (capacidade), produza um valor verdadeiro, se for possível atribuir uma sala de aula diferente, com capacidade suficiente, a cada um dos grupos atuais ou, caso contrário, um valor de falsey.
Casos de teste
Input: groups of students => [10, 20, 30], classrooms capacity => [31, 12, 20]
Output: True
Input: groups of students => [10, 20, 30], classrooms capacity => [100, 200]
Output: False
Input: groups of students => [20, 10, 30], classrooms capacity => [20, 20, 50, 40]
Output: True
Input: groups => [30, 10, 30, 5, 100, 99], classrooms => [40, 20, 50, 40, 99, 99]
Output: False
Input: groups => [], classrooms => [10, 10, 10]
Output: True
Input: groups => [10, 10, 10], classrooms => []
Output: False
Input: groups => [], classrooms => []
Output: True
Input: groups => [10, 1], classrooms => [100]
Output: False
Input: groups => [10], classrooms => [100, 100]
Output: True
Input: groups => [1,2,3], classrooms => [1,1,2,3]
Output: True
Notas
- Você pode receber a entrada em qualquer formato razoável
- Você pode produzir qualquer valor Truthy / Falsey (
1/0
,True/False
, etc ...) - código-golfe
fonte
g=[1,2,3], c=[1,1,2,3]
0
um valor válido para grupos ou salas de aula?Respostas:
Braquilog , 4 bytes
É sempre bom ver um desafio e saber que o brachylog vai vencer todos. Toma aulas atuais como entrada e novas salas de aula como saída; Ele produzirá true se encontrar uma maneira de ajustar os alunos, false caso contrário
Explicação
O código tem três partes, das quais o pedido realmente não importa
Experimente online!
fonte
Pitão, 11 bytes
Recebe a entrada como uma lista de listas, tamanhos da sala de aula primeiro e tamanhos de grupo em segundo. Experimente online aqui ou verifique todos os casos de teste de uma vez aqui .
fonte
Geléia , 9 bytes
Toma as salas de aula como primeiro argumento e os grupos como segundo argumento.
Experimente online!
Comentado
NB: Isso
Ṡ‘ḌẠ¬
é muito longo. Mas suspeito que essa não seja a abordagem correta de qualquer maneira.fonte
Japonês , 9 bytes
Experimente ou execute todos os casos de teste no TIO
Experimente ou execute todos os casos de teste no TIO
fonte
2 - n
In Japt? Que tipo de casos de uso ele tem para justificar a criação de um byte de 1 byte?Í
é um atalho paran2<space>
e foi criado para uso com cadeias de caracteres, convertendo-as dos números da base 2 para a base 10 (uma necessidade bastante comum). No entanto, on
método, quando aplicado a um número, subtrai esse número do argumento do método (padrão =0
). Portanto, aqui, embora subtrair de0
seja suficiente para classificar a matriz na ordem inversa, o uso do atalho me poupa um byteñn<space>
. Eu também poderia usá-lo ao classificar,V
mas não salvaria nenhum bytes, pois ainda precisaria de um espaço, em vez de)
, para fechar oí
método.Python 2 , 49 bytes
Saídas pelo código de saída, falha na entrada falsa.
Experimente online!
fonte
MATL , 10 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
Considere entradas
[20, 10, 30]
,[20, 20, 50, 40]
como um exemplo. A pilha é mostrada de baixo para cima.fonte
Haskell , 40 bytes
Experimente online!
fonte
05AB1E ,
14128 bytesResposta do Porto da Pyth do @Sok , por isso não deixe de vota-lo também!
Recebe a entrada como uma lista de listas, com a lista de sala de aula como primeiro item e a lista de grupos como segundo item.
Experimente online ou verifique todos os casos de teste .
Explicação:
Resposta antiga de 12 bytes:
Leva a lista da sala de aula primeiro e depois a lista do grupo.
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
C # (Compilador interativo do Visual C #) ,
7774 bytesExperimente online!
Código comentado:
fonte
Haskell, 66 bytes
Experimente online!
fonte
Ferramentas Bash + GNU, 68 bytes
69 bytes
TIO
aceita os quartos dos alunos como primeiro e segundo argumentos, pois os números de string delimitados por nova linha retornam o status de saída 1 para verdadeiro ou 0 para falso
fonte
Perl 5
-pal
,6762 bytesO @NahuelFouilleul salvou 5 bytes com um rearranjo e um grep
Experimente online!
Versão de 67 bytes
Pega a lista de tamanhos de classe separada por espaço na primeira linha e a lista de tamanhos de sala separada por espaço na próxima.
fonte
Lisp comum, 74 bytes
(defun c(s r)(or(not(sort s'>))(and(sort r'>)(<=(pop s)(pop r))(c s r))))
Não minificado
Teste-o
Observe que a classificação muda permanentemente a lista e pop reenvia a variável para o próximo elemento.
De fato, isso apenas verifica recursivamente se o maior grupo de estudantes pode caber na maior sala. Existem 3 casos básicos:
fonte
Python 2 ,
716764 bytesExperimente online!
fonte
zip(...)
para salvar 5 bytes.Retina 0.8.2 , 50 bytes
Experimente online! O link inclui o conjunto de testes. Toma duas listas de grupos e salas (a suíte de testes usa
;
como separador de lista). Explicação:Converta para unário.
Inverter classifique cada lista separadamente.
Acrescente uma vírgula a cada lista.
Verifique se cada um dos números na primeira lista pode corresponder ao número apropriado na segunda lista. Cada vez que
\3
contém as salas correspondidas anteriormente, o próximo grupo\2
precisa, portanto, poder caber na próxima sala. Ele(?>\3?)
lida com o caso da primeira sala quando ainda não há salas anteriores.fonte
Carvão , 28 bytes
Experimente online! Link é a versão detalhada do código. Leva uma lista de listas de salas e grupos e saídas
-
se as salas puderem acomodar os grupos. Explicação:Repita enquanto um grupo pode ser atribuído a uma sala.
Remova a maior sala e grupo de suas listas.
Verifique se não há grupos não alocados restantes.
fonte
JavaScript, 56 bytes
Tente
fonte
7
e9
em classes de8
e10
.Perl 6 , 34 bytes
Experimente online!
Recebe a entrada como uma lista de duas listas, os grupos e as salas de aula, e retorna uma Junção Nenhuma que pode ser boolificada para verdadeiro / falso.
Explicação:
fonte
Ruby , 57 bytes
Experimente online!
Toma
c
aulas,r
para quartos. Verifica todas as permutações de salas em vez de usar a classificação, porque a classificação reversa custa muitos bytes. Ainda parece bastante longo ...fonte
C # (Compilador interativo do Visual C #) ,
1059391828179777674 bytesAgora corresponde à pontuação de dana!
Lança um erro se falso, nada se verdadeiro.
-12 bytes graças a @Destrogio!
Experimente online!
Explicação
fonte
Java (OpenJDK 8) , 183 bytes
Experimente online!
Com um pequeno conselho útil de Kevin Cruijssen e simplesmente outro olhar sobre meu código, eu posso diminuir minha pontuação em 9% inteiros apenas substituindo três palavras em inglês!
Java (OpenJDK 8) , 166 bytes
Experimente online!
fonte
import java.util.*;
na sua contagem de bytes. No entanto, você pode jogar golfe para 144 bytes no Java 8 ou 140 no Java 10 substituindoboolean
porvar
.true
/false
no seu código,1>0
/0>1
são alternativas mais curtas . :)1/0
e eu acho que está bem nesse caso, observe que em Java, diferente de Python, JavaScript, C, etc.1/0
geralmente não são considerados como saídas válidas de verdade / falsey . E no meu primeiro comentário, mencionei uma versão de 144 bytes . :) Embora agora também seja inválido porque não funciona no último caso de teste, como mencionado por @Shaggy .PowerShell , 80 bytes
Experimente online!
Script de teste com menos golfe:
fonte
R , 65 bytes
Experimente online!
fonte