#126 Le 12/02/2012, à 02:58
- Pylades
Re : /* Topic des codeurs [7] */
Le code n’est pas très présentable, en fait.
Mais j’ai ça :
==13279== Memcheck, a memory error detector
==13279== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==13279== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for copyright info
==13279== Command: ./bf primes.bf
==13279==
==13279== Conditional jump or move depends on uninitialised value(s)
==13279== at 0x4E7A07C: vfprintf (vfprintf.c:1619)
==13279== by 0x4E80F78: printf (printf.c:35)
==13279== by 0x400E96: byte_code (bf.c:283)
==13279== by 0x4009AF: main (bf.c:58)
==13279==
==13279== Use of uninitialised value of size 8
==13279== at 0x4E7631B: _itoa_word (_itoa.c:195)
==13279== by 0x4E787D6: vfprintf (vfprintf.c:1619)
==13279== by 0x4E80F78: printf (printf.c:35)
==13279== by 0x400E96: byte_code (bf.c:283)
==13279== by 0x4009AF: main (bf.c:58)
==13279==
==13279== Conditional jump or move depends on uninitialised value(s)
==13279== at 0x4E76325: _itoa_word (_itoa.c:195)
==13279== by 0x4E787D6: vfprintf (vfprintf.c:1619)
==13279== by 0x4E80F78: printf (printf.c:35)
==13279== by 0x400E96: byte_code (bf.c:283)
==13279== by 0x4009AF: main (bf.c:58)
Déclenché sur un vulgaire printf d’une variable assignée sur la ligne du dessus.
cd.arg[j] = pop(&sk);
printf("%ld\n", cd.arg[j]);
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#127 Le 12/02/2012, à 15:12
- The Uploader
Re : /* Topic des codeurs [7] */
commit 2ee8be1f6696e0347bcac2ed4cf1094e4dd18b6f
Author: Maximilien Noal <mnoal@epsi.fr>
Date: Sun Feb 12 15:09:45 2012 +0100
BotTeam (works) but no bots for now
Also, BotHome.resource_count will be sent to the standard output by the World for now.
Signed-off-by: Maximilien Noal <mnoal@epsi.fr>
diff --git a/MASWithTwoNests/bot_home.rb b/MASWithTwoNests/bot_home.rb
index a7c004d..f072f83 100644
--- a/MASWithTwoNests/bot_home.rb
+++ b/MASWithTwoNests/bot_home.rb
@@ -9,14 +9,22 @@ require 'rubygame'
module MASWithTwoNests
class BotHome < Agent
attr_reader :team_id
+ attr_reader :resource_count
def initialize(world, team_id, color)
super(world)
+ Rubygame::TTF.setup
+ @ttf = Rubygame::TTF.new("/usr/share/fonts/TTF/Ubuntu-L.ttf", 9)
+ @resource_count = 0
@team_id = team_id
@color = color
- @count_text = ""
@image = Rubygame::Surface.new([World::HOME_RADIUS * 2, World::HOME_RADIUS * 2])
@rect = @image.make_rect
- @image.draw_circle_s(@rect.center, Rubygame::Color::ColorRGB.new([0.22745, 0.22745, 0.22745, 1]))
+ @rect.center[0] = Random.rand * World::WIDTH
+ @rect.center[1] = Random.rand * World::HEIGHT
+ @image.draw_circle_s(@rect.center, World::HOME_RADIUS, Rubygame::Color::ColorRGB.new([0.22745, 0.22745, 0.22745, 1]))
+ end
+
+ def update(tick, world)
end
def add_resource
@@ -24,4 +32,3 @@ module MASWithTwoNests
end
end
end
-
diff --git a/MASWithTwoNests/bot_team.rb b/MASWithTwoNests/bot_team.rb
new file mode 100644
index 0000000..6778dbb
--- /dev/null
+++ b/MASWithTwoNests/bot_team.rb
@@ -0,0 +1,27 @@
+$LOAD_PATH << '../'
+require 'lib/point'
+include Lib
+$LOAD_PATH << './'
+require 'agent'
+require 'world'
+require 'rubygame'
+require 'bot_home'
+
+module MASWithTwoNests
+ class BotTeam < Agent
+ attr_reader :team_id
+ def initialize(world, team_id, color, bot_types)
+ @world = world
+ @team_id = team_id
+ @color = color
+ @bot_types = bot_types
+
+ team_color = @color.to_rgba_ary
+ 2.times do |i|
+ team_color[i] += 0.13333333
+ end
+ team_home = BotHome.new(@world, @team_id, Rubygame::Color::ColorRGB.new(team_color))
+ @world.agents << team_home
+ end
+ end
+end
diff --git a/MASWithTwoNests/world.rb b/MASWithTwoNests/world.rb
index e10bb7b..f1225cf 100644
--- a/MASWithTwoNests/world.rb
+++ b/MASWithTwoNests/world.rb
@@ -6,12 +6,15 @@ $LOAD_PATH << '../'
require "lib/point"
$LOAD_PATH << './'
require 'resource'
+require 'bot_team'
include Lib
module MASWithTwoNests
class World
attr_accessor :home_getting_bigger
attr_accessor :bot_start_from_home
+ attr_accessor :agents
+ attr_accessor :screen
WIDTH = 600
HEIGHT = 600
@@ -46,6 +49,7 @@ module MASWithTwoNests
resource = Resource.new(self, RESOURCE_START_LIFE, RESOURCE_MOVE_DELAY * Random.rand, RESOURCE_MOVE_SPEED * Random.rand)
resource.target_point = Point.new(Random.rand * WIDTH, Random.rand * HEIGHT)
@agents << resource
+ bot_team = BotTeam.new(self, "AntubisTeam", Rubygame::Color::ColorRGB.new([0.4,0.4,0.4]), ["truc"])
end
end
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#128 Le 12/02/2012, à 16:45
- grim7reaper
Re : /* Topic des codeurs [7] */
Les polices en dur dans le code c’est mal :
Could not open font: Couldn't open /usr/share/fonts/TTF/Ubuntu-L.ttf
Ou alors faut fournir les polices avec ton code.
@Πυλάδης : faudrait voir le reste du code, on verra ça quand tu feras ta release.
Dernière modification par grim7reaper (Le 12/02/2012, à 16:45)
Hors ligne
#129 Le 12/02/2012, à 16:51
- The Uploader
Re : /* Topic des codeurs [7] */
>_<
Bah t'façon ça ne fonctionne pas (normalement le resource_count s'affiche au dessus de la maison). Du coup, j'ai décidé que le score sera affiché dans la sortie standard, na.
(C'est nettoyé)
Dernière modification par The Uploader (Le 12/02/2012, à 16:58)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#130 Le 12/02/2012, à 17:09
- grim7reaper
Re : /* Topic des codeurs [7] */
Effectivement.
Sinon, je ne sais pas si c’est voulu, mais je la trouve un peu crade la sortie
`throw': uncaught throw :rubygame_quit (ArgumentError)
Hors ligne
#131 Le 12/02/2012, à 17:13
- The Uploader
Re : /* Topic des codeurs [7] */
Ben c'est comme ça dans les exemples...
Mais c'est remplacé par
Rubygame.quit
exit
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#132 Le 12/02/2012, à 17:19
- grim7reaper
Re : /* Topic des codeurs [7] */
Ben c'est comme ça dans les exemples...
Bah ça pue o_O"
Dans le genre on code comme un porc, ça se pose là.
Depuis quand laissé filer une exception c’est un moyen propre que quitter ?
Genre en C++, ça appelle std::terminate qui appelle std::abort.
En Java, ça crash aussi.
Donc bon, de mon point de vue laisser filer une exception c’est pas quitter proprement.
À ce compte-là, on en vient à justifier des horreurs de ce genre
void search( TreeNode node, Object data ) throws ResultException {
if (node.data.equals( data ))
throw new ResultException( node );
else {
search( node.leftChild, data );
search( node.rightChild, data );
}
}
Hé oui, si on utilise les exceptions pour finir un programme avec succès. Pourquoi pas s’en servir dans des algo pour renvoyer un résultat…
Mais c'est remplacé par
Rubygame.quit exit
Ce qui est beaucoup mieux et bien plus propre
Dernière modification par grim7reaper (Le 12/02/2012, à 17:21)
Hors ligne
#133 Le 12/02/2012, à 17:22
- The Uploader
Re : /* Topic des codeurs [7] */
Bah le pire c'est que j'avais déjà fait ça dans Gauge. (utiliser Rubygame.quit et exit à la place)
Sinon :
commit 808a0c42efa1b6d53d87222e9f4a5b18eb2d7d14
Author: Maximilien Noal <mnoal@epsi.fr>
Date: Sun Feb 12 17:20:20 2012 +0100
s/kill/delete to remove dead agents
Signed-off-by: Maximilien Noal <mnoal@epsi.fr>
diff --git a/MASWithTwoNests/world.rb b/MASWithTwoNests/world.rb
index 083fff9..90b6e6e 100644
--- a/MASWithTwoNests/world.rb
+++ b/MASWithTwoNests/world.rb
@@ -65,7 +65,7 @@ module MASWithTwoNests
def clean_dead_agents
@agents.each do |a|
- @agents.kill(a) if a.dead
+ @agents.delete(a) if a.dead
end
end
(et en avant pour l’événement de collision + le bot, et ce sera plus ou moins fini)
Dernière modification par The Uploader (Le 12/02/2012, à 17:23)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#134 Le 12/02/2012, à 17:46
- tshirtman
Re : /* Topic des codeurs [7] */
L'idée d'utiliser les exceptions dans les algos m'a déjà démangé, mais j'ai jamais vraiment tenté, y'avait jamais trop d'avantage à première vue, et puis c'est vrai que c'est franchement dégeu (mais ce ne serait pas grave si ça apportait quelque chose d'intéressant).
Hors ligne
#135 Le 12/02/2012, à 18:25
- The Uploader
Re : /* Topic des codeurs [7] */
class World
[...]
def check_collisions
@agents.each do |i|
@agents.each do |j|
if i.collide(j)
i.on_collide(j) if i.respond_to?('on_collide')
end
next
end
end
end
Voilà. Aux chiottes les événements et le pattern observer, j'avais pas envie.
Dernière modification par The Uploader (Le 12/02/2012, à 18:54)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#136 Le 12/02/2012, à 19:50
- Pylades
Re : /* Topic des codeurs [7] */
@Πυλάδης : faudrait voir le reste du code, on verra ça quand tu feras ta release.
Le problème, c’est que ça me fait segfaulter un peu plus tard…
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#137 Le 12/02/2012, à 23:44
- grim7reaper
Hors ligne
#138 Le 13/02/2012, à 01:48
- Pylades
Re : /* Topic des codeurs [7] */
Mouais… Je ne suis pas convaincu, quand même.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#139 Le 13/02/2012, à 09:32
- Lumin0u
Re : /* Topic des codeurs [7] */
vous avez une solution simple pour décoder les références de caractère html en python?
sur cette article: http://fredericiana.com/2010/10/08/deco … in-python/
la 3eme solution est parfaite mais pourquoi n'est elle pas documentée O_O ?
Hors ligne
#140 Le 13/02/2012, à 11:03
- tshirtman
Re : /* Topic des codeurs [7] */
D'après le code source, elle a été codé comme helper, et l'auteur n'a pas jugé utile de la fournir au publique… c'est dommage oui. Il est probablement possible d'obtenir qu'elle soit publique et documenté en demandant gentiment…
(plutot pour python3 par contre)
Dernière modification par tshirtman (Le 13/02/2012, à 11:04)
Hors ligne
#141 Le 13/02/2012, à 11:19
- tshirtman
Re : /* Topic des codeurs [7] */
popularité des langages dans debian (wheezy)
j'ai passé quelques secondes à me demander «c'est quoi "ansic"» ^^ puis ça a fait tilt.
sauce
http://blog.james.rcpt.to/?p=446
Dernière modification par tshirtman (Le 13/02/2012, à 11:19)
Hors ligne
#142 Le 13/02/2012, à 15:35
- Lumin0u
Re : /* Topic des codeurs [7] */
un petit code en python pour récupérer les quotes de pebkac:
#!/usr/bin/python3
import html.parser
import re
import urllib.request as urllib
QUOTE_OPENING = '<td class="pebkacContent">'
QUOTE_ENDING = '</td>'
unescapeHtmlEnt = html.parser.HTMLParser().unescape
def removePatternFromQuote(s, pattern):
m = re.search(pattern, s)
while m:
s = s[:m.start()] + s[m.end():]
m = re.search(pattern, s)
return s
def extractQuote(s):
for p in ['<span.*?/span>', '<a.*?/a>', '<.*?>']:
s = removePatternFromQuote(s, p)
s = s.replace('\\r\\n', '\n')
s = unescapeHtmlEnt(s)
s = s[:len(s)-13] # removes " dd/mm/yy par" in the end
return s
def getQuotes(url):
resp = urllib.urlopen(url)
htmlResp = str(resp.read())
m = re.findall(QUOTE_OPENING + '.*?' + QUOTE_ENDING, htmlResp)
quotes = []
if len(m):
for q in m:
quotes.append(extractQuote(q))
return quotes
def urlWithPage(url, page):
if page == 1:
return url
return url + '&page=' + str(page)
def randomQuotes():
return getQuotes('http://www.pebkac.fr/pebkac-aleatoires.html')
# page: 1 to 10, each page contains 10 quotes
def top100Quotes(page = 1):
return getQuotes(urlWithPage('http://www.pebkac.fr/index.php?p=top', page))
# page: 1 to 10, each page contains 10 quotes
def flop100Quotes(page = 1):
return getQuotes(urlWithPage('http://www.pebkac.fr/index.php?p=flop', page))
if __name__ == '__main__':
for q in randomQuotes():
print(q+'\n--\n')
bon c'est un peu crade et pas très portable
les 3 fonctions à utiliser son randomQuotes(), top100Quotes() et flop100Quotes(), elles retournent une liste de str.
sinon le caractère 'œ' n'est pas transformé, j'ai le code ''\x9c" à la place... qu'est ce qui manque comme transformations? (au pire je fais un str.replace('\x9c', 'œ'))
Hors ligne
#144 Le 14/02/2012, à 09:26
- The Uploader
Re : /* Topic des codeurs [7] */
Nope, and nope.
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#145 Le 14/02/2012, à 17:04
- tshirtman
Re : /* Topic des codeurs [7] */
tout le monde connais rvm dans le monde ruby non oO?
rbenv j'ai vu passer sur #ruby, mais je connais pas plus que ça…
Hors ligne
#146 Le 14/02/2012, à 20:00
- The Uploader
Re : /* Topic des codeurs [7] */
Bah de nom, quoi. De la à connaître..
Dernière modification par The Uploader (Le 14/02/2012, à 20:00)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#147 Le 14/02/2012, à 20:57
- grim7reaper
Re : /* Topic des codeurs [7] */
Tiens, je viens d’apprendre la sortie d’un nouveau bouquin sous licence CC et dispo en PDF : Open Advice.
Hors ligne
#148 Le 16/02/2012, à 19:42
- Elzen
Re : /* Topic des codeurs [7] */
C'est mal foutu
La méthode pack_start d'une gtk.Box ne déclenche pas le signal "add"…
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#149 Le 16/02/2012, à 21:03
- Lumin0u
Re : /* Topic des codeurs [7] */
qu'est ce que vous pensez de scala? vous pensez qu'il y a un avenir dans les pme et les tpe (pour la culture perso c'est bien mais si ça peut servir au boulot c'est mieux) ? sur ubuntu (je suis sur fedora) vous avez la version 2.9 ?
Hors ligne
#150 Le 16/02/2012, à 21:35
- Ichigo-Roku
Re : /* Topic des codeurs [7] */
2.9.0.1 sur oneiric.
Hors ligne