Te encanta el almuerzo. Sin embargo, usted está a dieta y quiere asegurarse de no almorzar accidentalmente dos veces en un día. Por lo tanto, debe hacer un programa que lo ayude a asegurarse.
Sin embargo, una complicación es que almuerzas en un horario muy extraño. La hora a la que almuerza es MES: DÍA PM (puede usar UTC o zona horaria localizada). Así es, si el día es el 14 de julio , almuerzas a las 7:14 PM .
Para su programa, debe usar la fecha y hora actuales (no tome datos) y generar un valor de verdad constante si ya ha almorzado durante el día (o es la hora del almuerzo ahora), o un valor de falsedad constante si no lo has hecho
Ejemplos: (Tiempo que ejecuta el programa => salida)
- 4 de mayo 11:35 a.m. => falso (almorzará a las 5:04 p.m.)
- 3 de junio 5:45 PM => falso (almorzará a las 6:03 PM)
- 28 de julio 8:30 PM => verdadero (almorzaste a las 7:28 PM)
- 15 de diciembre 3:25 PM => verdadero (almorzaste a las 12:15 PM)
- 29 de febrero 2:29 PM => verdadero (es exactamente la hora del almuerzo)
- 12 de octubre 12:00 AM => falso (día recién comenzado)
Referencia:
Respuestas:
Swift 3 , 310 bytes
¡Echale un vistazo!
Esto imprime
true
yfalse
, para la verdad y la falsedad, respectivamente.fuente
05AB1E ,
1518 bytesPruébalo en línea!
Explicación
fuente
Octava , 61 bytes
Pruébalo en línea!
Explicación:
Primero las funciones:
now()
Devuelve la hora en formato decimal. Los paréntesis son opcionales.datestr
convierte un número decimal en una cadena en el formato dado en su segundo argumentostr2num
convierte una cadena en un númerodiff
toma la diferencia entre dos númerosDescompostura:
Tomamos esto del medio:
datestr(now,'mmddHHMM')
: Primero tomamos la hora actualnow
como entradadatestr
y especifica el formatommddHHMM
. Las letras significan:mm = month
,dd = day
,HH = hour
,MM = minutes
yAM
especifica que las horas deben estar en un formato de 12 horas. No se incluyen separadores, para que sea lo más corto posible. Se emited = 07142117
en el momento de escribir esta explicación. Me referiré a esa parte a partirx
de ahora.[(d=x)(1:4);d(5:8)]
: Almacena la cadena de arriba, comod
, luego crea una matriz con dos elementos, los primeros cuatro caracteres, luego los 5-9 caracteres. Esto da :Donde los números se almacenan como cadenas, no números. Llamaremos al resultado anterior por
y
debajo.str2num(y)
convierte la matriz de caracteres en números, donde cada fila se convierte en un número. Esto da[714; 2122]
. Llamaremos al resultado paraz
.diff(z)>1200
toma la diferencia entre los dos números y comprueba si la hora actual es 1200 más alta que la fecha actual. Esto representa AM / PM. Esto nos da el resultado deseado.fuente
Pyth,
222120 bytes-1 byte gracias a @ Mr.Xcoder
¡Prueba esto!
enfoque antiguo,
2220 bytes¡Intentalo!
explicación
fuente
&g.d6+.d4 12g.d5.d7
funcionaría para 19 bytes? No estoy seguro y todavía no lo he probado, pero ...&g.d6+12.d4g.d5.d7
Sería 18 en realidad. Además, en el enfoque anterior, no creo que necesite el`
, y eso tendría 18 bytes de longitud. No sé, podría estar equivocado.g++720.d5*60.d4+*60.d6.d7
, pero desafortunadamente es más larga (25 bytes). Sin embargo, podría ser una fuente de inspiración y pensé que debería mencionarlo.C #, 174 bytes
Pruébalo en línea!
fuente
()=>...
)Action<bool>
para guardar bytes. ÚseloDateTime.Now
al acceder al mes y al día. En generalpublic
no es necesario yProgram
puede ser solo una letra. Úselousing D=System.DateTime;
para guardar bytes. En general, es una buena idea, pero podría jugar mucho golf. Bienvenido a PPCG!PHP y otros lenguajes con estas funciones comunes: aproximadamente 28 a 29 bytes:
o alternativamente
los cuales se imprimirán.
posiblemente con
?1:0
dependiendo de la representación. Posiblemente los bytes se corten si se usa un lenguaje que tiene eco implícito, o no final ';'.¿Por qué uno obtiene los valores en variables y todo lo demás, cuando no es necesario :)
date()
deja algo como literales que no están definidos, por ejemplo,7 May 2017 17:22:43
pasa la expresión1722 - 1200 >= 507
a eval (). Byte guardado cambiándolo al equivalente1722 - 1199 > 507
.¿Quién dice que eval está muerto? ;-)
fuente
Java, 81 bytes
Pruébalo en línea!
Sin golf:
fuente
java.util.Date
en el recuento de bytes.Haskell,
135129 byteseste desembalaje es bastante molesto, tal vez el manejo de la cadena sea más adecuado
// edit: guardias de patrones seguros 5 bytes
fuente
Mathematica,
656462 bytes3 programas
Estos son cada byte menos si
≥
cuentan como un solo byte en Mathematica.Explicaciones
Date[]
devuelve una lista en el formulario{y,m,d,h,m,s}
. EntoncesDate[][[4;;5]]
son las horas y minutos de la hora actual.p=Date[][[#]]&;
hacep
una función que toma los índices que queremos y nos da esas partes de la fecha.{60,1}.#&
es una función anónima que toma el producto punto{60,1}
y la entrada para obtener una forma de comparar tiempos. Es un byte más corto queTimeObject
.p@2
es equivalente ap[2]
, el número del mes.+{12+p@2~Mod~12,0}
agrega{12,0}
al mes y la fecha cuando no estamos en diciembre, y agrega lo{0,0}
contrario. (¡Gracias, michi7x7!)>=
es el operador de comparación, pero no podemos comparar {horas, minutos} con {mes ajustado, fecha} de entrada .../@
asigna{60,1}.#&
a ambos lados de la desigualdad entre paréntesis, por lo que podemos comparar los tiempos correctamente.{60,1}.#&
, utilizan#
para representar la entrada a una gran función anónima, y&
para indicar el final.@Date[]
Aplica la función grande en su línea (que extrae partes de una lista) a la lista de fechas en sí.[Date[][[#]]&]
Aplica la función grande en su línea a otra función anónima, una que extrae partes de la lista de fechas.Prima
Por otro lado, si almorzamos entre la 1AM y las 12:59 PM, entonces podríamos ahorrar 25 bytes con solo
{60,1}.#&[Date[][[#]]]&/@(4;;5>=2;;3)
.Puede probar todo esto pegando el código en el sandbox de Wolfram Cloud y haciendo clic en Gear-> Evaluar celda o presionando Shift + Enter o Numpad Enter.
fuente
13:01
de24:31
Date[]
el bono con(Date[]+{0,12,0,0,0,0})
(puede haber una forma de jugar al golf, pero12UnitVector[6,2]
es más largo). El problema es que en fechas como el 3 de diciembre, almorzamos a las 12:03, no a las 24:03, por lo que debemos agregar 12 excepto en diciembre . Esto nos obliga a: 1. mirar dentro de la fecha para ver si estamos en diciembre o no (como en mis respuestas), o 2. escribir una función que examine si pasamos a 24: XX después del hecho, que sería más.JavaScript (ES6), 75 bytes
Esos nombres largos de funciones ...
fuente
Python 3 , 104 bytes
Pruébalo en línea!
Todas las pruebas de fecha y hora. Reemplacé el 29 de febrero con el 28 de febrero porque la fecha no válida no funcionaba.
fuente
R , 92 bytes
Pruébalo en línea!
fuente
q, 31 bytes
Ejemplo:
Intérprete está disponible aquí.
Versión antigua
fuente
2$
pad se convertirá6
en6_
lugar de_6
, por lo que querrás(-2)$
, pero puedes cancelar esos 3 caracteres adicionales usando la taquigrafíastring
como($)
... o en lugar de usar $ para el pad, antepone "0" y luego toma los últimos 2 caracteres:{x:.z.P;x>"T"$":"sv -2#'"0",'($)12 0+
mmdd$\:x}
para 49 bytesJavaScript, 75 bytes
Que es equivalente al siguiente código:
fuente
t
puede usarse mientras se modificat=new Date,t.setMinutes(t.getDate(t.setHours(13+t.getMonth(n=+t))))<n
Python 2.7, 130 bytes
Pruébalo en línea
Nota: puede haber un problema con el letrero. Perdone eso porque sigo a IST y es bastante confuso porque son las 2:28 am aquí ahora. Corrija la señal si siente que está mal.
fuente
Perl, 45 caracteres
Si tengo que proporcionar un método, será 45 para
sub c{...}
. Si tengo que imprimir,say ()||0
incluso hace 47. Agregaré eso si es un requisito.fuente
you need to make a program to help you make sure
que los fragmentos no están permitidos; dicho eso, cualquiera de los métodos de salida enumerados generalmente se considera válidoperl -e
era en general bien, pero otros han proporcionado funciones, por lo que he editado en.Excel,
525049 bytesLa entrada es esta fórmula en cualquier celda.
La salida es
TRUE
oFALSE
.El manejo de fechas incorporado de Excel ayuda mucho.
La
TIME
función devuelve la hora del almuerzo del día como un valor de tiempo que, si se convierte en una fecha, se usaríaJan 0, 1900
. Lo comparamosNOW - TODAY
para obtener la hora actual con un valor de fecha de0
oJan 0, 1900
.Guardado 2 bytes gracias a Wernisch
Guardado 1 byte gracias a Adam
fuente
now()-today()
amod(now(),1)
JavaScript, 62 caracteres
Código de prueba a continuación:
Mostrar fragmento de código
fuente
Excel VBA, 55 bytes
Función de ventana inmediata anónima de VBE que no toma entrada y genera un valor booleano que representa si he almorzado en la ventana inmediata de VBE
fuente
Ruby , 64 + 7 = 71 bytes
Requiere el
-rtime
indicador porque, por alguna razónTime::parse
, la única función lo requiere fuera delTime
módulo completo .Pruébalo en línea! (también imprime la hora actual)
fuente
Julia 0.6.0 99 bytes
a=split(string(Dates.today()),"-");(Dates.hour(now())<parse(a[2]))&&Dates.minute(now())<parse(a[3])
Julia ha incorporado una función para usar el reloj / calendario de la computadora. Mi computadora se ejecuta en ubuntu 16.04 y ya tiene un reloj de 12 horas, por lo que no puedo decir si lo que hice funciona con otra máquina que usa un reloj diferente, pero parece que funciona en mi máquina.
fuente
JavaScript ES6, 70 bytes
Tal vez no sea así en algunos milisegundos ...
fuente
Matlab, 241 bytes
Explicación: Primero, obtengo la fecha como una cadena. Entonces, aíslo el mes y el día. Dado que el problema indica que siempre se interpreta como PM, entonces automáticamente escribo falso si la hora es en AM. Si la hora actual es en PM, entonces continúo y solo comparo los números de la hora.
Nota: Lo he formateado de forma ligeramente diferente aquí para facilitar la lectura.
fuente