Introdução
Alguns meses são completamente simétrica , ou seja, eles têm simetria central, bem como simetria de reflexão , como February of 2010
:
February 2010
┌──┬──┬──┬──┬──┬──┬──┐
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┘
Alguns meses têm apenas simetria central, como no February of 1996
mês atual, o April of 2018
:
February 1996
┌──┬──┬──┬──┐
│ │ │ │ │
┌──┬──┬──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┴──┴──┘
│ │ │ │ │
└──┴──┴──┴──┘
April 2018 ┌──┐
│ │
┌──┬──┬──┬──┬──┬──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┴──┴──┴──┴──┴──┘
│ │
└──┘
E alguns são assimétricos , como no mês anterior, o March of 2018
:
March 2018
┌──┬──┬──┬──┐
│ │ │ │ │
┌──┬──┬──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┘
│ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┘
Tarefa
Tome uma entrada na forma de uma data , por exemplo:
2018.04
2018.03
2010.02
1996.02
Emita a simetria correspondente , por exemplo
2018.04
->centrally symmetric
2018.03
->asymmetric
2010.02
->symmetric
1996.02
->centrally symmetric
Regras
- Isso é código de golfe, então o menor número de bytes vence.
- As brechas padrão obviamente não são permitidas.
- Suponha que a semana comece com segunda - feira (obrigado a Angs e Arnauld pela sugestão).
- Considere apenas anos entre 1900 e 2100 ( inclusive ).
- As regras de formatação de entrada e saída são permissivas , o que significa que você pode usar qualquer formato equivalente nativo ao idioma de sua escolha.
- Baseie sua solução no calendário gregoriano .
f(x)
para todos os itens dax
lista". Que tal "receber uma entrada na forma de uma data"?Respostas:
JavaScript (ES6), 55 bytes
Guardado 6 bytes graças a @Neil
Recebe entrada na sintaxe de currying
(year)(month)
. Retornafalse
para assimétrico,true
para simétrico central e0
para completamente simétrico.Experimente online!
Quão?
Definimos a função g () que retorna o dia da semana de aaaa / mm / 01 , como um número inteiro entre 0 = segunda-feira e 6 = domingo.
Como getDay () retorna nativamente 0 = domingo a 6 = sábado, mudamos o resultado para o intervalo esperado consultando o sétimo dia.
Então definimos:
Como o construtor de Date espera um mês indexado em 0 e porque g () diminui m depois de passá-lo para Date , na verdade, primeiro calculamos o dia da semana do primeiro dia do mês seguinte e, em seguida, adicionamos o atual.
Meses completamente simétricos
Os meses completamente simétricos começam com uma segunda-feira e são seguidos por um mês que também começa com uma segunda-feira. Isso só é possível para fevereiro de um ano sem salto.
Isso leva a n = 0 .
Meses centralmente simétricos
Meses centralmente simétricos são aqueles cuja soma do dia da semana do primeiro dia e do mês seguinte é 7 .
Daí o segundo teste: n == 7 .
Nenhum built-in, 93 bytes
Usa a congruência de Zeller . Mesmo formato de E / S da outra versão.
Experimente online!
fonte
true
,false
e emfilenotfound
vez de0
...g=m=>new Date(y,m,7).getDay()
economiza 6 bytes.T-SQL , 213 bytes (regras estritas de E / S)
A consulta acima considera as rígidas regras de formatação de entrada / saída.
A entrada é obtida da coluna
s
de uma tabela denominadat
:Ungolfed:
SQLFiddle 1
T-SQL , 128 bytes (regras de E / S permissivas)
Se o formato da entrada e da saída puder ser alterado, eu escolheria inserir o primeiro dia do mês, em uma
datetime
coluna chamadad
:A saída seria 1 para assimétrico, 0 para simétrico, NULL para simétrico central.
Se pudermos executá-lo em um servidor (ou com um login) configurado para o idioma BRITISH, poderemos remover
SET DATEFIRST 1
economizando mais 15 bytes.SQLFiddle 2
fonte
CONVERT(DATETIME,s+'.01')
vez deREPLACE
. Você também pode deixar o espaço emFROM (SELECT
DATEFORMAT
configuração. Por exemplo, se usarmosSET LANGUAGE BRITISH
,CONVERT(DATETIME,'2018.02.01')
seria 2 de janeiro, em vez de 1º de fevereiro.Haskell, 170 bytes
Retorna 2 para simétrico central, 1 para simétrico e 0 para assimétrico
fonte
Python 2,
118104 bytesObrigado a Jonathan Allan e Dead Possum pelas melhorias!
Python 3,
122105 bytesEntrada
Saída
fonte
Y
ouM
), portanto, atualmente, é um trecho e é inválido. Se você alterar as variáveis para chamadas, noinput()
entanto, isso será perfeitamente correto._[0]+_[-1]
->sum(..)
Vermelho ,
199, 168161 bytesExperimente online!
0 - assimétrico
1 - simétrico
2 - simétrica centralmente
Mais legível:
fonte
Mathematica, 137 bytes
Função pura. Toma o ano e o mês como entrada e retorno
-1
por meses assimétricos,0
por meses centralmente simétricos e1
por meses totalmente simétricos. Não sei por que esse idioma não pode converter de um dia da semana para um número por padrão ...fonte
Utilitários Bash + GNU, 70
A entrada está formatada como
YYYY/MM
.A saída é numérica, da seguinte maneira:
Presumo que este formato de saída seja aceitável para esta pergunta.
Experimente online!
fonte
C, 111 bytes
Invoque
f(year, month)
, 0 para completamente simétrico, 1 para assimétrico, 2 para simétrico central.fonte
return
pory=
(o primeiro parâmetro) e caindo fora da função.Perl 6 , 74 bytes
Bloco vazio, implicitamente uma função de 1 argumento, uma string semelhante
"2012-02"
. Devoluções:Quando o padrão é simétrico, à medida que .dia da semana aumenta em 1, .days-in-month precisaria mover 2 para continuar a corresponder (o mês começaria um dia depois, mas precisaria terminar um dia antes ),
2 * .day-of-week + .days-in-month
nos fornece uma medida dessa lacuna. No módulo 7, deve ser 1 para obter simetria, mas podemos primeiro verificar o fevereiro sem pulos a um preço baixo, verificando o total antes do módulo (segunda-feira e 28 dias por mês é a combinação mínima possível).Estou surpreso que isso consiga tantos bytes, mas são necessários 36 bytes apenas para marcar uma data e obter o dia da semana e os dias desse mês.
fonte