#!/usr/bin/perl # Anagramma # (C) Tarján Dénes 2000.09.19. # CGI valtozat a tuzfal mogottieknek, illetve a kiertekeleshez mindenkinek # abbol veszi az adatait, amit ?feladv=xxx -ban kap: xxx.anf # ?kimenet=xxx : xxx.ank-be teszi a megoldasokat # - ha nincs megadva, akkor default.anf, default.ank # feladv, kimenet utvonala $anapath = "./"; # CGI valtozokban van a megfejtes, ha megadtak # (ha nem, akkor jatszunk: ki kell irni a feladatot) # method=POST $param = ; # read a line if ($param =~ /\n$/) { # \n-re vegzodik chop $param; } $par_get = $ENV{"QUERY_STRING"}; @getvars = split(/\&/, $par_get); foreach $var1 (@getvars) { @var2 = split(/=/,$var1); $cgi_getv{"$var2[0]"} = decodeURL("$var2[1]"); } $action = $ENV{"SCRIPT_NAME"}."\?$par_get"; if (($param eq "") || (!$param)) { # nincs bemenet print <Anagramma

Anagramma

Az alant felsorakozó betűkből egy értelmes magyar szó állítható össze.


EOT $inf = $cgi_getv{"feladv"}; if ($inf eq "") { $inf = "default"; } $inf = $inf.".anf"; open(FELADV, $anapath.$inf); $line = ; close(FELADV); ($versenye,$hanyadiksor,$megf,$feladv,$magyarazat) = split(';',$line); $feladv = uclat2($feladv); print "

Feladvány: $feladv, kirakandó egy $magyarazat.

\n"; print "
\n"; @betuk = split('', uclat2($megf)); $betuksz = scalar @betuk; print "\n"; @betuk = sort abeceszerint @betuk; for ($i=0; $i<$betuksz; $i++) { print ""; } print <
Ide is írhatod a megoldást:
(de akkor csak ide)
A játékos neve:
e-mail címe:
lakóhelye (helység):
EOT } else { # megfejtes jott!!! # ############################################# print <Anagramma - eredmény

Anagramma

EOT $inf = $cgi_getv{"feladv"}; if ($inf eq "") { $inf = "default"; } $inf = $inf.".anf"; open(FELADV,$inf); $line = ; close(FELADV); ($versenye,$hanyadiksor,$megf,$feladv,$magyarazat) = split(';',$line); $megf = uclat2($megf); $feladv = uclat2($feladv); print "

A feladvány ez volt: $feladv, kirakandó egy $magyarazat.

\n"; @vars = split(/\&/, $param); foreach $var1 (@vars) { @var2 = split(/\=/,$var1); $cgivars{"$var2[0]"} = decodeURL("$var2[1]"); } $betuk = ""; for ($i=0; $i<$cgivars{"length"}; $i++) { $betuk = $betuk.$cgivars{"betu$i"}; } while ($betuk =~ / $/) { chop $betuk; } if ($cgivars{"megoldas"} ne "") { if ($betuk ne "") { print "Nem tudom elfogadni. Vagy a betűkből válassz, "; print "vagy gépeld be a megoldást, de mindkettő nem jó."; print "
\n
\n"; print ""; exit; } else { $betuk = $cgivars{"megoldas"}; } } $betuk = uclat2($betuk); print "A megoldásod: $betuk
\n"; if ($betuk eq $megf) { print "Helyes megfejtés. Gratulálok!\n"; } else { print "Sajnos nem talált.\n"; print "
\n"; } if ($versenye && ($betuk eq $megf)) { $outf = $cgi_getv{"feladv"}; if ($outf eq "") { $outf = "default"; } $htm = $outf.".htm"; open(HTM, "$anapath$htm"); @lines = ; close(HTM); $" = ""; ($sec,$min,$hour,$mday,$month,$year,@dummy) = localtime $^T; $month++; if ($sec < 10) { $sec = "0".$sec; } if ($min < 10) { $min = "0".$min; } if ($mday < 10) { $mday = "0".$mday; } if ($month < 10) { $month = "0".$month; } $year = "1900" + $year; ($text_head, $text_foot) = split(//,"@lines"); open(HTM, ">$anapath$htm") || print "Can\'t open $anapath$htm.
"; print HTM $text_head; print HTM "$year.$month.$mday.   $hour:$min:$sec"; print HTM "   $cgivars{'nev'}, "; print HTM "$cgivars{'cim'}
\n\n"; print HTM $text_foot; close(HTM); $outf = $outf.".ank"; open(KIMENET, ">>$anapath$outf"); print KIMENET "\"$cgivars{'nev'}\"\t\"$cgivars{'email'}\""; print KIMENET "\t\"$cgivars{'cim'}\"\t\"$betuk\""; print KIMENET "\t\"$year.$month.$mday. $hour:$min:$sec\"\n"; close KIMENET; print "

A megoldást eltároltam.

\n"; print "Eddigi helyes megfejtok"; print "   "; print "Korábbi feladványok és megfejtések"; print "   Vissza a fooldalra!
\n"; $file = "fooldal.jgi"; unless ($return = do $file) { warn "couldn't parse $file: $@" if $@; warn "couldn't do $file: $!" unless defined $return; warn "couldn't run $file" unless $return; } } print ""; } ############# END ############# sub abeceszerint { $al = lclat2($a); $bl = lclat2($b); $al =~ tr/aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi/; $bl =~ tr/aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi/; return $al cmp $bl; } sub lclat2 { $char = $_[0]; $char =~ tr/AÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ/aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz/; return $char; } sub uclat2 { $char = $_[0]; $char =~ tr/aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz/AÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ/; return $char; } sub decodeURL { local($s); $s = ''; $_[0] =~ s/\+/ /g; # minden + space foreach $token (split(/(%[0-9a-fA-F][0-9a-fA-F])/, $_[0])) { if ($token =~ /%(..)/) { $num = hex($1); $s .= sprintf("%c", $num); } else { $s .= $token; } } return $s; }