Ohjelmointiputkassa alkaa tänään PHP-haaste:
https://www.ohjelmointiputka.net/phph/
PHP-haaste sisältää 100 ohjelmointitehtävää, jotka käsittelevät PHP-kielen perusasioita: muuttujia, taulukoita, ehtoja, silmukoita ja funktioita. Ensimmäiset tehtävät ovat helppoja, mutta tehtävien vaikeustaso kasvaa tasaisesti, ja viimeiset tehtävät tarjoavat haastetta taitavallekin ohjelmoijalle.
PHP-haasteen tavoite on kasvattaa suomalaisten nettiohjelmoijien osaamistasoa. PHP-haasteen kaikki tehtävät ratkaissut saa syvällisestä ohjelmointitaidosta kertovan sertifikaatin sekä oikeuden käyttää seuraavaa logoa Internetissä nimensä yhteydessä:
Tervetuloa mukaan PHP-haasteeseen!
Olisiko mitään ideoita miten tästä voisi tehdä mielekkäämmän sellaisille joilla PHP on jo kohtuullisesti hanskassa?
Jotenkin ei nappaisi tahkoa noita helppoja paria tuntia että pääsisi sinne loppupään mahdollisesti mielenkiintoisiin ja haastaviin tehtäviin. Katsoin tehtävän 53 (joka on siis numeron mukaan vaikein minkä näkee suorittamatta pienempiä ensin) ja sekin oli mielestäni ihan kohtuuttoman helppo. (varsinkin kun koodin tunkemisessa palvelimelle ja sen linkin työntämisessä tuohon systeemiin menee enemmän aikaa kuin itse koodin kirjoittamisessa, niin se alkaa turhauttaa)
10:18 <+jpa> php-haaste2: koodatkaa php-koodi joka ratkaisee noi tylsät
automaattisesti
Niin, siinä voiski olla jo haastetta :)
Niin no voishan tossa olla ideaa, jos tekis jonkun frameworkin, joka kävis hakemassa aina seuraavan tehtävän syöttöparametrit valmiiksi ja sitten ei tarvis kuin täpätä sopiva koodi omalla palvelimella tekstiboksiin ja se postais linkin sinne haasteeseen automaattisesti.
Tehtävien tekstiboksit vois muistaa URLista domainin sekä ja ehottaa automaagisesti tehtävää vastaavan tiedoston nimeä, 1.php etc, naputteluun menee tosiaan turhaa aikaa.
Läpällähän noita vetää, tässä esim. rot13-muotoinen ratkaisu, jolla meni tehtävä 15. läpi. Samaa luokka melkein joka tehtävään ykkösosiossa tähän mennessä. One-lineria vaan ja rautaa rajalle.
<?php neenl_jnyx($_ERDHRFG, perngr_shapgvba('$k', 'erghea fge_ercynpr("0", "-1", $k);')); rpub (vag)($_ERDHRFG['cw'] * 2 + $_ERDHRFG['n'] + $_ERDHRFG['o'] + $_ERDHRFG['p'] > 2); ?>
En kehannu laittaa haasteen kommentteihin, joku vois ottaa erehdyksessä mallia.
EDIT: Härski rot13.
Miksihän tuo noiden koodien lähetyksen täytyy olla noin hemmetin työlästä. Kokeilin ihan huvikseni tuota ja aattelin, että tiedoston voi uploadata siitä lähetä kentästä. No sain huomata, että tiedosto täytyy ensiksi upata johonkin ja sitten laittaa osoite kyseiseen kenttään ja tähän tyssäs ainakin minun osaltani. Liikaa vaivaa. Miksei tuolla voisi olla vain lootaa mihin copy pastella vois laittaa koodin ja lähettää? Aika varmasti osallistujia olisi huomattavasti suurempi määrä jos tuo lähetys systeemi ei olisi niin "hankala".
Kaipa siinä on se, että ei ole jaksettu nähdä vaivaa virittelemään PHP:lle sandboxia.
tsuriga kirjoitti:
En kehannu laittaa haasteen kommentteihin, joku vois ottaa erehdyksessä mallia.
Parempi se kai olisi sinne laittaa kuin tänne, kun siellähän pääsee kuhunkin keskusteluun vasta, kun on ratkaissut tehtävän.
Grez kirjoitti:
Kaipa siinä on se, että ei ole jaksettu nähdä vaivaa virittelemään PHP:lle sandboxia.
Onko niitä kovinkin helppo viritellä palvelinhotelleihin?
Olettaisin, että jos se olisi ollut kovinkin helppoa, niin se vaiva olisi jaksettu nähdä.
TeNDoLLA kirjoitti:
Miksihän tuo noiden koodien lähetyksen täytyy olla noin hemmetin työlästä.
En tiedä muista, mutta minusta tiedostojen editoiminen pääteyhteyden läpi suoraan veppipalvelimen wwwrootin alla oli tosi helppoa ja kätevää.
Jep, sshfs:ää käyttäen kooditiedostoja voi kirjoitella yhtä helposti kuin omalle koneelle. Lisäksi ainakin Firefox osaa ehdottaa aiempien tehtävien osoitteita lähetettävään tekstikenttään, jota ei tarvitse yleensä muokata kuin yhden merkin verran. Mieluummin teen näin hyvällä koodieditorilla kuin koodaan tavalliseen textareaan.
Hyvä haaste ohjelmointia aloitteleville, ja eiköhän noita muutkin jaksa kahlata läpi omaan tahtiinsa.
Eräs vaihtoehto on lisätä FTP weblokaationa My Network Placeen ja viljellä pikakuvakkeena ympäriinsä, sitä on suht helppo käpristellä. Foxi tosiaan muistaa kunhan itte muistaa pitää ko. option päällä, allekirjoittanut ei muistanut. Jätin omat koodit postaamatta ko ne on ihan kauheata purkkaa lähestulkoon järjestään jok'ikinen. Jääköön se tila niille esimerkillisille esimerkeille.
Tottahan se on, että ainahan löytyy tapoja, joilla tuosta tän hetkisestäkin toteutuksesta saa "näppärän" kuten editointi suoraan palvelimella tai palvelin tilan mounttaamisen lokaaliksi yms. Aina se on kuitenkin lisä vaivaa varsinkin jos ei normaalisti palvelinpäässä suoraan editoi niitä tiedostoja. Lisäksi jos ei omista tällä hetkellä mitään web hotellia, niin harvempi varmasti jaksaa tuon takia alkaa sitä hankkimaankaan.
Pidän näistä tehtävistä. :) Vaativat samaan aikaan älykkyyttä ja ohjelmointitaitoja. Hyvä Antti!
Taidan alkaa tehdä näitä sitten kun alkaa koulussa PHP kurssi :) Mielenkiintoiselta vaikuttaa.
Niin ja ettei nyt ihan paskanmaku jää suuhun mun kommenteista, niin itse haastehan siis on ihan hieno idea.
Nykyinen työläs ratkaisun lähetys johtuu tosiaan siitä, että tiedossani ei ole järkevää ja turvallista tapaa suorittaa käyttäjän lähettämää PHP-koodia Ohjelmointiputkan webhotellissa. Olen todella samaa mieltä kanssanne, että ratkaisun lähetys saisi olla kätevämpi.
Tehtäviin on lähetetty suuri määrä ratkaisuja jo ensimmäisen päivän aikana. Kiitos monista hyvistä kommenteista tehtävien keskusteluissa!
TeNDoLLA kirjoitti:
Lisäksi jos ei omista tällä hetkellä mitään web hotellia, niin harvempi varmasti jaksaa tuon takia alkaa sitä hankkimaankaan.
Tässä on PHP-skripti, joka toimii riittävässä määrin HTTP-palvelimena, jotta sitä voi käyttää PHP-haasteen tehtävien ratkaisemiseen. Ratkaisu pitää kirjoittaa funktion sisään. Koodissa on mukana ensimmäisen haastetehtävän ratkaisu.
<?php function http_server($callback, $port = 80) { $socket = stream_socket_server("tcp://0.0.0.0:$port", $errno, $errstr); if (!$socket) { die("Portin $port kuuntelu ei onnistu!\n$errno: $errstr\n"); } echo "Odotetaan.\n"; while ($client = stream_socket_accept($socket)) { echo "Yhteys muodostettu.\n"; echo "Luetaan otsikot.\n"; while (trim(fgets($client)) != ''); echo "Luetaan POST-data...\n"; $str = trim(fgets($client)); parse_str($str, $_REQUEST); echo '$_REQUEST = ', var_export($_REQUEST, true), "\n"; echo "Ajetaan funktio.\n"; ob_start(); $callback(); $data = ob_get_contents(); ob_end_clean(); echo "Tulos:\n"; echo $data, "\n"; echo "Vastataan.\n"; $response = array(); $response[] = "HTTP/1.1 200 OK"; $response[] = "Connection: close"; $response[] = "Content-Type: text/plain"; $response[] = ""; $response[] = $data; $response = implode("\r\n", $response); fwrite($client, $response); echo "Katkaistaan yhteys.\n"; fclose($client); } echo "Lopetetaan palvelin.\n"; fclose($socket); } // Esimerkki: // Tämä funktio tulostaa tehtävän ratkaisun: function ratkaise() { echo $_REQUEST['a'] + $_REQUEST['b']; } // Odotetaan yhteyttä porttiin 12345. // Kun yhteys tulee, ajetaan funktio 'ratkaise'. http_server('ratkaise', 12345); ?>
Skripti ajetaan siis PHP:llä komentoriviltä:
php ratkaisu.php
Palvelimeksi PHP-haasteen ratkaisukenttään pitää kirjoittaa oman koneen julkinen IP-osoite, ja lisäksi tietenkin vaaditaan, ettei välissä ole palomuuria tai reititintä, joka estää yhteyden. Oman osoitteen voi tarkistaa sivulta http://www.whatsmyip.org/. PHP-haasteen ratkaisuosoite voisi siis olla vaikkapa http://94.101.21.225:12345/. Tässä 94.101.21.225 on oma, julkinen IP-osoite, ja 12345 on käytettävä portti. Palvelin suljetaan näppäinyhdistelmällä Ctrl-C tai Ctrl-Z.
En ymmärrä, millä tavalla tämä on php-specifinen?
Tosin php-servulla olen näitä kylläkin tehnyt.
peran kirjoitti:
En ymmärrä, millä tavalla tämä on php-specifinen?
PHP on nettiohjelmoinnin opettelijan luonnollinen valinta. Malliratkaisuissa ja keskusteluissa kielenä on niin ikään PHP. Silti mikään ei estä käyttämästä muita kieliä (kuten QBasicia). Olennaista on "haaste" eikä "PHP": jos PHP-haasteen läpäisee jollain kielellä, sen läpäisee tarvittaessa myös PHP:llä.
Oliko tossa 30.:ssä jotain virhettä tarkistuksessa vai heittääkö mulla palvelimet eri tuloksia? 5.2.9 palvaimella heitti tarkistaessa viimoseen erroria kun taas 5.2.6 palvelimella toimii nyt neljä tuntia myöhemmin iha hyvin.
tsuriga kirjoitti:
Oliko tossa 30.:ssä jotain virhettä tarkistuksessa vai heittääkö mulla palvelimet eri tuloksia?
Viimeisessä algoritmi ainakin käy 32-bittisen lukualueen yläpuolella, eli voi olla, että tavallinen int-muuttuja pyörähtää ympäri. Riippuu kai PHP:n asetuksista tai käännöksestä.
Muutin nyt tehtävää 30 niin, että n on joka vaiheessa korkeintaan miljardi.
tehtävässä 30 jotain pahasti vialla, nyt ensimmäisen syötteen oikea vastaus on 1, kun viimeksi se oli 3
Mielestäni pitäisi olla mahdollisuus skipata tehtävä ja palata myöhemmin siihen. Eli tehtävät voisi ratkoa siinä järjestyksessä kuin haluaa. Itse ainakin kyllästyn jos olen jumissa jossakin tehtävässä riittävän kauan ja jonkun tauon jälkeen ratkaisen sen helposti, sillävälin voisi ratkoa muita tehtäviä.
T.M. kirjoitti:
tehtävässä 30 jotain pahasti vialla, nyt ensimmäisen syötteen oikea vastaus on 1, kun viimeksi se oli 3
Kyllä se ihan oikein toimii. Syötteen n=1 ratkaisu on edelleenkin 3.
Metabolix kirjoitti:
Kyllä se ihan oikein toimii.
jep nyt taas toimii :D äsken ei.
tesmu kirjoitti:
Mielestäni pitäisi olla mahdollisuus skipata tehtävä ja palata myöhemmin siihen. Eli tehtävät voisi ratkoa siinä järjestyksessä kuin haluaa.
Pakollinen ratkaisujärjestys johtuu siitä, että jos tehtäviä saa jättää väliin, niihin ei helposti palaa koskaan. Usein kuitenkin tehtävät, jotka haluaisi jättää väliin, ovat juuri opettavaisia. Tämä menettely on kieltämättä joskus ärsyttävä, mutta minusta silti kokonaisuutena paras.
T.M.: Jos kohtaat vielä samanlaisia ongelmia, voisitko lähettää minulle sähköpostitse sivulle tark.php tulevan tekstin? Tehtävän 30 ensimmäinen syöte on pysynyt koko ajan ennallaan, joten vian täytyy olla jossain muualla.
Tehtävässä 62 on ilmeisesti mennyt miljoona ja miljardi sekaisin, sillä tehtävän kuvauksessa lukee:
lainaus:
Luku on positiivinen kokonaisluku ja korkeintaan miljoona.
Kuitenkin skriptiä yritetään tarkistaa luvuilla jotka ovat suurimmillaan satoja miljoonia.
Korjasin virheen tehtävänannosta: kiitos huomautuksesta.
Onkohan tuossa 20. mitenkä elämää suurempi ratkaisu odotettavissa, kun en rekursiolla läpäse 6. testiä(kestää yli 5s).
No kivaa oli tähän asti.
Tällä hetkellä katkee siirto content-divin alotustagin jälkeen.
hernih kirjoitti:
Onkohan tuossa 20. mitenkä elämää suurempi ratkaisu odotettavissa,
Vinkki: miten selvittäisit vastauksen ilman tietokonetta?
tsuriga kirjoitti:
Tällä hetkellä katkee siirto content-divin alotustagin jälkeen.
Oliko tämä ongelma hetkellinen?
hernih kirjoitti:
kun en rekursiolla
Mikäs etu tosta rekursiosta on saatavissa?
(tuokin oli vinkki)
Antti Laaksonen kirjoitti:
tsuriga kirjoitti:
Tällä hetkellä katkee siirto content-divin alotustagin jälkeen.
Oliko tämä ongelma hetkellinen?
Johtu vaan siitä, että istunto oli katkennut. Jännästi kuitenkin näytti vielä "Kirjaudu ulos" -linkin ja tosiaan katkas tuosta heti divin jälkeen.
Muoks: testasin. Kirjautumisen vanhennuttua näkyy vain Kirjaudu ulos ja Tehtävälista -linkit. Jälkimmäisestä ei pääse mihinkään ja ekan painaminen on hieman epäloogista, mutta sillä pääsee kuitenkin haasteen etusivulle kirjautumaan.
Antti Laaksonen kirjoitti:
tesmu kirjoitti:
Mielestäni pitäisi olla mahdollisuus skipata tehtävä ja palata myöhemmin siihen. Eli tehtävät voisi ratkoa siinä järjestyksessä kuin haluaa.
Pakollinen ratkaisujärjestys johtuu siitä, että jos tehtäviä saa jättää väliin, niihin ei helposti palaa koskaan. Usein kuitenkin tehtävät, jotka haluaisi jättää väliin, ovat juuri opettavaisia. Tämä menettely on kieltämättä joskus ärsyttävä, mutta minusta silti kokonaisuutena paras.
Siis tottakai se on opettavaista joo, mutta itse ainakin kyllästyn jos en riittävän ajan päästä saa ratkaistua mutta myöhemmin sitten se tulee ratkaistua. Luonnollisesti jos kaikkia tehtäviä ei ole suoritettu niin sillon ei ole oikeutta tuohon "sertifikaattiin" ja haastetta ei ole suoritettu.
Eli käytännössä jos tätä vertaa esim johonki tenttiin, niin kyllä sinulla on mahdollisuus skipata tehtävä ja palata myöhemmin siihen uudestaan.
Nyt järjestelmä toimii järkevämmin, jos istunto on katkennut.
tesmu kirjoitti:
Mielestäni pitäisi olla mahdollisuus skipata tehtävä ja palata myöhemmin siihen.
Antti Laaksonen kirjoitti:
Pakollinen ratkaisujärjestys johtuu siitä, että jos tehtäviä saa jättää väliin, niihin ei helposti palaa koskaan.
Joissain järjestelmissä voi valita enintään pari tehtävää ohitettaviksi.
henkru kirjoitti:
Onkohan tuossa 20. mitenkä elämää suurempi ratkaisu odotettavissa, kun en rekursiolla läpäse 6. testiä (kestää yli 5s).
Eikö ole aivan yleisesti tunnettu tosiseikka, että Fibonaccin lukuja ei missään tapauksessa kuulu laskea rekursiolla? :) Funktiokutsuja tulee enemmän kuin tuloksen verran, eli kun lasketaan 40. luku (433494437), funktiokutsuja tulee hyvinkin yli miljardi.
Onko tehtävässä 28 4:ä testitapauksessa virhe, koska kolme edellistä testiä menee läpi heittämällä, mutta tuossa tökkää. Mikäli vaihtaa suuntaparametrin V->O, niin sitten tulee testitapauksen mukainen tulos.
Kyllä se on aivan oikein. Voit vaikka käsin tarkistaa tuloksen.
Käsin sen tarkistinkin, mutta ilmeisesti on vielä jokin virhe jäänyt huomaamatta.
Kyllähän tuo hidas näköjään oli, en sen enempää asiaa miettinyt, koska asia tuli aika lailla suoraan takaraivosta.Ne kerrat kun ohjelmoinnissa törmännyt fibonaccin lukuun niin se on ratkaistu rekursiolla.
Ratkaisin kyllä tehtävän..
Taitaa tehtän 63 tarkistuksessa 15. testissä olla jotain kummallista, sillä skriptiä käsketään muuttamaan 12(?)-järjestelmässä oleva luku 11-järjestelmästä 2-järjestelmään.
Syöte:
luku=ABBBBB&jarj1=11&jarj2=2
Ei kai tuon pitäisi olla mitenkään mahdollista?
Jogge kirjoitti:
Ei kai tuon pitäisi olla mitenkään mahdollista?
Olet aivan oikeassa. Virheellinen syöte on nyt poistettu.
Metabolix kirjoitti:
Eikö ole aivan yleisesti tunnettu tosiseikka, että Fibonaccin lukuja ei missään tapauksessa kuulu laskea rekursiolla?
Kyseessä ei sentään ole yleisesti tunnettu tosiseikka.
Jäin kiinni teht. 7. :P Taisi jäädä siihen :D
Tuottaako jokin erityinen asia ongelmia kyseisessä tehtävässä?
<?php //Ota muuttujaan "luku" arvo $_REQUEST['n'] taulukosta //Alusta muuttujat "summa1" ja summa2" nollaksi //aloita silmukka, jota kierretään "luku" kertaa //lisää summaan 1 laskurin osoittama luku //lisää summaan 2 laskurin neliön osoittama luku //tulosta summa1 summa2 ?>
Mistä sen neliön osoittaman luvun saa? :P
"Luvun neliö" on luku kertaa luku. Eli sellaisen neliön pinta-ala, jonka sivun pituus on luku. Voidaan merkitä myös luku² eli luku potenssiin kaksi. (esim. luvun 7 neliö on 7*7 eli 49)
(näyttää siltä että esimerkiksi tuon tehtävän tehtävänannon ymmärtäminen vaatii potenssin ymmärtämistä käsitteenä, ja sitähän opetetaan peruskoulun luokilla 6-9. Eli jos on vaikka 5. luokan vasta käynyt, niin tehtävänanto voi mennä pahasti ohi)
Tuossa minun silmukkani:
for($i=0;$i<$luku;$i++){ $summa1=$summa+$i; $summa2=$summa2+$i; $summa2=$summa2*$summa2; }
Mitä olen tehnyt väärin? :P
No jos ajatellaan mitä pitäisi saada esimerkiksi jos $luku = 3
Summa2 tulokseksi pitäisi saada 1*1 + 2*2 + 3*3 = 1 + 4 + 9 = 14
Sinun silmukkasi laskee seuraavasti:
Alussa $summa2 on jotain. Jos et ole määritellyt mitään, niin PHP kai olettaa 0 ja antaa varoituksen. Oletan, että se on 0.
$i=0
$summa2 = 0 + 0 = 0
$summa2 = 0 * 0 = 0
$i=1
$summa2 = 0 + 1 = 1
$summa2 = 1 * 1 = 1
$i=2
$summa2 = 1 + 2 = 3
$summa2 = 3 * 3 = 9
Poistutaan silmukasta.
Eli lopputulokeksi jää 9, eikä 14 niinkuin piti.
Eli ensinnäkin olisi ehkä selkeämpää aloittaa $i laskeminen 1:stä kuin nollasta ja laskea $luku asti.
Toisekseen sinun pitäisi lisätä summa2:een joka kierroksella $i*$i eikä ottaa sitä itseään mukaan tuohon kertolaskuun.
$summa1=0; $summa2=0; for($i=1;$i<$luku;$i++){ $summa1=$summa+$i; $ikertaa=$i*$i; $summa2=$summa2+$ikertaa; }
Nyt muutin tuommoseksi, mutta ei toimi edelleenkään :P Mitähän nyt tein väärin...
No, ensinnäkin tuo silmukka suoritetaan vain niin kauan kuin $i on pienempi kuin $luku. Eli jos $luku on vaikka 3, niin viimeinen $i, joka tuossa silmukassa käydään läpi on 2.
Tuon kun korjaat, niin mielestäni summa2 menee sitten oikein.
$summa1 taas saa arvoksi $summa + viimeinen $i. Eli siinä pitäisi varmaankin olla $summa1 eikä $summa.
Kiitos tosi paljon! Sain toimimaan :) Yritän nyt jatkaa ite eteenpäin :P
edit:
Jaaha nyt pitäisi teht 9 saada ratkaistua :S
Ei yhtään hajuakaan :P Vokaalit mulla on arrayssa, mitään muuta ei valmiina.
Ei kukaan viittis helppiä taas avutonta ? ::D
<?php //Lue muuttujaan "sana" $_REQUEST['sana'] taulukosta //Laske muuttujan "sana" pituus //alusta muuttuja "laskuri" nollaksi //aloita silmukka, jota kierretään sanan pituuden verran alkaen indeksistä 0 //lue "sana"sta seuraava merkki //jos merkki on vokaali lisää laskuria yhdellä // muuten nollaa laskuri //tulosta laskurin arvo ?>
Ehkä tuota auttamista pitäisi vähän vähentää. Tehtävät ovat kuitenkin (ainakin noin alkupuolella) niin yksinkertaisia ja koodit niin lyhyitä, että jokaiselle tekisi hyvää itse oppia etsimään virheensä.
Yleisenä neuvona voin sanoa, että kannattaa laittaa kaikki PHP:n virheilmoitukset päälle. Seuraavat rivit koodin alussa auttavat, tai vastaavat asetukset voi kirjoittaa suoraan php.ini-asetustiedostoon:
(Itse asiassa E_STRICT vaikuttaakin vain asetustiedostossa ollessaan, koska se käsittää virheitä, jotka ilmenevät ennen koodin ajamista.)
Jäin jumiin 4 tehtävään :(. Tällä koodilla saan sen pystyviivan sijasta plus merkin niiden lukujen väliin, mutta miten pystyn tulostamaan vastauksen?
Eihän tuossa koodissa ole mitään järkeä. Tarkoitus olisi laskea luvut yhteen, eikä muutella merkkijonon merkkejä. Samaan pääsisit laittamalla koko pötkön
<?php echo preg_replace("/\\|/", "+", $_REQUEST['luvut']); ?>
Kun sinulla on luvut taulukossa, kuinka saisit selville niiden summan?
Teuro kirjoitti:
Eihän tuossa koodissa ole mitään järkeä. Tarkoitus olisi laskea luvut yhteen, eikä muutella merkkijonon merkkejä.
Kyllähän tuossa sinänsä on järkeä. Lähestymistapa vaan ei ole sellainen jolla kokenut koodaaja lähtisi tekemään, mutta minusta se on hyvinkin luonteva tapa lähestyä ongelmaa. Senhän saisi tuollakin tavalla jopa laskettua, mutta samalla saisi helposti kohtuullisen järeän tietoturva-aukon jos ei ole varovainen.
Kokenut kooderi tietenkin tietää, että helpompi paloitella se ja laskea summa omalla koodilla, kuin alkaa paikkailemaan aukkoja jos pistäisi php-tulkin suorittamaan laskun.
Metabolix kirjoitti:
Ehkä tuota auttamista pitäisi vähän vähentää. Tehtävät ovat kuitenkin (ainakin noin alkupuolella) niin yksinkertaisia ja koodit niin lyhyitä, että jokaiselle tekisi hyvää itse oppia etsimään virheensä.
Olen kyllä aika pitkälti samaa mieltä. Olisihan se hassua kun olisi "php haaste sertifioitu" vaikka ei osaisi itsenäisesti ratkaista puoliakaan.
Nyt sain tuloksen, mutta se ei laske sen jonon ensimmäistä lukua?? Mikä on pielessä?
Taulukko alkaa aina indeksistä 0 eli $a[0] on ensimmäinen, syytä olisi tehdä algoritmistä myös ns "vakaa", koska nyt jos tulee enemmän syötteitä kun lasket niin algoritmisi ei toimi. eli For-silmukalla käyt läpi kaikki alkiot ja lasket yhteen.
Niin syötteen koosta ei saanut tehdä oletuksia. Ainoastaan summan taataan olevan alle miljoona.
Grez kirjoitti:
Kyllähän tuossa sinänsä on järkeä. Lähestymistapa vaan ei ole sellainen jolla kokenut koodaaja lähtisi tekemään, mutta minusta se on hyvinkin luonteva tapa lähestyä ongelmaa. Senhän saisi tuollakin tavalla jopa laskettua, mutta samalla saisi helposti kohtuullisen järeän tietoturva-aukon jos ei ole varovainen.
Jos tarkoitat eval() funktiota, niin jätin sen tarkoituksella pois tuosta edellisestä juurikin tuosta syystä.
Kiitos hyvistä neuvoista.
teht 9
En saanut ratkaistua tällä, yritin seurata Teuron ohjeita mutta jostain syystä ei toimi:
$pituus = strlen($sana); $laskuri = 0; for($i=0;$i<$pituus;$i++){ $mrk = substr($sana, $i, 1); if(in_array($mrk, $vokaalit)){ $laskuri = $laskuri + 1; } else { $laskuri = 0; } } print $laskuri;
Jätin tarkoituksella osan koodista pois
Miksi koodi ei anna aina oikeaa vastausta?
Koodi kaiketi antaa tulokseksi luvun 0, jos viimeinen luku ei ole vokaali? Pitää vielä muistaa säilyttää tuota tulosta jossakin. Esimerkiksi muuttujassa suurin. Eli silmukan lopussa tarkistaa onko saatu laskuri > suurin. Se jäi epähuomiossa tuosta äskeisestä poies.
Sain kuntoon, kiitos!
Tehtävän 77 esimerkkisyötteessä näyttäisi olevan hieman vikaa.
$_REQUEST['rivit'] = "SSSSSSS|SA.S...S|S.SS.SBS|S......S|SSSSSSS";
Esimerkkisyötteen ensimmäisellä ja viimeisellä rivilla kuuluisi käsittääkseni olla kahdeksan merkkiä, kuten keskimmäisillä kolmella rivillä on.
On jotkut eteviä, kun on tehtävässä 77 jo. Onko joku ratkaissut nämä jo?
Jogge kirjoitti:
Tehtävän 77 esimerkkisyötteessä näyttäisi olevan hieman vikaa.
Korjasin virheen, kiitos.
MIB kirjoitti:
Onko joku ratkaissut nämä jo?
Toistaiseksi kukaan ei ole ratkaissut kaikkia tehtäviä.
Voitko laittaa jonnekkin näkyville, että kuka on missäkin vaiheessa?
Kiva että joku jaksoi tämmösenki koodata =D
Tästä tulee vielä vuosien varrella jännää, kun en seiskaa pidemmälle päässyt ;)
Onko joku tehnyt ton tehtävä #31:n käyttäen regexpiä? Itse teen kyseistä tehtävää, ja haluaisin lyhennettynä pregeillä eikä millään loopeilla.
Ei tarvii koodia antaa, kuhan tietäis onko mahollista? :)
Ja olen samaa mieltä kuin MIB, olisi kiva vähän seurailla. Joku varmaan tehnytkin jo xd
Kiitos tekijöille, todella mahtava koetella taitojaan ;)
Codeclown kirjoitti:
Kiitos tekijöille, todella mahtava koetella taitojaan ;)
Joo, harmi että en ole tuosta 10 tehtävästä pidemmälle päässyt. Huomaa, että en ole tuollaisiin asioihin perehtynyt, vaan teen vähän erityylisiä asioita.
Sellaisillehan tuo haaste onkin parhaimmillaan, joille tehtävät tuottaa haasteita. Ainakaan ennen 22:tä (en ole sitä vielä katsonut) ei minusta ole yhtään tehtävää, jota ei kuka tahansa vähänkään PHP-koodaamista osaava pystyisi hieman mietittyään toteuttamaan.
Jos PHP:llä haluaa oikeasti koodata eikä nuo tehtävät onnistu, niin sitä suuremmalla syyllä kannattaisi ne yrittää tehdä. Joutuu nimittäin tekemään hirveät määrät turhaa työtä, jos ei pysty tekemään yksinkertaisiakaan silmukoita, taulukkojen käsittelyä yms. mitä noissa nyt on.
Codeclown kirjoitti:
Onko joku tehnyt ton tehtävä #31:n käyttäen regexpiä?
Tästä on esimerkki malliratkaisussa. Pelkät säännölliset lausekkeet eivät riitä, vaan pitää käyttää /e-valitsinta ja PHP-koodia uuden luvun muodostukseen.
Antti Laaksonen kirjoitti:
Toistaiseksi kukaan ei ole ratkaissut kaikkia tehtäviä.
Paitsi tietenkin jotkut tehtävien ja malliratkaisujen laatijat, jotka eivät saa itse osallistua haasteeseen. :(
MIB kirjoitti:
Voitko laittaa jonnekkin näkyville, että kuka on missäkin vaiheessa?
Tällä hetkellä tehtävän 1 on ratkaissut 114 henkilöä, tehtävän 5 on ratkaissut 93 henkilöä, tehtävän 10 on ratkaissut 67 henkilöä, tehtävän 20 on ratkaissut 44 henkilöä ja tehtävän 50 on ratkaissut 6 henkilöä. Ratkaistuja tehtäviä on yhteensä 1945 (jos joku on ratkaissut saman tehtävän monta kertaa, se on laskettu tähän lukuun vain kerran).
Ei varmaan olisi paha rasti laittaa (semi)reaaliaikainen taulukko näkymään ratkaisujen tilanteesta... (just a thought)
Tarkemmat tilastot tulevat käyttöön, kunhan aineistoa on vähän enemmän.
Hyvä :) Onnistuhan se regexpillä se #31. En tosin ole nyt tehnyt, leffaa kattomaan ->
Propsit tekijöille, tosiaan koukuttavaa ;D
Mielestäni tehtävän 38 tehtävänannossa ei mainita missään, että luvuissa ei saa olla alkunollia.
Grez kirjoitti:
Mielestäni tehtävän 38 tehtävänannossa ei mainita missään, että luvuissa ei saa olla alkunollia.
No luettelepa sitten luvut yhdestä kymmeneen. Huh, taisi tulla aika monta? ;)
Nyt tehtävässä on maininta asiasta.
Hienoa toimintaa. Nyt ei muiden tarvitse arvata miksi 09.09.2000 ei ole ok päivä.
Metabolix kirjoitti:
Grez kirjoitti:
ei mainita missään, että luvuissa ei saa olla alkunollia.
No luettelepa sitten luvut yhdestä kymmeneen. Huh, taisi tulla aika monta? ;)
01, 02, 03, 04, 05, 06, 07, 08, 09, 10
En ymmärrä.
Ensimmäinen PHP-haasteen läpäissyt on Jussi Kokkala, joka lähetti hetki sitten toimivan ratkaisun tehtävään 100. Kuluvana vuonna Jussi on saavuttanut paljon muutakin, kuten voittanut Datatähti-kilpailun ja ansainnut Suomelle mitalit kansainvälisistä ohjelmoinnin olympialaisista Ruotsista ja Bulgariasta. Onnittelut Jussille!
Vau, itse olen tehtävässä #33 xd
Onnea, mutta tässähän ei ole aikarajaa?
Ei ole aikarajaa, vaan tehtäviä saa ratkoa omaan tahtiin.
Sitähän voi sitten ratkoa sitä mukaan kuin oppii ;) No, se on hyvä asia että ei tarvitse kiirehtiä. Oppii samalla myös uutta, se varmaan on yksi tarkoituksista.
Axel_Moon kirjoitti:
Jäin jumiin 4 tehtävään :(...
Tämä ainakin toimi.. mut en tiefä onko paras mahdollinen..
Mod. huom: Eiköhän niitä ole tarkoitus ratkoa jokaisen itse.
walkout_ kirjoitti:
Tämä ainakin toimi.. mut en tiefä onko paras mahdollinen..
Jos kerran olet tehtävän ratkaissut, niin sieltä malliratkaisuistahan voit katsoa suht optimaalisia ratkaisuja. Ja tosiaan, siihen on varmaan ihan syykin miksi muiden vastaukset näkee vasta, kun on itse ratkaissut tehtävän :D
Joo, ei vastauksia, itseä varten näitä koetellaan :)
Sori pieni ajattelemattomuus kun postasin toimvan vastauksen..
Olen nyt tehtävässä 9.. koko ajan menee vaikeammaksi.
On tuossa Jussilla ollut kova työ, kun on ratkaissut tuon.. :D Ottaisin mielelläni ne taidot, kun omani loppuivat taikaneliöön.
Tai, jos ymmärtäisin tehtävän, niin voisin osata vääntää koodin. Ala-asteella ei ole vielä ehditty käsittelemään kaikkea. :D
Pääsin kympiin ja ratkaisin sen.. juu next.
Näyttää vielä perus kauralta mutta aina joka kerta pitää miettiä enemmän.
Mulla rupee menemään sekasin jo :D 33 ei onnistu :D
Toivottavasti tämä ei ole liian suuri spoileri, mutta eikö nro. 33 ratkaisuksi kelpaa ihan määritelmä tuosta kolmiosta? Itse tein ainakin tuollaisen ratkaisun. Taulukoit siis jo lasketut kolmion rivit ja lopuksi tulostat pyydetyn rivin näkyville.
MIB kirjoitti:
On tuossa Jussilla ollut kova työ, kun on ratkaissut tuon.. :D Ottaisin mielelläni ne taidot, kun omani loppuivat taikaneliöön.
Tai, jos ymmärtäisin tehtävän, niin voisin osata vääntää koodin. Ala-asteella ei ole vielä ehditty käsittelemään kaikkea. :D
Mikäs siinä taikaneliön tehtävänannossa oikein mättää? Meinaan siinä ei kyllä ainakaan yhteenlaskua korkeampaa matematiikkaa tarvita. Jos siinä on jokin epäselvä kohta, niin kysy ihmeessä ja selvennetään se.
Olisi kyllä kiva tietää paljonko Jussilla on mennyt aikaa tuohon. Itse approksimoin, että minulta menisi noin 10 tuntia aikaa ratkaista kaikki ja vielä toistaiseksi ei ole sellaista aikaa löytynyt, joten olen vasta alle puolessa välissä. Tietty jos jättäisi golf-kierroksen väliin ja käyttäisi sen ajan haasteeseen :D
Grez kirjoitti:
Olisi kyllä kiva tietää paljonko Jussilla on mennyt aikaa tuohon. Itse approksimoin, että minulta menisi noin 10 tuntia aikaa ratkaista kaikki ja vielä toistaiseksi ei ole sellaista aikaa löytynyt, joten olen vasta alle puolessa välissä. Tietty jos jättäisi golf-kierroksen väliin ja käyttäisi sen ajan haasteeseen :D
Tulihan siinä heitettyä varmaan vajaa parikymmentä tuntia yhteensä elämästä hukkaan haasteen parissa, tosin jaoin sen useaan yöhön. Loppupään tehtävät veivätkin reilusti suurimman osan kokonaisajasta kun osa oli suorastaan hinaavia taulukkosäätöjä ja osassa noissa algojen keskimisissä meni aikaa runsain mitoin - ei kuitenkaan ihan terävimmästä päästä ole nämä hoksottimet. Varmasti viisaammalta algoritmipäältä ja kokeneemmalta php-koodarilta onnistuu tuo 10 tuntiin kiiruhtaminenkin.
Itte jumitin tehtävässä 17 muutama pv sitten kun näitä tein. Varmaan vois taas kattoo sitä uudestaan >.> Joku outo bugi siellä vaikka pitäis toimia iha kunnolla mun koodit :E
Grez kirjoitti:
Mikäs siinä taikaneliön tehtävänannossa oikein mättää? Meinaan siinä ei kyllä ainakaan yhteenlaskua korkeampaa matematiikkaa tarvita. Jos siinä on jokin epäselvä kohta, niin kysy ihmeessä ja selvennetään se.
Sain sen toimimaan, eipä siinä enään mitään.
Hienosti on suunniteltu tämä, sen voin sanoa. Joskus olisin itse tarvinnut myös tuollaisen koodin, joka tarkistaa vastauksia tuolla tavalla, mutta empä enään - tosin se olisi kiva tietää miten on tehty ;)
Tuli muuten mieleen tässä, että tämänhän voi ajatella sinänsä nettiohjelmointihaasteena. Eli noi tehtäväthän voisi mielestäni ratkoa vaikka C#:lla ja ASP.Netillä jos siltä tuntuu. Vai onko tossa jotain, joka pakottaa juuri PHP:n käyttöön?
peran kysyi jo vähän samaa ja vastasin:
Antti Laaksonen kirjoitti:
peran kirjoitti:
En ymmärrä, millä tavalla tämä on php-specifinen?
PHP on nettiohjelmoinnin opettelijan luonnollinen valinta. Malliratkaisuissa ja keskusteluissa kielenä on niin ikään PHP. Silti mikään ei estä käyttämästä muita kieliä (kuten QBasicia). Olennaista on "haaste" eikä "PHP": jos PHP-haasteen läpäisee jollain kielellä, sen läpäisee tarvittaessa myös PHP:llä.
Hupsis, anteeksi sokeuteni/huonomuistisuuteni. No, kertaus on opintojen äiti tms :D
Taidanpa tehdä koko sarjan C:llä. Pitää varmaan ottaa aikaakin. ;)
Antti: Voisiko syötteen loppuun tai vaikka GET-parametriksi lisätä tehtävän numeron? Näin olisi helppo käyttää samaa ratkaisuosoitetta kaikille:
Itse ajattelin kans ottaa aikaa viimeisen 60 tekemisestä. Tai ajattelin tehdä tuollaisen vastausframeworkin joka ottais samalla automaattisesti aikaa.
Jaahas tehtvä 16 ratkomatta.. vaikeeksi menee
Metabolix kirjoitti:
Antti: Voisiko syötteen loppuun tai vaikka GET-parametriksi lisätä tehtävän numeron?
Nyt $_REQUEST['id']
sisältää tehtävän numeron.
Voisiko viimeisistä haastesivuille lähetetyistä kommenteista/malliratkaisuista saada jonkinlaisen listauksen linkkeineen? Olisi kiva selata uusimpia kommentteja jo ratkaistuihin tehtäviin, mutta nykyisellään ne joutuu selaamaan kaikki läpi.
Esim.
Taso | Kommentin jätti | Pvm 5 | Matti | 10.9.09 7 | Pekka | 10.9.09 2 | Pirjo | 9.9.09 5 | Timo | 7.9.09
Uusimmat viestit tehtävien keskusteluissa näkee nyt tästä:
Hyvä, kiitos.
Grez kirjoitti:
Hienoa toimintaa. Nyt ei muiden tarvitse arvata miksi 09.09.2000 ei ole ok päivä.
Metabolix kirjoitti:
Grez kirjoitti:
ei mainita missään, että luvuissa ei saa olla alkunollia.
No luettelepa sitten luvut yhdestä kymmeneen. Huh, taisi tulla aika monta? ;)
01, 02, 03, 04, 05, 06, 07, 08, 09, 10
En ymmärrä.
Tehtävänannossa kerrottiin muoto missä päivämäärä kirjoitetaan, joka sittemmin selvittää että alkunollia ei tule. :>
Niin, sinnehän on nyt lisätty että alkunollia ei saa olla, mutta alunperin siinä luki vain, että esim. kuukauden osalta luku täytyy olla väliltä 1-12. Esimerkiksi luku 03 on tuolta väliltä, vaikka esitystapa sisältääkin etunollan.
Jos minulle annetaan tehtäväksi tehdä ohjelma joka tarkistaa päivämäärän oikeellisuuden, niin normaalisti tekisin siitä sellaisen että se hyväksyy myös etunollat. Etunollien käyttö nimittäin on melkoisen yleistä, täälläkin näissä viesteissä päivämäärissä on etunollat. Ei siinä mitään jos niitä ei haluta, mutta jos se sanotaan suoraan tehtävänannossa niin sitä ei tarvitse arvata.
Grez kirjoitti:
... väliltä 1-12 ...
... joka sitten luonnollisesti alkaakin 01:stä eikä 1:stä? Lasketko useinkin etunollien kanssa?
Minusta on aika turhaa tästä asiasta vääntää. Epäselvyys on jo korjattu.
Mielestäni kuitenkin "Tehtävänä on tarkistaa, onko annettu päivämäärä kelvollinen." ja sitten oli kerrottu joitakin tarkentavia reunaehtoja. Normaalisti tulkitsisin alkunollat sisältävän päiväyksen kelvolliseksi. Se että siellä sanottiin hyväksyttyjä välejä ei mielestäni poissulje etunollien käyttöä.
Tokihan se oli helppo arvata, kun tarkistin sanoo, ettei 09.09.2000 ole kelvollinen päivämäärä.
Kannattaa aina ilmoittaa, jos tehtävänanto ei kerro jotain asiaa tarpeeksi selvästi. Jos tehtävänanto hämää yhtäkin henkilöä, se on riittävä syy korjata tehtävänantoa. PHP-haasteessa on kysymys algoritmien suunnittelusta ja ohjelmoinnista eikä epäselvien tehtävänantojen tulkinnasta.
Mainitaanpa sitten tehtävän 80 lukukuutiosta, jonka tehtävänannosta ei voinut päätellä onko kuution koolla jotain ylärajaa.
Chiman kirjoitti:
Mainitaanpa sitten tehtävän 80 lukukuutiosta, jonka tehtävänannosta ei voinut päätellä onko kuution koolla jotain ylärajaa.
Muokkasin sanamuotoa hieman, josko se nyt olisi vielä yksiselitteisempi.
Lähinnä ajattelin, että tuossa selitetään 3x3x3-kuutio esimerkkinä, eli laskemalla itse sen suorien ym. rivien määrät ja vertaamalla annettuihin voi nähdä että on ymmärtänyt oikein periaatteen, jolla rivit otetaan mukaan.
Samapa tuo, ei yleisen version tekeminen ollut oleellisesti vaikeampaa.
Lisäsin tehtävään tarkennuksen, että kuutiossa on aina 3x3x3 palaa.
Tältä näyttää PHP-haasteen sertifikaatti:
https://www.ohjelmointiputka.net/phph/
Ensimmäinen sertifikaatti lähtee postiin ensi viikon alussa. Vähitellen myös työnantajat oppivat tuntemaan sertifikaatin.
Heh, toi olisi kiva saada ;)
kai siin on vesileima ym ettei vaan voi väärentää? :d
Onhan siinä Antin nimmari, jo siinä on riittävä syy hankkia tuollainen. ;)
Voisiko vielä lisätä tuon id:n lisäksi sellaisen, että tehtävän ratkaisu säilyisi vaikka cookiessa, niin ei tarvitsisi aina copypasteta sitä ratkaisu-URLia joka tehtävään erikseen...
Eikö sulla ole selaimessa ominaisuutta joka muistaa tekstikenttiin aiemmin syötettyjä tietoja?
ei pitäisi olla selainriippuvaista... tommonen on sentään jo aivan lapsellisen helppo tehä PHP:llä.
...tässä jo jonkin aikaa sitten huomasin muuten että PHP-haasteen sivusto on tehty äärimmäisen epähaasteellisesti :P
T.M. kirjoitti:
ei pitäisi olla selainriippuvaista... tommonen on sentään jo aivan lapsellisen helppo tehä PHP:llä.
Ja oot sitä mieltä, että sadan miljoonan sivuston on parempi tehä se jokaisen erikseen, ku että ne viis selainvalmistajaa tekee sen kerran?
T.M. kirjoitti:
PHP-haasteen sivusto on tehty äärimmäisen epähaasteellisesti :P
Haluaisitko selittää tätä kommenttiasi hieman tarkemmin? Sivusto on yksinkertainen ja selkeä; käytettävyys on minusta aivan eri tasolla kuin nykyajan "hienoilla" sivustoilla. Myös koodin semantiikka on varsin hyvällä mallilla; sivusto on jopa tekstiselaimella selattuna erittäin selkeä, mikä on hyvinkin poikkeuksellista.
Antti Laaksonen kirjoitti:
Uusimmat viestit tehtävien keskusteluissa näkee nyt tästä:
Olisiko tämä mahdollista saada myös linkiksi php haasteen sivuille?
Lisäksi erilaiset statistiikat on aina kivoja. :) Esim. tehtävän viereen ratkaisijoiden lukumäärä ja ehkä %-osuus kaikkien yrittäjien määrästä.
T.M. kirjoitti:
ei pitäisi olla selainriippuvaista...
Miksi ei? Käytännössä tuo ominaisuus on jokaisessa selaimessa. Miksi ihmeessä sitä varten pitäisi tallentaa miljoonia cookieita?
Blaze kirjoitti:
T.M. kirjoitti:
ei pitäisi olla selainriippuvaista... tommonen on sentään jo aivan lapsellisen helppo tehä PHP:llä.
Ja oot sitä mieltä, että sadan miljoonan sivuston on parempi tehä se jokaisen erikseen, ku että ne viis selainvalmistajaa tekee sen kerran?
aivan, jos haluaa tehdä sivuistaan mahd. käyttäjäystävällisen.
...En tiennytkään että on olemassa 100 miljoonaa PHP-haaste -sivustoa o.O
Metabolix, juurikin käytettävyys on täysin ala-arvoista, tulee paljon turhia klikkauksia.
- esim tuo uusien kommenttien lista on erillisellä sivulla joka pitää joko kirjoittaa manuaalisesti osoiteriville tai klikata suosikeista :d
- "seuraava tehtävä" linkki osoittaa aina viimeisimpään tehtävään, ei siis seuraavaan tehtävään siitä tehtävästä jota nyt katselet.
- en pysty edes näkemään ratkaisemattomien tehtävien nimiä, paitsi sen sivun tehtävistä joita tällä hetkellä olen ratkaisemassa.
- "kirjaudu ulos" nappi on sivuston valikossa, kun sen pitäisi olla aivan jossain muualla.
- tehtävän ratkaistessa pitäisi näkyä automaattisesti muiden kommentit ja ratkaisut; miten muuten voi oppia jos ei kato malliratkaisua? tämähän sivu oli juurikin oppimista varten tehty...
- pitää aina kopypastettaa se linkki sinne ratkaisusivulle.
- pitää aina kirjautua uudestaan PHP-haasteeseen, vaikka molemmat sivustot ovat saman domainin alla.
Edit:
- "Kirjaudu ulos" nappi on itseasissa täysin turha, sillä kirjaudut automaattisesti ulos kun suljet ikkunan.
Torgo, vain yksi keksi pitää tallentaa.
Ja mielestäni on aika urpo selain jos oletuksena täyttää edellisen arvon jokaiseen inputtiin mitä sivustolta löytyy. Siis tästähän ominaisuudesta on nyt kyse. Ei mistään "klikkaa inputtiin ja näet vaihtoehtoja edellisistä arvoista" -ominaisuudesta.
T.M. kirjoitti:
Metabolix, juurikin käytettävyys on täysin ala-arvoista, tulee paljon turhia klikkauksia. esim tuo uusien kommenttien lista on erillisellä sivulla joka pitää joko kirjoittaa manuaalisesti osoiteriville tai klikata suosikeista :d
"seuraava tehtävä" linkki osoittaa aina viimeisimpään tehtävään, ei siis seuraavaan tehtävään siitä tehtävästä jota nyt katselet.
Sivut ovat ulkoasultaan kyllä selkeät, mutta kieltämättä navigointia ei ole ehkä mietitty aivan loppuun asti. Osalle sivuista pääsee vain ulos kirjautuneena, osalle vain sisään kirjautuneena, osaan ei pääse ollenkaan linkeillä ja osa on muuten vaan mutkien takana. Turhaa sälää ei ruudulla ole, joten se helpottaa navigointia, mutta muuten tuo logiikka vähän ontuu.
T.M. kirjoitti:
Torgo, vain yksi keksi pitää tallentaa.
Yksi keksi per sivusto. On olemassa paljon muitakin sivustoja kuin php haaste.
Aika hyvää palautetta T.M., toivottavasti Antti korjaa :)
Torgo kirjoitti:
Osalle sivuista pääsee vain ulos kirjautuneena, osalle vain sisään kirjautuneena, osaan ei pääse ollenkaan linkeillä ja osa on muuten vaan mutkien takana.
Ainiin, tuo minulta unohtui vielä sanoa.
Torgo kirjoitti:
Yksi keksi per sivusto. On olemassa paljon muitakin sivustoja kuin php haaste.
Esim millä sivustolla sinun täytyy automaattisesti muistaa edellinen arvo inputtiin jonka siihen laitoit..? ei mulla nyt heti tuu mieleen tommosia....
Ratkaisun osoitteen kirjoitukseen on tulossa parannus.
Torgo kirjoitti:
Olisiko tämä [uusien viestien lista] mahdollista saada myös linkiksi php haasteen sivuille?
Uusien viestien lista on toistaiseksi koekäytössä, mutta linkki on tulossa.
Torgo kirjoitti:
Lisäksi erilaiset statistiikat on aina kivoja. :)
Tilastoja on tulossa, kunhan ratkaisuja kertyy enemmän (jotta kyseessä ovat tilastot eivätkä yksittäisten henkilöiden tulokset).
T.M. kirjoitti:
"seuraava tehtävä" linkki osoittaa aina viimeisimpään tehtävään, ei siis seuraavaan tehtävään siitä tehtävästä jota nyt katselet.
Linkit seuraavaan ja edelliseen tehtävään ovat tulossa.
T.M. kirjoitti:
en pysty edes näkemään ratkaisemattomien tehtävien nimiä, paitsi sen sivun tehtävistä joita tällä hetkellä olen ratkaisemassa.
Tähän ei ole tulossa muutosta, vaan tehtävien nimiä pääsee näkemään vähitellen. Eikö ole hauskaa ratkaista tehtäviä 20, 40, 60 ja 80, kun palkkio on sarja kokonaan uusia tehtävien nimiä?
T.M. kirjoitti:
"kirjaudu ulos" nappi on sivuston valikossa, kun sen pitäisi olla aivan jossain muualla.
Miksi sen pitäisi olla muualla ja missä sen pitäisi olla?
T.M. kirjoitti:
tehtävän ratkaistessa pitäisi näkyä automaattisesti muiden kommentit ja ratkaisut
Tulossa on linkki, josta pääsee suoraan malliratkaisuun.
T.M. kirjoitti:
pitää aina kirjautua uudestaan PHP-haasteeseen, vaikka molemmat sivustot ovat saman domainin alla.
Tämä on tosiaan turhaa, ja korjaus on tulossa.
Kiitos hyvästä palautteesta!
T.M. kirjoitti:
- "seuraava tehtävä" linkki osoittaa aina viimeisimpään tehtävään, ei siis seuraavaan tehtävään siitä tehtävästä jota nyt katselet.
Tuo nyt ei ainakaan itseäni haittaa, sillä eipä pahemmin noita ratkaistuja tule katseltua, eli tärkein linkki on tuo linkki siihen ei-ratkaistuun tehtävään. Toki sanamuoto voisi olla fiksumpi; onhan se vähän hämäävä.
Se mikä häiritsee hieman on että kun ratkaisun lähettää ei siitä suoraan pääse seuraavaan tehtävään kun "seuraava tehtävä" osoittaa jo ratkaistuun tehtävään. Enkä ainakaan huomannut että missään linkkiä oikeaan seuraavaan tehtävään olisi, seurauksena olen klikkaillut kahdesti "seuraava tehtävä" linkkiä.
Mutta hyvä palvelu tuo on, ehdottomasti kiitos sen kehittäjille ja ylläpitäjille. Alku tuntuu vain vähän puurolta, mutta eipä noissa tieten kauaa mene.
JTS kirjoitti:
Se mikä häiritsee hieman on että kun ratkaisun lähettää ei siitä suoraan pääse seuraavaan tehtävään kun "seuraava tehtävä" osoittaa jo ratkaistuun tehtävään.
Tähänkin on tulossa korjaus.
Antti Laaksonen kirjoitti:
T.M. kirjoitti:
en pysty edes näkemään ratkaisemattomien tehtävien nimiä, paitsi sen sivun tehtävistä joita tällä hetkellä olen ratkaisemassa.
Tähän ei ole tulossa muutosta, vaan tehtävien nimiä pääsee näkemään vähitellen. Eikö ole hauskaa ratkaista tehtäviä 20, 40, 60 ja 80, kun palkkio on sarja kokonaan uusia tehtävien nimiä?
ei se palkitse minua ainakaan yhtään jos 20 tehtävän välissä vierähtää kokonainen päivä, jos näkisi mitä tehtäviä tulevaisuudessa on, ehkä jaksais tehäkki enemmän noita :P itse lopetin tehtävään 30 kun alko tuntuu saman toistolta... kattoo ny jos jossain vaiheessa aikaa/kiinnostusta riittää jatkaa.
Antti Laaksonen kirjoitti:
T.M. kirjoitti:
"kirjaudu ulos" nappi on sivuston valikossa, kun sen pitäisi olla aivan jossain muualla.
Miksi sen pitäisi olla muualla ja missä sen pitäisi olla?
siksi koska muutaman kerran sitä vahingossa painoin :P voisihan se kirjautuminen näkyä esim tossa linkkien oikealla puolella, kuten täällä putkassakin.
Ajattele jos putkassa näkyisi linkit "Etusivu | Oppaat | Koodivinkit | Kirjaudu ulos | Projektit | Keskustelu | Kilpailu | Ohjeet" ... ei siis aivan loogisimmasta päästä.
T.M. kirjoitti:
Antti Laaksonen kirjoitti:
T.M. kirjoitti:
"kirjaudu ulos" nappi on sivuston valikossa, kun sen pitäisi olla aivan jossain muualla.
Miksi sen pitäisi olla muualla ja missä sen pitäisi olla?
siksi koska muutaman kerran sitä vahingossa painoin :P voisihan se kirjautuminen näkyä esim tossa linkkien oikealla puolella, kuten täällä putkassakin.
Ajattele jos putkassa näkyisi linkit "Etusivu | Oppaat | Koodivinkit | Kirjaudu ulos | Projektit | Keskustelu | Kilpailu | Ohjeet" ... ei siis aivan loogisimmasta päästä.
Tuo on hyvä pointti. "Kirjaudu ulos" ei ole kyllä oikeassa paikassaan, jos se on keskellä linkkilistaa kuin mikä tahansa muu linkki.
Itse tehtävistä ei ole pahaa sanottavaa. Aluksi tuo sidottu suoritusjärjestys vähän häiritsi, mutta oikeastaan se on ihan ok noin. Tehtävät myöskin vaikeutuvat sopivaa tahtia. Tosin aina välillä tuntuu että sinne on laitettu väliin täytteeksi vähän kevyempiä tehtäviä.
Itselleni haaste on ollut ensikosketus PHP:hen ja ylipäätään nettiohjelmointiin ja täytyy sanoa että olen oppinut noita tehtäviä tehdessä valtavasti. Lisäksi tälläisten haasteiden muodossa oppiminen on mielekästä. Siitäkin huolimatta oppimistarkoitukseen tehtävät voisivat olla vähän toisin laadittuja. Haasteena ne kyllä toimivat hienosti. Oppimiseen parempi tapa olisi mielestäni esim. sellainen, että jokaisessa esitellään jokin uusi PHP:n funktio tai ominaisuus jota tulisi käyttää hyväksi. Sitten tason viimeisessä tehtävässä tulisi hyödyntää kaikkia tasolla opittuja taitoja. Siis ikäänkuin tason loppukoe. Nyt nuo tehtävät tulee pääosin ratkaistuksi jo ennalta opituilla tekniikoilla ja tehtävistä tulee näin ollen helposti edellisten toistoa.
Torgo kirjoitti:
Siitäkin huolimatta oppimistarkoitukseen tehtävät voisivat olla vähän toisin laadittuja. Haasteena ne kyllä toimivat hienosti. Oppimiseen parempi tapa olisi mielestäni esim. sellainen, että jokaisessa esitellään jokin uusi PHP:n funktio tai ominaisuus jota tulisi käyttää hyväksi.
Tämä on mielestäni hyvä pointti. Tehtävät ovat luonteeltaan algoritmisia, vaikka PHP on luonteeltaan web-ohjelmointikieli, joten pelkästään tällä haasteella ei mielestäni kyllä voi varsinaisesti kvalifikoitua PHP-osaajaksi. Sinänsä hienoa, että sivulla riittää sisältöä (sata tehtävää!), mutta niiden tekemisessä olisi ehkä voinut keskittyä hieman enemmän monipuolisuuteen.
os kirjoitti:
Tehtävät ovat luonteeltaan algoritmisia, vaikka PHP on luonteeltaan web-ohjelmointikieli, joten pelkästään tällä haasteella ei mielestäni kyllä voi varsinaisesti kvalifikoitua PHP-osaajaksi.
Ehkä juuri siksi sertifikaatissa puhutaankin ohjelmoinnin ymmärtämisestä eikä PHP:n muistamisesta ulkoa. Sekään ei paljon todista, että muistaa tuhat PHP:n funktiota nimeltä ja parametrijärjestykseltä; pitäisi myös ymmärtää, miten niistä palikoista kootaan jotain järkevää.
Todellista ohjelmointitaitoa ei voi kovin hyvin mitata, koska keskeisiä tekijöitä on niin monta. Tosielämässä tärkeitä asioita ovat mm. nopeus (ohjelmoijan ja algoritmin), täsmällisyys (speksien noudattaminen ja bugittomuus) ja selkeys (koodin ja algoritmin). PHP-haaste testaa ongelmanratkaisukykyä, monet muut "PHP-taitotestit" testaavat sitä ulkoa osaamista; näistä tulevat algoritmin ja ohjelmoijan nopeus. Lisäksi PHP-haasteesta saisi tietoa myös täsmällisyydestä, jos katsoisi epäonnistuneiden lähetysten määrää. Selkeyttä taas ei voi arvostella kuin tutkimalla koodia, ja muut tärkeät asiat kuten projektikokonaisuuden hallinta näkyvät vasta käytännön tilanteissa.
Tehtävä 67: Fibonaccin luvut II
Syöte 3
n=80
Käsittääkseni kahdeksaskymmenes fibonaccin luku on 14472334024676220
Eli viimeinen numero on 0
Miksi tämä sitten väittää oikeaksi ratkaisuksi
Oikea ratkaisu: 1
Itse ainakin saan että se olisi 14472334024676221
Fibonaccin malliratkaisua muunsin niin että
echo str_replace(",", "", number_format($c));
Saan numeron 14472334024676220
Miksi tämä sitten ei toimi? :S
Luulisin että koska luku on yli 32 bittisen kokonaisluvun lukualueen (-2^31 - +2^31-1) niin PHP vaihtaa lukutyypiksi doublen (64 bittinen liukuluku), joka aiheuttaa pyöristysvirheitä.
Vielä kun kokeilin javalla System.out.println((long)14472334024676221d); niin yllätys yllätys sain tulokseksi juuri tuon 14472334024676220.
Jaa-a mitenkähän tälläsen pyöristysvirheen saa korjattua, vai pitääkö mun lähteä säätää tätä stringgeillä. :S
Noista malliratkaisuista täytyy kyllä antaa vähän palautetta. Niihin voisi kyllä panostaa huomattavasti enemmän. Niiden kuitenkin on tarkoitus toimia esimerkkinä ja MALLIratkaisuna. Osa ratkaisuista on ihan kohtuullisesti selitetty, mutta suurin osa on kommentoimatonta ja vailla mitään selitystä. Esimerkkinä vaikka elämäpelin malliratkaisu, jossa koko se pitkä koodi on kirjoitettu yhteen pötköön, vailla ensimmäistäkään kommenttia tai mitään selitystä koko ratkaisusta.
Torgo kirjoitti:
Oppimiseen parempi tapa olisi mielestäni esim. sellainen, että jokaisessa esitellään jokin uusi PHP:n funktio tai ominaisuus jota tulisi käyttää hyväksi. - - Nyt nuo tehtävät tulee pääosin ratkaistuksi jo ennalta opituilla tekniikoilla ja tehtävistä tulee näin ollen helposti edellisten toistoa.
Tosiaan lähestymistapa on, että ohjelmoijan kädet ovat vapaat, kunhan lopputulos on toimiva ja tehokas ratkaisu. Monesta tehtävästä veisi mielestäni ilon, jos käyttäjää ohjattaisiin tietyn ratkaisun suuntaan. Kieltämättä PHP-haaste saisi silti sisältää nykyistä enemmän neuvoja, miten eri asioita voi toteuttaa kätevästi PHP:llä.
os kirjoitti:
Tehtävät ovat luonteeltaan algoritmisia, vaikka PHP on luonteeltaan web-ohjelmointikieli, joten pelkästään tällä haasteella ei mielestäni kyllä voi varsinaisesti kvalifikoitua PHP-osaajaksi.
Ohjelmoinnin perusasioiden vankka hallinta on avainasemassa myös nettiohjelmoinnissa. PHP-haasteen läpäiseminen osoittaa, että henkilö ymmärtää, mistä ohjelmoinnissa on kysymys. Tällöin vaikka ei tietäisi mitään nettisivuista, asiat pystyy oppimaan todella nopeasti.
Torgo kirjoitti:
Noista malliratkaisuista täytyy kyllä antaa vähän palautetta. Niihin voisi kyllä panostaa huomattavasti enemmän. Niiden kuitenkin on tarkoitus toimia esimerkkinä ja MALLIratkaisuna.
Olet oikeassa: monet malliratkaisut voisivat todellakin olla parempia. Toisaalta jotkin tehtävät (kuten elämäpeli) ovat luonteeltaan sellaisia, että jos tehtävän onnistuu ratkaisemaan, sen malliratkaisusta tuskin oppii enää paljon.
Kieltämättä tuo PHP-haaste on nimenä hämäävä, ehdottaisin uudelleennimeämistä Ohjelmointihaasteeksi / Algoritmihaasteeksi (mikä toki vaatii koko projektiin suuremman rempan, mm. malliratkaisuja muilla kielillä, jopa pseudolla). Vaikka tarkistus tehdäänkin verkkopohjaisen rajapinnan kautta, mikä saattaa rajoittaa joillakin kielillä osallistumista (joskin Metabolix esittelikin yksinkertaisen PHP-servun, jota voi käyttää hyväksi myös muilla kielillä), tehtävät eivät sinällään ota kantaa webbipuolen tekniikoihin. Jos ajatellaan työnantajan näkökulmasta, sertifikaatti voi antaa harhaanjohtavan kuvan työnhakijan pätevyydestä web-ohjelmoinnissa. Tai mikäli työnantaja tuntee haasteen, en näe sertifikaatilla olevan painoarvoa tällä saralla. PHP-työpaikat kun lienevät mitä suurimmissa osin web-ohjelmointiin liittyviä.
Sertissä vois vaikka lukia jotain seuraavanlaista: "<Nimi> on suorittanut onnistuneesti Ohjelmointihaasteen ja täten osoittanut hallitsevansa algoritmisuunnitelun perusteet." tms./yms..
PHP-haasteen nimi ja luonne eivät tule muuttumaan. Nettiohjelmointi ja algoritmien suunnittelu eivät ole erillisiä saarekkeita, vaan hyvän nettiohjelmoijan täytyy tuntea PHP-haasteen asiat. Olen vakuuttunut siitä, että järkevän työnantajan silmissä PHP-haasteen sertifikaatti on merkittävä saavutus.
Ts. jos PHP-haasteen sertifikaatilla ei ole työnantajan silmissä painoarvoa, hän ei ole järkevä? PR:ssä on vielä hiomisen varaa ;).
Eiköhän toi ole aika paljon siitäkin kiinni, mitä töitä on tarjolla, että onko tuosta sertifikaatista kuinka paljon järkeä.
Ongelmana näkisin, että kovin harva työntekijä viitsii lähteä koko sertifikaattia suorittamaan, joten heillä ei voi olla kovin laajaa käsitystä siitä, mitä ko. sertifikaatin suorittaminen vaatii.
Jos joku työntekijä saisi nenänsä eteen tuollaisen sertifikaatin ja lähtisi sen perusteella tutustumaan haasteeseen, niin hänhän pääsisi käsiksi kohtuullisella vaivalla vain noihin ensimmäisiin tehtäviin ja se ei kyllä antaisi kovin haastavaa kuvaa ko. haasteesta.
tsuriga kirjoitti:
Ts. jos PHP-haasteen sertifikaatilla ei ole työnantajan silmissä painoarvoa, hän ei ole järkevä?
Mielestäni näin, jos työnantaja tuntee PHP-haasteen.
Olette oikeassa, että työnantajan voi olla vaikeaa tietää, mikä PHP-haaste pohjimmiltaan on. Tähän ongelmaan tulee kuitenkin korjaus: kunnollinen esittely PHP-haasteen kaikista osista, joka korvaa nykyiset kolme esimerkkitehtävää.
Sertifikaatti komistaa nyt huoneeni seinää ja voin katsella sitä joka ilta mennessäni nukkumaan. Kiitos!
Hmm, oon näköjään kirjoittanut tuonne viestiin että "...kovin harva työntekijä viitsii..." kun pitäisi tietysti lukea "...kovin harva työnantaja viitsii..."
Antti Laaksonen kirjoitti:
tsuriga kirjoitti:
Ts. jos PHP-haasteen sertifikaatilla ei ole työnantajan silmissä painoarvoa, hän ei ole järkevä?
Mielestäni näin, jos työnantaja tuntee PHP-haasteen.
Joo ei siis lähinnä oli vaan tarkotus tarttua tuohon sanamuotoon, eli ei ehkä kannata käyttää noin "jyrkkiä" / "absoluuttisia" ilmaisuja, kun tätä lähdetään työnantajille esittelemään tai markkinoimaan :).
Antti Laaksonen kirjoitti:
tsuriga kirjoitti:
Ts. jos PHP-haasteen sertifikaatilla ei ole työnantajan silmissä painoarvoa, hän ei ole järkevä?
Mielestäni näin, jos työnantaja tuntee PHP-haasteen.
Kannattaa sanoa se ääneen työhaastattelussa. =D
Eihän tuosta sertifikaatista varmasti haittaakaan ole. Onhan se osoitus tietyntyyppisestä ongelmanratkaisukyvystä ja varmasti etu tasapäisiä hakijoita verrattaessa. Paljon riippuu varmasti siitäkin millaiseen tehtävään ollaan hakemassa.
Mielestäni kuitenkaan järkevä työnantaja ei sertifikaattia priorisoi kriteerien etupäähän. Ohjelmointityöstä kuitenkin 99,9% on jotain ihan muuta kuin algoritmien kehittelyä ja matemaattisten kaavojen pyörittelyä. Moni ohjelmoija ei työuransa aikana törmää sellaiseen lainkaan, vaan käyttää jo kertaalleen keksittyjä ratkaisuja hyväkseen. Järkevä työnantaja pikemminkin arvostaa hakijaa, jolla on näyttöjä laadukkaan koodin tuottamisesta. Laatukriteerejä puolestaan on lukuisia, kuten vaatimusten toteutuminen, virheettömyys, suorituskyky, muistin käyttö, koodin koko, kompleksisuus, luettavuus, ylläpidettävyys jne.
Ainakin itse palkkaisin henkilön, joka kirjoittaa nöyrästi hyvien ohjelmointitapojen mukaista koodia suhteellisen vaivattomasti. Tietysti respectiä täytyy antaa sellaisellekin henkilölle, joka 6000 merkkiä pitkällä regexp onelinerilla ratkaisee elämän arvoituksen, mutta ei pirukaan ylläpidä ja lue sellaista tekstiä.
Fred J. Brooks: Mythical Man Month kirjoitti:
Representation is the essence of programming.
Sain nyt tehtyä monta parannusta PHP-haasteeseen:
* Jos tehtävään lähettää oikeaan ratkaisuun, ilmestyy suoraan linkki malliratkaisuun ja seuraavaan tehtävään.
* Järjestelmä muistaa tehtävän ratkaisun osoitteen ja päättelee uuden tehtävän ratkaisun osoitteen alkuosan.
* Järjestelmässä on linkki uusien viestien listaan ja tilastoon, jossa näkyvät kaikkien tehtävien ratkaisumäärät.
* Linkki uloskirjautumiseen on uudessa paikassa erillään muista.
* Jos on kirjautunut Ohjelmointiputkaan, ei tarvitse kirjautua uudestaan.
* Jos tehtävässä täytyy tulostaa rivinvaihto, myös <br> ja <br /> kelpaavat.
En lisännyt linkkejä seuraavaan ja edelliseen tehtävään, koska en kuitenkaan katsonut niitä tarpeellisiksi. Tehtäväkohtaiset tarkemmat tilastot (esim. oikeiden ja väärien ratkaisujen suhde) eivät tule ainakaan vielä käyttöön, koska loppuosan tehtävissä on liian vähän aineistoa.
Onko mielessänne vielä muuta korjattavaa tai lisättävää?
Antti Laaksonen kirjoitti:
Jos on kirjautunut Ohjelmointiputkaan, ei tarvitse kirjautua uudestaan.
Voisiko osoite /phph/ viedä tällöin suoraan tehtävälistaan eikä kirjautumiseen?
Viestinmuokkaussivulla on nappulalle tullut tekstilaatikon CSS-luokka.
Metabolix kirjoitti:
Voisiko osoite /phph/ viedä tällöin suoraan tehtävälistaan eikä kirjautumiseen?
Minusta nykyinen ratkaisu on parempi, koska joku voi haluta piipahtaa pääsivulla (esim. jatkaakseen tietosivulle).
Metabolix kirjoitti:
Viestinmuokkaussivulla on nappulalle tullut tekstilaatikon CSS-luokka.
Nyt korjasin tämän.
Antti Laaksonen kirjoitti:
En lisännyt linkkejä seuraavaan ja edelliseen tehtävään, koska en kuitenkaan katsonut niitä tarpeellisiksi. Tehtäväkohtaiset tarkemmat tilastot (esim. oikeiden ja väärien ratkaisujen suhde) eivät tule ainakaan vielä käyttöön, koska loppuosan tehtävissä on liian vähän aineistoa.
Heh. Eikä ainakaan mun puolesta tarvitse tullakaan. Mulla on paha tapa antaa tuolle tarkastajalle ennalta tarkastamaton koodi, jolloin virheitä tulee enemmän kuin paljon. Vois olla karua luettavaa ainakin omalta osaltani. ;D Ehkä sitten jos jokaisella olisi joku oma privaatti profiilisivunsa, mistä näkee oman (häpeällisen) tilastonsa. :)
Antti Laaksonen kirjoitti:
Onko mielessänne vielä muuta korjattavaa tai lisättävää?
Hyvältä näyttää. Äkkiseltään ei tule ainakaan mitään vakavempaa puutetta tai ongelmaa mieleen. Yksi pieni asia mikä tuli mieleen, että tilastoissa voisi olla sertifikaatin suorittaneet kunniataulu(ko)ssa.
Antti Laaksonen kirjoitti:
Onko mielessänne vielä muuta korjattavaa tai lisättävää?
Miten olisi linkki ohjelmointiputkan etusivulle.
Kaikki yleisesti näkyvät tilastot tulevat olemaan sellaisia, että niistä ei voi päätellä yksittäisen käyttäjän suorituksia.
Henkilökohtaiset tilastot ovat asia erikseen, mutta niissä ei ehkä kannata ilmoittaa oikeiden ja väärien ratkaisujen suhdetta, koska silloin ei voisi tehdä rauhassa kokeiluja tarkastajan kanssa.
Nyt PHP-haasteen julkisilla sivuilla on linkki Ohjelmointiputkaan.
Sain sarjan loppuun C:llä. On hieman kurjaa, ettei mikään tehtävä vaatinut kovin hienostunutta ratkaisua: pari kertaa piti turvautua välitulosten taulukointiin, ja useimmat tehtävät ratkesivat ilmankin sitä jollain aivan typerällä menetelmällä kuten kokeilemalla kaikkia vaihtoehtoja.
Väliaikojen perusteella voisi sanoa, että ensimmäiset 60–80 tehtävää ovat yksinkertaisia ja vasta viimeiset 10–20 vaativat sen verran ajattelua, että niillä voisi varsinaisia ohjelmointitaitoja osoittaa. Aika moni tehtävä oli "hankala" vain siksi, että piti saada kaikki tarkistukset kohdalleen (esim. loppupuolella kuningatarten ja ratsujen asettelu ruudukkoon), vaikka itse algoritmi oli yhä sama "kokeile kaikkia".
Väliaikoja:
30 tehtävää, 1,5 tuntia.
60 tehtävää, 4 tuntia.
80 tehtävää, 6 tuntia.
90 tehtävää, 8 tuntia.
95 tehtävää, 10 tuntia.
100 tehtävää, 13 tuntia.
Vauhtia olisi voinut parantaa lunttaamalla vinkkejä Wikipediasta (jolloin kuka tahansa saa hankalimmatkin ratkaistua), käyttämällä parissa suuria lukuja koskevassa tehtävässä valmista kirjastoa, kirjoittamalla kunnon tekstieditorilla (käytin nano-editoria ssh:n yli) tai käyttämällä jotain hieman näppärämpää kieltä; muutaman kerran alkoi C tuntua vaivalloiselta erityisesti merkkijonojen kanssa.
Kuka vastaa haasteeseen Brainfuckilla? ;)
Antti Laaksonen kirjoitti:
Onko mielessänne vielä muuta korjattavaa tai lisättävää?
Kun tehtävän on juuri ratkaissut, niin linkit malliratkaisuun yms. näkyy hienosti, mutta jos tehtävään palaa takaisin uudestaan, niin linkkejä ei enää näy.
Antti Laaksonen kirjoitti:
Onko mielessänne vielä muuta korjattavaa tai lisättävää?
Kun tehtävä on ratkaistu, tehtävänannossa voisi olla Ratkaisu-otsikon alla linkki malliratkaisuun.
Torgo kirjoitti:
Mulla on paha tapa antaa tuolle tarkastajalle ennalta tarkastamaton koodi, jolloin virheitä tulee enemmän kuin paljon.
Teen samoin ihan käytännön syystäkin: Tehtävänannossa ei ole valmiina osoiteriville pastettavaa esimerkkisyötettä, joten siksi on kätevämpää heittää heti ensimmäinen versio tarkastajalle, jolloin todennäköisesti virheellisen vastauksen palaute kertoo suoraan osoiteriville pastettavat parametrit oikeassa muodossa, josta voi pasteta syötteen omaan debuggailuun.
Jonkin "?n=5" kirjoittaa nopeasti, mutta laiskuus voittaa "?leveys=20&korkeus=5&kohdat=2,2,4,7|2,12,5,
Voisiko tarkistimen saada ottamaan yhteyttä muihinkin portteihin kuin 80? Tai jos tämä on tarkoituksella, estetty, niin olisi hyvä, jos sivu ilmoittaisi tästä selkeämmällä viestillä kuin "Yhteyden muodostus ei onnistunut!".
Metabolix kirjoitti:
Sain sarjan loppuun C:llä.
Onneksi olkoon!
Metabolix kirjoitti:
On hieman kurjaa, ettei mikään tehtävä vaatinut kovin hienostunutta ratkaisua
Minusta taas kurjaa on, että niin moni tehtävä ratkeaa lähes täysin identtisellä ohjelmalla, missä vain muuttuja tai kaksi on erona.
Metabolix kirjoitti:
Väliaikojen perusteella voisi sanoa, että ensimmäiset 60–80 tehtävää ovat yksinkertaisia ja vasta viimeiset 10–20 vaativat sen verran ajattelua, että niillä voisi varsinaisia ohjelmointitaitoja osoittaa.
Ensimmäiset 60 testaavat aika pitkälle ohjelmoijan perustaitoja. Siis sellaisia mitä jokaisen ohjelmoijan on syytä osata. Seuraavat 20 ovat varmasti helppoja sellaiselle joka on kyseisten ongelmien parissa aikaisemminkin puuhastellut. Minulle ne ovat olleet uusi aluevaltaus, sillä sulautettujen järjestelmien kanssa vastaavanlaisia ongelmia ei ole koskaan vastaan tullut. Erityisesti rekursio, jota malliratkaisut näyttävät viljelevän, ei sovi lainkaan yhteen sulautettujen kanssa. Minulta ne ovat vaatineet hieman perehtymistä aiheeseen. Viimeiset 20 on vielä jäljellä, joten niistä en sano vielä mitään.
Metabolix kirjoitti:
Vauhtia olisi voinut parantaa lunttaamalla vinkkejä Wikipediasta (jolloin kuka tahansa saa hankalimmatkin ratkaistua),
Tästä olen eri mieltä. Jos wikipediaa lukemalla kuka tahansa saisi minkä tahansa ongelman ratkaistua, niin kaikkihan olisivat ohjelmoijia. Onhan ohjelmointi niin sexyäkin ;) Jotta wikipediasta olisi hyötyä, niin sieltä on osattava etsiä oikeaa tietoa ja sen lisäksi ymmärrettävä se. Väitän että jonkinlaista aikaisempaa kokemusta ja/tai ymmärrystä aiheesta tarvitaan, että tietää mitä etsiä, miten sitä soveltaa ja tietää milloin on löytänyt haluamansa.
Metabolix kirjoitti:
käyttämällä parissa suuria lukuja koskevassa tehtävässä valmista kirjastoa, kirjoittamalla kunnon tekstieditorilla (käytin nano-editoria ssh:n yli) tai käyttämällä jotain hieman näppärämpää kieltä;
Heh. Mä oon kans tehnyt peruseditorilla SSH:n yli kaikki tehtävät. Serverikin lagaa välillä niin pahasti että jokaista merkkiä saa odotella useita sekunteja. Lisäksi PHP on mulle ihan outo kieli, eikä debuggaaminen tuolla ohjelmointimenetelmällä oikein meinaa onnistua. Varmaan eniten aikaa oon käyttänyt siihen että metsästän jotain puuttuvaa $-merkkiä :p
Tietty oman vapaa-ajan vajavaisuus on kans esteenä. Ei meinaa pidempiä rakoja löytyä, joten kaikki tulee tehtyä lyhyissä katkonaisissa pätkissä. Toisaalta ehtiipä siten paremmin sulatella kaikkea uutta tietoa.
Metabolix kirjoitti:
Kuka vastaa haasteeseen Brainfuckilla? ;)
Ei kiitos. :)
Torgo kirjoitti:
Ensimmäiset 60 testaavat aika pitkälle ohjelmoijan perustaitoja. Siis sellaisia mitä jokaisen ohjelmoijan on syytä osata. Seuraavat 20 ovat varmasti helppoja sellaiselle joka on kyseisten ongelmien parissa aikaisemminkin puuhastellut. Minulle ne ovat olleet uusi aluevaltaus, sillä sulautettujen järjestelmien kanssa vastaavanlaisia ongelmia ei ole koskaan vastaan tullut.
Viittasin lähinnä aiempiin puheisiin, joissa on jonkin verran paisuteltu PHP-haasteen algoritmista antia. Pääasia sanomassani oli, että tehtäviin ei tarvitse keksiä hyvää ratkaisua vaan edes jokin ratkaisu, minkä vuoksi loppupään tehtävätkään eivät vaadi algoritmiselta kannalta ihmeitä vaan ratkeavat tässä suhteessa aika helposti.
Mutta siinä taidat olla oikeassa, että monet algoritmiohjelmointia harrastaneille tutuista menetelmistä eivät tule käytännön aloilla itsestään vastaan. Olen kuitenkin yhtä mieltä PHP-haasteen kanssa siitä, että monet näistäkin menetelmistä, esimerkiksi rekursio, on hyvä hallita. Rekursion voi myös helposti muuttaa (näennäisesti) iteraatioksi, jos vaadittava pinon koko tunnetaan ennalta. Resurssivaatimukset pienenevät, ja mistä sen tietää, jos joskus tulisi sulautetussakin järjestelmässä tarpeeseen. Myös web-puolen hommissa olen pelastanut monta purkkakoodipaikkaa rekursiolla tai vastaavilla iteraatioilla. (Kolmeen kertaan sama koodi ja päälle vielä die("No support for more than 3 levels of nesting")? Ei kiitos.)
Torgo kirjoitti:
Jotta wikipediasta olisi hyötyä, niin sieltä on osattava etsiä oikeaa tietoa ja sen lisäksi ymmärrettävä se.
Myönnän: liioittelin aika pahasti. Joka tapauksessa mm. tehtävän 96 ratkaiseminen itse vei ihan kohtalaisesti aikaa, vaikka koodia tuli vain saman verran kuin tehtävässä 13. Monikin Linux-käyttäjä on päässyt osalliseksi kyseisen tehtävän salakirjoituksesta, ja jos tietää, mitä hakee, Wikipedia tarjoaa valmiin ratkaisun Pythonilla ja pseudokoodilla.
Monissa osajoukkoja tai permutaatioita käsittelevissä tehtävissä sen sijaan ei tarvitse edes ennalta tietää, mistä on kyse, vaan hakukoneet kyllä löytävät käyttökelpoisia algoritmeja suunnilleen sanoilla "permutations PHP". Jos pääsee kunnialla ensimmäisistä 60 tehtävästä läpi, osaa luultavasti myös soveltaa netistä löytyviä koodeja sen verran, että läpäisee niiden voimin loput tehtävät vaivaamatta kummemmin omia aivojaan sillä, miksi kaikki permutaatiot syntyvät tällä algoritmilla ja miksi juuri näin saadaan kaikki osajoukot muodostettua.
Torgo kirjoitti:
Metabolix kirjoitti:
Vauhtia olisi voinut parantaa lunttaamalla vinkkejä Wikipediasta (jolloin kuka tahansa saa hankalimmatkin ratkaistua),
Tästä olen eri mieltä. Jos wikipediaa lukemalla kuka tahansa saisi minkä tahansa ongelman ratkaistua, niin kaikkihan olisivat ohjelmoijia.
Ei se ohjelmointi mitään teoreettista fysiikkaa ole, se vaan vaatii perehtymistä ja eritoten kiinnostusta asiaan. Tästä esimerkkinä heitti vieraspuhuja, että hän on puhunut sadoille opiskelijoille, joista ainoastaan yhdestä ties varmaks, ettei siitä tule ohjelmoijaa.
Torgo kirjoitti:
Kun tehtävän on juuri ratkaissut, niin linkit malliratkaisuun yms. näkyy hienosti, mutta jos tehtävään palaa takaisin uudestaan, niin linkkejä ei enää näy.
Nyt tehtävänannon ja malliratkaisun välillä pääsee siirtymään kätevästi.
os kirjoitti:
Voisiko tarkistimen saada ottamaan yhteyttä muihinkin portteihin kuin 80?
Tarkistin yrittää ottaa yhteyttä kaikkiin portteihin, mutta valitettavasti webhotellissa on estetty yhteydet joihinkin portteihin. Tosiaan virheviestiin voisi liittää arvauksen ongelman syystä, jos portti on muu kuin 80.
Torgo kirjoitti:
Minusta taas kurjaa on, että niin moni tehtävä ratkeaa lähes täysin identtisellä ohjelmalla, missä vain muuttuja tai kaksi on erona.
Kertaus on opintojen äiti, mutta taidatpa olla oikeassa, että tehtävissä saisi olla vähemmän toistoa. Valitettavasti tehtäviä ei voi muuttaa enää, koska haasteen täytyy olla kaikille samanlainen.
Tehtävien vaikeus on hyvin henkilökohtainen asia, ja vaikeutta ehkä helposti aliarvioi, jos osaa asian valmiiksi. Kun minä olin ohjelmoinut muutaman vuoden, halusin tehdä kertoman laskevan ohjelman. Tunsin muuttujat ja silmukat ja mietin ohjelman toteutusta kauan, mutta en silti saanut aikaan toimivaa ohjelmaa. Monta vuotta myöhemmin minulle tuli vastaan tilanne, jossa täytyi käytännössä luetella joukon osajoukot. Tätä ongelmaa pohdin monta päivää ja vihkon sivut täyttyivät, ja lopputulos oli sekava monta sataa riviä pitkä ohjelma.
tsuriga kirjoitti:
Torgo kirjoitti:
Metabolix kirjoitti:
Vauhtia olisi voinut parantaa lunttaamalla vinkkejä Wikipediasta (jolloin kuka tahansa saa hankalimmatkin ratkaistua),
Tästä olen eri mieltä. Jos wikipediaa lukemalla kuka tahansa saisi minkä tahansa ongelman ratkaistua, niin kaikkihan olisivat ohjelmoijia.
Ei se ohjelmointi mitään teoreettista fysiikkaa ole, se vaan vaatii perehtymistä ja eritoten kiinnostusta asiaan. Tästä esimerkkinä heitti vieraspuhuja, että hän on puhunut sadoille opiskelijoille, joista ainoastaan yhdestä ties varmaks, ettei siitä tule ohjelmoijaa.
Se ei ollutkaan pointtini. Kyllä melkein kuka tahansa voi olla ohjelmoija, kunhan opettelee ohjelmoinnin perustaidot. Sen soveltaminen onkin sitten eri juttu. Ohjelmoinnista tulee teoreettista fysiikkaa siinä vaiheessa, kun sitä aletaan soveltamaan teoreettiseen fysiikkaan. Pointti oli siinä, että mitä oudompi/vaikeampi ongelma on ratkaistavissa, niin sitä vaikeampi siihen on löytää apua ja myös sitä vaikeampi ottaa tolkkua saatavilla olevasta avusta. Jossain vaiheessa jokaisella tulee raja vastaan, vaikka olisi kuinka kiinnostusta aihetta kohtaan. Ei edes Einstein onnistunut luomaan yhtenäisyysteoriaa, vaikka oli omistanut sille lähes koko elämänsä.
Metabolix kirjoitti:
Rekursion voi myös helposti muuttaa (näennäisesti) iteraatioksi
Itseasiassa juuri niin olen tehnytkin omissa ratkaisuissani. Rekursio ei minulta (vielä) oikein luonnistu. Lopputuloksen siitä kun yritin vääntää ratkaisun väkisin rekursiiviseksi, voi katsoa tehtävän 72 kommenteista. Ei todellakaan hyvä. Jauhojen mittaus on varmaan ainoa minkä olen tehnyt oikeasti rekursiolla.
Mitä hyötyä tästä PHP-haasteen tekemisestä loppuun asiti oikeastaan muuten on. En kuitenkaan saa tutkintoa jossa CV:hen voin laittaa esim., että Certified Zend Enginer. Mut joo on noi tehtävät nyt sellasia että todella pitää PHP:ta osata jos meinaa tämän loppuun tehdä.
walkout_ kirjoitti:
Mitä hyötyä tästä PHP-haasteen tekemisestä loppuun asiti oikeastaan muuten on.
Tiedät voittaneesi itsesi ja osanneesi jotain.
Tärkein hyöty on se, että oppii paljon asioita – tai on valmiiksi todella taitava. Sertifikaatti on toki mukava lisä CV:ssä.
Saisikos kohta tilastot esille, niin tietäisi miten porukka pärjää? Itse en ole edes aloittanut, kun nyt kiinnostaa enemmän C++ :) Tai, voisinhan tehdä ne PHP:llä, ja sitten C++:lla.
Tilastot näkee, kun kirjautuu PHP-haasteeseen. Tällä hetkellä tehtävän 20 on ratkaissut 96 henkilöä, tehtävän 40 on ratkaissut 24 henkilöä, tehtävän 60 on ratkaissut 15 henkilöä, tehtävän 80 on ratkaissut 7 henkilöä ja tehtävän 100 on ratkaissut vain 2 henkilöä.
Ookkei =)
Aivan hirveä ulkoasu, ihan silmiin sattuu. Voisiko sitä muuttaa niin että tausta olisi valkoinen ja teksti mustaa? Tai tehdä vaikka niin että käyttäjä saa valita erivärisen ulkoasun jos haluaa
Jaa se on ulkoasun vika jos homma ei kiinnosta vai????
osku91 kirjoitti:
Aivan hirveä ulkoasu, ihan silmiin sattuu.
Onko jotain perustelujakin? Minusta tummapohjaiset ulkoasut sattuvat silmiin paljon vähemmän kuin valkopohjaiset.
Mutta voit aivan vapaasti kirjoittaa omat CSS:t selaimesi tyylitiedostoon; kaiken pitäisi olla muutettavissa. Esimerkiksi Firefoxille on tätä varten helppokäyttöinen lisäosa Stylish.
osku91 kirjoitti:
Aivan hirveä ulkoasu, ihan silmiin sattuu.
Hetkinen, ei tuo ulkoasu todellakaan ole mikään maailman kaatavan hieno, mutta sopii täydellisesti selkeytensä puolesta tämän tyyppiseen asiaan. Onko kenenkään järkeä alkaa tekemään hienoa ulkoasua kyseiselle sivulle, kun itse asia on kuitenkin itse php-haaste ja sen tehtävät, EIKÄ sivun ulkoasu.
Sivusto toimii kuitenkin käytännössä vain tehtävien tarkistajana, joten ei sinun siellä kauaa aikaa tarvitse viettää ja ihailla sen kauheaa ulkoasua :).
Niin mutta vaikuttaako ulkoasu siihen mihin tuo PHP-haaste on tarkoitettu jos se kerran toimii ja on käytettävyyden kannalta OK. Tiedän tietty että jos ostan tietokoneohjelman niin ulkoasun ulkonäkö vaikuttaa valintaani ja sitten käytettävyys ja se paljonko siinä on ominaisuuksia ja onko niistä ominaisuuksita minulle hyötyä mitä haen.
Esimerkkinä voisin ottaa Passelin, jota koulussa on tunnilla joutunut opiskelemaan. Sen ulkoasu on aivan hirveä ja käytettävyydessä on vaikka mitä vikoja ja sillä tehdyt laskut on mun mielestä aika amatööritason näköisiä. Joten mielummin teen sen laskun Excelillä. Teen vain Excelillä laskupohjan ja asemmoin siihen firman logon tulostuskelpoisella resolla ja sit vaan täyttelen ja viitenumerot ja laskun numerot saan SOAP-serveriltä painamalla nappia ja tiedot menee kirjanpitäjälle, joka on inarissa. Meinaan aika työlästä tehdää niin että syötän ensin asiakaat asiakaskantaan ja sitten miljardi palvelua esim. PHP-ohjelmointi tuntihintaan se ja se tuotteet-/palvelutkantaan ennenkuin voin tehdä laskun johon sitten en saa kunnon selitettä sille mitä tehtiin.
Onko PHP-haasteessa joku vika kun yhden tehtävän kohdalla muistan tasan tarkkaan että malliratkaisut tuli näkyviin vaikka en sitä tehtävää ollut vielä onnistunut suorittamaan. Mutta en halunnut huijata vaan suoritin tehtävän ilman että olisin käynyt katsomassa miten se pitää tehdä.
Onko joku muu havainnut saman ilmiön?
En ole havainnut, mutta olisiko tuossa ollut kyseessä tilanne, jossa walkout_ sai juuri ratkaistua tehtävän ja saman ruudun yläosassa Seuraava tehtävä -linkki osoitti vielä siihen samaan tehtävään, kuten ainakin jossain vaiheessa oli. Siitä kun klikkasi, pääsi siis jo ratkaistuun tehtävään, jossa on linkki malliratkaisuun.
En ole havainnut ja kokeilin antaa ratkaisusivulle id:tä tehtävistä joita ei ole vielä ratkottu. Ei päästänyt. Eli mulla ainakin toimii ok. Testasin Firefox 3.5.3:lla ja IE8:lla.
Mutta samaa probleemia huomasin mitä tuossa toisessa ketjussa on keskusteltu Putkan otsikosta. Firefoxilla PHP-haasteen logon tausta näyttää eriväriseltä kuin muun sivun tausta. Se pomppaa sieltä suht ikävästi laatikkona esiin. IE:llä tuota ongelmaa ei näytä olevan, vaan kuva sulautuu taustaan ihan nätisti. Näin siis ainakin XP:ssä.
http://sooda.dy.fi/fpaste/index.php?uZ6
Tuossa se on visuaalisessa muodossaan mitä tarkoitin. Etualalla IE8 ja taka-alalla Firefox 3.5.3 ja käyttiksenä siis XP. Huom. kuvan kirkkautta ja kontrastia säädetty reilusti, jotta pointti tulisi selvemmin esille.
Ja mistä tarkkasilmäiset näkevät myös tavan, mitä ajattelin kokeilla seuraavaan tehtävään ;) En viitsisi taas tehdä samaa "kokeile kaikkia vaihtoehtoja" algoritmeja.
Ja täällä (uusin FF, testattu sekä Vista että XP) logon ja taustan sävy on tasan sama (0,0,133 eli #000085). Olisiko sama väriprofiileihin liittyvä ongelma kuin mitä toisaalla käsiteltiin putkan otsikon osalta.
Grez kirjoitti:
Ja täällä (uusin FF, testattu sekä Vista että XP) logon ja taustan sävy on tasan sama (0,0,133 eli #000085). Olisiko sama väriprofiileihin liittyvä ongelma kuin mitä toisaalla käsiteltiin putkan otsikon osalta.
Jaa a. Aika kummalliselta kuulostaa. Jos kyseessä olisi XP:n väriprofiili, niin sen pitäisi vaikuttaa kaikkiin elementteihin samalla tavalla. Eli taustan ja logon keskinäinen suhde ei pitäisi muuttua. Jos taas kyseessä on kuvaan itseensä upotettu väriprofiili (esim. sRGB), niin se tietysti vaikuttaa yksittäiseen elementtiin, eli tässä tapauksessa logoon. Mutta jos siitä on kysymys, niin miksi minun sama versio FF:sta näyttää kuvan ja taustan erivärisenä, mutta sinulla samanvärisenä?? Luulisi niiden käsittelevän sen väriprofiilin samalla tavalla.
Jaa-a kerropas miten se väriprofiili upotetaan siihen taustaväriin.. JPG:ssä tai PNG:ssä kun sellainen voi sisältyä kuvaan.
Toisaalta jos et usko tuohon väriprofiiliin, niin sitten sun kone on vaan rikki, koska mulla siinä ei ole värieroa.
Grez kirjoitti:
Jaa-a kerropas miten se väriprofiili upotetaan siihen taustaväriin.. JPG:ssä tai PNG:ssä kun sellainen voi sisältyä kuvaan.
Toisaalta jos et usko tuohon väriprofiiliin, niin sitten sun kone on vaan rikki, koska mulla siinä ei ole värieroa.
Logon profiilistahan tässä puhutaankin ja se on png-formaatissa. Ja näyttää olevan sRGB profiilissa. Mistä muuten tuon lukeman revit? Sehän on oikein kunnolla sininen ja minä en ainakaan tuollaisia lukemia saa millään. Värinpoiminnalla sain lukemaksi #000011
Kyllä tässä väriprofiilit toimivat. Jos muutan kuvat väriprofiilista toiseen ja katson niitä FF:llä, niin ihan oikein ne näyttävät siinäkin muuttuvan. Tarkistin sRGB, aRGB ja ProPhoto RGB profiileilla, että FF näyttää ne kuten pitää. Eli en usko että koneeni on rikki, mutta jostain syystä se hanskaa tuon kuvan eri tavalla kuin sinun koneesi (paitsi IE:llä, missä värieroa taas ei ole).
Mietin olisiko Spyder voinut sekoittaa jotain ja disabloin senkin, mutta ei vaikuttanut asiaan.
lainaus:
Logon profiilistahan tässä puhutaankin ja se on png-formaatissa.
Kyllä tässä nähdäkseni puhuttiin logon ja CSS:ssä määritellyn taustavärin erosta.
lainaus:
Mistä muuten tuon lukeman revit? Sehän on oikein kunnolla sininen ja minä en ainakaan tuollaisia lukemia saa millään. Värinpoiminnalla sain lukemaksi #000011
Hupsis, se 133 oli tuosta kuvasta mitä olin säätänyt, että mahdolliset erot näkyisi paremmin.
Mutta tosiaan muokkaamaton on #000011 (niinkuin sanoitkin) ja sama on määritelty CSS:ssä background -väriksi.
Jos otat ruudunkaappauksen tuosta sinulla väärin näkyvästä niin voit varmaan siitä katsoa kumpi poikkeaa tuosta #000011:stä.
lainaus:
Kyllä tässä väriprofiilit toimivat. Jos muutan kuvat väriprofiilista toiseen ja katson niitä FF:llä, niin ihan oikein ne näyttävät siinäkin muuttuvan. Tarkistin sRGB, aRGB ja ProPhoto RGB profiileilla, että FF näyttää ne kuten pitää. Eli en usko että koneeni on rikki, mutta jostain syystä se hanskaa tuon kuvan eri tavalla kuin sinun koneesi (paitsi IE:llä, missä värieroa taas ei ole).
No kokeilepa vielä laittaa se CSS samaan väriprofiiliin. Kerro sitten meillekin miten se tapahtuu.
grez kirjoitti:
Kyllä tässä nähdäkseni puhuttiin logon ja CSS:ssä määritellyn taustavärin erosta.
Juu, mutta en tietääkseni missään väittänyt että taustavärillä olisi jokin oma väriprofiilinsa. Puhuin nimenomaan kuvan väriprofiilista.
No tuo kuvahan se siellä väärin näkyy. Voiskohan se FF kuitenkin ryssiä sen profiilin jotenkin.
Logo: #050018
Tausta: #000011
Nyt ei kerkee alkaa säätämään noita, mutta täytyy palata asiaan myöhemmin.
Olettaisin että se ei ryssi mitään, vaan näyttösi on jossain muussa profiilissa kuin sRGB (jolloin sRGB:n #000011 on sinun näytölläsi jotain muuta). Taustavärissä taas ei ole profiilia, joten se näkyy #000011 värissä riippumatta käyttämästäsi väriprofiilista.
Niin, voit kokeilla näyttääkö tämä erilaiselta:
http://grez.info/putka/phph/lista.htm
Poistin siis vain tuosta logosta väriprofiilimäärityksen (joka oli sRGB). Kokokin pieneni samalla muutaman tavun.
Grez kirjoitti:
Olettaisin että se ei ryssi mitään, vaan näyttösi on jossain muussa profiilissa kuin sRGB (jolloin sRGB:n #000011 on sinun näytölläsi jotain muuta). Taustavärissä taas ei ole profiilia, joten se näkyy #000011 värissä riippumatta käyttämästäsi väriprofiilista.
No jos se ff ei ryssi mitään sen profiilin, niin millä selittyy että se on ainoa ohjelma joka näyttää tuon väärin? IE, Safari, Gimp ja Windows Picture & Fax Viewer näyttävät sen oikeanlaisena. Ainakin Safarissa ja Gimpissä on varmasti värihallinta mukana, joten eivät ne vain voi hylätäkään sitä profiilia.
Jos nyt olen yhtään noista väriprofiileista perillä, niin sillä ei pitäisi olla merkitystä missä väriprofiilissa näyttö on. Jos kuvassa on sRGB profiili ja näytössä mikä tahansa ICC profiili, niin kuvalle ajetaan muunnos siten että värien pitäisi vastata toisiaan. Jos puolestaan molemmissa on sRGB profiili, niin kuva heitetään näytölle ilman mitään muunnosta.
Jollain tapaa se kyllä tuosta profiilista on kiinni, mutta ei nyt mene minun jakeluun että miten. Kokeilin kahdella eri monitorilla ja muutamalla eri näyttöprofiililla ja joka kerta sama tulos: ff:llä logo on erivärinen ja muilla samanvärinen. En nyt keksi kuin kaksi mahdollista selitystä: ff värimuunnos kusee tai sitten ff on ainoa jossa se toimii oikein ja kaikissa kokeilemissani näytön profiileissa on jotain vikaa. Sanokaas nyt joku viisaampi jos osaatte neuvoa miten saisin tuon näkymään oikein myös profiilin kanssa?
Grez kirjoitti:
Niin, voit kokeilla näyttääkö tämä erilaiselta:
http://grez.info/putka/phph/lista.htmPoistin siis vain tuosta logosta väriprofiilimäärityksen (joka oli sRGB). Kokokin pieneni samalla muutaman tavun.
Juu, toimii. Näistä logoista yms. voisi muutenkin poistaa väriprofiilit. Ajatus niissä kuitenkin on että ne sulautuvat elementteihin, eikä se että ne näyttäisivät täsmälleen samalta jokaisella monitorilla.
Hassua, että modernitkin selaimet toimivat päin honkia, kun CSS:n värien pitäisi olla sRGB-värejä. On aivan naurettavaa, että tällainen ongelma edes on kehitetty: nettisivuilla hyvin suuri osa kuvista halutaan upottaa taustaan, ja näin siitä on tullut peruskäyttäjille erittäin hankalaa.
Täytyy täst'edes käsitellä kaikki sivujen ulkoasuun liittyvät kuvat sopivilla ohjelmilla (jpegtran ja crushpng) niin, ettei niissä vahingossakaan ole kuin "tavallista" kuvadataa. Päivitetyt versiot PHP-haasteen kuvista ja Ohjelmointiputkan logosta on jo lähetetty Antille.
Torgo kirjoitti:
Jos nyt olen yhtään noista väriprofiileista perillä, niin sillä ei pitäisi olla merkitystä missä väriprofiilissa näyttö on. Jos kuvassa on sRGB profiili ja näytössä mikä tahansa ICC profiili, niin kuvalle ajetaan muunnos siten että värien pitäisi vastata toisiaan. Jos puolestaan molemmissa on sRGB profiili, niin kuva heitetään näytölle ilman mitään muunnosta.
No ongelmahan on siinä, kun siellä CSS:ssä ei käytännössä ole mitään väriprofiilia (olen mielestäni yrittänyt tätä vääntää rautalangasta aika monta viestillistä), eli siis selaimet ei profiloi niitä mitenkään. Eli voit ajatella sitä niin, että on kuva, jossa on väri #000011 avaruudessa sRGB ja sitten tausta, jossa on väri #000011 avaruudessa TorgonNäytönHienoProfiili. Kun tuo sRGB:n #000011 muunnetaan avaruutta TorgonNäytönHienoProfiili vastaavaksi, niin siitä tulee #050018.
Torgo kirjoitti:
Sanokaas nyt joku viisaampi jos osaatte neuvoa miten saisin tuon näkymään oikein myös profiilin kanssa?
No tuossahan se on alla kerrottuna:
Torgo kirjoitti:
Grez kirjoitti:
Niin, voit kokeilla näyttääkö tämä erilaiselta:
http://grez.info/putka/phph/lista.htmPoistin siis vain tuosta logosta väriprofiilimäärityksen (joka oli sRGB). Kokokin pieneni samalla muutaman tavun.
Juu, toimii. Näistä logoista yms. voisi muutenkin poistaa väriprofiilit. Ajatus niissä kuitenkin on että ne sulautuvat elementteihin, eikä se että ne näyttäisivät täsmälleen samalta jokaisella monitorilla.
Ja sitten veilä Metabolixin viestiin..
Metabolix kirjoitti:
Hassua, että modernitkin selaimet toimivat päin honkia, kun CSS:n värien pitäisi olla sRGB-värejä. On aivan naurettavaa, että tällainen ongelma edes on kehitetty: nettisivuilla hyvin suuri osa kuvista halutaan upottaa taustaan, ja näin siitä on tullut peruskäyttäjille erittäin hankalaa.
Joo, toisaalta nestistä voi lukea myös muiden kokemuksia:
lainaus:
sRGB in the CSS and PNG Specifications
According to the CSS2 specification, the CSS color values refer to the sRGB color space. In practice, however, all browsers except Mac IE 5 with ColorSync enabled (disabled by default) seem to just treat the CSS color values as values in whatever color space the system color space happens to be. Still, it would be reasonable to expect the colors of an sRGB-labeled PNG image to be treated consistently with CSS colors.
Again, it just doesn’t work that way in practice.
Ja lisätään vielä, että olen kuitenkin optimisti. Tuskin menee sataakaan vuotta että väriprofiloinnit nettiselaimissa saadaan toimimaan järkevästi.
Grez kirjoitti:
No ongelmahan on siinä, kun siellä CSS:ssä ei käytännössä ole mitään väriprofiilia (olen mielestäni yrittänyt tätä vääntää rautalangasta aika monta viestillistä), eli siis selaimet ei profiloi niitä mitenkään. Eli voit ajatella sitä niin, että on kuva, jossa on väri #000011 avaruudessa sRGB ja sitten tausta, jossa on väri #000011 avaruudessa TorgonNäytönHienoProfiili. Kun tuo sRGB:n #000011 muunnetaan avaruutta TorgonNäytönHienoProfiili vastaavaksi, niin siitä tulee #050018.
Ei minulla tuon muunnoksen tajuamisessa ole ongelmaa. Se kysymys mikä minulla on että miksi ainoastaan ff:lla siitä tulee #050018 ja kaikilla muilla se on #000011. Olen mielestäni rautalangasta yrittänyt vääntää kysymystäni, eli minkä takia ff tekee värimuunnoksen eri tavalla kuin muut värihallintaa tukevat ohjelmat? Muunnoksen sRGB:stä TorgonNäytönHienoProfiiliin (joka btw. on sRGB Color Space Profile, eli ei pitäisi olla tarvetta muunnokselle) pitäisi kuitenkin mennä kaikilla muunnosta tukevilla ohjelmilla samalla tavalla.
CSS:n kaikki elementit pitäisi olla sRGB väriavaruudessa. Paitsi kuvat joihin on erikseen upotettu jokin muu väriprofiili. Siis myös kuvat joissa ei ole mitään väriprofiilia, pitäisi CSS:ssä käsitellä sRGB avaruudessa. Eli taustan ja #000011 pitäisi olla samassa väriavaruudesta siitä huolimatta, että kuvaan on erikseen määritetty sRGB profiili ja muunnoksen pitäisi mennä ihan samalla tavalla. Ilmeisesti selaimien tuki väriavaruuksille vain on kovin horjuvaa. Kaikilla muilla selaimilla + kuvaohjelmilla tuo väriarvo siis on #000011 (ellen sitä jo riittävän moneen kertaan maininnut).
Grez kirjoitti:
Torgo kirjoitti:
Sanokaas nyt joku viisaampi jos osaatte neuvoa miten saisin tuon näkymään oikein myös profiilin kanssa?
No tuossahan se on alla kerrottuna:
Grez kirjoitti:
Niin, voit kokeilla näyttääkö tämä erilaiselta:
http://grez.info/putka/phph/lista.htmPoistin siis vain tuosta logosta väriprofiilimäärityksen (joka oli sRGB).
Se että profiilin poistaa ei ole sama asia kuin saada värit näkymään oikein profiilin kanssa.
No jos kerran näyttösi on sRGB gammalla 2.2 niin sittenhän periaatteessa Firefoxinkaan ei pitäisi sitä muuttaa mitenkään. Mutta vaikeaa kieltämättä sanoa miksi se sitten sinulla sitä muuttaa, varsinkin kun omalla FF 3.5.3:lla ei ole vastaavaa efektiä. Ehkä sinulla on jotenkin kummasti jokin ulkopuolinen ohjelman vääntänyt itsensä PNG-kuvien käsittelijäksi Firefoxiin. (En tiedä onko tuollainen oikeasti edes mahdollista)
lainaus:
CSS:n kaikki elementit pitäisi olla sRGB väriavaruudessa.
Mutta kuten on jo käynyt ilmi niin ne ei useimmiten ole vaan käytännössä kaikilla selaimilla ovat siinä väriavaruudessa, mikä näytöllä on.
Fx:n kyseiset asetukset löytyvät about:config-sivulta avaimella gfx.color_management. Oletuksena siis display_profile = "" (järjestelmän oletusprofiili), mode = 2, rendering_intent = 0. Voit kokeilla, mitä moden vaihtaminen (1 tai 0) tekee. Itse en ole näihin perehtynyt.
Grez kirjoitti:
Ehkä sinulla on jotenkin kummasti jokin ulkopuolinen ohjelman vääntänyt itsensä PNG-kuvien käsittelijäksi Firefoxiin. (En tiedä onko tuollainen oikeasti edes mahdollista)
Onhan se mahdollista. Quictime siellä näyttäisi olevan png:tä käpistelemässä. Mutta ongelma ratkesi viimein. Nähtävästi ff (tai Quicktime tai mikä sen muunnoksen tekeekään) ei käyttänyt tuota srgb profiilia, vaikka se oli aktiivisena (juu tarkistin. current profile: srgb color profile), vaan se käytti edelleen default profiilia. Vasta kun vaihdoin näytön asetuksista srgb defaultiksi, ff:kin ymmärsi alkaa sitä käyttämään.
On tää värien kanssa pelaaminen kyllä tehty helpoksi ja yksinkertaiseksi... ;p
Metabolix kirjoitti:
Päivitetyt versiot PHP-haasteen kuvista ja Ohjelmointiputkan logosta on jo lähetetty Antille.
Ja nyt uudet kuvat ovat käytössä.
Grez kirjoitti:
Olisiko mitään ideoita miten tästä voisi tehdä mielekkäämmän sellaisille joilla PHP on jo kohtuullisesti hanskassa?
Jotenkin ei nappaisi tahkoa noita helppoja paria tuntia että pääsisi sinne loppupään mahdollisesti mielenkiintoisiin ja haastaviin tehtäviin. Katsoin tehtävän 53 (joka on siis numeron mukaan vaikein minkä näkee suorittamatta pienempiä ensin) ja sekin oli mielestäni ihan kohtuuttoman helppo. (varsinkin kun koodin tunkemisessa palvelimelle ja sen linkin työntämisessä tuohon systeemiin menee enemmän aikaa kuin itse koodin kirjoittamisessa, niin se alkaa turhauttaa)
Mua ainakin muutamassa ekassa otti pattiin se että kun Dreamweaverin käynnistys kestää niin kauan ja notebadillä koodaus on tylsää ja hankalaa kun on pelkää mustaa valkoisella sitten vielä ne pitää siirtää palvelimelle.
Voisi olla mielekkäämpää minulle jos minulla olisi X-työpöytä palvelimella niin voisi editoida suoraan palvelimella vaikka Eclipse:llä.. mutta tämä ei liity kysymykseen.
Se siellä on nyt ainakin hyvä että linkit tallentuu eikä tarvii joka kerta copy/pasteta selaimesta kun ei jaksa kirjottaa manuaalisesti kun se homma ei ekasta voi 100 % varmuudella oikein.
Ekassa tutustumis tehtävässä väärin ymmärsin koko jutun ja luulin että hommaa uploadattaan palvelimelle. Tein turhaa työtä tehden lomakeen johon ne hommat syötetään. Mut ehkä en lukenut kaikkea ja tajunnut vaan tms.
Itku meinaa tulla tehtävän 22, taikaneliön, kanssa.
8|9|8|9|8|9|8|9|9|8|9|8|9|8|9|8
Miksi tuosta syötteestä ei tule kelvollista taikaneliötä? Piirsin sen paperillekin itselleni ja joka suuntaan, ylös, alas, ristiin, rastiin, saan luvuista 34. Olen yrittänyt ratkaista tehtävää jo kolme tuntia.
Taikaneliössä on yleensä käytössä kaikki kokonaisluvut väliltä [1,n²].
Kuten tehtävänannossakin lukee, "-- sisältääkö se luvut 1–16 --".
Luulin, että se tarkoittaa väliltä 1-n^2, ja sekä 8, että 9 ovat siltä väliltä. Katsotaan joko se nyt sitten ratkeaisi.
EDIT: Ratkesi. Kiitoksia - nää jutut tuntuu kaatuvan mulla aina huolimattomuuteen tai huonoon lukutaitoon.
Selvensin tehtävän 22 tehtävänantoa sanalla "kaikki".
Hei, joidenkin tehtävien kuvaukset ei mennyt ekalla kerralla jakeluun. Jouduin sitten päätelemään virheiden perusteella.
Loistava idea ja toteutus tuo php opas. Kiitos vaan tekijöilleen, en ole vielä kun tarkastannu ekan tehtävän, mutta sanattomaksi vetää......
Hauskaa ajanvietettä, hienoa työtä kyllä :)
hieno homma tämä projekti, kaikki kiitos ja kunnia tälle.
muutoinkin ohjelmointiputka on ollut se paikka josta olen saanut avun php alkeisiin.
niin ja kymmenen pistettä ja ranskaisen matemaatikon merkki, borland TP asusta.
Moikka, missähän on vika kun tehtävässä nr. 15 ei mene viimeinen testi läpi? Lokaali WAMP server antaa tulokseksi 1 mutta PHP haasteen tarkistus 0.
Viimeisen testin syöte: pj=1&a=0&b=0&c=1
PHP-haaste ilmoittaa $_REQUEST-taulukossa tehtävän muuttujien lisäksi muuttujan id, joka kertoo tehtävän numeron. Taulukon sisältö on siis tässä tapauksessa seuraava:
Array ( [pj] => 1 [a] => 0 [b] => 0 [c] => 1 [id] => 15 )
Koko $_REQUEST-taulukon läpikäynti ei siis aina toimi toivotulla tavalla.
Pysyyhän php-haaste auki vaikka tuleekin muita kilpailuita? Niitä ei kattokaas jaksa tehdä koko ajan, vaan aina vähän ajan välein pari tehtävää.
Kyllä, PHP-haaste pysyy auki muista tapahtumista riippumatta. Sehän ei ole kilpailu vaan joukko harjoitustehtäviä. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.