Uusi putkaposti on ilmestynyt:
https://www.ohjelmointiputka.net/postit/tehtava.
Edellinen putkaposti osoittautui varsin helpoksi, minkä vuoksi uusi tehtävä tuli näin nopeasti.
Huom! Tarkistajan toiminta on tällä hetkellä virheellinen! Korjaus on tulossa mahdollisimman pian, sitä ennen lauseketta toki voi jo miettiä.
Ideana lienee kuitenkin se, että vastauksen pitää hyväksyä kaikki välillä olevat luvut ja hylätä kaikki muut merkkijonot?
Kyllä, tämä on ideana.
Itse en kyllä tykkää näistä tämän tyyppisistä tehtävistä yhtään, kun tässä vaan tavallaan tehdään vaikealla tavalla jotain hyödytöntä. Eli taidanpa jättää tekemättä ellei sitten tule jotain hetkeä ettei ole mitään tekemistä :D
Nyt tarkistajan pitäisi toimia, ja ensimmäinen vastauskin ilmestyi listalle.
Grez kirjoitti:
Itse en kyllä tykkää näistä tämän tyyppisistä tehtävistä yhtään, kun tässä vaan tavallaan tehdään vaikealla tavalla jotain hyödytöntä.
Tämä on toisaalta aika monen Putkapostin tehtävän "ongelma". Säännöllisissä lausekkeissa on minusta hauskuutena, että tarkkaa alarajaa lyhimmän lausekkeen pituudelle on yleensä hankalaa määrittää.
No siis tarkoitin sitä, että yleensä putkaposteissa haetaan kuitenkin ratkaisua johonkin ongelmaan, joka voisi oikeasti olla olemassa vaikka onkin kuvitteellinen. Ja yleensä on hyödyksi jos pystyy keksimään mahdollisimman tehokkaan ratkaisun.
Mielestäni jos pitäisi validoida käsin kirjoitetut luvut, niin SL ei olisi mielestäni oikein missään mielessä tehokkain tapa tehdä sitä.
Mutta joo, varmasti kiva tehtävä kaikille jotka tykkää puuhastella säännöllisten lausekkeiden kanssa. Tarkoitus ei ollut sanoa että tehtävä olisi jotenkin huono vaan ihan vaan että itse en tykkää.
Mielestäni tarkistusohjelma voisi tarkistaa tyhjän merkkijonon ja muut "yleiset" virheet ennen muita varsinaisten lukujen tarkistusta, koska ainakin minulla se miettii melkein minuutin ennen kuin sanoo "Lauseke hyväksyy tyhjän merkkijonon, vaikka sen pitäisi hylätä se".
Hennkka kirjoitti:
Mielestäni tarkistusohjelma voisi tarkistaa tyhjän merkkijonon ja muut "yleiset" virheet ennen muita varsinaisten lukujen tarkistusta, koska ainakin minulla se miettii melkein minuutin ennen kuin sanoo "Lauseke hyväksyy tyhjän merkkijonon, vaikka sen pitäisi hylätä se".
Olen melko varma, ettei tarkastaja kokeile kaikkia numeroita erikseen, koska ei SL-haasteenkaan tarkastaja tee niin.
Todennäköisesti tässä putkapostissa on käytössä sama tarkastaja kuin SL-haasteessa.
Olen kyllä ihan samaa mieltä tuosta tarkistuksesta. Parikymmentä huolella valittua testitapausta riittäisi luultavasti useimpien virheiden karsintaan.
Tarkistaja toimii tosiaan tällä hetkellä niin, että se tekee ensin lausekkeelle monimutkaisen käsittelyn, jonka jälkeen se pystyy tarkistamaan luotettavasti, onko lausekkeen toiminta oikea vai ei.
Kieltämättä voisi olla hyvä idea kokeilla aluksi pienellä joukolla lukusanoja, hyväksyykö lauseke ne. Paljon vaikeampaa on yrittää etsiä ylimääräisiä merkkijonoja, joita lausekkeen ei kuuluisi hyväksyä. Tyhjää merkkijonoa lukuun ottamatta ylimääräiset merkkijonot lienevät tapauskohtaisia.
pitäisikö tälläisen
(|yksi|kaksi|kolme|neljä|viisi|kuusi|seitsemän|kahdeksa|yhdeksän)
toimia, niin että hyväksyy tyhjän tai yksi tai kaksi tai niin edelleen? lähinnä siis tuo ekan |-merkkin toiminta.
Kyllä, tuo siis vastaa seuraavaa lauseketta:
(yksi|kaksi|kolme|neljä|viisi|kuusi|seitsemän|kahdeksa|yhdeksän)?
Täydellisesti toimivan ratkaisun puristaminen alle tuhanteen merkkiin vaikuttaa haastavalta, koska mikään yksittäinen osa (tuhannet, sadat, kympit, ykköset) ei ole pakollinen, mutta kaikki eivät voi puuttua. Tämä nähdäkseni haittaa tehokkaasti toisteisuuden hyödyntämistä.
Esim. tällainen ei tule kyseeseen:
((kaksi|kolme|...)(tuhatta|sataa|kymmentä|toista))+
Muuten jokin kaksitoistaneljäkymmentä menisi läpi.
Toimiikohan tarkastaja ihan oikein kun aina kun on lähes oikea ratkaisu niin jää raksuttamaan niin pitkäksi aikaa kunnes tulee "tarkastus kestää liian kauan". Näin kävi myös tilanteessa missä oli ehkä oikea ratkaisu, mutta merkki määrä ylitti 1000.
Tarkastaja toimii ihan oikein, mutta lausekkeiden tarkistaminen on hidasta (ainakin nykyisellä algoritmilla). Kuitenkin oikea ja tarpeeksi lyhyt lauseke menee yleensä läpi alle 10 sekunnissa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.