Você ama o almoço. No entanto, você está em uma dieta e deseja garantir que não almoce acidentalmente duas vezes em um dia. Então você precisa criar um programa para ajudá-lo a ter certeza.
No entanto, uma complicação é que você almoça em um horário muito estranho. A hora em que você almoça é MÊS: DIA PM (você pode usar o UTC ou o fuso horário localizado). É isso mesmo, se o dia for 14 de julho , você almoça às 19:14 .
Para o seu programa, você precisa usar a data e a hora atuais (não aceite entrada) e gerar um valor de verdade consistente se você já almoçou durante o dia (ou agora é a hora do almoço) ou um valor consistente de falsidade se você não tiver.
Exemplos: (Tempo em que você executa o programa => saída)
- 4 de maio às 11:35 AM => false (você almoçará às 17:04)
- 3 de junho 17:45 => false (você almoçará às 18:03)
- 28 de julho 20:30 => true (você almoçou às 19:28)
- 15 de dezembro 15:25 => true (você almoçou às 12:15)
- 29 de fevereiro 14:29 => verdadeiro (é exatamente a hora do almoço)
- 12 de outubro às 12:00 => false (dia apenas iniciado)
Referência:
Respostas:
Swift 3 , 310 bytes
Confira!
Isso imprime
true
efalse
, por verdade e falsidade, respectivamente.fonte
05AB1E ,
1518 bytesExperimente online!
Explicação
fonte
Oitava , 61 bytes
Experimente online!
Explicação:
Primeiro as funções:
now()
retorna a hora em um formato decimal. Os parênteses são opcionais.datestr
converte um número decimal em uma sequência no formato fornecido em seu segundo argumentostr2num
converte uma string em um númerodiff
leva a diferença entre dois númerosDemolir:
Tomamos isso do meio:
datestr(now,'mmddHHMM')
: Primeiro tomamos o tempo atualnow
como entradadatestr
e especifica o formatommddHHMM
. As letras significam:mm = month
,dd = day
,HH = hour
,MM = minutes
eAM
especifica que as horas deve estar em um formato de 12 horas. Nenhum separador está incluído, para mantê-lo o mais curto possível. Ele é produzidod = 07142117
no momento em que escrevemos essa explicação. Vou me referir a essa parte a partirx
de agora.[(d=x)(1:4);d(5:8)]
: Armazena a sequência acima, poisd
cria uma matriz com dois elementos, os quatro primeiros caracteres e os 5-9 caracteres. Isso fornece :Onde os números são armazenados como seqüências de caracteres, não números. Vamos chamar o resultado acima para
y
abaixo.str2num(y)
converte a matriz de caracteres em números, onde cada linha se transforma em um número. Isso dá[714; 2122]
. Vamos chamar o resultado paraz
.diff(z)>1200
pega a diferença entre os dois números e verifica se a hora atual é 1200 maior que a data atual. Isso é responsável por AM / PM. Isso nos dá o resultado desejado.fonte
Pitão,
222120 bytes-1 byte graças a @ Mr.Xcoder
Tente isso!
abordagem antiga,
2220 bytesTente!
explicação
fonte
&g.d6+.d4 12g.d5.d7
funcionaria para 19 bytes? Não tenho a certeza e não têm realmente testado ainda, mas ...&g.d6+12.d4g.d5.d7
seria 18 na verdade. Além disso, na abordagem antiga, não acho que você precise do`
, e isso tornaria 18 bytes de comprimento. Eu não sei, posso estar errado.g++720.d5*60.d4+*60.d6.d7
, mas infelizmente isso é mais longo (25 bytes). No entanto, pode ser uma fonte de inspiração e achei que deveria mencionar.C #, 174 bytes
Experimente online!
fonte
()=>...
)Action<bool>
para salvar bytes. UseDateTime.Now
ao acessar o mês e o dia. Em geral,public
não é necessário eProgram
pode ser apenas uma letra. Useusing D=System.DateTime;
para salvar bytes. Ótima idéia, mas pode ser muito praticada. Bem-vindo ao PPCG!PHP e outras linguagens com estas funções comuns: cerca de 28 a 29 bytes:
ou alternativamente
ambos serão impressos.
possivelmente com
?1:0
dependendo da representação. Possivelmente bytes cortados se for usada uma linguagem que tenha eco implícito ou nenhum ';' final.Por que colocar os valores em variáveis e todo o resto, quando não é necessário :)
date()
deixa qualquer coisa como literal que não está definida, por exemplo,7 May 2017 17:22:43
passa a expressão1722 - 1200 >= 507
para eval (). Byte salvo, alterando-o para o equivalente1722 - 1199 > 507
.Quem disse que eval está morto? ;-)
fonte
Java, 81 bytes
Experimente online!
Ungolfed:
fonte
java.util.Date
na contagem de bytes.Haskell,
135129 bytesessa descompactação é bastante irritante, talvez o manuseio de cordas seja mais adequado
// edit: guardas padrão seguros 5 bytes
fonte
Mathematica,
656462 bytes3 Programas
Estes são cada um byte menos se
≥
contam como um único byte no Mathematica.Explicações
Date[]
retorna uma lista no formulário{y,m,d,h,m,s}
. entãoDate[][[4;;5]]
acontece com as horas e minutos da hora atual.p=Date[][[#]]&;
fazp
uma função que recebe nos índices que queremos e nos dá as partes da data.{60,1}.#&
é uma função anônima que utiliza o produto escalar{60,1}
e a entrada para obter uma maneira de comparar os tempos. É um byte menor queTimeObject
.p@2
é equivalente ap[2]
, o número do mês.+{12+p@2~Mod~12,0}
aumenta{12,0}
o mês e a data em que não estamos em dezembro e adiciona{0,0}
contrário. (Obrigado, michi7x7!)>=
é o operador de comparação, mas não podemos comparar {horas, minutos} com {mês ajustado, data} no sentido da entrada .../@
mapeia os{60,1}.#&
dois lados da desigualdade entre parênteses, para que possamos comparar os tempos corretamente.{60,1}.#&
, eles#
representam a entrada de uma grande função anônima e&
significam o fim.@Date[]
Aplica a grande função em sua linha (que extrai partes de uma lista) à própria lista de datas.[Date[][[#]]&]
Aplica a grande função em sua linha a outra função anônima, que extrai partes da lista de datas.Bônus
Além disso, se almoçarmos entre 1h e 12h59, poderemos salvar 25 bytes com apenas
{60,1}.#&[Date[][[#]]]&/@(4;;5>=2;;3)
.Você pode testar tudo isso colando o código na caixa de proteção Wolfram Cloud e clicando em Equipamento-> Avaliar célula ou pressionando Shift + Enter ou Numpad Enter.
fonte
13:01
de24:31
Date[]
o bônus por(Date[]+{0,12,0,0,0,0})
(pode haver uma maneira de jogar isso, mas12UnitVector[6,2]
é mais longa). O problema é que em datas como 3 de dezembro, almoçamos às 12:03, e não às 24:03, então precisamos adicionar 12, exceto em dezembro . Isso exige: 1. espiar dentro da data para ver se estamos em dezembro ou não (como nas minhas respostas) ou 2. escrever uma função que examina se fomos para 24: XX após o fato, o que seria mais longo.JavaScript (ES6), 75 bytes
Esses nomes de função longos ...
fonte
Python 3 , 104 bytes
Experimente online!
Todos os testes de data e hora. Substituí 29 de fevereiro por 28 de fevereiro porque a data inválida não estava funcionando.
fonte
R , 92 bytes
Experimente online!
fonte
q, 31 bytes
Exemplo:
Intérprete está disponível here
Versão antiga
fonte
2$
pad will turn6
to6_
rather than_6
, so you'd want(-2)$
, but you can cancel out those extra 3 chars by using the shorthand forstring
as($)
... or instead of using $ to pad, prepend "0" and then take the last 2 chars:{x:.z.P;x>"T"$":"sv -2#'"0",'($)12 0+
mmdd$\:x}
for 49 bytesJavaScript, 75 bytes
Which is equivalent to the following code:
fonte
t
can be used while modifyt=new Date,t.setMinutes(t.getDate(t.setHours(13+t.getMonth(n=+t))))<n
Python 2.7, 130 bytes
Try it online
Note: There may be a problem with the sign. Please excuse that because I follow IST and it's quite confusing because it's 2:28am here now. Do correct the sign if you feel it is wrong.
fonte
Perl, 45 chars
If I have to provide a method, it will be 45 for
sub c{...}
. If I have to printsay ()||0
even makes it 47. I will add that in if it's a requirement.fonte
you need to make a program to help you make sure
that snippets are not allowed - that said either of your listed output methods are generally considered validperl -e
was generally ok, but others have provided functions, so I edited it in.Excel,
525049 bytesInput is this formula in any cell.
Output is either
TRUE
orFALSE
.Excel's built-in date handling helps a lot.
The
TIME
function returns the day's lunch time as a time value which, if converted to a date, would useJan 0, 1900
. We compare it againstNOW - TODAY
so we get the current time with a date value of0
orJan 0, 1900
.Saved 2 bytes thanks to Wernisch
Saved 1 byte thanks to Adam
fonte
now()-today()
tomod(now(),1)
JavaScript, 62 chars
Test code below:
Show code snippet
fonte
Excel VBA, 55 Bytes
Anonymous VBE immediate window function that takes no input and outputs a Boolean value representing whether I've had lunch to the VBE immediate window
fonte
Ruby, 64+7 = 71 bytes
Requires the
-rtime
flag because for some reasonTime::parse
is like, the only function requires it out of the entireTime
module.Try it online! (it also prints out the current time)
fonte
Julia 0.6.0 99 bytes
a=split(string(Dates.today()),"-");(Dates.hour(now())<parse(a[2]))&&Dates.minute(now())<parse(a[3])
Julia has built in function to use the clock/calendar of the computer. My computer is running on ubuntu 16.04 and already with 12 hour clock, so I can't say if what I did works with other machine using different clock, but seems to works on my machine.
fonte
JavaScript ES6, 70 Bytes
Maybe not that right on some milliseconds...
fonte
Matlab, 241 bytes
Explanation: First, I obtain the date as a string. Then, I isolate the month and day. Since the problem states that it is always interpreted as PM, then I automatically write false if the time is in AM. If the current time is in PM, then I continue on and just compare the numbers of the time.
Note: I've formatted it slightly differently here for readability.
fonte