Las computadoras están en todas partes hoy en día: en automóviles, trenes, patinetas, incluso en reactores nucleares. La posibilidad de que su software se ejecute en un dispositivo de viaje en el tiempo es solo cuestión de tiempo. ¿Puedes lidiar con eso? ¿Al menos puedes detectarlo?
Tu tarea:
- Escriba un programa que repita y siga consultando la hora del sistema para detectar el viaje en el tiempo.
- Si el tiempo avanza un día o más entre dos consultas consecutivas, es un viaje en el tiempo hacia adelante. En este caso, su programa debería imprimir:
TS TS: YYYY? You mean we're in the future?
- Si el tiempo retrocede, por cualquier cantidad, entre dos consultas consecutivas, es un viaje en el tiempo hacia atrás. En este caso, su programa debería imprimir:
TS TS: Back in good old YYYY.
TS TS
son las marcas de tiempo antes y después del viaje en el tiempo.YYYY
Es el año de destino.- Las marcas de tiempo pueden estar en cualquier formato, que incluya al menos el año, mes, día, hora, minuto y segundo de 4 dígitos, separados por no dígitos.
Limitaciones:
- Debe admitir fechas en los siglos XIX, XX y XXI, al menos.
- Debe usar un idioma que existía antes de que se publicara este desafío.
- Debe publicar sus respuestas solo después de publicar este desafío.
- Debe usar un idioma que existía antes de que se publicara su respuesta.
- Puede editar su respuesta solo después de haberla publicado.
- Su programa no debe imprimir ninguna salida que no sea la salida requerida. Un ocasional "Gran Scott!" esta permitido.
Este es el código de golf. La respuesta más corta gana.
Las referencias de películas relevantes probablemente harán que su respuesta sea demasiado larga, pero podrían darle votos positivos.
Respuestas:
CJam, 118 bytes
Esto no funciona con el intérprete en línea.
Salida de muestra después de ajustar el tiempo de mi computadora dos veces:
fuente
Python 2, 210 bytes
Las marcas de tiempo se imprimen en
YYYY-MM-DD HH:MM:SS
formato, separadas por punto y coma. Cambió a Python 2 desde 3 ya que es 2 caracteres más cortos para imprimir. LoscorreosnodeseadosGreat Scott!
para lasnormas queno son viajeros en el tiempo, ya que es más fácil y más barato que configurar una impresión condicional.fuente
JavaScript (ES6), 263 bytes
Esto probablemente podría ser reescrito para hacerlo más eficiente / pequeño.
Fuente:
fuente
now()
llamadas, puede perder un evento de viaje.o=(n=Date).now()
.8.64e+7
es dos caracteres más largo que86400
.Pitón 3, 195
Actualmente no imprime Great Scott porque no puedo encontrar una buena manera de hacerlo ocasionalmente.
fuente
Bash + coreutils, 177
fuente
Ruby, 194 bytes
Todavía no he tenido tiempo de reducir esto realmente a medida. Estoy seguro de que hay algunas optimizaciones escondidas allí.
Sin golf (y mucho más legible):
Editar: corregido para pedirle tiempo al sistema operativo, en lugar de a un humano.
fuente
loop{}
lugar dewhile 1...end
e intente usar+
para la concatenación de cadenas en lugar de la interpolación.Lua 5.3, 174 bytes
Esto está jugando en gran medida fuera de la regla "Las
marcas de tiempo pueden estar en cualquier formato" ... que me tomé la libertad de usar el formato de "segundos desde el 1 de enero de 1970" Si mantengo mi mala interpretación de la impresión de marcas de tiempo y adopto el estructura de MeepDarknessMeep, puedo (poco éticamente) exprimir esto para ...
155 bytes
fuente
Timestamps may be in any format, that includes at least the 4-digit year, month, day, hour, minute and second, separated by non-digits.
- eso no permite segundos desde la época.Back in good ol YYYY
pero debería imprimirseBack in good old YYYY
. (Tenga en cuenta la d en viejo)Lua 5.3,
179178173171169168163 bytesNota al margen: si elimina la necesidad de un número de año completo, reste seis bytes. La razón es que% c de lua (¡o de windows o de alguien!) No genera el año completo. Debido a esto, las marcas de tiempo pueden parecer raras.
¡Esto también aprovecha las marcas de tiempo que pueden ser separadas por caracteres que no sean dígitos!
Gracias por notificarme sobre mi antigua referencia de math.abs y otras mejoras @thenumbernine :)
Lua 5.3, 151 bytes
Esto es 'copiar' el método de @ thenumbernine de mostrar la hora simplemente mostrando la marca de tiempo en lugar de la fecha real. Esto no es competitivo ya que creo que es un poco tramposo, solo lo publico aquí para mostrar mi trabajo :)
fuente
C: 363 bytes
Minified usando este útil script :
Original:
Ejemplo de ejecución:
Podría deshacerme de 10 bytes quitando el
sleep
supongo.Por cierto, algunos manejos que saltan el tiempo para Mac / Linux:
fuente
sleep
.JavaScript (ES6)
181174170 BytesNota: No se ha probado con una máquina en tiempo real.
Este código se ejecuta en Firefox, Chrome, Edge, Node.js Harmony (o io.js para el caso). Sin embargo, yo uso
alert
, por lo que tendrá que ser sustituido porconsole.log
de nodo y Io Suport: (187 Bytes)Explicado:
fuente
Python,
170165 bytesEsto se debe mucho a la respuesta de Morgan Thrapp. El truco principal aquí es la normalización timedelta, que convenientemente hace que timedelta.days sea negativo cuando se mueve incluso un poco hacia el pasado, y 0 cuando se mueve menos de un día hacia el futuro.
fuente
import*
que no necesites eldatetime.
prefijo.import*
permite escribir endatetime.now()
lugar dedatetime.datetime.now()
. Tiene sentido, de alguna manera ...Caché ObjectScript, 199 bytes
Este problema se puede resolver en MUMPS antiguos, pero sería irrazonablemente largo, ya que ANSI MUMPS carece de la
$ZD[ATE]T[IME]
función intrínseca para formatear fechas en marcas de tiempo legibles por humanos.Este programa probablemente no detectará viaje en el tiempo a antes del 1 Ene 1841, ni el viaje en el tiempo a partir del 31 de Dic de 9999, ya que estos son los límites de la
$H[OROLOG]
intrínseca cronometraje . Este programa también solo tiene precisión de segundo nivel; las fallas de tiempo al revés del sub-segundo nivel probablemente escaparán de su atención.fuente
TSQL, 355 bytes
En el trabajo, por lo que no hay languges geniales que se queden con su servidor de producción de SQL Server =)
Versión de golf
Versión más legible con cambios menores.
SQL no es tan malo con respecto a las marcas de tiempo ya que es un tipo de datos de primera clase.
Por el bien del golf, estamos utilizando un tipo con una precisión de 3 milisegundos. El ciclo en sí toma menos que eso para iterar (dependiendo de su servidor). La clave aquí es internamente que la marca de tiempo es flotante y el tipo entero cuenta cuántos días pasaron. Funcionará bien desde el 1 de enero de 1753 hasta el 31 de diciembre de 9999.
fuente
VBA, 258 bytes
Funcionó con: Excel 2007 en Windows 7
305 bytes si se requiere usabilidad
Si desea que este Código sea "comprobable", agregue
Application.Wait (Now() + TimeValue("0:00:01"))
despuésh=t
Salida
A continuación se muestra el archivo de prueba que utilicé. Estoy sinceramente sorprendido de la poca seguridad que Windows tiene a veces. Puede no ejecutarse como se esperaba en todas las computadoras
fuente
Javascript
173 169162 bytesJavascript es bastante popular ...
Explicación (versión anterior del código):
fuente
Procesamiento, 270 bytes
Expandido:
Salida de muestra:
fuente
Ruby,
160157155154 bytesMuchas cosas para jugar golf aquí
fuente
Mathematica, 295 bytes
El programa solicita al sistema operativo cada segundo un nuevo TS.
Salida
Probado por alimentación manual en fecha / hora.
Definitivamente podría tener un mejor formato de salida. Cumple con los requisitos establecidos.
fuente
LocalTime[]
? Aparece solo una vez en el siguiente código.Groovy, 244 bytes
fuente
Java, 378 bytes.
fuente