Quantos de vocês ainda usam sua própria junta para determinar se um mês está tendo 31 dias ou menos?
Seu trabalho é escrever um programa para contar quantos meses, em um intervalo de meses, estão com 31 dias completos e quantos estão com menos de 31 dias "contando as juntas".
Cortesia: amsi.org.au
Entrada
Um par de meses, o primeiro dos quais não precisa ser cronologicamente anterior ao segundo, fornecido em qualquer formato adequado. Por exemplo: 201703 201902
- março de 2017 a fevereiro de 2019. Descreva o formato de entrada que você escolher. Observe que a entrada deve poder incluir todos os anos de 1 a 9999. O intervalo de meses especificado inclui os meses inicial e final.
Resultado
Dois números inteiros: o número de meses no intervalo especificado com 31 dias e o número de meses no intervalo com menos de 31 dias.
Exemplo: 14 10
- 14 articulações, 10 ranhuras (significa que nesse intervalo de meses temos 14 meses com 31 dias completos e 10 meses com menos de 31 dias).
Para uma entrada em que o segundo mês no intervalo vem cronologicamente antes do primeiro, por exemplo 201612 201611
, você precisa emitir um par de zero.
Exemplos de entrada e saída
| Input | Output |
|---------------|-------------|
| 201703 201902 | 14 10 |
| 201701 202008 | 26 18 |
| 000101 999912 | 69993 49995 |
| 201802 201803 | 1 1 |
| 201601 201601 | 1 0 |
| 201612 201611 | 0 0 |
Regras
- Você pode escolher qualquer idioma que desejar
- Uma entrada por linha
- Isso é código-golfe , então o código mais curto em bytes vence!
- O vencedor será escolhido em 9 de abril
- Aplicam-se brechas padrão
- PS: esta é minha primeira pergunta no PCG, pode ter algumas inconsistências. Sinta-se à vontade para editar e confirmar o que não está claro para você.
201612 201611
.Respostas:
Gelatina , 21 bytes
Toma entrada como
[[y, m], [y, m]]
.Experimente online!
Como funciona
fonte
JavaScript (ES6),
70686764 bytesRecebe a entrada como dois números inteiros no
yyyymm
formato, na sintaxe de curry(a)(b)
. Produz uma matriz de dois números inteiros[knuckles, grooves]
.Formatado e comentado
Casos de teste
Nota : o terceiro caso de teste não está incluído neste trecho, porque não funcionará a menos que o seu navegador tenha a Otimização de chamada de cauda ativada.
Mostrar snippet de código
fonte
Python 2 ,
92908680 bytesExperimente online!
6 convertendo para um lambda, com agradecimentos a @math_junkie pela ideia. Agora gera uma lista contendo os dois números.
Versão não lambda anterior (86 bytes)
Experimente on-line antigo!
2 economizado com graças ao @ovs por me ajudar a me livrar do
len(k)
. Eu não tinha pensado em usarNone
.Entrada é uma lista de números inteiros no formato
y1,m1,y2,m2
Algum crédito devido ao @KeerthanaPrabhakaran, que obteve
bin(2741)[2:]
antes de mim, o que economiza 1 byte em vez de codificar a string binária.fonte
len(k)
última fatia. Obrigado.PHP ,
259256249248237221 bytesSuperado por aross : /codegolf//a/114512/38505
Formato de entrada:
yyyymm,yyyymm
Experimente online!
versões mais antigas
Experimente online!
Experimente online!
Experimente online!
Experimente online!
Experimente online!
fonte
Lote, 93 bytes
Aceita dois parâmetros no formato ymm (por exemplo, 101 - 999912). Solução anterior de loop de 129 bytes:
fonte
Python 3.5 (
164162154152150 150148140137 bytes)repl.it
recebe entrada na forma de aaaaaaaaaaaaaa
imprime a saída como number_of_knuckles number_of_grooves
fonte
n=int
e talvez também algumasexec
bobagens.2773&1<<r%12-1>0
vez deint('101010110101'[r%12-1])
print([k,t-k])
comoprint(k,t-k)
produziria o resultado desejado(k,g)
, reduzindo assim 2 bytes!split(' ')
porsplit()
Python 2 ,
147146142 bytesExperimente online!
Quebrando o código,
fonte
if-else
cláusulas por pesquisas de matriz. Veja esta publicação para obter detalhesPHP,
1201039796 bytesExecute assim:
Explicação
Tweaks
$e
, basta comparar diretamentefonte
$x++
em vez de+$x++
também funciona.$x
inicializado a corda seria2017-12month
, que é um formato e os resultados não reconhecida em 1970+
na string.PowerShell , 96 bytes
Experimente online!
Toma entrada como forma
2017-03
. Usa as bibliotecas de datas .NET integradas e percorre as entradas$a
para$b
, cada iteração$x++
aumentando e adicionando$z
se a corrente.Month
é-in
2,4,6,9,11
(ou seja, um mês que não é de 31 dias). Em seguida, produzimos nosso total de meses menos os meses que não são de 31 dias$x-$z
e os meses que não são de 31 dias$z
.Lança um erro no
0001-01
para9999-12
caso de teste, porque .NET suporta apenas anos até9999
, então a final.AddMonths(1)
causas um estouro. Ainda gera os valores corretos, no entanto, porque é um erro sem fim; apenas faz com que o loop saia.Provavelmente seria mais curto fazer isso aritmeticamente, como as respostas em Python ou JavaScript, mas eu queria mostrar uma abordagem usando os built-ins do .NET.
fonte
Bash , 113 bytes
Experimente online!
precisa de golfe ...
recebe entrada como
2016-03
2018-10
saídas:
ungolfed:
fonte
Rápido, 151 bytes
input é uma matriz de dois números inteiros no formato conforme o exemplo
fonte