Python 2 , 38 30 28 bytes
lambda S:`6793**164`[len(S)]
Pruébalo en línea!
Desafortunadamente, todavía es un byte más largo que la mejor respuesta de Python 2 hasta ahora; aunque no use el enklactenfoque.
¡Ahora un byte más corto que la respuesta de cada uno !
¿Como funciona?
Después de mucha fuerza bruta, encontré una expresión que da como resultado un número que tiene los dígitos correctos.
Noté que mirar solo un dígito específico de las longitudes de la cadena dada requería 3 bytes ( %10). Así que escribí otro programa de Python ( enlace de Pastebin ) para buscar más números que mapeen directamente las longitudes de las cadenas de entrada al día de la semana.
El número mágico se ve así: 6793**164 = 28714733692312345620167113260575862840674216760386883406587492336415023761043044176257567032312859371641211117824224067391750766520256112063756278010050204239810862527958109285342869876264808102743173594017101607983288521836082497514383184553444755034407847810524083812459571382103831904835921560285915349760536969265992879312869538914200854305957428078269094250817029486005437991820466986793657301214564264748923199288698278615871481529585816783654841131577178922192383679718074693535597651237893794976519274268917335387876260270630339777501802739852278932279775510324916969726203688466311848240746465178859847331248655567344801(un número con unos impresionantes 629 dígitos decimales)
Y como puede ver, el número proporciona la asignación necesaria desde [28, 20, 13, 11, 4, 16, 17] a [0, 1, 2, 3, 4, 5, 6] (las cadenas de Python son 0- indexado):
2871 4 733692 3 1 2 34 5 6 20 1 6711326 0 5758628406742167603868834...
[4]^ [11]^ [13]^ [16]^ ^[17] ^[20] ^[28]
Mi programa también encontró otras expresiones que dan números con la propiedad requerida, pero que ahora cobran más bytes para representar (29 en lugar de 28): 19439**540, 34052**726, 39311**604, 44873**182, 67930**164y 78579**469. (Esas son todas las expresiones encontradas por el programa vinculado; su ejecución tomó varias horas).
Función alternativa que requiere 28 bytes: lambda S:`7954<<850`[len(S)]
Función alternativa que requiere 29 bytes: lambda S:`9699<<2291`[len(S)]
Función alternativa que requiere 30 bytes: lambda S:`853<<4390`[len(S)+9]
Función alternativa que requiere 31 bytes:lambda S:`1052<<3330`[len(S)+8]
¿Como funciona? ¿Cómo generé ese número? (Respuesta de 30 bytes)
La respuesta de 30 bytes fue lambda S:`3879**41`[len(S)%10].
Al [28, 20, 13, 11, 4, 16, 17]observar las longitudes de la cadena de entrada , noté que todos los últimos dígitos en base diez difieren, lo que resulta en la lista [8, 0, 3, 1, 4, 6, 7]. Por lo que sólo necesitaba un mapeo de esa lista a la lista de los siete días de la semana, [0, 1, 2, 3, 4, 5, 6].
Mi primer enfoque simplemente usó una cadena para realizar la asignación: lambda S:"13*24*560"[len(S)%10]aunque la cadena requería once bytes ( "13*24*560").
Así que escribí un programa de Python ( enlace de Pastebin ) para probar las expresiones aritméticas que resultan en un número entero con dígitos coincidentes, con la esperanza de desarrollar aún más el programa. Lo que se me ocurrió hasta ahora es `3879**41`(solo diez bytes, la única expresión y, por lo tanto, la más pequeña que encuentra mi programa).
Por supuesto, hay muchas expresiones posibles diferentes que uno podría probar; Tuve la suerte de que hubiera uno en el formulario a**bcon un resultado razonablemente pequeño que se ajustara a mis necesidades.
Sólo para cualquier persona curiosa, 3879**41 = 1372495608710279938309112732193682350992788476725725221643007306215781514348937145528919415861895033279220952836384201346579163035594383625990271079 = 1.372... * 10**147.
Otra función válida que encontré al buscar expresiones alternativas que desafortunadamente requiere 32 bytes: lambda S:`7**416`[len(S)%10+290]