Miten tämmöiseen Algoritmi

Saku-foorumi » Yleinen keskustelu » Viestit 2008 » Viestit 12/2008 asti » Miten tämmöiseen Algoritmi « Edellinen Seuraava »

Kirjoittaja Viesti
 

JPQ
Keskiviikkona, 5. marraskuuta, 2008 - klo 3.46:   
miten kodaisin ohjelman joka
eli tekisi kuvioita tapaan

####-#-#-#####-####
#-#-####-#-#-#####-
####-####-####-####
#-#-####-#-########
####-#-#-####-#-#-#
#-#-#########-#####
####-#-#-#-####-#-#

eli risuaitojen pitää olla mainitulla tavalla yhdessä ja sitten vähintään neljä risuaikaa vakaan tai pystyyn ja niille olisi hyvä että ideassa saada antaa
maksimipituuskin vaikkapa seitsemän... ja enintään kolme - merkkiä perätysten per pysty ja/tai pysty suunta. ja myös säätö miten paljon saa syntyä noita isoja alueita jossa paljon # merkkejä. noh kuvion teon säännöt samat kuin ristikkolehden kryptojen/sanapalapelien pohjassa joihin tämä oikeastaan liittyy.
ps. ei ole koulun harjoitustyö en edes ole koulussa koskaan ohjelmoinnut tai tottapuhuen no olen kyllä (jopa kahdessa tosin toisessa en näyttäny taitojani) mutta vapaaehtoisesti et esitellen taitojani.:)
myös aktiivisesta koodalusta muutenkin aikaa et en ole koskaan ollut oman algoritmin tekijänä hyvä. tai no pari kivaa kaavaa keksinyt (löysin lapsena kait ympyrän itse sinillä ja cosinilla) mutta sitten kun on kyse ongelmasta jota ratkotaan kaavalla se onkin se jota en osaa.

 

Jupp3
Keskiviikkona, 5. marraskuuta, 2008 - klo 20.33:   
Tähän tyyliin? :)

#include stdio.h

int main(void)
{
printf("####-#-#-#####-####\n");
printf("#-#-####-#-#-#####-\n");
printf("####-####-####-####\n");
printf("#-#-####-#-########\n");
printf("####-#-#-####-#-#-#\n");
printf("#-#-#########-#####\n");
printf("####-#-#-#-####-#-#\n");
return 0;
}

 

JPQ
Keskiviikkona, 5. marraskuuta, 2008 - klo 23.48:   
Jupp3: eipäs vitsailla. yhden huvittavan idean kkesin kyllä jo. tosin se ei ole hyvä idea.

 

Frn
Torstaina, 6. marraskuuta, 2008 - klo 21.09:   
@JPQ:

Itse asiassa tuo Jup3n ratkaisu tuli mullekin ekana mieleen. Suoraan sanottuna en tajunnut selityksestäsi muuta kuin sen, että merkkejä pitäisi tulostaa.

Jos purkaisit tarkat muodostus-säännöt kohta kohdalta mahdollisimman yksinkertaisesti ja yksiselitteisesti, niin olisi itselläsikin helpompi pala kehittää se algoritmi.

 

Jarmo Piippo
Torstaina, 6. marraskuuta, 2008 - klo 22.36:   
JPQ: Hae jostain käsiisi wanhan Bomber-peli-idean jokin lähdekoodi ja lunttaa siitä. Siinähän tehtiin pelikentän alalaitaan satunnaisen korkuisia ja -näköisiä kerrostaloja merkkejä tulostamalla, ja ne piti sitten pelissä saada tuhottua maan tasalle ylälaidassa sivuttain lentävällä, kierros kierrokselta alemmas laskeutuvalla lentokoneella, jottei se törmäisi taloihin, vaan pystyisi laskeutumaan tyhjennetylle alueelle. (Itse toteutin tuon pelin aikoinaan VAX-keskuskoneelle, VT-220-päätteeltä toimivaksi, mutta lähdekoodia ei ole sähköisessä muodossa enää tallessa. :-)

 

JPQ
Perjantaina, 7. marraskuuta, 2008 - klo 1.18:   
toki tiedän miten bomberissa talot tehdään se ei tässä auta. ja sanotaan jos käsissänne sanaristikkolehti tai lehti jossa muuten julkaistu krypto niin näette miten ne sanojen muodot niissä menee. ps. yritän parempaa selitystä.

 

Tohtori AivoTurmio
Lauantaina, 8. marraskuuta, 2008 - klo 7.59:   
no siis lähinnä tulee mieleen joku until loop ja random tyyppinen ratkaisu.


Eli esim. (ei aito ohjelmointi kieli)

koko=RND(4) + 3
until (mytemp eq x)

do

mytemp=mytemp+1
hashmaara=RND(3) + 4

until (mytemp2 eq hashmaara)

