¿Qué versiones de Ubuntu son compatibles?

16

Dada una fecha de entrada, su entrada generará la lista completa de versiones compatibles de la distribución Ubuntu Linux en esa fecha.

La lista completa de todos los lanzamientos es la siguiente:

Versión Nombre del código Fecha de lanzamiento Compatible hasta

4.10 Warty Warthog 2004-10-20 2006-04-30
5.04 Erizo canoso 2005-04-08 2006-10-31
5.10 Breezy Badger 2005-10-13 2007-04-13
6.06 LTS Dapper Drake 2006-06-01 2009-07-14 2011-06-01 (Servidor)
6.10 Edgy Eft 2006-10-26 2008-04-25
7.04 Feisty Fawn 2007-04-19 2008-10-19
7.10 Gutsy Gibbon 2007-10-18 2009-04-18
8.04 LTS Hardy Heron 2008-04-24 2011-05-12 2013-05-09 (Servidor)
8.10 Ibex Intrepid 2008-10-30 2010-04-30
9.04 Jaunty Jackalope 2009-04-23 2010-10-23
9.10 Karmic Koala 2009-10-29 2011-04-30
10.04 LTS Lucid Lynx 2010-04-29 2013-05-09 2015-04-30 (Servidor)
10.10 Maverick Meerkat 2010-10-10 2012-04-10
11.04 Natty Narwhal 2011-04-28 2012-10-28
11.10 Ocelote onírico 13/10/2011 2013-05-09
12.04 LTS Pangolin Preciso 2012-04-26 2017-04-26
12.10 Quetzal Quantal 2012-10-18 2014-05-16
13.04 Raring Ringtail 2013-04-25 2014-01-27
13.10 Saucy Salamander 2013-10-17 2014-07-17
14.04 LTS Trusty Tahr 2014-04-17 2019-04
14.10 Utopic Unicorn 2014-10-23 2015-07-23
15.04 Vivid Vervet 2015-04-23 2016-01
15.10 Wily Werewolf 2015-10-22 2016-07
16.04 LTS Xenial Xerus 2016-04-21 2021-04

Reglas

  • Para cada versión compatible, se generará la cadena de versión exacta, p. Ej. 4.10
  • Para las versiones LTS (soporte a largo plazo), LTSse agregarán a la versión
  • Las tres versiones más antiguas de LTS vienen en dos sabores: escritorio y servidor. Si ambas versiones de LTS son compatibles en la fecha dada, la salida será simplemente la cadena de versión como se indicó anteriormente. Sin embargo, si solo se admite la versión del servidor, debe agregar -serveral final de la cadena de versión
  • Al momento de escribir, 4 de las versiones recientes solo tienen AAAA-MM en sus fechas admitidas hasta. Debe tratar estas fechas como si fueran el último día del mes dado. por ejemplo, 2019-04 debe tratarse como 2019-04-30
  • No habrá salida para fechas fuera del rango de fechas completo capturado en la tabla
  • Los formatos de fecha de entrada son flexibles, pero deben contener alguna enumeración de Año, Mes y Día. El número de días o segundos (u otras unidades) de una época no son formatos de entrada válidos.
  • Las listas de salida se pueden dar en cualquier formato que sea conveniente para su idioma
  • Puede usar las funciones de fecha y hora de su idioma
  • Puede suponer que todas las entradas son válidas

Ejemplos:

De entrada y salida:

2000-01-01    
2004-10-20 4.10
2005-05-05 4.10, 5.04
2006-06-06 5.04, 5.10, 6.06LTS
2010-10-10 6.06LTS-server, 8.04LTS, 9.04, 9.10, 10.04LTS, 10.10
2021-04-30 16.04LTS
2021-05-01    
Trauma digital
fuente
44
Breezy Badger ...?
Alex A.
Algunos de tus ejemplos son incorrectos. 2010-10-10debería volver6.06LTS-server, 8.04LTS, 9.04, 9.10LTS, 10.04LTS, 10.10
Mwr247
@ Mwr247 Gracias, lo arreglé. ¿Ves otros errores?
Trauma digital
@ Mwr247 Ah: olvidé citar la cadena de fecha al pasar a una función.
Trauma digital
1
@DigitalTrauma Whoops! Había eliminado una agrupación allí para guardar dos caracteres, pero no me di cuenta del efecto que tenía en ese aspecto de la condición. Ya está arreglado.
Mwr247

Respuestas:

5

JavaScript (ES6), 552 bytes

d=>(d=d.replace(/^20|-/g,'')*1,[for(r of'41020,60430;50408,61031;51013,70413;-60601,90714,110601;61026,80425;70419,81019;71018,90418;-80424,110512,130509;81030,100430;90423,101023;-91029,110430;-100429,130509,150430;101010,120410;110428,121028;111013,130509;-120426,170426;121018,140516;130425,140127;131017,140717;-140417,190430;141023,150723;150423,160131;151022,160731;-160421,210430'.split`;`.map(a=>a.split`,`))if(d>=(a=Math.abs(f=r[0]))&&((m=d<=r[1])||r[2]&&d<=r[2]))((a+'').slice(-6,-2)/100).toFixed(2)+'LTS'.slice(f)+(m?'':'-server')].join`, `)

La construcción de la matriz de datos ocupa ~ 68% del tamaño total. El resto es formato de entrada, búsqueda de matriz y construcción de cadena de salida.

La cadena de datos se divide en una matriz de matrices de 2 (normal) o 3 (servidor) de longitud. Las fechas se reducen a formato numérico, con el "20" inicial eliminado (junto con los ceros iniciales después de eso). LTS se denota por una fecha de inicio negativa. Los números de versión pueden derivarse convenientemente de todos menos los dos últimos dígitos de la fecha de inicio positiva, divididos por 100.

Mwr247
fuente
Woohoo - primera respuesta! Lo siento, soy un novato de JS, ¿puedo probar ES6 en un navegador de alguna manera? ¿O cuál es la forma más fácil de verificar?
Trauma digital
@ DigitalTrauma Sí, solo asigne la función a una variable (agregue F=antes del código anterior) y luego simplemente llame a la función a través de ella ( F("2010-10-10")). Puede ejecutarlo en cualquier consola de desarrollador de navegador moderna (tecla f12).
Mwr247
+1 - ¡Se ve bien ahora! (No estoy seguro de por qué pongo mis comentarios anteriores en contra de mi propia pregunta y no su respuesta, bueno, ya entendió el punto :))
Digital Trauma