Escriba una función que tome una fecha y regrese el día de la semana del próximo 29 de febrero después de esa fecha.
La entrada es una cadena en el formato ISO extendido: AAAA-MM-DD (por ejemplo, el 27 de mayo de 2010 sería "2010-05-27").
La salida es una cadena que es el nombre del día de la semana (por ejemplo, "lunes"). Las mayúsculas no importan, pero da el nombre completo en inglés.
Si la fecha dada es el 29 de febrero, regrese el día de la semana del próximo 29 de febrero .
Utilice los cálculos para el calendario gregoriano proleptico (por lo tanto, utiliza los cálculos del año bisiesto gregoriano para toda su longitud). No se preocupe por el calendario juliano o cuando ocurrió el cambio de juliano a gregoriano. Solo asume Gregorian para todo.
La función debería funcionar al menos para el rango de "0001-01-01" - "2100-01-01".
Siéntase libre de usar las bibliotecas estándar que le proporcione el idioma de su elección, pero no use bibliotecas de terceros a menos que desee incluir ese código como parte de su solución.
El código más corto (menos caracteres) gana.
Ejemplos:
func("0001-01-01")
->"Sunday"
func("1899-12-03")
->"Monday"
func("1970-01-01")
->"Tuesday"
func("1999-07-06")
->"Tuesday"
func("2003-05-22")
->"Sunday"
func("2011-02-17")
->"Wednesday"
func("2100-01-01")
->"Friday"
(y no, no tienes que nombrar la función func
)
Consejos:
- Recuerde que los años que terminan en 00 que no son divisibles por 400 no son años bisiestos.
- El 1 de enero de 0001 es un lunes.
date
. Simplemente elimine GNUWin32 de la RUTA y debería funcionar. O cambiedate
aGet-Date
(ese tipo de comportamiento alternativo solo funciona cuando no se encuentra ningún comando, para verificar, solo usegcm date
). De todos modos, no considero que haya un problema particular con este script ya que GNUWin32 no forma parte de ninguna instalación estándar de Windows.get-date
y recibí el mensaje de errorMethod invocation failed because [System.Management.Automation.PSObject] doesn't contain a method named 'op_Addition'.
¿Necesita PS2 o .Net 4 o algo así?Get-Date
sino aSystem.DateTime
.$d=Get-Date "0400-01-01"; $d++
da un mensaje de error acerca de++
no estar definido en DateTime. El mismo reemplazo++
con+=1
o+="1"
o+='1'
da el mensaje de error sobre PSObject. Y solo+"1"
funciona.Ruby 1.9, 85 caracteres
Solución directa. Llama a la función con
f[args]
.0001-01-01
corrigió el caso de prueba.fuente
def*
solo define una función llamada*
. De esa manera no necesito un espacio entredef
y el nombre de la función.T-SQL
166185caracteresYa estaba jugando con las funciones de fecha T-SQL, así que pensé por qué no ...
La solución original era incorrecta ...
Esto es lo que realmente tengo que hacer para conseguir que la estrategia para el trabajo:
fuente
C #, 176
fuente
string f(string d){...}
.ToString("dddd")
imprime la fecha en la configuración regional actual, sin embargo, no en inglés.string f(string d){var n=DateTime.Parse(d).AddDays(1);return DateTime.IsLeapYear(n.Year)&&n.DayOfYear==60?n.DayOfWeek+"":f(n+"");}
Bash, 96 bytes
Gracias Peter ... Versión altamente golfista, 96 bytes:
Versión anterior, 229 bytes
Muestra de E / S
fuente
i=0;d=;until [ `date -d"$1 $i days" +%m-%d` = "02-29" ];do((i++));done
Perl, ninguna biblioteca fecha:
160 159155El beneficio real de estas bibliotecas de fechas es enviar la longitud de los nombres de los días a otra persona.
Por otro lado, creo que esta es la única solución hasta ahora que funciona independientemente de la configuración regional.
fuente
FECHA y algo de pegamento BASHy (90)
La función:
Pruebas:
fuente
D: 175 caracteres
Más legible:
Es muy fácil escribir en D, pero definitivamente no va a ganar ningún concurso de golf de código. Aún así, fuera del golf de código, preferiría que sea fácil de escribir y comprender, pero mucho más que tener un término breve pero difícil de escribir y comprender.
fuente
Java 8 - 252 caracteres
Golfizado:
Sin golf:
fuente
Rebol - 78
Sin golf:
Ejemplo de uso (en la consola Rebol):
fuente
PHP, 104 bytes
Descompostura
date(L)
:1
para el año bisiesto, de lo0
contrariodate(l)
: representación textual completa del día de la semanafuente
GNU coreutils, 71 bytes
Búsqueda lineal de los próximos 8 años (peor caso, dado 2096-02-29). Sed encuentra y emite la primera línea que coincide con el 29 de febrero.
Me sorprendió descubrir que
t;d;:;q
era más corto que probar para ver si los dígitos permanecían (/[01]/d;q
), a pesar de tener el doble de comandos.Pruebas
Agregué una línea adicional de pruebas para casos de esquina difíciles:
fuente