Pequeño concurso de programación
- explorer
- Mensajes: 728
- Registrado: 10 Ene 2016 18:43
- Ubicación: Valladolid, España
- Has thanked: 24 times
- Been thanked: 694 times
- Contactar:
Pequeño concurso de programación
Hola. Os propongo este diciembre participar en este pequeño concurso de programación.
Consiste en hacer un programa que sea capaz de recrear en pantalla un copo de nieve:
Se puede usar cualquier lenguaje, pero los ganadores serán aquellos que ocupen menos espacio (es un concurso de golfing).
Consiste en hacer un programa que sea capaz de recrear en pantalla un copo de nieve:
Se puede usar cualquier lenguaje, pero los ganadores serán aquellos que ocupen menos espacio (es un concurso de golfing).
JF^D - Calendario de Retroinformática - Telegram Retro Spain - RetroDev ES
- minter
- Mensajes: 5126
- Registrado: 22 Jul 2014 18:51
- Has thanked: 6925 times
- Been thanked: 2667 times
- kikems
- Mensajes: 5703
- Registrado: 30 May 2013 19:23
- Has thanked: 2666 times
- Been thanked: 3147 times
-
- Mensajes: 2503
- Registrado: 30 Oct 2010 20:58
- Has thanked: 499 times
- Been thanked: 1005 times
Re: Pequeño concurso de programación
And the winner is....
10 print "*"
Nadie dijo que el copo fuera grande y aunque el mio es de 5 puntas es cuestion de buscar un basic que tenga mas.... el listado mas minimo no puede ser...
10 print "*"
Nadie dijo que el copo fuera grande y aunque el mio es de 5 puntas es cuestion de buscar un basic que tenga mas.... el listado mas minimo no puede ser...
- minter
- Mensajes: 5126
- Registrado: 22 Jul 2014 18:51
- Has thanked: 6925 times
- Been thanked: 2667 times
Re: Pequeño concurso de programación
0 ?”*”garillete escribió:And the winner is....
10 print "*"
Nadie dijo que el copo fuera grande y aunque el mio es de 5 puntas es cuestion de buscar un basic que tenga mas.... el listado mas minimo no puede ser...
He ganado!
-
- Mensajes: 2503
- Registrado: 30 Oct 2010 20:58
- Has thanked: 499 times
- Been thanked: 1005 times
Re: Pequeño concurso de programación
Definitivamente en un concurso de segundones quedaría medalla de plata...
- GuerreroNinja
- Mensajes: 796
- Registrado: 18 Feb 2021 20:37
- Has thanked: 466 times
- Been thanked: 473 times
Re: Pequeño concurso de programación
La primera opción es 17 prints y tira millas. Pero esos prints pueden ser algo lentorrillos, así que lo lio un poco: la estrella tiene 17 caracteres por línea, con un total de 17 líneas (total caracteres = 289). Programa largo en BASIC genérico así a lo basto, pero se puede hacer en cualquier ASM (6502, Z80, 68000...) muy fácilmente:
CLS
DIM A(288) ; Matriz de 289 elementos
READ A ; Cargamos la matriz con los valores de DATA
FOR T=0 TO 288
VPOKE $H0000+(T), A(T) ; O similar, la idea es escribir la posición de la memoria de vídeo de texto con el código del carácter
NEXT T
END
DATA $20,$20,$20,$20,$2A,$20,$20,$20,$20,$20,$20,$20,$20,$2A,$20,$20,$20
DATA $20,$20,$20,$20,$2A,$2A,$20,$20,$20,$20,$20,$20,$2A,$2A,$20,$20,$20
DATA $20,$20,$20,$20,$2A,$2A,$2A,$20,$20,$20,$20,$2A,$2A,$2A,$20,$20,$20
DATA $20,$20,$20,$20,$2A,$2A,$2A,$2A,$20,$20,$2A,$2A,$2A,$2A,$20,$20,$20
etc.
PERO esto es muy poco óptimo, lo mejor es guardar los datos como valores binarios, donde 0 es espacio y 1 es asterisco, por lo que solo ocuparían 34 bytes dejando de lado la última posición, que añadimos siempre un espacio excepto en las líneas 6 y 14, que añadimos un asterisco. En el bucle principal, enmascaramos el byte y extraemos la posición actual, si es 0 imprimimos el código ASCII $20 (espacio), y si es un 1 imprimimos el ASCII $2A (asterisco). Arañamos así más bytes de forma elegante, reduciendo los DATA de 289 bytes a 34 bytes, aunque aumentaría un poco el bucle principal. Si tengo un rato lo escribo, aunque creo que eso de "tener un rato" es un lujo para mí.
Otra opción que se me ocurre sería tratar de buscar una fórmula que genere la estrella.
Pero bueno, hasta aquí llegó mi participación
CLS
DIM A(288) ; Matriz de 289 elementos
READ A ; Cargamos la matriz con los valores de DATA
FOR T=0 TO 288
VPOKE $H0000+(T), A(T) ; O similar, la idea es escribir la posición de la memoria de vídeo de texto con el código del carácter
NEXT T
END
DATA $20,$20,$20,$20,$2A,$20,$20,$20,$20,$20,$20,$20,$20,$2A,$20,$20,$20
DATA $20,$20,$20,$20,$2A,$2A,$20,$20,$20,$20,$20,$20,$2A,$2A,$20,$20,$20
DATA $20,$20,$20,$20,$2A,$2A,$2A,$20,$20,$20,$20,$2A,$2A,$2A,$20,$20,$20
DATA $20,$20,$20,$20,$2A,$2A,$2A,$2A,$20,$20,$2A,$2A,$2A,$2A,$20,$20,$20
etc.
PERO esto es muy poco óptimo, lo mejor es guardar los datos como valores binarios, donde 0 es espacio y 1 es asterisco, por lo que solo ocuparían 34 bytes dejando de lado la última posición, que añadimos siempre un espacio excepto en las líneas 6 y 14, que añadimos un asterisco. En el bucle principal, enmascaramos el byte y extraemos la posición actual, si es 0 imprimimos el código ASCII $20 (espacio), y si es un 1 imprimimos el ASCII $2A (asterisco). Arañamos así más bytes de forma elegante, reduciendo los DATA de 289 bytes a 34 bytes, aunque aumentaría un poco el bucle principal. Si tengo un rato lo escribo, aunque creo que eso de "tener un rato" es un lujo para mí.
Otra opción que se me ocurre sería tratar de buscar una fórmula que genere la estrella.
Pero bueno, hasta aquí llegó mi participación
Mis niñas favoritas: MSX2+ Sony F1XDJ / Wavy 70FD / SVI728 / HB-75P / HB101 SVI 328 MKII / SVI 640 C64C A1200 CPC6128+ / Amstrad 2386 MiSTer Gomados+ / N-GO / ZXUno Atari 800XL
-
- Mensajes: 2503
- Registrado: 30 Oct 2010 20:58
- Has thanked: 499 times
- Been thanked: 1005 times
Re: Pequeño concurso de programación
Pues las radiofórmulas tipo los 40 principiantes, cadena ciento, etc, llevan generando estrellas a base de repeticiones (de la misma canción) toda la vida... Yo con autotune 4 versos asonantes o malsonantes y una buena pinta de mamarracho triunfaria fijo....
Seguro que alguno de los participantes nos sorprende....jay curiosidad a ver en que tamaño lo dejan...
Seguro que alguno de los participantes nos sorprende....jay curiosidad a ver en que tamaño lo dejan...
Re: Pequeño concurso de programación
Pues que me picó la curiosidad y como quería saber cual era el tamaño mínimo que ocupa nuestra rutina de inicio en Amiga me he liado esta tarde a ello.
Al final he acabado destripando todo el código de inicio y ya no hay por donde cogerlo. jejejeje
La cuestión es que no es una máquina que se adapte bien al sizecoding pero he hecho lo que he podido y lo he dejado en xxx kb de ejecutable.
Lo he hecho en ensamblador sin usar llamadas al sistema pues me gusta vivir embrutecido.
Edito el tamaño por sugerencias de las normas aunque no tenia pensado participar a priori.
Pero desde luego es un buen ejercicio mental
Al final he acabado destripando todo el código de inicio y ya no hay por donde cogerlo. jejejeje
La cuestión es que no es una máquina que se adapte bien al sizecoding pero he hecho lo que he podido y lo he dejado en xxx kb de ejecutable.
Lo he hecho en ensamblador sin usar llamadas al sistema pues me gusta vivir embrutecido.
Edito el tamaño por sugerencias de las normas aunque no tenia pensado participar a priori.
Pero desde luego es un buen ejercicio mental
Re: Pequeño concurso de programación
Desempolvando viejos recuerdos... aquí una aproximación en versión ROM de MSX:
Es una ROM de 117 bytes. Quitando la cabecera del cartucho se queda en 101. Seguro que se puede mejorar bastante.
(ocupa más en zip que sin comprimir, pero no me deja adjuntar archivos .rom)
Saludos.
Código: Seleccionar todo
DEVICE NOSLOT64K
SLDOPT COMMENT WPMEM,LOGPOINT,ASSERTION
LF equ 0Ah
CR equ 0Dh
CHPUT equ 00A2h ; BIOS output char
INIT32 equ 006Fh
PAGE_SIZE equ 4000h ; 16kB
LINL32 equ 0F3AFh
org 4000h
; ### ROM header ###
db "AB" ; ID para ROM
dw INIT
dw 0
dw 0
dw 0
dw 0,0,0 ; Reserved
INIT
; SCREEN 1
ld a,32
ld (LINL32),a
call INIT32
PRINTSTAR ld hl,STARDATA
ld e,ENDDATA-STARDATA
1 ld d,(hl)
ld a,e
cp 5
jr c,2f
cp 14
jr 3f
2 ccf
3 call PRINTLINE
inc hl
dec e
jr nz,1b
PAUSE jr PAUSE
PRINTLINE call OUTBITSL
call OUTBITSR
ld a,CR
call CHPUT
ld a,LF
jp CHPUT
OUTBITSR ld b,8
1 rr d
call c,PUTSTAR
call nc,PUTBLANK
djnz 1b
ret
OUTBITSL ld b,9
1 rl d
call c,PUTSTAR
call nc,PUTBLANK
djnz 1b
ret
PUTSTAR ld a,'*'
jp CHPUT
PUTBLANK ld a,' '
jp CHPUT
STARDATA db 08h,0Ch,0Eh,0Fh,0FFh,7Fh,3Fh,1Fh
db 0Fh
db 1Fh,3Fh,7Fh,0FFh,0Fh,0Eh,0Ch,08h
ENDDATA
SAVEBIN "star.rom",4000h,80h
(ocupa más en zip que sin comprimir, pero no me deja adjuntar archivos .rom)
Saludos.
- explorer
- Mensajes: 728
- Registrado: 10 Ene 2016 18:43
- Ubicación: Valladolid, España
- Has thanked: 24 times
- Been thanked: 694 times
- Contactar:
Re: Pequeño concurso de programación
Genial las soluciones, pero mejor que las comentáramos pasado el día 26(*). Mientras tanto, tenéis tiempo de sobra para encontrar la versión más corta, en el lenguaje y sistema que queráis. Cuando lo creáis conveniente, lo empaquetáis en un zip junto con la captura de imagen tal como pone en las instrucciones, y lo enviáis.
Yo lo estoy haciendo en Atari BASIC para los Atari 8 bits, pero no descarto intentarlo también en 6502 y 68000.
¡Vamos!
(*) en las normas pone que no se publique código ni se comenten tamaños de código hasta que llegue ese día, para animar a todos a participar.
Yo lo estoy haciendo en Atari BASIC para los Atari 8 bits, pero no descarto intentarlo también en 6502 y 68000.
¡Vamos!
(*) en las normas pone que no se publique código ni se comenten tamaños de código hasta que llegue ese día, para animar a todos a participar.
JF^D - Calendario de Retroinformática - Telegram Retro Spain - RetroDev ES
- frankrodiii
- Mensajes: 680
- Registrado: 26 May 2019 14:46
- Ubicación: ??!!!#=?¿****!!! ©
- Has thanked: 519 times
- Been thanked: 286 times
- Contactar:
Re: Pequeño concurso de programación
Me he animado a hacerlo en el BASIC del Apple IIc, usando métodos que no sean obvios como el ejemplo. Es divertido!
frankrodriguez.net
Apple IIc - Macintosh SE/30 - Amiga 500 Plus - SiDi
Apple IIc - Macintosh SE/30 - Amiga 500 Plus - SiDi
- frankrodiii
- Mensajes: 680
- Registrado: 26 May 2019 14:46
- Ubicación: ??!!!#=?¿****!!! ©
- Has thanked: 519 times
- Been thanked: 286 times
- Contactar:
Re: Pequeño concurso de programación
Bueno pues ya les he pasado el programa, que me hacía ilusión participar en un concurso solo para que me den un sugus por participar jsjsjs.
Advierto que no es la repera el programa, unas cuantas líneas he necesitado aunque he estado dándole vueltas al coco. .
Advierto que no es la repera el programa, unas cuantas líneas he necesitado aunque he estado dándole vueltas al coco. .
frankrodriguez.net
Apple IIc - Macintosh SE/30 - Amiga 500 Plus - SiDi
Apple IIc - Macintosh SE/30 - Amiga 500 Plus - SiDi