El algoritmo de Tomohiko Sakamoto para torpes (o no)

Calculando el día de la semana

Calculando el día de la semana

Ayer nos íbamos a la cama con la noticia de la aparición de un nuevo algoritmo informático que devuelve el día de la semana de una fecha dada. Lo curioso es que no es cualquier algoritmo, si no que es el más corto, eficaz, simple y optimizado que se conoce hasta ahora. En sólo unas pocas líneas de código (en lenguaje C), su autor, Tomohiko Sakamoto, concentra toda la esencia de la algoritmia más genial para realizar un cálculo que siempre ha tenido un encanto especial para los programadores.

Intentaremos explicar de forma clara y concisa cómo funciona este algoritmo, aunque tampoco es fácil, pero lo intentaremos. Simplemente abstrayéndonos un poco y relajando nuestras neuronas, creemos que es bastante evidente y cristalino (o no).

Vemos primero el código de Tomohiko Sakamoto. Después la explicación.

#include <stdio.h>
 
 
int dow(int y, int m, int d) {
	static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
	y -= m < 3;
	return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
 
int main(void) {
	const char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
				"Thursday", "Friday", "Saturday"};
	printf("%s\n", days[dow(2013, 5, 13)]);
	return 0;
}

El 1 de enero del año 1 después de Cristo, considerado el inicio de la era cristiana, es (fue) un lunes en el calendario gregoriano, calendario originario de Europa y actualmente utilizado de manera oficial en casi todo el mundo. Por lo tanto, el 0 de enero de ese año 1 fue domingo (este día técnicamente no existe, pero Sakamoto lo tiene en cuenta porque, aunque el estándar ISO 8601 del año 2004 estableció que la semana comienza en lunes, en Estados Unidos y en muchos otros países anglófonos el primer día es el domingo).

Cada cuatro años tenemos un año bisiesto con un día más en el calendario. Años bisiestos, pues, son todos aquellos divisibles entre 4 (con resto 0), salvo los años seculares (los últimos de cada siglo; los terminados en dos ceros [00]), excepto los divisibles entre 400. Por lo tanto, un año terminado en 00, tal que xx00, no puede ser bisiesto a menos que xx sea divisible entre 4.

Con estas premisas claras, Tomohiko Sakamoto determina que la fórmula y/4 - y/100 + y/400 devuelve el número de años bisiestos que hay desde el año 1 después de Cristo hasta el año dado.

La parte más difícil de entender es y -= m < 3. Esta sentencia especifica que si el mes en menor de 3 (enero o febrero), el año se hace igual al año menos 1 (y = y - 1) ; si es mayor de tres, el año se queda igual, o lo que es lo mismo que el año es igual al año menos cero (y = y - 0). Se entiende pues que, si el mes no es ni enero ni febrero, no podemos contar el 29 de febrero (si existe) del año dado.

Así pues, y + y/4 - y/100 + y/400 devuelve el día 0 de enero (realmente el 31 de diciembre del año anterior) del año dado. Además, como cada año tiene 365 días, es decir, es divisible entre 7 (días por semana) con un resto de 1 (día), a no ser que sea bisiesto, al día de la fecha dada se le incrementa ese resto de 1; en caso de ser bisiesto se incrementa en 2 (días).

