Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/03/2010, à 21:24

nesthib

[JEU] challenge bash #6

1265482796.png

[informations sur le jeu]

<<    challenge bash #6    >>

Espaçeur de paragraphes
Imaginons un texte, celui-ci est composé de différents paragraphes. La plupart du temps un paragraphe sera coupé en deux à la fin d'une page. Le but de ce challenge est de réaliser un script qui formate le texte de façon à ce qu'un paragraphe ne soit jamais coupé entre deux pages.

Le script devra prendre en compte une variable définissant le nombre de caractères maximum par ligne et le nombre maximum de lignes par page.

bon courage smile




GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#2 Le 10/03/2010, à 21:24

nesthib

Re : [JEU] challenge bash #6

solution de nesthib en full awk big_smile :

#!/usr/bin/awk -f

BEGIN {
MAXCHAR = 100
MAXLINES = 74
# définition des séparateurs, RS permet de séparer les paragraphes et FS les lignes
FS="\n" ; RS="\n\n+"
available_lines = MAXLINES
}
# awk travaille sur chaque "record", ici chaque paragraphe
{
	suppl_line = 0
	delete lines_array 
	# cette boucle parcourt les lignes d'un paragraphe donné
	for ( line=1 ; line<=NF ; line++) {
		line_length = length($line)
		if ( line_length <= MAXCHAR ) {	# si la ligne ne dépasse pas le maximum, on la sauvegarde dans un array
			lines_array[line] = $line
		} else { # sinon on parcourt les mots
			split($line, words_array, " ")
			line_substr = ""
			word_nb = 1
			for ( count in words_array) { # pour chaque mot…
				word = words_array[word_nb++]
				if ( length(line_substr word) < MAXCHAR ) { # …s'il ne dépasse pas le max on l'ajoute
					line_substr = line_substr word " "
				} else { # sinon on ajoute un saut de ligne et on recommence
					lines_array[line] = lines_array[line] line_substr "\n"
					line_substr = word " "
					suppl_line++
				}
			}
			lines_array[line] = lines_array[line] line_substr 
		}
	}
	# on passe maintenant à l'affichage du paragraphe
	if ( NF + suppl_line <= available_lines) { # s'il reste suffisamment de place…
		for (line=1 ; line<=NF ; line++) { # on affiche le paragraphe
			print lines_array[line]
		}
		if ( NF + suppl_line < available_lines) { # si le paragraphe n'est pas exactement de la
							  # taille disponible (en bas de page), on
							  # saute une ligne avant le nouveau paragraphe
			printf "\n"
		}
		# on met à jour le nombre de lignes restant
		available_lines -= ( NF + suppl_line +1 )
	} else { # s'il ne reste pas assez de place…
		if (FNR > 1) { # …et s'il ne s'agit pas du premier paragraphe…
			for ( jump=1 ; jump <= ( available_lines ) ; jump++ ) { # on saute autant de lignes
										# qu'il reste de la place
				printf "\n"
			}
		}
		for (line=1 ; line<=NF ; line++) { # puis on affiche le paragraphe sur la nouvelle page
			print lines_array[line]
		}
		printf "\n" # on saute une ligne après le paragraphe
		if ( NF + suppl_line > MAXLINES) { # si le paragraphe est plus grand que le maximum
						   # on calcule l'excédent de lignes
			available_lines = MAXLINES - ( (NF + suppl_line) % MAXLINES + 1 )
		} else { # sinon on retranche juste les lignes utilisées
			available_lines = MAXLINES - (NF + suppl_line + 1)
		}
	}	
}
END { }

et solution de totor (en full awk aussi le vil copieur ^^) :

#!/usr/bin/awk

BEGIN {
idxLigne=0
endLigne=rows
RS="\n([[:blank:]]*\n)+"
FS="\n"
}

{
       # sauvegarde de la position actuelle
       oldIdxLigne=idxLigne+1
       for (nLigne=1; nLigne<=NF; nLigne++)
       {
               uneLigne=$nLigne
               while (uneLigne != "")
               {
                       # suppression des blancs en fin de ligne
                       gsub(/[[:blank:]]+$/,"",uneLigne)
                       idxLigne++
                       restant=""
                       # tant que la longueur de la ligne > nombre de colonne
                       while (length(uneLigne) > cols)
                       {
                               # recherche de la position du dernier mot
                               debut=match(uneLigne, /[[:space:]][^[:space:]]+$/)

                               if (debut == 0) debut=cols+1 # le dernier mot est plus long que le nombre de colonne autorisé

                               # on récupère le dernier mot de la ligne ou on tronque si le mot est plus long que le nombre de colonne
                               restant=substr(uneLigne, debut) "" restant
                               uneLigne=substr(uneLigne, 1, debut-1)
                       }
                       lesLignes[idxLigne]=uneLigne

                       # suppression du blanc de début de ligne issue de la recherche du dernier mot de la ligne
                       if (restant ~ /^[[:space:]]/) restant=substr(restant,2)

                       uneLigne=restant
               }
       }

       add=0 # on a pas à afficher de ligne vièrge pour completer la page

       if (idxLigne > endLigne && endLigne-rows+1 != oldIdxLigne) # si le dernier indice à afficher dépasse l'indice de fin de page et que l'indice de début d'affichage (oldIdxLigne) n'est pas l'indice de début de page
       {
               # alors on complète la page
               add=endLigne-oldIdxLigne+1 # nombre de ligne vierge à afficher
               for(idx=oldIdxLigne; idx<=endLigne; idx++)
                       print ""
       }

       # on affiche le paragraphe
       for(idx=oldIdxLigne; idx<=idxLigne; idx++)
               print lesLignes[idx]

       # on repositionne l'indice d'affichage par rapport au nombre de ligne vierge ajoutées
       idxLigne+=add

       # si on est pas à la 1ere ligne de la page, on ajoute un saut de ligne pour dissocier les paragraphes
       if (idxLigne != endLigne-rows+1) { print ""; idxLigne++ }

       # re-calcul de l'indice de fin de page
       while (endLigne < idxLigne)
               endLigne+=rows
}

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 11/03/2010, à 09:29

Alambique

Re : [JEU] challenge bash #6

Loin de moi, le fait d'être réactionnaire, mais ce serait pas mieux de faire un challenge bash avec des scripts utiles?

EDIT:J'ai une autre proposition: un script bash qui télécharge chaque jour de la semaine une émission de radio ou de télévision (dont l'origine du flux est modifiable à souhait), qui nomme le fichier et qui le range dans le répertoire vidéo.
Enfin, c'est une idée parmis tant d'autres...

Dernière modification par Alambique (Le 11/03/2010, à 09:39)


Mal-pensant, mais résolument linuxien.

Hors ligne

#4 Le 11/03/2010, à 11:33

nesthib

Re : [JEU] challenge bash #6

@Alambique : à chaque session il y a un lien pour envoyer tes propositions smile
le but de ces script est d'être utile (en l'occurrence celui là a été utile pour moi) dans le sens où cela montre des exemple pour faire toi-même tes propres scripts. Celui-ci a pour vocation de faire du traitement de flux de texte. Travailler avec les fichiers textes est un problème récurrent dans le monde Linux wink
Ta proposition est intéressante mais a déjà été réalisée de nombreuse fois sur ce forum, les concepts de bases (récupération d'url, téléchargement, tri de fichiers ont été traités en partie au cours des challenges).
Si tu as d'autres propositions n'hésite pas.

@tous : ceux qui se sentent l'âme de scripteurs invétérés peuvent nous rejoindre pour l'animation de ce challenge smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 11/03/2010, à 19:52

gilbert

Re : [JEU] challenge bash #6

hello,

juste une question. Ce jeu s'appelle challenge bash. Mais vu les exercices proposés, est-ce que le nom est bien approprié ?

En effet, ce n'est pas bash qui permet de réaliser ce genre de défis (géolocalisation IP, etc) mais bel et bien des commandes pour nos Unices adorés :-)

Je pense que ce genre de défi reflète plus la maitrise des différentes commandes que l'on peut trouver sous Linux que la maitrise du bash en lui même. Car on peut très bien réaliser la même chose en zsh, tcsh ou que ne sais-je encore, il n'y aura jamais une énorme différence les commandes ne dépendent pas du shell utilisé.

Un challenge bash ne devrait-il pas se focaliser d'abord sur le bash ?


Simplement moi-même..

Hors ligne

#6 Le 11/03/2010, à 20:09

nesthib

Re : [JEU] challenge bash #6

je suis d'accord avec toi gilbert, mais si tu regardes les solutions proposées, nous essayons d'utiliser au maximum les possibilités de bash.
Après nous acceptons également (avec parcimonie) les solutions dans d'autres langages de scripting. Cela a été une de nos interrogations au moment de lancer le challenge. Personnellement je serais pour l'intégration d'autres langages de scripting (perl, ruby, python) après il faut pouvoir les juger et ne pas trop s'éparpiller.

En gros propose la solution que tu veux, le but principal reste d'apprendre et de s'amuser. smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 12/03/2010, à 19:00

gilbert

Re : [JEU] challenge bash #6

hello.

ok j'ai fait un petit truc alors, mais sans prétentions. Où est-ce que l'on poste le résultat ?


Simplement moi-même..

Hors ligne

#8 Le 12/03/2010, à 19:21

nesthib

Re : [JEU] challenge bash #6

ici tout simplement wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#9 Le 12/03/2010, à 19:24

gilbert

Re : [JEU] challenge bash #6

ok,

alors voici.. Bon ça ferait peur à n'importe quel informaticien (je n'en suis pas un) le traitement est brutal, ça coupe les mots sans prêter garde. Le procédé très (trop) itératif pourrait être simplifié en faisant plus d'action dans un seule même boucle. Mais par soucis de clarté, j'ai préférer décomposer étape par étape. J'ai essayé d'utiliser bash le plus possible.

usage : script nombreDeCharsParLigne nombreDeLigneParPage fichierATraiter

et le script :

#!/usr/bin/env bash

# Challenge bash 6 - forum ubuntu-fr
# Author :	gilbert
# Date :	12.03.2010
# Version :	0.1
# ref num :	3735928559

# goal and rules :
# Le but de ce challenge est de réaliser un script qui formate le texte de 
# façon à ce  qu'un paragraphe ne soit jamais coupé entre deux pages.
#
# Le script devra prendre en compte une variable définissant le nombre 
# de caractères maximum par ligne et le nombre maximum de lignes par page.

# ------------- INITIALISATION --------------

# Get the 3 input variables
if [ $# -ne 3 ]; then
  echo -e "\033[01;31mError :\033[0m ${0##*/} must be invoked by giving the number of characters by line," >&2
  echo "the number of line by page and the name of the file to process" >&2
  echo >&2
  echo -e "\033[01;31mUSAGE :\033[0m $0 numOfCharByLine numOfLineByPage fileToProcess" >&2
  exit 1
fi

# let guarantee to have integers
let numberOfCharsByLine=$1
let numberOfLinesByPage=$2
fileToProcess=$3


if [ ! -f ${fileToProcess} ]; then
  echo -e "\033[01;31mError :\033[0m ${fileToProcess} must be a regular file" >&2
  exit 1
fi

tmpFile1="/tmp/temporaryFileChallengeBash6UbuntuFr-$(date +%d-%m-%y-%N)"
touch ${tmpFile1}

finalFile="${fileToProcess}-$(date +%d-%m-%y)-ready_to_be_printed"
touch ${finalFile}

# ---------- END OF INITIALISATION ----------

# -------------- PROCESSING -----------------

echo -e "\033[01;31mProcess starting...\033[0m Please wait. It might be slow on some machines."

linedArray[0]=""
let counter=0

while read currentLine; do
  # insert a '\n' on the line $numberOfCharsByLine
  # need to add int(${#currentLine}/$numberOfCharsByLine) '\n'
  
  sizeOfTheCurrentLine=${#currentLine}
  numberOfIterations=$((sizeOfTheCurrentLine / numberOfCharsByLine))

  if [ $numberOfIterations -gt 0 ]; then
    for ((i=0; i<=numberOfIterations; i++)); do
      linedArray[$counter]="${currentLine:$((i * numberOfCharsByLine)):${numberOfCharsByLine}}"
      let counter++
    done
  else
    linedArray[$counter]=${currentLine}
    let counter++
  fi
done < ${fileToProcess}

# here linedArray is a copy of the original file, but with the maximal number of chars by line respected
# Now repair the paragraphs, and return an error if the number of lines from a paragraph is grater than $numberOfLinesByPage
# Paragraphs are separated by empty lines (lines with only '\n', spaces and/or tabs)
let i=0
let j=0
let paragraph[0]=0

nol=${#linedArray[@]}
for((k=0; k<nol; k++)); do
  # check if the current line is blank
  if echo ${linedArray[$k]} | grep --regexp='^[[:blank:]]*$' > /dev/null; then
    let j=0
    let i++
  else
    paragraph[$i]=$j

    if [ $((paragraph[$i]+1)) -gt $numberOfLinesByPage ]; then
      echo -e "\033[01;31mError :\033[0m in this challenge a paragraph must NEVER be split. Aborting..." >&2
      rm ${finalFile}
      exit 1
    fi

    let j++
  fi
done

numberOfParagraphs=${#paragraph[@]}

# Now numbers are known. Repartition of paragraphs is done on the sheet
# Counts the maximum number of paragraphs that it's possible to put on 1 page. Rest of the page is filled with '\n'

let i=0
let pageNum=0
let numberOfParagraphsForThisPage=0
let numberOfLinesForThisPage=0
let page[0]=0

# second +1 if for the '\n'
while [ $i -lt $numberOfParagraphs ]; do
  let numberOfLinesForThisPage=$(( numberOfLinesForThisPage + paragraph[$i] + 2 ))
  if [ $numberOfLinesForThisPage -gt $numberOfLinesByPage ]; then
    # check if the the last newline is the problem
    if [ $((numberOfLinesForThisPage-1)) -gt $numberOfLinesByPage ]; then
      # No, newline isn't the problem. Also the latest paragraph must be removed
      let numberOfLinesForThisPage=$(( numberOfLinesForThisPage - (paragraph[$i] + 2) ))
      let i--
    else
      # Yes that was newline. So we have a full page
      let numberOfLinesForThisPage--
    fi
    # here the page is full
    let page[$pageNum]=numberOfLinesForThisPage
    let numberOfLinesForThisPage=0
    let pageNum++
  fi
  let i++
done
#otherwise the last loop is forgotten (do while loop will be better)
let page[$pageNum]=numberOfLinesForThisPage

# creation of the final document
let numberOfPages=${#page[@]}

for((i=0; i<numberOfPages; i++)); do
  for((j=0; j<numberOfLinesByPage; j++)); do
    # take the n first lines from tmpFile1 then add blank line to complete the page
    if [ $j -lt ${page[$i]} ]; then
      echo "${linedArray[$((i*numberOfLinesByPage + j))]}" >> ${tmpFile1}
    else
      echo >> ${tmpFile1}
    fi
  done
done

cp ${tmpFile1} ${finalFile}
echo -e "\033[01;31mProcessing done !\033[0m"
echo -e "Final file is : \033[01;32m${finalFile}\033[0m. You can print it with lpr(1) for example."

rm ${tmpFile1}

# ---------- END OF PROCESSING --------------

Simplement moi-même..

Hors ligne

#10 Le 13/03/2010, à 14:36

AnsuzPeorth

Re : [JEU] challenge bash #6

Bjr,
J'ai voulu le faire en python, mais j'y arrive pas (foutu encodage de caractères...)

Donc la version bash :
J'ai fait en sorte qu'il n'y ai pas de caractère unique en fin de ligne (un mot coupé qui ne reste qu'un caractère), je n'ai pas mis de - pour les mots coupés (pas le gout smile). C'est du quasi full-bash (à part wc qui aurait pu être remplacé par une boucle pour du full-bash)!
Je suis passé par des fichiers temp pour chaque paragraphes, faire ça avec des variables aurait compliqué le code inutilement (enfin, avec la façon dont je voyais les choses)

Ca motivera peut être d'autres personnes à proposer leur solution !

script.sh nb_caratères nb_lignes fichier_a_traiter
 #!/bin/bash
FICHIER=$3
NB_CAR=$1
NB_LIGNE=$2
var=
par=1
while read ligne
do
[[ "$ligne" =~ ^$ ]] && par=$((par+1))
  while [ "$ligne" != "" ]
    do
 	if [ "${ligne::1}" = " " ]; then
 	  flag=1
 	  var=${ligne:1:NB_CAR}	  
 	else
 	  flag=0
 	  var=${ligne::NB_CAR}
 	fi 	
 	[ "${var:((NB_CAR-2)):1}" = " " ] && var=${var::((NB_CAR-1))}
 	echo "${var}" >> /tmp/paragraphe$par
	[ "$flag" = 0 ] && ligne=${ligne/$var/} || ligne=${ligne/ $var/}
    done
done < "$FICHIER"

nb_lignes=0
n=0
nb=0
for fichier in /tmp/paragraphe*
  do
     nb_li=$(wc -l $fichier)
     nb_lignes=$((${nb_li% *}+old_nb))
     old_nb=$nb_lignes
     if [ $nb_lignes -lt $NB_LIGNE ]; then
        para=$(< $fichier)
           if [ "$nb" = 0 ]; then
              page="$para"
              nb=$((nb+1))
           else
              page="$page\n\n$para" 
              old_nb=$((old_nb+1)) 
           fi
     else
        n=$((n+1))
        echo -e "PAGE $n\n$page"
        page=$(< $fichier)
        old_nb=${nb_li% *}
     fi
  done

rm /tmp/paragraphe*

exit

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#11 Le 14/03/2010, à 15:29

gilbert

Re : [JEU] challenge bash #6

salut AnsuzPeorth

essaie ton script avec un fichier texte, tel que celui-ci :

C'est Lou qu'on la nommait

Il est des loups de toute sorte
Je connais le plus inhumain
Mon cœur que le diable l'emporte
Et qu'il le dépose à sa porte
N'est plus qu'un jouet dans sa main

Les loups jadis étaient fidèles
Comme sont les petits toutous
Et les soldats amants des belles
Galamment en souvenir d'elles
Ainsi que les loups étaient doux

Mais aujourd'hui les temps sont pires
Les loups sont tigres devenus
Et les Soldats et les Empires
Les Césars devenus Vampires
Sont aussi cruels que Vénus

J'en ai pris mon parti Rouveyre
Et monté sur mon grand cheval
Je vais bientôt partir en guerre
Sans pitié chaste et l'œil sévère
Comme ces guerriers qu'Épinal

Vendait Images populaires
Que Georgin gravait dans le bois
Où sont-ils ces beaux militaires
Soldats passés Où sont les guerres
Où sont les guerres d'autrefois
./scriptAnsuzPeorth 30 30 poemeLou

et voici ce que ton script affiche :

PAGE 1
C'est Lou qu'on la nommait

Il est des loups de toute sort
e
Je connais le plus inhumain
Mon cœur que le diable l'empor
te
Et qu'il le dépose à sa porte
N'est plus qu'un jouet dans sa
main

Les loups jadis étaient fidèle
s
Comme sont les petits toutous
Et les soldats amants des bell
es
Galamment en souvenir d'elles
Ainsi que les loups étaient do
ux

Mais aujourd'hui les temps son
t pires
Les loups sont tigres devenus
Et les Soldats et les Empires
Les Césars devenus Vampires
Sont aussi cruels que Vénus

le texte n'est pas complet, il manque la fin ... Sinon que se passe-t-il lorsque l'on passe des valeurs shadock ?


./scriptAnsuzPeorth 30 1 poemeLou

et voici ce que ton script affiche :

PAGE 1

PAGE 2
C'est Lou qu'on la nommait
PAGE 3
Il est des loups de toute sort
e
Je connais le plus inhumain
Mon cœur que le diable l'empor
te
Et qu'il le dépose à sa porte
N'est plus qu'un jouet dans sa
main
PAGE 4
Les loups jadis étaient fidèle
s
Comme sont les petits toutous
Et les soldats amants des bell
es
Galamment en souvenir d'elles
Ainsi que les loups étaient do
ux
PAGE 5
Mais aujourd'hui les temps son
t pires
Les loups sont tigres devenus
Et les Soldats et les Empires
Les Césars devenus Vampires
Sont aussi cruels que Vénus
PAGE 6
J'en ai pris mon parti Rouveyr
e
Et monté sur mon grand cheval
Je vais bientôt partir en guer
re
Sans pitié chaste et l'œil sév
ère
Comme ces guerriers qu'Épinal

Tu as des paragraphes coupés, alors que ça ne devrait pas se produire et certaines de tes pages font plus que 1 ligne...

Sinon que se passe-t-il quand on passe des nombres négatifs ? (là aussi mon code bug)

./scriptAnsuzPeorth -30 30 poemeLou

et voici ce que ton script affiche :

./scriptAnsuzPeorth: line 17: NB_CAR : expression de sous-chaîne négative
wc: /tmp/paragraphe*: Aucun fichier ou dossier de ce type
./scriptAnsuzPeorth: line 28: /tmp/paragraphe*: Aucun fichier ou dossier de ce type
rm: ne peut enlever `/tmp/paragraphe*': Aucun fichier ou dossier de ce type

Bon tu peux trouver mille situations où mon code ne se comporte pas correctement non plus ;-)

Mais je pense que pour les suivants, il faudrait faire attention à ce genre de situations

Dernière modification par gilbert (Le 14/03/2010, à 15:31)


Simplement moi-même..

Hors ligne

#12 Le 14/03/2010, à 16:54

AnsuzPeorth

Re : [JEU] challenge bash #6

Bjr,
Faut dire que j'ai fait mes essais sur un texte, pas un poème où les lignes comportent un nombre limité de caractères.

Et j'ai bien précisé que mon but premier était de le faire en python, le script bash n'était que pour dégrossir, comme je ne suis pas arrivé avec python, j'ai juste posé le modèle bash (j'ai pas fignolé non plus, j'ai pas essayé toutes les configurations possible et inimaginable de texte, c'est un premier jet.) Cela avait pour but de motiver d'autres personnes, en sachant qu'il est facilement possible de faire mieux. Il faut faire vivre cette initiative de challenge, c'est une bonne idée, mais qui n'attire pas foule (ou alors pour critiquer !)

Je viens même de me rendre compte que le dernier paragraphe de mon texte n'était pas pris en compte lors du traitement !(et j'ai pas envie de chercher bien que ca doit être un détail, j'ai la tête ailleurs, qui a dit python smile)


J'ai fait des essais avec ton script par curiosité sur un texte 'normal'(enfin, normal, c'est vite dit, c'est un simple copié coller du net) , le résultat n'est pas plus brillant wink. (manque des lignes, des blancs en début de ligne, des caractères tout seul en fin de ligne...)

Le texte:

Beaucoup d'utilisateurs d'ordinateurs utilisent une version modifiée du Système GNU tous les jours sans même le réaliser.
 Après une tournure particulière des événements, la version de GNU qui est largement utilisée est souvent appelée « Linux » et beaucoup de ses utilisateurs ne savent pas qu'il s'agit basiquement du système GNU, dévelopé par le Projet GNU.

Il existe vraiment un Linux, et ces personnes l'utilisent, mais c'est juste une partie du système qu'ils utilisent. Linux est le noyau : le programme du système qui alloue les ressources de la machine aux autres programmes que vous exécutez. Le noyau est une partie essentielle du système d'exploitation, mais il est inutile seul ; il ne peut fonctionner que dans le contexte d'un système d'exploitation complet. Linux est normalement utilisé en combinaison avec le système d'exploitation GNU : le système complet est basiquement GNU avec Linux ajouté, ou GNU/Linux. toutes les distributions appelées « Linux » sont en réalité des distributions GNU/Linux.

Beaucoup d'utilisateurs ne sont pas au courant de la distinction entre le noyau, Linux, et le système en entier qu'ils appellent aussi « Linux ».
 L'usage ambigü du nom ne facilite pas la compréhension. Ces utilisateurs pensent que Linus Torvalds a dévelopé tout le système d'exploitation en 1991, avec un peu d'aide.

Les programmeurs savent en général que Linux est un noyau. Mais puisqu'ils ont entendu le système entier être appelé « Linux » aussi, souvent ils conçoivent une histoire tournant autour de ce nom. Par exemple, plusieurs d'entre eux croient que dès que Linus Torvalds a achevé l'écriture du noyau, ses amis ont recherché d'autres logiciels libres et que, pour aucune raison en particulier, la plupart de ce qui était nécessaire à un système semblable à Unix était déja disponible.

Ce qu'ils ont trouvé n'était pas un accident : c'était le système GNU. Les logiciels libres disponibles complétèrent le système parce que le Projet GNU travaillait à en concevoir un depuis 1984. Le manifeste GNU a mis en avant le dessein de développer un système semblable à Unix et appelé GNU. L'Annonce Initiale du Projet GNU souligne aussi quelques-uns des plans originaux pour le système GNU. Au moment où Linux était lancé, le système était presque fini.

La plupart des projets de logiciel libre ont pour but de développer un programme particulier pour accomplir une tâche particulière. Par exemple, Linus Torvalds s'est attelé à écrire un noyau semblable à Unix (Linux); Donald Knuth s'est attelé à écrire un programme de formatage de texte (TeX); Bob Scheifler s'est attelé à développer un système de fenêtrage (X Window System). Il est naturel de mesurer la contribution de ce type de projet par les programmes spécifiques qui proviennent dudit projet.

Si nous essayions de mesurer la contribution du Projet GNU de cette manière, à quelle conclusion arriverions-nous ? Un producteur de CD-ROM a constaté dans sa « Distribution de Linux » que les Logiciels GNU y représentaient la plus grande entité, 28% du code source total, et que cela incluait quelques-uns des composants majeurs essentiels sans lesquels il n'y aurait pas de système. Linux lui-même n'y prenait une part que de 3%. (Les proportions en 2008 sont similaires : dans le répertoire « principal » de gNewSense, Linux a une part de 1,5% et les paquetages GNU de 15%). Alors s'il fallait trouver un nom pour le systèmeen se basant sur qui avait écrit les programmes qui le composent, le seul choix le plus approprié serait « GNU ».

Mais nous ne pensons pas que c'est la meilleure manière de considérer la question. Le Projet GNU n'était pas, et n'est pas, un projet pour développer des paquetages logiciels spécifiques. Ce n'était pas un projet pour développer un compilateur C, bien que nous l'ayions fait. Ce n'était pas non plus un projet pour développer un éditeur de texte, bien que nous en ayions développé un. L'objectif final du Projet GNU est de développer un système semblable à Unix, complet et libre : GNU.

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#13 Le 14/03/2010, à 17:05

gilbert

Re : [JEU] challenge bash #6

salut,

haha encore un mordu du serpent cool

ouais je sais, mais même avec le poème mon script fait plein de fautes... Bon comme toi, je suis pas très bon en bash... et mon style de code doit révéler assez aisément que je fais du C :-)

Bon tu as l'avantage d'avoir un code beaucoup plus lisible que le mien.

Sinon je pense que pour que ce challenge attire plus de monde, il faudrait des défis intéressants, mais simples. Dans le sens où il n'y a pas à se gratter 15 ans pour trouver l'algorithme ultime! Et ça à mon avis c'est pas facile...

Où autrement, on peut faire un défi où chacun utilise son langage préféré, mais ça devient plus complexe à évaluer...

Bref, dans tous les cas je pense qu'il faut supporter ce genre d'initiative, bien qu'elle soit encore a améliorer.


Simplement moi-même..

Hors ligne

#14 Le 14/03/2010, à 19:46

nesthib

Re : [JEU] challenge bash #6

@AnsuzPeorth : merci de participer au challenge smile je sais qu'un "concurrent" prépare une version en python alors libre à toi…
(pour l'encodage n'oublie pas de préciser le #-*- coding: UTF-8 -*- au début du script et d'utiliser les chaînes unicode)

@gilbert : libre à toi de faire des propositions wink après ici c'est pas trop sorcier non plus question algo tongue


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#15 Le 14/03/2010, à 20:46

toto2006

Re : [JEU] challenge bash #6

bsr,

bon voila mon code smile je préviens j'ai pas fait de vérifs pour éviter les coupures sauvages dans les mots et ya surement pleins de bugs smile


#!/bin/bash

#######	ESPACEUR DE PARAGRAPHE	#######

# Recuperation & Test des arguments 

 [ "${#@}" -ne 3 ] && {
	echo "usage:$0 MAX_X MAX_Y FICHIER "
	exit 1
 }

TestVar(){
	
	# Test si Var est entier et >= 0

	var=$1
    
	[ $var -ge 0 ] 2> /dev/null
    
	VAL=$?
    
	[ $VAL -ne 0 -a $VAL -ne 1 ] && {
		echo "Erreur $1 n'est pas un entier "
		exit 1
	} ||  {
    
		[ $VAL -eq 1 ]  && {	 
			echo "Erreur $1 < 0 "
			exit 1
		}
	}
}

X=$1 && TestVar $1
Y=$2 && TestVar $2

FICIN=$3

[ ! -f $FICIN ] && {
	echo "Erreur $FICIN n'est pas un fichier valide! " 
	exit 1
}

FICTMP="/tmp/tmp.fic"

# Recuperation des paragraphes

indpar=0
para=0
pg[0]=""

while read  
do 

	[ "${REPLY}" != ""  ] && {	
		para=1	
		pg[indpar]="${pg[$indpar]}"$'\n'"${REPLY}"
		
	} || {
	
		[ $para -eq 1 ] && {		
			((indpar++))
			pg[indpar]=""
		}
		para=0	
	}
	
	FIN=${REPLY}

done < "$FICIN"

[ "$FIN" != "" ] && ((indpar++))

# Mise en forme selon max X et Recuperation de la taille  des paragraphes 

> $FICTMP

YChange=0

for((i=0;i<indpar;i++)){
	
	fin=${#pg[$i]}	
	
	tp[i]=0
	
	for((j=1,posx=0;j<fin;j++)){
	
		((posx++))
			
		car="${pg[$i]:j:1}"
		echo -n "$car" >> $FICTMP
				
		[  "$car" == $'\n' ] && {
			posx=0	
			((tp[i]++))		
		}
				
		[ $posx -eq $X ] && {
			posx=0
			echo -e >> $FICTMP		
			((tp[i]++))
		}
			
	}	
	
	((tp[i]++))	
	
	[ ${tp[i]} -gt $Y ] && {
		Y=${tp[i]}
		YChange=1
	}
	
	echo -e "\n" >> $FICTMP	
}

[ $YChange -eq 1 ] && {
	echo "Taille miminum de la page pour ne pas couper les paragraphes Y = $Y"
	exit 1
}

# Mise en page selon max Y

for((i=0,pos=1,dec=1,count=0;i<indpar;i++)){

		deb=$pos
		fin=$(( $pos + ${tp[$i]} ))		
		pos=$(( $fin + 1 ))
		
		count2=$(( $count + $fin - $deb + 1 ))
		dif=$((   $Y * $dec  + $dec ))
				
		[ $count2 -ge $dif ] && {
		
			padstop=$(( $dif - $count  - 1 ))
			for((j=0;j<padstop;j++)){
				echo -e
			}
			count=$(( count2 + padstop + 1 ))
			dec=$(( dec + 1 ))			
			
		} ||  count=$count2
					
		sed -n ${deb},${fin}p $FICTMP		
}

rm $FICTMP

Hors ligne

#16 Le 14/03/2010, à 21:27

Kanor

Re : [JEU] challenge bash #6

Une version en python qui n'est pas très jolie je suis partie sur une mauvaise idée pour l'algorithme mais ça semble marcher quand même. Mais on doit pouvoir faire beaucoup mieux

#-*- coding: UTF-8 -*-

from optparse import (Option,
        OptionParser, OptionValueError)
from copy import copy
import os

def check_int_positive(option, opt, value):
    try:
        value = int(value)
    except ValueError:
        raise OptionValueError(
            "option %s: invalid int value: %r" % (opt, value))
    if value > 0:
        return value
    else:
        raise OptionValueError(
            "option %s: value %s inférieur ou égale à 0" (opt, value))

class MyOption (Option):
    TYPES = Option.TYPES + ("int_positive",)
    TYPE_CHECKER = copy(Option.TYPE_CHECKER)
    TYPE_CHECKER["int_positive"] = check_int_positive


if __name__ == "__main__":
    usage = "usage: %prog [options] arg"
    parser = OptionParser(usage = usage,
                option_class = MyOption )
    parser.add_option("-f", "--file", dest="filename",
                    help=u"Permet de charger un fichier")
    parser.add_option("-c", "--caractere", dest="nb_caractere", type="int_positive", \
                    help=u"Définit le nombre de caractére par ligne ")
    parser.add_option("-l", "--ligne", dest="nb_ligne", type="int_positive", \
                    help=u"Définit le nombre de ligne par page")
    (options, args) = parser.parse_args()
    if not options.filename:
        parser.error("Vous devez spécifier un fichier")
    if not options.nb_caractere:
        parser.error("Vous devez specifier un nombre de caractére par ligne")
    if not options.nb_ligne:
        parser.error("Vous devez specifier un nombre de ligne par page")

    if not os.path.exists(options.filename):
        raise IOError("Fichier inexistant")
    #Récupération du fichier
    file_obj = open(options.filename)
    text = file_obj.read()
    #Passage en unicode
    text = text.decode('utf-8')
    #Découpage des lignes à la bonne taille
    list_paragraphe = text.split("\n\n")
    new_list_paragraphe = []
    for paragraphe in list_paragraphe:
        paragraphe = paragraphe.replace("\n"," ")
        list_text =  []
        nb_ligne = len(paragraphe)/options.nb_caractere
        nb_ligne += 1 if (len(paragraphe) % options.nb_caractere) else 0
        for item in range(0, nb_ligne):
            start = item * options.nb_caractere
            end = start + options.nb_caractere
            list_text.extend(list(paragraphe[start: end]))
            list_text.append("\n")
        new_list_paragraphe.append( "".join(list_text))
    #Gestion des paragraphes dans la page
    list_page = [[]]
    page_current = 0
    for paragraphe in new_list_paragraphe:
        ligne = len(paragraphe.split("\n"))
        #Cas ou le paragraphe est plus long que la page
        if ligne > options.nb_ligne:
            paragraphe_on_page = ligne/options.nb_ligne
            paragraphe_on_page += 1 if ligne % options.nb_ligne else 0
            diff = 0
            for item in range(0, paragraphe_on_page):
                start = diff
                if list_page[page_current]:
                    nb_ligne_page_current = 0
                else:
                    nb_ligne_page_current = sum([len(par.split("\n"))
                            for par in list_page[page_current]])
                end = start + (options.nb_ligne - nb_ligne_page_current)
                diff = end - start
                list_page[page_current].append( "\n".join(paragraphe.split("\n")[start: end]))
                list_page.append([])
                page_current += 1
        else:
            nb_ligne_page_current = sum([len(par.split("\n")) for par in list_page[page_current]])
            diff = options.nb_ligne - nb_ligne_page_current
            if diff >= ligne:
                list_page[page_current].append( paragraphe)
            else:
                list_page.append([paragraphe])
                page_current += 1

    text_format = "Page\n"
    text_format +=  "\nPage \n".join(["\n".join(page) for page in list_page if page])
    print text_format

Dernière modification par Kanor (Le 16/03/2010, à 19:50)

Hors ligne

#17 Le 15/03/2010, à 01:07

AnsuzPeorth

Re : [JEU] challenge bash #6

gilbert a écrit :

Bon comme toi, je suis pas très bon en bash

Je ne me permettrais pas de juger tes compétences, mais ici, ce n'est pas la maitrise du language, mais l'algo qui est en cause.

nesthib a écrit :

pour l'encodage n'oublie pas de préciser le #-*- coding: UTF-8 -*- au début du script et d'utiliser les chaînes unicode

Vivi, je me suis battu avec encode, decode & co, mais en vain... C'est vraiment un problème l'encodage de fichier en informatique. Sujet bien expliqué par aleph2 sur ce forum !

J'ai essayé la proposition en python, et tjrs un problème d'encodage (finalement, bash s'en sort pas si mal wink) :

 text = unicode(text)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 66: ordinal not in range(128)

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#18 Le 15/03/2010, à 04:17

AnsuzPeorth

Re : [JEU] challenge bash #6

Bon aller, j'ai pris 2 mn pour afficher le dernier paragraphe (c'est une rustine !).
J'ai juste ajouté 2 lignes. Ca fonctionne, sauf bien sur si on veut afficher un nombre de lignes inferieur aux nombres de ligne d'un paragraphe (forcement, le paragraphe apparaitra en entier). Le challenge etait justement de ne pas découper un paragraphe si je ne m'abuse ! Si on ne mets qu'une seule ligne en paramètre (comme a fait gilbert pour essayer mon script avec son texte), la premiere page sera blanche, avec 2, c'est ok ( mais bon, quelle idée de mettre une seule ligne en paramètre smile)

#!/bin/bash
FICHIER=$3
NB_CAR=$1
NB_LIGNE=$2
var=
par=1
while read ligne
do
[[ "$ligne" =~ ^$ ]] && par=$((par+1))
  while [ "$ligne" != "" ]
    do
 	if [ "${ligne::1}" = " " ]; then
 	  flag=1
 	  var=${ligne:1:NB_CAR}	  
 	else
 	  flag=0
 	  var=${ligne::NB_CAR}
 	fi 	
 	[ "${var:((NB_CAR-2)):1}" = " " ] && var=${var::((NB_CAR-1))}
 	echo "${var}" >> /tmp/paragraphe$par
	[ "$flag" = 0 ] && ligne=${ligne/$var/} || ligne=${ligne/ $var/}
    done
done < "$FICHIER"
old_nb=0
nb_lignes=0
n=0
nb=0
nbf=0
for fichier in /tmp/paragraphe*
  do
     nbf=$((nbf+1))
     nb_li=0 && while read l; do nb_li=$((nb_li+1)); done < $fichier
     nb_lignes=$((nb_li+old_nb))
     old_nb=$nb_lignes
     if [ $nb_lignes -lt $NB_LIGNE ]; then
        para=$(< $fichier)
           if [ "$nb" = 0 ]; then
              page="$para"
              nb=$((nb+1))
           else
              page="$page\n\n$para" 
              old_nb=$((old_nb+1)) 
           fi
     else
        n=$((n+1))
        echo -e "PAGE $n\n$page"
        page=$(< $fichier)
        old_nb=$nb_li
     fi
     [ "$par" = "$nbf" ] && n=$((n+1)) && echo -e "PAGE $n\n$page"
  done

rm /tmp/paragraphe*

exit

J'ai supprimé la commande wc, comme ça, on est en full-bash wink

Dernière modification par AnsuzPeorth (Le 15/03/2010, à 04:24)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#19 Le 15/03/2010, à 20:23

gilbert

Re : [JEU] challenge bash #6

AnsuzPeorth a écrit :
gilbert a écrit :

Bon comme toi, je suis pas très bon en bash

Je ne me permettrais pas de juger tes compétences, mais ici, ce n'est pas la maitrise du language, mais l'algo qui est en cause.

Excuse-moi, je remarque que c'est très mal adroit comme j'ai écrit ça... je ne voulais pas bien entendu pas te juger...

Bref, puisque l'on peut apporter des améliorations... Voici une version corrigée de mon script... Il doit toujours y avoir des coquilles, mais moins que dans mon premier post...

J'ai rajouté un cat à la fin de mon script (ligne 162) pour que l'on puisse voir directement le résultat, et j'ai ajouté la ligne 146 qui indique le début de la page... Il faut bien évidemment commenter cette ligne si on veut avoir la version imprimable correcte.

#!/usr/bin/env bash

# Challenge bash 6 - forum ubuntu-fr
# Author :	gilbert
# Date :	15.03.2010
# Version :	0.2
# ref num :	3735928559

# goal and rules :
# Le but de ce challenge est de réaliser un script qui formate le texte de 
# façon à ce  qu'un paragraphe ne soit jamais coupé entre deux pages.
#
# Le script devra prendre en compte une variable définissant le nombre 
# de caractères maximum par ligne et le nombre maximum de lignes par page.

# ------------- INITIALISATION --------------

# Get the 3 input variables
if [ $# -ne 3 ]; then
  echo -e "\033[01;31mError :\033[0m ${0##*/} must be invoked by giving the number of characters by line," >&2
  echo "the number of line by page and the name of the file to process" >&2
  echo >&2
  echo -e "\033[01;31mUSAGE :\033[0m $0 numOfCharByLine numOfLineByPage fileToProcess" >&2
  exit 1
fi

# let guarantee to have integers
let numberOfCharsByLine=$1
let numberOfLinesByPage=$2
fileToProcess=$3


if [ ! -f ${fileToProcess} ]; then
  echo -e "\033[01;31mError :\033[0m ${fileToProcess} must be a regular file" >&2
  exit 1
fi

tmpFile1="/tmp/temporaryFileChallengeBash6UbuntuFr-$(date +%d-%m-%y-%N)"
touch ${tmpFile1}

finalFile="${fileToProcess}-$(date +%d-%m-%y)-ready_to_be_printed"
touch ${finalFile}

# ---------- END OF INITIALISATION ----------

# -------------- PROCESSING -----------------

echo -e "\033[01;31mProcess starting...\033[0m Please wait. It might be slow on some machines."

declare -a linedArray
let counter=0

# insert a newline at the end of the file. Avoid problems with read
cp ${fileToProcess} ${tmpFile1}
echo >> ${tmpFile1}

while read currentLine; do
  # insert a '\n' on the line $numberOfCharsByLine
  # need to add int(${#currentLine}/$numberOfCharsByLine) '\n'
  
  sizeOfTheCurrentLine=${#currentLine}
  numberOfIterations=$((sizeOfTheCurrentLine / numberOfCharsByLine))

  if [ $numberOfIterations -gt 0 ]; then
    for ((i=0; i<=numberOfIterations; i++)); do
      linedArray[$counter]="${currentLine:$((i * numberOfCharsByLine)):${numberOfCharsByLine}}"
      let counter++
    done
  else
    linedArray[$counter]=${currentLine}
    let counter++
  fi
done < ${tmpFile1}

# here linedArray is a copy of the original file, but with the maximal number of chars by line respected
# Now repair the paragraphs, and return an error if the number of lines from a paragraph is grater than $numberOfLinesByPage
# Paragraphs are separated by empty lines (lines with only '\n', spaces and/or tabs)
let i=0
let j=0
declare -a paragraph
let paragraph[0]=0

nol=${#linedArray[@]}
for((k=0; k<nol; k++)); do
  # check if the current line is blank
  if echo ${linedArray[$k]} | grep --regexp='^[[:blank:]]*$' > /dev/null; then
    let j=0
    let i++
    paragraph[$i]=$j
  else
    paragraph[$i]=$j
    let j++

    if [ $((paragraph[$i]+1)) -gt $numberOfLinesByPage ]; then
      echo -e "\033[01;31mError :\033[0m in this challenge a paragraph must NEVER be split. Aborting..." >&2
      rm ${finalFile}
      exit 1
    fi
  fi
done

numberOfParagraphs=${#paragraph[@]}

# Now numbers are known. Repartition of paragraphs is done on the sheet
# Counts the maximum number of paragraphs that it's possible to put on 1 page. Rest of the page is filled with '\n'

let i=0
let pageNum=0
let numberOfParagraphsForThisPage=0
let numberOfLinesForThisPage=0
declare -a page
let page[0]=0

# second +1 if for the '\n'
while [ $i -lt $numberOfParagraphs ]; do
  let numberOfLinesForThisPage=$(( numberOfLinesForThisPage + paragraph[$i] + 2 ))
  if [ $numberOfLinesForThisPage -gt $numberOfLinesByPage ]; then
    # check if the the last newline is the problem
    if [ $((numberOfLinesForThisPage-1)) -gt $numberOfLinesByPage ]; then
      # No, newline isn't the problem. Also the latest paragraph must be removed
      let numberOfLinesForThisPage=$(( numberOfLinesForThisPage - (paragraph[$i] + 2) ))
      let i--
    else
      # Yes that was newline. So we have a full page
      let numberOfLinesForThisPage--
    fi
    # here the page is full
    let page[$pageNum]=numberOfLinesForThisPage
    let numberOfLinesForThisPage=0
    let pageNum++
  fi
  let i++
done
#otherwise the last loop is forgotten (do while loop will be better)
let page[$pageNum]=numberOfLinesForThisPage

# creation of the final document
let numberOfPages=${#page[@]}

# empty ${tmpFile1}
cat /dev/null > ${tmpFile1}

let currentLineInLinedArray=0

for((i=0; i<numberOfPages; i++)); do
  echo "Page $((i+1))" >> ${tmpFile1}
  for((j=0; j<numberOfLinesByPage; j++)); do
    # take the n first lines from tmpFile1 then add blank line to complete the page
    if [ $j -lt ${page[$i]} ]; then
      echo "${linedArray[$currentLineInLinedArray]}" >> ${tmpFile1}
      let currentLineInLinedArray++
    else
      echo >> ${tmpFile1}
    fi
  done
done

cp ${tmpFile1} ${finalFile}
echo -e "\033[01;31mProcessing done !\033[0m"
echo -e "Final file is : \033[01;32m${finalFile}\033[0m. You can print it with lpr(1) for example."

cat ${finalFile}

rm ${tmpFile1}

# ---------- END OF PROCESSING --------------

Simplement moi-même..

Hors ligne

#20 Le 15/03/2010, à 20:27

samυncle

Re : [JEU] challenge bash #6

Personnellement je serais pour l'intégration d'autres langages de scripting (perl, ruby, python) après il faut pouvoir les juger et ne pas trop s'éparpiller.

+42


Hello world

Hors ligne

#21 Le 15/03/2010, à 20:30

nesthib

Re : [JEU] challenge bash #6

samuncle a écrit :

+42

les règles du jeu a écrit :

et la création d'une bibliothèque curses pour python ça compte pas tongue


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#22 Le 15/03/2010, à 20:46

samυncle

Re : [JEU] challenge bash #6

et la création d'une bibliothèque curses pour python ça compte pas tongue

et merde je suis démasqué  tonguelol

C'est juste que j'aime bien le python et si je peux participer à ce défi en utilisant du python ce sera sympa smile


Hello world

Hors ligne

#23 Le 15/03/2010, à 20:55

toto2006

Re : [JEU] challenge bash #6

Personnellement je serais pour l'intégration d'autres langages de scripting (perl, ruby, python) après il faut pouvoir les juger et ne pas trop s'éparpiller.

samuncle a écrit:

    +42

+-1 pour rajouter d'autres langages

mais dans ce cas il faut changer le nom du topic pour Challenge Prog
et du coup rajouter les langages compilés  comme C/C++ ASM et tout les autres  JAVA PHP BASIC pourquoi pas

enfin bref comment ne pas s'éparpiller smile

je suis pas contre mais bon dur a organiser .

Hors ligne

#24 Le 15/03/2010, à 21:33

nesthib

Re : [JEU] challenge bash #6

@samuncle : ben on attend ta solution en python… allez au boulot !

@toto2006 : c'est à voir, je suis pour ajouter d'autres langages mais j'aimerais que l'on se limite aux langages de scripting

j'ai ouvert un fil dédié pour discuter du fonctionnement du jeu


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#25 Le 15/03/2010, à 22:50

AnsuzPeorth

Re : [JEU] challenge bash #6

nesthib a écrit :

@samuncle : ben on attend ta solution en python… allez au boulot !

Vivi, on attend ! J'aimerais bien voir comment résoudre ce problème d'encodage de caractères (le script de kanor me retourne une erreur !)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne