Contenido
Ajedrez
Ajedrez por computadora: una breve historia
Llegaría a inicios de los años 1900s una máquina que podía jugar el final de Rey y Torre versus Rey. Era la máquina de Torres Quevedo y no era un fraude, era en realidad un desarrollo ingenieril monumental para la época.
// ------------------------------------------------------------------------------------------------------------------------------- // PHOTOSWIPE
var initPhotoSwipeFromDOM = function(gallerySelector) {
// parse slide data (url, title, size ...) from DOM elements // (children of gallerySelector) var parseThumbnailElements = function(el) { var thumbElements = el.childNodes, numNodes = thumbElements.length, items = [], figureEl, linkEl, size, item;
for(var i = 0; i < numNodes; i++) {
figureEl = thumbElements[i]; //
// include only element nodes if(figureEl.nodeType !== 1) { continue; }
linkEl = figureEl.children[0]; // element
size = linkEl.getAttribute('data-size').split('x');
// create slide object item = { src: linkEl.getAttribute('href'), w: parseInt(size[0], 10), h: parseInt(size[1], 10) };
if(figureEl.children.length > 1) {
//
if(linkEl.children.length > 0) {
// thumbnail element, retrieving thumbnail url
item.msrc = linkEl.children[0].getAttribute('src');
}
item.el = figureEl; // save link to element for getThumbBoundsFn items.push(item); }
return items; };
// find nearest parent element var closest = function closest(el, fn) { return el && ( fn(el) ? el : closest(el.parentNode, fn) ); };
// triggers when user clicks on thumbnail var onThumbnailsClick = function(e) { e = e || window.event; e.preventDefault ? e.preventDefault() : e.returnValue = false;
var eTarget = e.target || e.srcElement;
// find root element of slide var clickedListItem = closest(eTarget, function(el) { return (el.tagName && el.tagName.toUpperCase() === 'FIGURE'); });
if(!clickedListItem) { return; }
// find index of clicked item by looping through all child nodes // alternatively, you may define index via data- attribute var clickedGallery = clickedListItem.parentNode, childNodes = clickedListItem.parentNode.childNodes, numChildNodes = childNodes.length, nodeIndex = 0, index;
for (var i = 0; i < numChildNodes; i++) { if(childNodes[i].nodeType !== 1) { continue; } if(childNodes[i] === clickedListItem) { index = nodeIndex; break; } nodeIndex++; } if(index >= 0) { // open PhotoSwipe if valid index found openPhotoSwipe( index, clickedGallery ); } return false; };
// parse picture index and gallery index from URL (#&pid=1&gid=2) var photoswipeParseHash = function() { var hash = window.location.hash.substring(1), params = {};
if(hash.length < 5) { return params; } var vars = hash.split('&'); for (var i = 0; i < vars.length; i++) { if(!vars[i]) { continue; } var pair = vars[i].split('='); if(pair.length < 2) { continue; } params[pair[0]] = pair[1]; } if(params.gid) { params.gid = parseInt(params.gid, 10); } return params; }; var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) { var pswpElement = document.querySelectorAll('.pswp')[0], gallery, options, items; items = parseThumbnailElements(galleryElement); // define options (if needed) options = { // define gallery index (for URL) galleryUID: galleryElement.getAttribute('data-pswp-uid'), getThumbBoundsFn: function(index) { // See Options -> getThumbBoundsFn section of documentation for more info var thumbnail = items[index].el.getElementsByTagName('img')[0], // find thumbnail pageYScroll = window.pageYOffset || document.documentElement.scrollTop, rect = thumbnail.getBoundingClientRect();
return {x:rect.left, y:rect.top + pageYScroll, w:rect.width}; }
};
// PhotoSwipe opened from URL if(fromURL) { if(options.galleryPIDs) { // parse real index when custom PIDs are used // http://photoswipe.com/documentation/faq.html#custom-pid-in-url for(var j = 0; j < items.length; j++) { if(items[j].pid == index) { options.index = j; break; } } } else { // in URL indexes start from 1 options.index = parseInt(index, 10) - 1; } } else { options.index = parseInt(index, 10); } // exit if index not found if( isNaN(options.index) ) { return; } if(disableAnimation) { options.showAnimationDuration = 0; } // Pass data to PhotoSwipe and initialize it gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options); gallery.init(); }; // loop through all gallery elements and bind events var galleryElements = document.querySelectorAll( gallerySelector ); for(var i = 0, l = galleryElements.length; i < l; i++) { galleryElements[i].setAttribute('data-pswp-uid', i+1); galleryElements[i].onclick = onThumbnailsClick; } // Parse URL and open gallery if it contains #&pid=3&gid=1 var hashData = photoswipeParseHash(); if(hashData.pid && hashData.gid) { openPhotoSwipe( hashData.pid , galleryElements[ hashData.gid - 1 ], true, true ); } }; // execute above function initPhotoSwipeFromDOM('.my-gallery'); // ====================================== // FIN SCRIPTS PHOTOSWIPE // ======================================
CIUDAD DE MÉXICO (proceso.com.mx).–El mundo del ajedrez cambió a inicios del año 2000, cuando los programas de computadora que jugaban al ajedrez empezaron a mostrar ya un nivel respetable, incluso para los grandes maestros. De pronto, de tener un numeroso conjunto de programas comerciales que más o menos generaban ganancias, empezaron a salir los programas que parecía, habían dado un salto importante y ahora parecían "entender" más el ajedrez.
Y e que el tema de hacer una máquina que jugase al ajedrez y le ganase a los mejores exponentes del juego ciencia, siempre ha sido el sueño dorado de la ciencia ficción. Y por años hubo intentos para ello, aunque los primeros eran francamente fraudulentos, como "el Turco", un maniquí que jugaba en un escritorio donde en el interior de éste, había una maquinaria con un sin fin de engranes para que jugara. Pero el Turco (denominado así porque el maniquí llevaba un turbante), era un ingenioso dispositivo en donde se escondía un maestro de ajedrez de baja estatura y hacía creer que el sueño de tener la máquina que jugaba al ajedrez (y ganaba), estaba resuelto.
Llegaría a inicios de los años 1900s una máquina que podía jugar el final de Rey y Torre versus Rey. Era la máquina de Torres Quevedo y no era un fraude, era en realidad un desarrollo ingenieril monumental para la época. Torres Quevedo demostró que se podía hacer hardware que jugase al ajedrez (o al menos, un subconjunto de este juego).
Curiosamente, el padre del cómputo moderno, Alan Turing, escribió un artículo planteando si una máquina podría jugar al ajedrez. abe decir que en ese momento no existían siquiera las computadoras, pero Turing era un adelantado a su época y ya se planteaba este problema. Sin embargo, fue Claude Shannon, padre de la informática, quien escribiría el artículo mas importante sobre ajedrez por computadora. Shannon describía los pasos para escribir un programa de esta naturaleza. Este artículo es tarea obligada a todo aquel que quiera entrar en el mundo de la programación de software de ajedrez.
Y a partir de ahí comienza un historia fascinante pero, de nuevo, el cambio que aceleró la posibilidad de crear software de ajedrez poderoso llegó cuando nacieron las computadoras personales, las máquinas caseras. Y de este nicho salió FRitz, Komodo, Sargon, CHE++, MChess, HIARCS, Belle, etcétera.
La historia completa la hemos resumido en un pequeño libro donde se dan cuenta de los avances en el micromundo del ajedrez por computadora. La obra por una parte contiene un sesgo académico pero además, para el ajedrecista, el libro será de fácil consulta y además de estudio, pues se ponen algunas de las partidas de los programas de computadora, ya sea contra seres humanos o bien, contra otra máquina.
A quien le interese este libro digital, este es el enlace. Es un libro completamente gratuito y contiene muchísimos datos que probablemente muchos lectores desconocen.
Comentarios
Otras Noticias
// Obtener todos los elementos con clase .col-md-12 var colElements = document.querySelectorAll('.col-md-12');
// Iterar sobre cada elemento colElements.forEach(function(element) { // Verificar si tiene un hijo inmediato con clase .titulo-region var tituloRegion = element.querySelector('.titulo-region');
if (tituloRegion) { // Agregar la clase .is-sticky al elemento padre element.classList.add('is-sticky'); } });
// Obtener el elemento article dentro de .fila-especial-v2 .p50 var articleElement = document.querySelector('.home .fila-especial-v2 .p50 article');
// Obtener el texto del elemento .z-foto .bajada p var bajadaText = articleElement.querySelector('.z-foto .bajada p').textContent;
// Crear un nuevo elemento para mostrar el texto obtenido var textoElement = document.createElement('p'); textoElement.textContent = bajadaText;
// Obtener el elemento .z-txt .titulo dentro del article var tituloElement = articleElement.querySelector('.z-txt .titulo');
// Insertar el nuevo elemento al final del article articleElement.appendChild(textoElement);
Cortesía de Proceso.
Dejanos un comentario: