Envie de vous lancer dans le golfing ?
Partons d’une solution de code « classique » que l’on pourrait écrire pour résoudre une solution CodinGame :
# 367 chars
# Auto-generated code below aims at helping you parse
# the standard input according to the problem statement.
persons = gets.to_i
heights = []
ages = []
persons.times do
age, height = gets.split(" ").collect {|x| x.to_i }
heights << height
ages << age
end
# Write an action using puts
# To debug: STDERR.puts "Debug messages..."
puts ages.max, heights.min
- Enlever les commentaires
# 180 chars persons = gets.to_i heights = [] ages = [] persons.times do age, height = gets.split(" ").collect {|x| x.to_i } heights << height ages << age end puts ages.max, heights.min
- Enlever les espaces superflux
# 155 chars persons=gets.to_i heights=[] ages=[] persons.times do age,height=gets.split(" ").collect{|x|x.to_i} heights<<height ages<<age end puts ages.max,heights.min
- utiliser des variables de 1 caractère
# 102 chars p=gets.to_i h=[] a=[] p.times do x,y=gets.split(" ").collect{|x|x.to_i} h<<y a<<x end puts a.max,h.min
- Pas besoin de donner les paramètres par défaut des fonctions (ici pour
split
)# 97 chars p=gets.to_i h=[] a=[] p.times do x,y=gets.split.collect{|x|x.to_i} h<<y a<<x end puts a.max,h.min
- Quand plusieurs alias existent pour la même fonction, utiliser le plus court (map vs collect vs each)
# 93 chars p=gets.to_i h=[] a=[] p.times do x,y=gets.split.map{|x|x.to_i} h<<y a<<x end puts a.max,h.min
- Utiliser
_1
comme paramètre dans les blocs (_1
reçoit le premier paramètre du block,_2
reçoit le deuxième dans le cas each_with_index par exemple, etc)# 91 chars p=gets.to_i h=[] a=[] p.times do x,y=gets.split.map{_1.to_i} h<<y a<<x end puts a.max,h.min
- Remplacer les blocks simples par le symbole de la fonction à appliquer
# 90 chars p=gets.to_i h=[] a=[] p.times do x,y=gets.split.map(&:to_i) h<<y a<<x end puts a.max,h.min
- Remplacer les
do ... end
par des accolades# 86 chars p=gets.to_i h=[] a=[] p.times{ x,y=gets.split.map(&:to_i) h<<y a<<x } puts a.max,h.min
- Éviter les retours à la ligne superflux
# 84 chars p=gets.to_i h=[] a=[] p.times{x,y=gets.split.map(&:to_i) h<<y a<<x} puts a.max,h.min
- Enlever les parenthèses en fin de chaînage de fonctions (ici sur le
map
)# 83 chars p=gets.to_i h=[] a=[] p.times{x,y=gets.split.map &:to_i h<<y a<<x} puts a.max,h.min
- Ne pas assigner les variables que nous utilisons qu’une seule fois
# 79 chars h=[] a=[] gets.to_i.times{x,y=gets.split.map &:to_i h<<y a<<x} puts a.max,h.min