La matriz t simplemente es un juego de números de días pasados desde que comienza el mes m+1. Por lo que t[m-1] + d es el número de días pasados en el año y hasta la fecha dada. La fórmula final (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7 es el resto del número de días desde el 0 de enero del año 1 después de Cristo hasta la fecha dada, lo que realmente es el día de la semana solicitado (teniendo en cuenta que el 0 es el domingo).

La matriz constante days guarda cadenas para sustituir los números devueltos por sus valores textuales.

La verdad es que es una delicia de algoritmo y, además, muy fácil de traducir a otros lenguajes de programación. Nuestro más alto respeto al autor.

El día en que se quiso prohibir la pornografía en Internet (hace veinte años)

CDA 230

CDA 230

El 8 de febrero del año 1996, el presidente estadounidense Bill Clinton rubricaba con su firma la llamada Communications Decency Act (algo así como Ley de decencia en las comunicaciones) o CDA, el primer (que no único) gran intento del Congreso de los Estados Unidos para regular prohibir el material pornográfico en Internet. Un año después, en 1997, la Corte Suprema de los Estados Unidos rechazó las partes de la ley comprometidas por atentar contra la libertad de expresión, todo ello en el caso judicial conocido como “Reno contra ACLU“.

Esta ley pretendía controlar los contenidos de la Red que pudieran dañar la sensibilidad de los niños, o esa fue la historia que contaron desde las altas esferas. Se correspondía con el epígrafe quinto, sección 230, de la Ley de Telecomunicaciones de 1996 que fue introducido en el Comité del Senado de Comercio, Ciencia y Transporte por los senadores James Exon y Slade Gorton un año antes, en 1995. Los que la vulneraran se exponían a un máximo de 250.000 dólares de multa y a dos años de cárcel, nada más y nada menos.

Aquella disposición provocó que se levantaran en armas digitales millones de defensores de los ciberderechos, lo que dio en la primera manifestación virtual de la que se tiene constancia como tal, conocida como “luto en Internet“: una gran parte de los sitios web más visitados de entonces dejaron sus páginas de inicio en negro en señal de protesta. Justo hace ahora veinte años, podemos afirmar que se estrenó la primera acción de ciberactivismo.

Como decíamos al inicio, la Corte Suprema de Justicia de los Estados Unidos falló a favor de la libertad de expresión y anuló una ley federal. Era la primera vez que el Tribunal Supremo aplicaba a la Red de redes las protecciones que la Primera Enmienda a la Constitución de los Estados Unidos garantizaba con respecto a la libertad de expresión.

El magistrado John Paul Stevens, en nombre de la mayoría, declaró en su dictamen que “a pesar de la legitimidad y la importancia de la meta legislativa de proteger a la niñez de los materiales peligrosos, coincidimos en que el estatuto limita la libertad de expresión“.

Aquel momento no fue el único en la historia en el que se intentó censurar Internet aplicando restricciones de expresión en la Red, otro ejemplo lo encontramos en septiembre  del año 2000, cuando un tribunal francés ordenó a Yahoo! que impidiera la compra de  artículos nazis sin importar el país de procedencia de dicho material, una sentencia que sería recurrida más tarde por la empresa  norteamericana al considerar que dicho dictamen sentaría el precedente negativo de que los sites debieran adaptarse a las leyes específicas de cada país.

Sin lugar a dudas, tras los atentados del 11 se septiembre de 2001 en Nueva York y Washington, fue cuando la mayoría de los países democráticos se sumaron a estos intentos de controlar la libertad de expresión en la Red. Este control, en principio, se orienta hacia la conservación generalizada de las informaciones relativas a los correos electrónicos recibidos y enviados y a los sitios consultados en la Red, lo cual supone que los proveedor de servicios de Internet y los operadores de telefonía se convertien en una especie de agentes de policía, mientras que las fuerzas del orden tendrán pleno acceso a toda esa masa de informaciones.

Para terminar podemos ver la infografía que se creó años después y que permitía conocer bien aquella ley y, sobre todo, explicar una de las disposiciones que no fue anulada y que era crucial para legislar la responsabilidad sobre la libre expresión publicada en la Red, la sección 230. [Gracias a Ignacio Agulló por su inestimable aportación en los comentarios de esta entrada].

CDA 230 (clic para ampliar)

CDA 230 (clic para ampliar)

¿Es posible volver a superar el récord de puntos en ‘Donkey Kong’?

'Donkey Kong'

‘Donkey Kong’

El fin de la persecución del récord mundial de puntos en el ‘Donkey Kong‘ (Nintendo, 1981) original se ha discutido, profetizado, pronosticado y especulado durante años. Siempre que se consigue batir una marca se habla del final del reto, de que ya es imposible llegar más allá; y siempre aparece alguien que consigue arañar unos cuantos puntos más al máximo anterior, desbaratando los propósitos y las intenciones de todos los precedentes.

Eso es lo que ha pasado este 5 de mayo de 2016 de la mano de Wes Copeland, un joven de Massachusetts (EE. UU.) que ha logrado encajar nada más y nada menos que 1.218.000 puntos en ‘Donkey Kong’, concretamente en la máquina de arcade clásica de 1981. Además, el récord ha sido doble, pues ha supuesto la primera vez en la historia que se ha superado el umbral de 1,2 millones de puntos (en el arcade físico), una hazaña considerada por muchos como algo de todo punto imposible hasta el momento. Asimismo, Copeland había conseguido 1.173.800 puntos (batiendo 24 de los 28 récords mundiales anteriores) antes de perder una sola de sus vidas. Algo increíble. (Todo esto lo controla y lo registra Twin Galaxies).

Wes Copeland

Wes Copeland

Tras más de tres horas de juego, bajo presión y al llegar a la penúltima pantalla con su primera vida aún, Copeland estaba en condiciones de ejecutar una táctica muy común de los grandes expertos que consiste en que el jugador sacrifique sus vidas extra de manera deliberada (ya que son innecesarias en ese momento; ahora veremos por qué) con el fin de repetir la última ronda de barriles varias veces y exprimir así hasta el último punto. Y es que el juego está, en ese momento, a punto de terminarse.

Es bastante complicado llegar hasta ese nivel con una vida extra; Copeland tenía tres. Así pues, tras intercambiar sus vidas por puntos, el último Jumpman murió irremediablemente debido al bug conocido como Pantalla de la muerte (Kill Screen) que afecta a este juego a los siete segundos de comenzar el nivel 22. Y se acabó: 1.218.000 puntos. Veamos, a continuación, una grabación de este error fatal.

El bug de ‘Donkey Kong’ de la pantalla 22 es un ejemplo de error que no se debe a un desbordamiento de un valor entero en un contador de nivel (como solía ser normal en aquella época), sino que es producto de un descuido por parte de los desarrolladores con respecto a la cantidad de tiempo permitido y a los algoritmos que lo determinan. Ello hace que el protagonista muera a los siete segundos de comenzar, y por eso nos preguntamos si es posible volver a superar el récord de puntos en ‘Donkey Kong’.

Podemos disfrutar ahora del vídeo completo de la partida que llevó el récord a Wes Copeland (¡son más de tres horas de saltitos y barriles!).

Por otro lado, es obligatorio comentar también aquí la controversia y el conflicto que existe en la consecución de récords para sistemas antiguos. Y es que hay puristas que exigen que un récord deba ser logrado en una máquina física real o consola clásica, y a otros les basta con que la marca haya sido obtenida en un emulador.

Dean Saglio

Dean Saglio

En el caso de ‘Donkey Kong’, el 8 de julio del año 2009, un tal Dean Saglio, jugando vía el emulador MAME, superó el entonces récord de puntuación, pero como lo hizo desde un PC, no pudo ser declarado el campeón “oficial” del mundo. A los campeones de máquinas clásicas de arcade no les sienta nada bien esta competición paralela, pero hoy día ha sido más o menos aceptada y se recogen y registran los marcadores tanto de Arcade original como de emuladores MAME. Así pues, Dean Saglio sigue siendo el campeón en esta categoría (aunque, en el cómputo general, por debajo Wes Copeland) con 1.206.800 puntos.

Si alguien, algún día, supera la puntuación de Copeland, él propio Copeland ha dicho que él no será quien lo haga, y también ha declarado que no intentará asumir revancha alguna si algún otro lo consigue. Según sus propias palabras, “esta es la última marca personal que podré volver a conseguir”; continuará jugando en torneos, pero sus días de recormand han terminado.

¿Es posible volver a superar el récord de puntos en ‘Donkey Kong’? En teoría, después de una partida perfecta y al llegar al final, los puntos no tendrían la posibilidad de elevarse más, pero quién sabe si alguien nos vuelve a sorprender con algún truco o habilidad oculta que no conocemos. ¡Larga vida a ‘Donkey Kong’!

Por cierto, y para concluir, recomendar el visionado de la película documental ‘The King of Kong: A Fistful of Quarters‘ de 2007, una crónica sobre Steve Wiebe y su alzamiento a máximo puntuador en ‘Donkey Kong’ hace ya casi diez años.

Hiperrealidad, un vistazo al futuro (o no)

Algunos memes irrealizables que nunca quisieron ser, pero que lo tendrían que haber sido sin lugar a dudas, no cumplen dicha premisa, según nuestro honesto entender. Y ese es el caso de Hyper-Reality, un vídeo que, sin ningún género de dudas, dará la vuelta a Internet varias veces.

De la mano del realizador, diseñador y artista Keiichi Matsuda, financiado a través de Kickstarter y tras dos años de producción, llega este corto de seis minutos que es una mirada satírica y provocadora a un futurible mundo donde lo digital ya no sólo está en nuestras pantallas, sino en todo lo que nos rodea como una superposición virtual. Realidad aumentada a chorromortero. Simplemente genial.

‘That Day We Left’, el videojuego que examina la crisis de los refugiados de Siria

'That Day We Left'

‘That Day We Left’

¿Un videojuego humanitario o una manera de hacer negocio a costa de la actualidad?

A medida que el mundo continúa luchando, con mayor o menor acierto, con la crisis de los refugiados de Siria, un estudio de videojuegos ha decidido mostrar una perspectiva desde el punto de vista del refugiado.

Ese estudio es Inner Void Interactive, con sede en Roma, que acaba de anunciar el lanzamiento de ‘That Day We Left‘, una aventura 3D para PC y Mac. La intención, según ellos mismos han apuntado en un comunicado de prensa, es “proporcionar una visión realista de la cuestión política y humanitaria que es la crisis de los refugiados, pero desde el propio punto de vista de un refugiado”. Todavía no disponemos de información sobre la fecha de lanzamiento.

Más de 4,5 millones de personas han huido de Siria desde que comenzó la guerra civil en el año 2011. La crisis llamó la atención en todo el mundo el año pasado, cuando muchos de los refugiados que huían de los combates, murieron mientras cruzaban el Mediterráneo. Inner Void quiere explorar por lo que estos refugiados atravesaron, lo que, según la compañía, demuestra que los videojuegos también pueden transmitir experiencias acerca de las dificultades y de la guerra.

Los jugadores asumen el papel de Rashid, un refugiado que conduce a su familia en el peligroso viaje que es llegar desde Siria hasta Europa. ‘That Day We Left’ combina la gestión de recursos con opciones y narrativa, basado todo ello en las experiencias que los refugiados han relatado.

Lo dicho, ¿un videojuego humanitario o una manera de hacer negocio a costa de la actualidad? Le seguiremos la pista.

18 de 119«...10...1617181920...304050...»
eBook ‘retroPLOF!’

retroPLOF!

Especifica tu dirección de correo electrónico y pulsa 'Comprar ahora'. Puedes pagar con tu cuenta de PayPal o con cualquier tarjeta bancaria.

E-mail envío eBook:

Sigue teknoPLOF! vía…
 
RSS
Twitter
Facebook
Google
 
Ready Set Click!

Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación. Más información.

ACEPTAR
Aviso de cookies