edición general
342 meneos
7847 clics

El mejor programa jamás escrito (eng)

Soy un programador. Escribo juegos.Los programadores de juegos obtienen mucho respeto, Ninguno de ellos merece el honor que quiero otorgar a David Horne. Esto se debe a que David Horne escribió el mayor programa jamás escrito: ajedrez 1k en el ZX81. David Horne no es un mito urbano . David Horne logró lo que muchos incluso podrían considerar ahora imposible. Escribió un juego de ajedrez, incluso la inteligencia artificial, que se ejecutaba en una mal documentada, máquina con errores que contenía sólo 1k de memoria.

| etiquetas: programación , zx81 , ajedrez , inteligencia artificial
Comentarios destacados:                      
#4 os vais haciendo a la idea de porqué os pagan una mierda a los "programadores" de hoy en dia?
PICAR CODIGO: sois unos putos mecanógrafos, NO programadores. Y vuestros títulos superiores masters cursos e inglés hablado me los paso por el culo , despues de quitarle la grapa de la foto para que no rasque.
  1. "Pero espere un segundo. 1k era la capacidad de la máquina. ¿Cuánto estaba disponible? La respuesta, como se puede encontrar si sigue el enlace al final del artículo, es un magro seiscientos setenta y dos bytes! En este artículo se ocupa más espacio que eso.
  2. Los mejores juegos, como los mejores sintetizadores, y un montón de cosas más, son los que sacan el máximo partido a recursos limitados. Lo de ahora, con barbaridades de programas mediocres que ocupan cientos de gigas y que se venden como lo mejor porque ocupa mucho, no tiene nombre.
  3. This is not the greatest song program in the world. This is just a tribute

    www.youtube.com/watch?v=2Jvgbe9Kx0U
  4. Ains sí, el zx81 .... el Sinclair Chess en 600 y pico bytes de asm z80, que nostalgia.

    PERO

    ¡Jódete David!, Olivier ha hecho lo mismo pero solo con 487 bytes de tamaño. Y puede hacer cosas como una apertura española u otras cosas para pillarte :troll: www.bbc.com/news/technology-31028787

    Listado ASM x86 olivier.poudade.free.fr/src/BootChess.asm
  5. Y si lo queréis con gráficos, 1200 bytes en javascript :-D -> www.nanochess.org/archive/tiny_chess_2.html ideal para conseguir que la gente se entretenga por fin con tu blog.
  6. #4 Si se pica codigo sin un rumbo con sentido, tampoco es muy util. Hay programadores malisimos que pican muchas lineas de codigo como tu dices, pero son una autentica mierda o carecen de sentido.

    Aunque si estoy de acuerdo en el fondo de lo que creo intentas decir; hay muchos inutiles que van de programadores y no son capaces de escribir un maldito algoritmo simple (ya no hablo de que sean capaces de entender un libro de Knuth), y los titulos universitarios sirven de poco si no usan la cabeza.

    De todas formas lo de pagar una mierda suele ser en paises medio tercermundistas como Espana o en empresas con jefes de mierda.
  7. La caña, lo voy a compartir en Facebook (de todas formas nadie lo va a entender).
  8. Para todos los master of PHP que pululan por aquí quejándose de lo malos programadores que son los demás, si no presentáis vuestros trabajos, vuestra argumentación queda automáticamente invalidada.
  9. #5 ¿Conoces la anécdota de Hitchcock, Brian de Palma y la escena del cuchillo?
    Cuando le preguntaron a Brian de Palma cuanto había tardado en rodar una escena de ataque con cuchillo en la bañera que a Hitchcock le había llevado dos semanas el contesto que 2 horas.
    Entonces le preguntaron como había podido resolver en 2 horas una escena que a Hitchcock le había llevado dos semanas. El contestó que gracias al trabajo que Hitchcock hizo en dos semanas el la pudo resolver en dos horas.
    Además Horne lo hizo con las herramientas y lenguajes de programación limitados de su época
  10. Los únicos matemáticos buenos son los que utilizaban el ábaco.
  11. Dejad de discutir y haced algo útil para la humanidad.
  12. #11 Errrrr .... ¿Qué herramientas y lenguajes limitados? ambos están escritos en assembler de 16 bits, ambos usan la bios para ahorrarse las rutinas de impresión en pantalla y gestión del teclado. El Z80 y el 8086 son equiparables en potencia aunque el x86 direccione más memoria gracias al truco de los segmentos.
  13. #5 Ese código usa macros de compilador (como los 'if'), se debería comparar el tamaño de los ejecutables, de todas maneras, para ser justos, debería haberlo hecho también en un z80.
  14. #15 El z80 es de 8bits.
  15. #16 486 bytes. El chess de Olivier está escrito para caber en un sector de arranque de 512 bytes. No te hace falta ni sistema operativo. Arrancas el pc con un diskette y juegas.
  16. #17 Nopes. el bus de datos es de 8 bits pero direcciona 16 bits (64kb), tiene registros de 16 bits (DE,BC,etc) y operadores de 16 bits.
  17. #19 "direcciona" 16 bits, gastando dos registros de 8, y usando dos ciclos, no puede usar nada de 16 bits "de una vez" porque es de 8 bits, si me dices que ese ajedrez de 8086 rula en un 8088 te doy la razón.
  18. #20 Que use dos ciclos no implica que el opcode no sea de 16 bits. La unica diferencia real entre un 8088 y un 8086 es que el bus de datos del 86 es de 16 bits y solo emplea un ciclo en transmitir mientras que el 8088 necesita 2, pero el codigo es el mismo. ¿Que código de 8086 dices que no funciona en un 8088?
  19. #22 Ninguno, usando el doble de ciclos, era para darte la razón.
    Que el opcode sea de 16 bits no convierte el procesador en uno de 16 bits, el opcode como si es de 128bits, a la hora de ejecutarlo lo hará como uno de 8, usando 8 ciclos, porque es de 8 bits.
    Decir que el z80 es de 16 bits es como decir que la Atari Jaguar es de 64 bits.
  20. #1 "En este artículo se ocupa más espacio que eso." Nos ha jodido. Incluso codificando en ascii (que va a ser que no) el artículo tendría que tener seiscientos setenta y una letras como mucho.
  21. ¿Porqué estas conversaciones siempre derivan en ver quien la tiene mas grande?

    Todavía recuerdo la negación de la vieja escuela C, Pascal, Fortram, etc.. porque llegaban LOS OBJETOS, LAS EXCEPCIONES, LOS EVENTOS!!! Ni de coña me aprendo ese follón!! Decían...

    Ahora dicen: programas a alto nivel, eres tonto...
  22. #2 "Cuando yo era joven..." ;)
  23. /**************************************************************************
    | Toledo Nanochess (c) Copyright 2009 Oscar Toledo G. All rights reserved |
    | 1257 non-blank characters. Evolution from my winning IOCCC 2005 entry. |
    | o Use D2D4 algebraic style for movements. biyubi@gmail.com Nov/20/2009 |
    | o On promotion add a number for final piece (3=N, 4=B, 5=R, 6=Q) |
    | o Press Enter alone for computer to play. |
    | o Full legal chess moves. www.nanochess.org |
    | o Remove these comments to get 1326 bytes source code (*NIX end-of-line) |
    ************************************************************************/
    char*l="ustvrtsuqqqqqqqqyyyyyyyy}{|~z|{}"
    " 76Lsabcddcba .pknbrq PKNBRQ ?A6J57IKJT576,+-48HLSU";
    #define F getchar()&z
    #define v X(0,0,0,21,
    #define Z while(
    #define _ ;if(
    #define P return--G,y^=8,
    B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;X(w,c,h,e,S,s){int t,o,L,E,d,O=e,N=-M*M,K
    =78-h<<x,p,*g,n,*m,A,q,r,C,J,a=y?-x:x;y^=8;G++;d=w||s&&s>=h&&v 0,0)>M;do{_ o=I[
    p=O]){q=o&z^y _ q<7){A=q--&2?8:4;C=o-9&z?q["& .$ "]:42;do{r=I[p+=C[l]-64]_!w|p
    ==w){g=q|p+a-S?0:I+S !r&(q|A<3||g)||(r+1&z^y)>9&&q|A>2){ m=!(r-2&7))P G[1]=O,
    K;J=n=o&z;E=I[p-a]&z;t=q|E-7?n:(n+=2,6^y);Z n<=t){L=r?l[r&7]*9-189-h-q:0 _ s)L
    +=(1-q?l[p/x+5]-l[O/x+5]+l[p%x+6]*-~!q-l[O%x+6]+o/16*8:!!m*9)+(q?0:!(I[p-1]^n)+
    !(I[p+1]^n)+l[n&7]*9-386+!!g*99+(A<2))+!(E^y^9)_ s>h||1<s&s==h&&L>z|d){p[I]=n,O
    [I]=m?*g=*m,*m=0:g?*g=0:0;L-=X(s>h|d?0:p,L-N,h+1,G[1],J=q|A>1?0:p,s)_!(h||s-1|B
    O|in|p-b|L<-M))P y^=8,u=J;J=q-1|A<7||m||!s|d|r|o<z||v 0,0)>M;O[I]=o;p[I]=r;m?
    m=*g,*g=0:g?g=9^y:0;}_ L>N){*G=O _ s>1){_ h&&c-L<0)P L _!h)i=n,B=O,b=p;}N=L;}
    n+=J||(g=I+p,m=p<O?g-3:g+2,*m<z|m[O-p]||I[p+=p-O]);}}}}Z!r&q>2||(p=O,q|A>2|o>z&
    !r&&++C*--A));}}}Z++O>98?O=20:e-O);P N+M*M&&N>-K+1924|d?N:0;}main(){Z++B<121)*G
    ++=B/x%x<2|B%x<2?7:B/x&4?0:*l++&31;Z B=19){Z B++<99)putchar(B%x?l[B[I]|16]:x)_
    x-(B=F)){i=I[B+=(x-F)*x]&z;b=F;b+=(x-F)*x;Z x-(G=F))i=G^8^y;}else v u,5);v u,
    1);}}

    nanochess.org/chess3.html
  24. #12 yo tengo una regla de calculo :-)
    en.wikipedia.org/wiki/Slide_rule
  25. #6 Fijate que hace siglos que no juego al ajedrez y este simple programa a vuelto a engancharme de nuevo, "positifo" para ti (que manta me he vuelto :shit: )
  26. #23 A ver. Me he expresado mal.

    Vengo a referirme que tanto el z80 como el 8086 tienen instrucciones para operar con 16 bits (independientemente de como lo hagan), que ambos tienen prácticamente los mismos comandos (con otra nomenclatura y sintaxis) y hay que añadir que la mayoría de opcodes de z80 ocupan un solo byte mientras que su contrapartida en 8088/8086 ocupa 2 bytes.

    CC/ #32
  27. #22 El 8088 y el 8086 son ambos procesadores de 16 bit (el 8088 multiplexa el direccionamiento). El Z80 tendría su equivalente en el 8085, ambos de 8 bit. El tamaño del bus de direcciones no tiene nada que ve con el tamaño de palabra del procesador; como referencia se toma el ancho del bus de datos interno, no el de direcciones.
  28. Yo sé programar en varios lenguajes: Valenciano, Castellano y el Catalán......
    Machote' s Club. Sito en la utopía M-30.
  29. Pues no sé... A mi más me sorprende Elite de Acornsoft. David Braben e Ian Bell, en el transcurso de 2 años, crearon en 1984 el primer juego en 3D, tal vez uno de los más importantes. El peso total? Menos de 32 Kilobytes, para la Acorn Electron.
    En tan solo 32 KB entraron 8 galaxias con 256 planetas cada una, 19 naves (+23 si contamos las sucesoras) en 3D, bienes para intercambiar entre estaciones, estaciones espaciales, piratas, alienígenas, sonido, armas... En fin, ya se imaginan.
    youtu.be/h1f9bhYRDPk?t=23s
  30. #31 Los registros MMX tienen un tamaño de 64 bit y no por ello podemos decir que los Pentium son micros de 64 bit...

    Tienen instrucciones similares ya que el Z80 fue una versión mejorada del 8085, y el 8086/8088 fue la transición de Intel a los 16 bit, pero ahí se acaban las similitudes. Los micros Z80 siguieron teniendo un mercado potencial en los equipos domésticos pero la diferencia de potencial entre ambos decantó la balanza a favor del 8086/8088 que luego evolucionó en modelos cada vez más potentes.

    Los opcodes de Zilog Z80 ocupan un byte, dos, tres, cuatro... depende. Es cierto que cubren buena parte del mapa de instrucciones con opcodes de un solo byte (además tienen extensiones con múltiples bytes) pero eso fue motivado porque quisieron tener compatibilidad con el 8080 y el 8085(su competencia directa de la época) y estos tenían un juego de instrucciones reducido que les permitía codificar instrucciones concretas en un solo byte. Cuando Zilog sacó su Z80 con juego de instrucciones ampliado respecto al de Intel (principalmente tratamiento de cadenas y bits, instrucciones que manipulaban los registros índice IX e IY, etc) tuvieron que recurrir a usar determinados opcodes como prefijos de extensión.
    Los Intel tienen también opcodes de un byte (push r, pop r, inc r, dec r, pop r, push r, xchg r,r', retn)
    nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/opcodes.html
  31. #2 Lo que mas ocupa suelen ser las texturas , modelos y audio.
  32. #19 Curioso, ando programdo en ASM para la GB y algo para el Spectrum y me encuentro con esto :-D
  33. #27 Creo que en ese le falta el enrocado.
  34. #24 Cough markups de html cough
  35. #10 ¿Significa eso que descalificas automáticamente a todos los que no piquen código open source?
  36. #4 los títulos no tienen foto. Te ahorras el paso de quitar la grapa. Puede limpiarte el Ohio directamente sin preocuparte por molestas rozaduras.
  37. #4 Pringado, el que menos gana son unos 24.000 al año, pero si ya tienes experiencia ganas 34.000 o mas. Y si te vas al extranjero ni te cuento. Además siempre sentados en una oficina y cómodos.
  38. Para conseguir un ajedrez en 1024 bytes no queda otra que ensamblador, que por cierto era lo habitual en aquel tiempo. No hay otra forma de aprovechar lo máximo posible el hardware de aquellas limitadas máquinas.

    Mirad los sources del Prince of Persia original. Todo assembler.
  39. #8 no va por ningun lado, es solo un troleo
  40. #4 te iba a votar positivo pero no lo hago por quitarle la grapa al titulo. Te estas perdiendo la mejor parte.
  41. Mis inicios de programador sí que fueron duros, programando directamente con ceros y unos. A veces se nos acababan los unos y teníamos que programar sólo con ceros.
  42. #45 Te olvidas de C .
  43. No es justo comparar tamaños de código en x86 ni mucho menos Javascript. En ensamblador de Z80 los programas tienden a ocupar un poco más que en x86. De todas formas todos hablan muy bien de dicho código pero poca gente se ha puesto a analizarlo y desde mi punto de vista está demasiado sobrevalorado.

    El código está poco optimizado. Hice un programa totalmente equivalente (cuando digo totalmente equivalente es que hace las mismas jugadas en las mismas condiciones que el original) que ocupa 150 bytes menos. Otra persona incluso añadió funcionalidad en el espacio sobrante sinclairzxworld.com/viewtopic.php?f=4&t=1476. Por otro lado el algoritmo no es el típico minimax. Recorre todas las posibles jugadas pero a sólo un nivel de profundidad y calcula una puntuación de cada posible jugada en función del número de piezas, si se recibe jaque, etc... Básicamente es una reescritura a ensamblador de Z80 de un programa llamado Microchess para 6502.

    Aún así tiene mérito meterlo en un ZX81. No es el mejor programa de la historia pero es un buen programa. El problema en los ZX81 es que del Kilobyte disponible muchos bytes se usan en variables del sistema y la pantalla también ocupa espacio (de forma variable). Es más, si hiciéramos un juego a pantalla completa sólo nos quedaría disponible la cuarta parte de ese Kilobyte. En serio, no es nada fácil escribir un juego en esta plataforma. Lo digo por experiencia, ya que hace poco tiempo programé un clon de tetris.
  44. Hay verdaderas joyas para ZX81.

    Igual pasaba con los primeros virus de PC, que ocupaban unas mierdecillas de bytes. Ahora ocupan megas y necesitan de .NET 4.0 parriba.
  45. #49 y #45, si querías aprovechar el hardware de aquellas máquinas la mejor opción era ensamblador. No hay más. No estamos enumerando los lenguajes que podías utilizar en aquella época.
  46. #53 Sí, lo sé, es obvio, pero con C el programa resultante es "tán" recargado como Cobol y demás.

    Lo digo porque C permitía ensamblador en línea desde el primer día.

    O si no fíjate en NetBSD bajo VAX, totalmente usable en máquinas de 1980.

    Sobre LISP, había máquinas dedicadas a ese lenguaje (quizás por HW directamente), así que vete a saber si con según qué procedimientos conseguías más velocidad o no.
  47. Que impresionable sois. Anda que no hay programadores de embebidos que día a día se mueven con entornos de 512 bytes de ram y menos de 1kbyte para código.
  48. #29 Ese tipo pica en binario :troll:

    asdsahhre kmasdiomjnn dehoi io " " hdsa
    " ddsadjh,kkpokññjdsad
    """ >>> > dfsdjfnkjn>>Z rtebbhdasdsaduiortebb 2'2 hds9raantelemnt
    $function() {
    $(label, modificacion de la consulta del formulario
  49. #55 Hoy en dia hay compiladores de c que te optimizan cualquier código al mínimo con tropecientos análisis antes de crear el binario. Aunque, también hay que ser muy cuidadoso en la programación para que ese binario ocupe poco y sea rápido en la ejecución.
  50. #42 No es eso lo que dice el convenio, grupo 3, para programadores junior (con menos de no sé cuántos años de experiencia)... el salario se mueve entre los 14000 y 15000.
  51. #4 Ve a una consultora informática diciendo que programas una ajedrez en ensamblador, a ver si les resulta de utilidad y te pagan mas...
  52. #29 Gran rmbr hahah
  53. #42 Aquí en UK un programador decente cobra +40k£, si ya eres muy bueno y estas especializado en alguna tecnología, normalmente si tienes también conocimientos de economía sube a +80-100K£. Programadores de Android/iOS están en torno a los 60k. Igualito que en españistan vamos.
  54. #42 Esto es muy fácil de comprobar. ¿Cuantos programadores hay por aquí que cobren menos de 24000€ al año?
  55. Y el gusto que da cuando vas optimizando un programa y cada vez es más rápido, pequeño y eficiente?
  56. #32 Efectivamente, es el ancho de palabra, no el del bus de direcciones.

    #19, #20 el bus de direcciones es de 16 bits, sólo hay que mirar el patillaje del z80 para ver que hay 16 líneas. Además PC,SP, IX, IY son registros de 16 bits.
  57. No sé si se ha puesto este enlace. Aquí hay una partida.
    Es increíble lo que puede hacer la mente humana (de bueno, y de malo).
    www.youtube.com/watch?v=m0VAwqg9N0k
  58. #42 No se, eso de sentados en una oficina y cómodos me choca. ¿Has programado alguna vez para una empresa?. Te digo que es de los trabajos más duros y jodidos.
  59. #40 Es que todas estas noticias siempre tienen comentarios de sobrados que incluso insultan a los demás y demuestra por qué la informática es uno de los sectores más cainita y con menos corporativismo.

    Por ejemplo esto se podría dar también en el mundo de los artistas. Me imagino que en foros de arte cada uno se creerá el mejor y desprecia a los demás pero es que es una actividad individual o de grupos pequeños, mientras que la informática tiene más de industria y que de arte.
  60. #4 pues a partir de ahora todos los arquitectos a cobrar 12k salvo que sean capaces de diseñar la sagrada familia.
  61. Otro juego "resultón" también para ZX81 en 1K

    www.youtube.com/watch?v=Ex91OwHMVog
  62. #4 Entonces te referirás a desarrolladores ¿no?
  63. #6 Me gustaría meterle css a esto.
  64. Moraleja, lo desconocido siempre es lo mejor.
  65. #4 legendario master trolling award xD
  66. #2 Los juegos mejor programados, desde luego. Los mejores juegos, dependerá.
  67. #68 Todos los oficios cuando comienzan tienen mucho de artesanía (talento, intuición, etc.) y poco de industria. Después vino la producción en serie y la industrialización de la programación. Sigue habiendo verdaderas obras de arte en el campo de la programación pero cada vez hay menos artistas.
  68. #11
    Si he logrado ver más lejos, ha sido porque he subido a hombros de gigantes
    Isaac Newton

    Edit: No es original suya, sino inspirada en una cita de Bernardo de Chartres:
    Somos como enanos a los hombros de gigantes. Podemos ver más, y más lejos que ellos, no porque la agudeza de nuestra vista ni por la altura de nuestro cuerpo, sino porque somos levantados por su gran altura.
  69. #57 Pequeño != rápido.

    Mira si no lo que hacen ciertas optimizaciones de GCC respeto a los bucles.
  70. #78 Si, ahí está el truco, buscar el tamaño justo para que no se vea afectado demasiado la rapidez del programa. Puedes sobrescribir intrucciones repetitivas en tiempo de ejecución o directamente instrucciones de saltos a esas instrucciones, pero si no las sobrescribes porque tienes espacio suficiente tu programa será más rápido.
  71. #79 Depende. No por usar -Os vas a ganar velocidad, te lo digo desde ya. Es posible que lo ralentices incluso por querer ahorrar espacio para código que ya está "resuelto" siento optimizado por el compilador y preprocesador.

    Lo digo porque para mi ex-netbook ARM intenté usar -Os para no usar RAM como un loco y pasara a la swap, aunque fuera con DWM, y al final era preferible usar -O2.
  72. #80 Imagínate que tienes un programa que necesita conometrar un segundo en varios puntos del programa(mal hecho, porque para eso están las interrupciones de tiempo, pero es un ejemplo). Siempre sería mas rápido ejecutar ese contador directamente sin saltos que saltar a una parte del programa donde se conometra 1 segundo y luego volver a saltar para continuar. Si ejecutas directamente ese contador de un segundo estarás utilizando mas memoria, pero tu programa se ahorrará varios saltos. Es un ejemplo cutre.
  73. #81 No me refiero a eso, me refiero a que ciertas optimizaciones por espacio no redundan en una mayor velocidad.

    Solo tienes que ver las herramientas BSD vs GNU. Las GNU son más rápidas y funcionan mucho más rápido, las BSD más ligeras en código pero no van mejor en absoluto.
  74. #82 Yo estoy refiriendo a dispositivos muy básicos, donde la memoria es mínima, como puede ser un PIC de atmel o microchip. El binario no se ejecuta bajo ningún sistema operativo.
  75. #84 Entonces sí, claro está.
  76. #35 Me parece divino de la muerte. Ahora por favor ¿qué ventajas, programando en x86 (sin mmx, sin 64 bits y sin mermelada de la abuela) ha tenido un programador frente a otro y qué herramientas chachipilonguis ha podido usar uno frente a otro?

    Es que todo el mogollón viene por que se acusa a Olivier de tener muchas ventajas por hacer el código en x86 frente a David que lo hizo en Z80. Supongo porque el ensamblador de x86 programa solo y el código de x86 ocupa un tercio del mismo código para z80.
  77. Como comenta #67 . La demoscene aunque posterior, estuvo muy por encima de lo "comercial" durante muchos años. Había gente que hacia cosas increíbles... Incluso a nivel español. Recuerdo que me sentí un inútil cuando vi esto (64k): youtu.be/Y3n3c_8Nn2Y . De cosecha española (Centolos!!) que recuerdo con mucho cariño aunque fuera fruto de la casualidad y la "chapuza": youtu.be/wwG2Bvjvjds
  78. #34 Estoy de acuerdo contigo, a pesar de que el juego de ajedrez del articulo es una obra de arte minimalista, Elite fue toda una revolución. www.youtube.com/watch?v=GpWoF5uVgbA
  79. #58 Estamos por encima de tablas todos, esos sueldos que dicen los cobran los operadores de CAU y muchos mas que eso.
  80. #62 Yo no, estoy por encima.
  81. #66 Llevo unos 17 años.
  82. #64 Correcta la puntualización, tamaño de palabra que no bus de direcciones, me hervía la sangre por contestar y no me fijé bien en lo que escribía.
comentarios cerrados

menéame