do

mytemp2=mytemp2+1
print "#"

loop

mytemp2=0
print "-"

loop

end

 

Tohtori AivoTurmio
Lauantaina, 8. marraskuuta, 2008 - klo 8.02:   
oho, siis "mytemp eq x" pitäisi tietenkin olla "mytemp eq KOKO"

 

Tohtori AivoTurmio
Lauantaina, 8. marraskuuta, 2008 - klo 8.17:   
ja sitten tietysti tuo säätö osuus niin siihen tehdään alkuun jotain tyyliin:

max3columns=7
max4columns=5
max5columns=3
kokonaismaaracolumseja=max3colums+max4columns+max5columns


ja sitten kun rnd tehdään niin siinähän voidaan mennä vaikka gosubilla tekemään se eli

gosub hashmaara

ja itse gosub pätkä sitten:


if(kokonaismaarakolumnseja eq 0)
then mystatus=1
else mystatus=0 ja kokonaismaaracolumseja=kokonaismaaracolumseja-1

until (mystatus eq 1)
do

hashmaara=RND(3)+4

switch(hashmaara)

hashmaara eq 3:
if (max3columns eq 0)
then ei mitään
else status=1 ja max3columns=max3columns-1

hashmaara eq 4:
if (max4columns eq 0)
then ei mitään
else status=1 ja max4columns=max4columns-1

hashmaara eq 5:
if (max5columns eq 0)
then ei mitään
else status=1 ja max5columns=max5columns-1

loop


return

 

Tohtori AivoTurmio
Lauantaina, 8. marraskuuta, 2008 - klo 17.57:   
itseasiassa kun haluat noita sekä pysty että vaakasuoraan niin tuli parempi vaihtoetho tässä mielen.

Eli ensiks isamat että määritellään ne määrät.

Eli max3columns=1
max4..=2
...=3
...

Tämän jälkeen sitten määritellään alueen koko, esim KOKO=7x7 (käytännössä siis tehdään kaksi ulotteinen taulukko)

tämän jälkeen sitten käydään taas until loopeilla lävitse nämä kaikki comnsit eriksensä.

Eli vaikka seuraavasti

mytemp=4 (olettaen että etri maxcolumnseja on 4)

counter=0

until (counter eq mytemp)
do
mytemp=mytemp+1

counter2=0
until(counter2 eq max(mytemp+3)columns) max(mytemp+3)columns muuttuu siis ensimmäisellä kierroksella esim max4columnsiksi, seuraavalla kierroksella max5columnsiksi jne.)

nämä vain jotta käy läpi kaikki mutta sitten itse muodostus:

do
counter2=counter2+1
x=mytemp+3 (saadaan siis columnsin pituus)

rnd(1)
jos on 0 niin vaaka, jos 1 niin pysty

tämän jälkeen sitten rnd(koko-x) tämä -x jotta saadaan aikaisin mahdollinen paikka missä kyseinen columsivoi olla. siis esim. jos koko on 7 ja colums koko on 7, niin columsin on pakko alkaa kohdasta 0, jotta 7 "#" mahtuu siihen, muutoin loppuu rivi kesken.

sen jälkeen tämä toinen

rnd(koko)

voi olla missä kohtaa kokoa tahansa, koska sillä ei ole rajoitusta.

Siis esim jos tuele pysty, niin enisksi katsotaan mistä kohtaa pystyä alkaa, esim kohdasta 1, sitten vain katsotaan mikä vaakarivi, esim 5, niin silloin aloituskohta on (5,1)

Tässä tosin tuli viel äsellainen ajatusvirhe itselläni että tässä täytyy vielä tarkistaa ettei esim 4 hashia osu 7 sisälle (jolloin se ei näkyisi ollenkaan) ja lsiäksi se että noita paikkoja täytyy varata siten että samalle vaaka kohdalle ei voi tulla enää toista ennenkuin se tietty "-" väli on siinä.

siis esim jos KOKO on 10x10., niin jos 3 hashia tulee kohtaan 2,1 vaakaan, niin silloin 3,1 4,1 5,1 ja 6,1 (-) ovat kaikki varattuja, ja aikaisin kohta on 7,1 johon voi tulla, ja lsiäksi 0,1 ja 1,1 ei hash jono mahdu, paitsi jos on 1 hashin kokoinen.

Mutta niitä en tähän jaksa pohtia, jätän tämän tähän ja pohdi sinä tuo loppuun jos tarvetta on ja kiinnostuista riittää.

Lisää viestisi tähän
Viestisi:
Käyttäjätunnus: Postitus informaatiota:
Tämä on yksityinen keskustelupalsta. Vain rekisteröidyt käyttäjät ja moderaattorit voivat postittaa tänne.
Salasana:
valinnat: Aktivoi URL:t automaattisesti tässä viestissä
Toimenpide: