Je ne sais pas si tu connais Codingame, ce site génial
Et bien j'en suis rendu dans la section Optimisation, à résoudre un problème en utilisant le moins de caractères possibles
Et l'algorithme le plus court qui a été codé en C pour résoudre le problème fait 65 caractères alors que le mien fait 205... Et pourtant j'ai bien élagué
Donc j'essaye de nouvelles approches, voir ce qui est le plus court
P.S : Ta solution est plus longue puisque pour utiliser pow il faut inclure math.h... Ce qui prend 17 caractères de plus !
- Edité par eldoir 24 juin 2015 à 15:31:12
Heureux l'étudiant qui, comme la paisible rivière, suit toujours son cours sans jamais quitter son lit.
Je pense qu'il faut que tu t'inscrives sur Codingame pour avoir accès à l'exercice mais tu peux toujours tenter ce lien (c'est l'url que je vois quand je suis sur l'exo, personnellement)
Et non, je n'ai pas inclus stdlib donc ta solution me prendrait plus de place
Heureux l'étudiant qui, comme la paisible rivière, suit toujours son cours sans jamais quitter son lit.
En considérant seulement les 4 cas donnés (au lieu d'une réponse généralisée à tout les cas). Du coup, pas besoin de lire toutes les données en entrée puisque les positions ne changent pas.
En utilisant les limites du c:
x,y; // Variables déclarés comme int implicitement (génère un warning mais compile)
main() // type de retour comme int (à nouveau implicite)
{
}
La vache la violence des raccourcis Thanatos, je connaissais pas le coup du main et des variables int, j'y aurais pas pensé
Et en utilisant ces astuces je passe chez moi à 180... Je me demande comment t'as fait 117 Oo
Je me disais bien qu'il fallait faire juste sur ces cas-là plutôt que sur du général, mais j'avais l'impression que je ne gagnerais pas forcément en caractères... Il faut croire que si, du coup Donc je vais essayer de faire ça
Heureux l'étudiant qui, comme la paisible rivière, suit toujours son cours sans jamais quitter son lit.
J'utilise un define qui prend finalement un tiers de mon code (43 caractères). Du coup, je pense que la meilleure solution n'est pas là.
Ensuite, la partie de lecture est le 2ème point à optimiser. Je lis actuellement qu'un seul caractère sur le flux d'entrée (même pas une valeur complète ). J'utilise ensuite cette valeur pour différentes parties du programme...
En jouant sur les bits, tu peux raccourcir certains tests.
Je me demande si jouer avec des fonctions récursives serait une solution
Franchement je vois pas trop comment raccourcir mon code en faisant au cas par cas, sans lire la position de départ du joueur...
J'imagine que ça doit être des maths du genre que des additions, de code ascii peut-être ?
Je me sers déjà un peu de ça, par exemple je fais :
*c = 78+5*(Y>0)
En gros j'ai un tableau de 2 caractères, et là mon premier caractère sera soit un N soit un S, mais j'imagine qu'on peut faire beauuucoup plus court Je vais chercher, je vais chercher
Le truc qui est un peu dommage comme le soulignaient certains de mes collègues, c'est que si la solution doit être au cas par cas pour être courte, ça casse un peu la puissance de l'algo quoi... :/
Donc tu confirmes, on ne peut pas faire plus court qu'un scanf ? Je cherchais s'il n'y avait pas moyen de trouver une méthode de saisie plus courte que ça et qui serait acceptée par le compilo mais j'ai rien trouvé de probant !
P.S : Quand on pense que ton define c'est quasiment la longueur de l'algo le plus court, ça fait mal
- Edité par eldoir 26 juin 2015 à 15:35:23
Heureux l'étudiant qui, comme la paisible rivière, suit toujours son cours sans jamais quitter son lit.
Effectivement, j'ai aussi remplacé while(1) par for(;;) quand je m'étais aperçu que ça faisait la même chose
Le coup de mettre des paramètres au main c'est... c'est... en fait il faut tester tous les trucs improbables ou... ?
Pour le puts, il foire, il m'affiche par exemple "SE???" alors que ma chaîne de deux caractères est pourtant construite correctement, le deuxième caractère vaut soit E, soit W, soit \0... Bizarre ! Dommage parce que par rapport au printf c'est vrai qu'on gagne encore pas mal de place
Heureux l'étudiant qui, comme la paisible rivière, suit toujours son cours sans jamais quitter son lit.
Oui, ça je sais J'en suis à 91... mais je suis peut-être passé à côté de quelque chose...
Moi aussi je passe à côté de qqch, car je n'arriverai pas à 64 caractères en me contentant de micro-optimiser mon code.
Je pense qu'il faut bien choisir ses fonctions: j'ai fait des essais avec scanf et getchar. Mais il y en a peut-être d'autres qui sont intéressantes (read, gets...). Idem pour l'écriture, j'ai essayé avec putchar et puts. Mais peut-être printf peut être intéressant.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C