Kohta avautuu joulukalenterin ensimmäinen luukku!
Sitä odotellessa voi tehdä vanhoja kalentereita.
Putkan selviytyjät löytyy jatkossa täältä (koodi 1142475-414cff12
).
Huomautuksena vielä, että tekoälyn käytöstä napsahtaa bannia tms.
Ensimmäinen päivä olikin hyvä muistutus siitä, että näissä tehtävissä pitää muistaa huomioida keljut erityistapaukset, jotka eivät käy ilmi esimerkeistä mutta joita teksti ei suoranaisesti kiellä vaikka oma järki kieltäisi.
Katsotaan, minkä verran tähän ehtii tänä vuonna panostaa. Kello 7 aamulla on vaikea ajankohta arkisin.
Nämä tuntuvat nyt haastavammilta jo alusta lähtien kuin ennen. Taitaa omat taidot rapistua pikkuhiljaa harjoituksen puutteessa .. :) :) :)
Tämän päivän tehtävän ensimmäinen osio ainakin näytti olevan helppo ja vaativan vain muutaman rivin koodia...
jalski kirjoitti:
Tämän päivän tehtävän ensimmäinen osio ainakin näytti olevan helppo ja vaativan vain muutaman rivin koodia...
Joo, suurin ongelma taitaa olla saada lähtötiedot luettua tekstitiedostosta oikein. Välillä on tyhjiä välilyöntejä, jotka sotkevat splittauksen :(
TapaniS kirjoitti:
Joo, suurin ongelma taitaa olla saada lähtötiedot luettua tekstitiedostosta oikein. Välillä on tyhjiä välilyöntejä, jotka sotkevat splittauksen :(
Itse yksinkertaisesti vain filtteröin nuo splittauksesta virheellisesti tulleet tyhjät merkkijonot pois syötteestä.
\ We use buffer as bitmap of bits : bitmap \ maxbits -- b 8 n:/mod swap if n:1+ then b:new b:clear ; \ transform an array of numbers into buffer with those bits set : >bitmap \ a -- b 99 bitmap swap ( 1 b:bit! ) a:each! drop ; \ How many bits are set inside the buffer? : bits-set? \ b -- n 0 >r ( b:bit@ if 1 n:r+ then ) 0 99 loop drop r> ; : app:main 0 >r "4.txt" f:slurp ( ":" s:/ 1 a:_@ "|" s:/ ( " " s:/ ( "" s:= not ) a:filter ' >n a:map ) a:map ' >bitmap a:map a:open ' n:band b:op bits-set? [0,1,2,4,8,16,32,64,128,256,512] caseof n:r+ ) s:eachline r> . cr ;
Minä ainakin käytän syötteen purkamiseen paljon säännöllisiä lausekkeita, koska näissä tehtävissä syöte on pieni ja lukemisen nopeus ei ole ratkaiseva. Ei tarvitse edes tehdä yhtä hienoa lauseketta, vaan on hyvin varaa vaikka ensin katkaista jostain merkistä ja sitten poimia joka osasta tietoja vaikka useallakin lausekkeella (kuten väritehtävässä: ensin jaetaan ryhmiin, sitten reilusti oma lauseke ryhmän jokaiselle värille). Kielenä JS, koska se on hyvin joustava tällaisiin pikatehtäviin.
Metabolix kirjoitti:
(kuten väritehtävässä: ensin jaetaan ryhmiin, sitten reilusti oma lauseke ryhmän jokaiselle värille). Kielenä JS, koska se on hyvin joustava tällaisiin pikatehtäviin.
8th on myös kätevä työkalu tämän tyyppisiin tehtäviin. Väritehtävässä toteutin vain sanat eri väreille ja syötteestä välimerkit poistamalla siitä tulikin validia 8th syntaksia. Tämän jälkeen 'eval' hoitaakin automaattisesti homman syötteen rivi kerrallaan. Verrattuna JavaScript:in 'eval()' funktioon 8th:n versio on parempi ja turvallisempi koska sen toiminnan voi rajoittaa tietyn nimiavaruuden sisälle.
ns? ns: eval private var red var green var blue public : init 0 #p:red ! 0 #p:green ! 0 #p:blue ! ; : red #p:red @ n:max #p:red ! ; : green #p:green @ n:max #p:green ! ; : blue #p:blue @ n:max #p:blue ! ; : power? #p:red @ #p:green @ n:* #p:blue @ n:* ; ns : app:main 0 >r "2.txt" f:slurp ( ":" s:/ 1 a:_@ ";" s:/ ( "," "" s:replace! ) a:map eval:init ( ns:eval only eval null only ) a:each! drop eval:power? n:r+ ) s:eachline r> . cr ;
jalski kirjoitti:
Väritehtävässä toteutin vain sanat eri väreille ja syötteestä välimerkit poistamalla siitä tulikin validia 8th syntaksia.
Ovelaa, joskus sattumalta tehtävän syntaksi sopii juuri tiettyyn kieleen hyvin.
Tehtävät on selvästi laadittu nuolella, esimerkiksi nyt päivänä 7 esimerkkisyötteestä tulee oikea vastaus, vaikka listan järjestää väärään suuntaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.