Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Joulukalenteri 2023

Sivun loppuun

TapaniS [29.11.2023 08:50:28]

#

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.

Metabolix [01.12.2023 23:35:53]

#

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.

TapaniS [03.12.2023 12:26:23]

#

Nämä tuntuvat nyt haastavammilta jo alusta lähtien kuin ennen. Taitaa omat taidot rapistua pikkuhiljaa harjoituksen puutteessa .. :) :) :)

jalski [04.12.2023 14:05:48]

#

Tämän päivän tehtävän ensimmäinen osio ainakin näytti olevan helppo ja vaativan vain muutaman rivin koodia...

TapaniS [05.12.2023 09:35:22]

#

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 :(

jalski [05.12.2023 10:21:46]

#

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 ;

Metabolix [05.12.2023 16:04:31]

#

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.

jalski [05.12.2023 22:23:32]

#

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 ;

Metabolix [07.12.2023 16:29:07]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta