Dada uma representação textual (nome completo que não diferencia maiúsculas de minúsculas ou abreviação de 3 caracteres) de um mês, retorne o número de dias no mês.
Por exemplo, december
, DEC
e dec
todos devem retornar 31.
Fevereiro pode ter 28 ou 29 dias.
Suponha que a entrada seja um mês em uma das formas corretas.
code-golf
date
code-challenge
polyglot
hello-world
unicode
rosetta-stone
code-golf
ascii-art
kolmogorov-complexity
code-golf
math
approximation
code-golf
array-manipulation
code-golf
math
sequence
code-golf
array-manipulation
decision-problem
code-golf
ascii-art
random
card-games
code-golf
number
integer
base-conversion
code-golf
quine
binary
code-golf
graph-theory
classification
code-golf
math
number
code-golf
math
geometry
code-golf
tips
ruby
qw3n
fonte
fonte
december
,DEC
edec
deve tudo retorno 31" - é que a intenção?Respostas:
Pyke , 9 bytes
Experimente aqui!
Ou 15 bytes, se todos os formatos de entrada forem necessários
Experimente aqui!
fonte
FEB
.Apr
,Jun
,Sep
eNov
), mas também acho que ele requer um pouco de esclarecimento no OP (ver a minha pergunta ).JavaScript (ES6),
48 47 44 4342 bytesDemo
Mostrar snippet de código
Quão?
Essas operações levam a uma tabela de pesquisa de 8 entradas, o que não seria muito interessante se os valores fossem distribuídos aleatoriamente. Mas qualquer resultado maior que 2 é mapeado para 31 dias. Portanto, apenas as 3 primeiras entradas precisam ser armazenadas explicitamente.
fonte
.substr(0,3)
não era necessário. Portanto, pensando bem, essa pode não ser a melhor abordagem.substr
?slice
!Javascript (ES6),
3633 bytes-3 bytes graças a @JustinMariner e @Neil
Desculpe @Arnauld, abusar da estranheza do JavaScript é mais curto do que suas conversões básicas sofisticadas.
Como funciona
Por alguma razão, o JavaScript permite inserir datas fora do mês especificado. O código conta quantos dias fora do mês a data é para determinar quantos dias existem no mês. Exemplos:
"FEB31"
→Thu Mar 02 2000
→31 - 2 % 31
→29
"October31"
→Tue Oct 31 2000
→31 - 31 % 31
→31
Casos de teste
Mostrar snippet de código
fonte
31
. Parece funcionar no Chrome comonew Date("feb31")
por exemplo.+31
salvamento de três bytes no total. Porém, nada disso funciona no Firefox.Python 2 ,
464538 bytes-1 byte graças a @totallyhuman
Experimente online!
fonte
Bash , 21 bytes
Experimente online!
Recebe a entrada como argumento da linha de comando e gera uma nova linha à direita. A contagem de dias para fevereiro depende da do ano atual
Requer a versão util-linux 2.29 do
cal
, que é a disponível no TIO . Também depende da localidade, portanto LC_TIME deve ser alterado em sistemas que não sejam o inglês (obrigado @Dennis pelo esclarecimento).A idéia de passar
xargs
a tubulação paracal
a saída do compensador é dessa resposta do SO .fonte
Próton , 50 bytes
Experimente online!
-14 bytes graças a Jonathan Frech
Trinta dias têm setembro, abril, junho e novembro. Todo o resto tinha manteiga de amendoim. Todos, exceto minha avó; ela tinha um pequeno trike vermelho, mas eu roubei. muahahahahaha
(Estou esperando para contar essa piada (fonte: meu professor de matemática) há muito tempo neste site: D: D: D)
fonte
'sepaprjunnov'
vez de uma lista de strings.C # (.NET Core) ,
52 + 13 = 6538 + 24 = 62 bytesExperimente online!
+24 para
using D=System.DateTime;
Agradecimentos
-3 bytes graças a Grzegorz Puławski.
fonte
using System;
? Ou você pode excluir isso da contagem de bytes?using D=System.DateTime;
em=>D.DaysInMonth(1,D.Parse(1+m).Month)
como aqui: tio.run/##jc5BSwMxEAXgs/…Python 3 , 60 bytes
Experimente online!
Portando minha solução Proton
-10 bytes graças a totalmente humano
fonte
Data do Shell / GNU ,
39, 26 bytesOnde
$1
é o nome do mês.Experimente online!
edit: Obrigado Dennis por salvar muitos bytes!
fonte
AWK ,
4544 bytesExperimente online!
fonte
Python 3 -
93868482 bytesVariantes de resposta (mostrando a progressão do tempo e bytes para cada um, com links TIO):
Resposta original (93 bytes)
-7 bytes graças a Jonathan Frech. (86 bytes)
Mais -2 bytes graças aos meus próprios testes adicionais dos
monthrange
resultados, com o segundo valor sempre sendo o valor mais alto. (84 bytes) 1-2 mais usando
import calendar as c
e referenciando-o comc.monthrange
. (82 bytes, revisão atual )Obviamente, não é tão bom quanto a resposta do HyperNeutrino, que não usa built-ins, mas isso ainda funciona.
Notas de rodapé
1 : Casos de teste via TIO.run mostrando a prova de como estou lidando com esses
monthrange
valores, para um número variável de casos de teste do mês.fonte
import ...,calendar as c
para não precisar digitar 'calendar' duas vezes.Perl 5 , 47 + 1 (
-p
) = 48 bytesExperimente online!
fonte
($_)=/.(..)/;
vez de$_=substr$_,1,2;
e()
ao redor"eprunov"=~/$_/i
pode ser removido.Haskell ,
656362 bytesExperimente online!
Abordagem de correspondência de padrões. A primeira linha é lidar com a distinção entre maiúsculas e minúsculas. Então retornamos
28
se a terceira letra for menor que C (número 3),30
se a segunda letra for maior que C e a terceira maior que M, ou31
não.Edit: -1 byte graças a Leo
Alternativa (
6564 bytes)Experimente online!
fonte
c<3
em vez dea==6
(Fevereiro é o primeiro mês se você encomendá-los por sua terceira carta, seguido de Dezembro)APL (Dyalog) , 32 bytes *
Função de prefixo tácito. Supõe
⎕IO
( I ndex O rigin)0
, que é padrão em muitos sistemas.Experimente online!
⍠1
caso insensível1
retornar o comprimento do⎕S
PCRE S Earch para'.p|un|no|f'
any-char, "p" ou "un" ou "no" ou "f"⊃⍨∘⊃
e use o primeiro elemento disso (0 se não houver) para escolher31 28 30
esta listaPortanto:
Ap r, S ep , J un e No v selecionarão o número no índice 2, ou seja, 30
F eb selecionará o número no índice 1, ou seja, 28
qualquer outra coisa selecionará o número no índice 0, ou seja, 31
* Usando Classic e contando
⍠
como⎕OPT
.fonte
Modelo Mediawiki, 19 bytes
fonte
MATL , 22 bytes
Experimente online!
Explicação
fonte
Wolfram Language (Mathematica) ,
4630 bytesExperimente online!
Dará um
28
ou29
para fevereiro, dependendo se o ano atual é um ano bissexto.Como funciona
Todos os comandos de data no Mathematica vai interpretar a entrada tal
April
,APR
,ApRiL
, e assim por diante como o primeiro dia do mês correspondente no ano corrente. (Como bônus, entradas como"February 2016"
ou{2016,2}
também funcionam conforme o esperado.)#~NextDate~"Month"
fornece o primeiro dia do mês seguinte eDayCount
o número de dias entre seus dois argumentos. O número de dias entre 1º de abril e 1º de maio é 30, o número de dias em abril.fonte
Java 8 , 47 bytes
Experimente online!
Acabou usando a mesma idéia que a resposta JS de Herman Lauenstein , onde a data para 31 foi adiada para o próximo mês. Java requer um ano, para que tenha sido definido como
1
.fonte
Retina ,
323128 bytesExperimente online! Editar: salvou 1 byte graças a @RobertBenson. Economizou 3 bytes graças a @ovs.
fonte
q / kdb +, 36 bytes
Solução:
Exemplos:
Explicação:
Existem milhões de maneiras de esfolar um gato. Eu acho que é um pouco diferente dos outros. Pegue a segunda e a terceira letras da entrada, minúsculas e depois procure-as na string
"ebeprunov"
. Se eles estiverem no local 0, então é fevereiro; se estiverem em um local> 0, terão 30 dias; se não estiverem na sequência, terão 31 dias.fonte
Excel VBA,
4743 bytesFunção de janela imediata anônima do VBE que recebe entrada, como nome, abreviação ou número do mês, do intervalo
[A1]
e gera a duração desse mês no ano 2001 para a função de janela imediata do VBE.Versão antiga
fonte
PHP,
3833 + 132 + 1 bytesEconomizou 5 bytes graças a Titus
Executar como tubo com
-nF
Experimente online!
fonte
.' 1'
, parece funcionar no TIO sem ele!<?=date(t,strtotime($argn));
(executado como pipe com-nF
).' 1'
, mas não estava funcionando. Depois de ver seu comentário, tentei descobrir o que havia feito de errado. Como eu estava executando o programa no dia 31 do mês, estava levando o 31º dia (atual) para qualquer mês que eu inseri, o que o colocaria além do mês atual. O dia 31 de fevereiro se transforma em 3 de março, portanto, o código retorna 31 (o número de dias em março). Por esse motivo, todo mês retornava 31. Portanto, ele funciona sem o.' 1'
dia <= 28 do mês.'t'
->t
. Além disso, eu tive que fazer várias pesquisas para descobrir como "correr como cano-nF
", mas descobri isso (acho). :)Java (OpenJDK 8) , 126 bytes
Experimente online!
fonte
false
para uma expressão booleana, como1<0
para salvar alguns bytes.QBIC ,
4935 bytesSignificativamente mais curto com alguns truques.
Explicação
fonte
Perl 5 , 24 bytes
Código de 23 bytes + 1 para
-p
.Experimente online!
fonte
Ruby , 45 bytes
Experimente online!
Ruby
Date.parse
aceita o nome do mês por conta própria. O que normalmente seria um shift-right (>>
) realmente adiciona ao mês doDate
objeto. A subtração afeta o dia do mês, que será retrocedido para o último dia do mês anterior.fonte
Kotlin , 92 bytes
Experimente online!
fonte