commit d5e18a87094260df04f94f0ad7aafdd6c7141834
parent bb4e49d1bfb8df3320d1802a44fdb99f0ddaf842
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Wed, 2 Feb 2011 11:22:59 +0100
Création de parties : 100% (manque le debug).
Diffstat:
5 files changed, 38 insertions(+), 75 deletions(-)
diff --git a/code/serveur/.gitignore b/code/serveur/.gitignore
@@ -1,3 +1,3 @@
-01042011-LEXICALNET-JEUXDEMOTS-FR-NOHTML.txt
+*-LEXICALNET-JEUXDEMOTS-FR-NOHTML.txt
db
sql
diff --git a/code/serveur/dump2sqlite.sh b/code/serveur/dump2sqlite.sh
@@ -1,5 +1,7 @@
#!/bin/sh
+# TODO : sed -E sur certaines machines, sed -r sur d'autres.
+
echo " dump2sql.sh : conversion des dumps de JeuxDeMots vers du sql (sqlite3)." >&2
echo " La progression est affichée avec pv. Si vous n'avez pas pv, supprimez la ligne correspondante dans ce script." >&2
echo " Et c'est parti !" >&2
diff --git a/code/serveur/php/config.php b/code/serveur/php/config.php
@@ -1,10 +0,0 @@
-<?php
-
-/** fichier de configuration */
-
-// Général
-
-// Quelques fonctions utiles.
-// include("function.php");
-
-?>
diff --git a/code/serveur/php/function.php b/code/serveur/php/function.php
@@ -1,36 +0,0 @@
-<?php
-
-/**Ce fichier définit un certain nombre de fonctions utiles */
-
-// Connexion à la base de données.
-function sqlConnect()
-{
- global $sql_server, $sql_login, $sql_pass, $sql_bdd;
- //connexion au serveur
- $linkid = @mysql_connect($sql_server,$sql_login,$sql_pass) or die ("Erreur lors de la connection au serveur MySQL !");
- //selection de la base
- @mysql_select_db($sql_bdd,$linkid) or die("Impossible de selectionner la base de données\n<br>\nVoici l'erreur renvoyée par le serveur MySQL :\n<br>\n".mysql_error());
-
- return $linkid;
-}
-
-function secure($string)
-{
- if(ctype_digit($string))
- {
- $string = intval($string);
- }
- else
- {
- $string = sqlite_escape_string($string);
- $string = addcslashes($string, '%_');
- }
-
- return $string;
-}
-
-function writeRequest($request)
-{
-
-}
-?>
-\ No newline at end of file
diff --git a/code/serveur/php/pticlic.php b/code/serveur/php/pticlic.php
@@ -69,23 +69,27 @@ function cg_build_result_sets($cloudSize, $centerEid, $r1, $r2) {
// Ce n'est toujours pas ça… : "select eid from (select B.start as eid from relation as A, relation as B where A.type not in (4, 12, 36, 18, 29, 45, 46, 47, 48, 1000, 1001) and A.start = $centerEid and B.type not in (4, 12, 36, 18, 29, 45, 46, 47, 48, 1000, 1001) and B.end = A.end limit 1) order by random();"
// Tordu, mais ça marche \o/ . En fait il faut empêcher l'optimiseur de ramener le random avant le limit (et l'optimiseur est malin… :)
array('w'=>10, 'd'=>8, 's'=>"select x as eid, -0.1 as r1, -0.1 as r2 from (select x from (select X.eid + Y.dumb as x from (select B.start as eid from relation as A, relation as B where A.type not in (4, 12, 36, 18, 29, 45, 46, 47, 48, 1000, 1001) and A.start = 74860 and B.type not in (4, 12, 36, 18, 29, 45, 46, 47, 48, 1000, 1001) and B.end = A.end limit $cloudSize) as X, (select 0 as dumb) as Y)) order by random();"),
- array('w'=>10, 's'=>false) // random. Le r1 et r2 de random sont juste en-dessous
+ 'rand' => array('w'=>10, 's'=>false) // random. Le r1 et r2 de random sont juste en-dessous
);
$sumWeights = 0;
foreach ($sources as $k => $x) {
- $sumWeights += $x['w'];
+ $sumWeights += $x['w'];
+ $sources[$k]['rsPos'] = 0;
+ $sources[$k]['rsSize'] = 0;
if ($x['s'] !== false) {
$sources[$k]['resultSet'] = array();
$res = $db->query($x['s']);
$i = 0;
while ($i < 10 && $sources[$k]['resultSet'][] = $res->fetchArray()) {
- $i++;
+ $i++;
+ $sources[$k]['rsSize']++;
}
} else {
$sources[$k]['resultSet'] = array();
for ($i = 0; $i < 10; $i++) {
$sources[$k]['resultSet'][] = array('eid'=>random_node(), 'r1'=>-1, 'r2'=>-1);
+ $sources[$k]['rsSize']++;
}
}
}
@@ -106,32 +110,46 @@ function cg_build_cloud($cloudSize, $sources, $sumWeights) {
// On boucle tant qu'il n'y a pas eu au moins 2 sources épuisées
$cloud = array();
$nbFailed = 0;
- $i = 0;
- while ($i < $cloudSize && $nbFailed < 50) {
+ $i = 0;
+ while ($i < $cloudSize && $nbFailed < 5*$cloudSize) {
// On choisit une source aléatoire en tennant compte des poids.
$rands = rand(1,$sumWeights);
$sumw = 0;
- $res = false; // TODO
+ $src = $sources['rand'];
foreach ($sources as $x) {
$sumw += $x['w'];
if ($rands < $sumw) {
- $res = $x['resultSet'];
+ $src = $x;
break;
}
}
- if (/* dépassé la fin de ce set */) {
+ if ($src['rsPos'] >= $src['rsSize']) {
$nbFailed++;
continue;
}
- $res = $res['eid'];
- if (in_array($res, $cloud)) {
+ $res = $src['resultSet'][$src['rsPos']++];
+ if (in_array($res['eid'], $cloud)) {
$nbFailed++;
continue;
- }
- $cloud[] = $res;
- $i++;
+ }
+ // position dans le nuage, difficulté, eid, probaR1, probaR2
+ $cloud[$i] = array('pos'=>$i++, 'd'=>$src['d'], 'eid'=>$res['eid'], 'probaR1'=>$res['r1'], 'probaR2'=>$res['r2']);
+ }
+ while ($i < $cloudSize) {
+ $cloud[$i] = array('pos'=>$i++, 'd'=>$sources['rand']['d'], 'eid'=>random_node(), 'probaR1'=>$sources['rand']['resultSet'][0]['r1'], 'probaR2'=>$sources['rand']['resultSet'][0]['r2']);
}
return $cloud;
+}
+
+function cg_insert($centerEid, $cloud, $r1, $r2) {
+ $db->exec("begin transaction;");
+ $db->exec("insert into game(gid, eid_central_word, relation_1, relation_2) values (null, $centerEid, $r1, $r2);");
+ $gid = $db->lastInsertRowID();
+ foreach ($cloud as $c) {
+ $db->exec("insert into game_cloud(gid, num, difficulty, probaR1, probaR2, eid_word) values($gid, ".$c['pos'].", ".$c['d'].", ".$c['probaR1'].', '.$c['probaR2'].', '.$c['eid'].");");
+ }
+ // TODO : insert into game_played une partie de référence.
+ $db->exec("commit;");
}
function create_game($cloudSize) {
@@ -140,20 +158,11 @@ function create_game($cloudSize) {
$centerEid = random_node();
$r1 = cg_choose_relations(); $r2 = $r1[1]; $r1 = $r1[0];
$sources = cg_build_result_sets($cloudSize, $centerEid, $r1, $r2); $sumWeights = $sources[1]; $sources = $sources[0];
- $cloud = cg_build_cloud($cloudSize, $sources, $sumWeights);
+ $cloud = cg_build_cloud($cloudSize, $sources, $sumWeights);
+ cg_insert($centerEid, $cloud);
var_dump($cloud);
- exit;
-
- $db->exec("begin transaction;");
- $db->exec("insert into game(gid, eid_central_word, relation_1, relation_2, relation_3, relation_4, reference_played_game) values (null, ".$centerEid.", 1,2,3,4,null);");
- $gid = $db->lastInsertRowID();
- foreach ($cloud as $eid) {
- $db->exec("insert into game_cloud(gid, num, difficulty, eid_word) values(".$gid.", ".$i.", ".$difficulty.", ".$eid.");");
- }
- // TODO : insert into game_played une partie de référence.
- $db->exec("commit;");
-}
+ exit;}
create_game(10);
echo 'ok';
@@ -210,4 +219,4 @@ echo 'ok';
// else
// die("Commande inconnue");
-?>
-\ No newline at end of file
+?>