Compare commits
12 commits
0a52fbdc62
...
ddf165db95
Author | SHA1 | Date | |
---|---|---|---|
ddf165db95 | |||
883b2a19e6 | |||
0f6b272853 | |||
ed7231d96a | |||
d9f9eddca6 | |||
37b5adf4d6 | |||
7bbe14e792 | |||
0ad1c2ba9f | |||
5c9ed75ef9 | |||
7af2aa38ad | |||
1a4bf80d27 | |||
10f6668664 |
5 changed files with 1274 additions and 120 deletions
42
README.md
42
README.md
|
@ -1,5 +1,6 @@
|
|||
# AoC 2015
|
||||
|
||||
|
||||
J’ai décidé de faire l’édition de 2015 de l’Advent of Code en utilisant un langage différent pour chaque jour. J’essaie d’utiliser au mieux le langage (par exemple, Java est orienté objet). Vous trouverez ci-dessous un tableau résumant rapidement ce dont vous avez besoin pour lancer chaque jour et plus bas encore des notes plus précises pour les différents jours.
|
||||
|
||||
## TLDR
|
||||
|
@ -68,7 +69,7 @@ python3 run.py
|
|||
|
||||
## Jour 5
|
||||
|
||||
On retourne dans le passé ici avec le **Cobol**. J’ai utilisé le compilateur GNUCOBOL pour pouvoir compiler mon fichier. J’ai préféré utiliser l’ancienne syntaxe pour changer un peu ma façon de coder (et je trouve le symbole de la ligne 7 génial).
|
||||
On retourne dans le passé ici avec le **Cobol**. J’ai utilisé le compilateur GNUCOBOL pour pouvoir compiler mon fichier. J’ai préféré utiliser l’ancienne syntaxe pour changer un peu ma façon de coder (et je trouve le symbole de la ligne 7 génial) sur la première partie.
|
||||
|
||||
```bash
|
||||
# pour installer le compilateur
|
||||
|
@ -79,10 +80,27 @@ cobc -x jour5.cob
|
|||
./jour5
|
||||
```
|
||||
|
||||
Il reste des messages de débugging. Si vous souhaitez les voir, il suffit de rajouter l’option `-fdebugging-line` au compilateur.
|
||||
Il reste des messages de débugging. Si vous souhaitez les voir, il suffit de rajouter l’option `-fdebugging-line` au compilateur. **Les messages ont été supprimés.**
|
||||
|
||||
J’ai appris à coder en COBOL très rapidement pour ce jour. Je me suis appuyé sur [le cours de Wikiversite](https://fr.wikiversity.org/wiki/COBOL) pour les bases et aussi de [la documentation officielle GNUCOBOL](https://devdocs.io/gnu_cobol/).
|
||||
|
||||
En tant que développeur, je suis feignant. Voici un mini script bash pour générer les colonnes de lignes se trouvant dans le fichier :
|
||||
|
||||
```bash
|
||||
nb=$(wc -l jour5.cob | cut -d\ -f1)
|
||||
for i in $(seq -f "%06g" $nb)
|
||||
do
|
||||
sed -Ei '0,/(^\s{6}|^\s*$)/s//'$i'/' jour5.cob
|
||||
done
|
||||
```
|
||||
|
||||
Si vous souhaitez éditer le fichier, il est plus pratique de le faire sans ces nombres. Voici la commande permettant de les retirer :
|
||||
|
||||
```bash
|
||||
sed -Ei 's/^[0-9]{6}$//g' jour5.cob # pour éviter les espaces inutiles
|
||||
sed -Ei 's/^[0-9]{6}/ /g' jour5.cob
|
||||
```
|
||||
|
||||
## Jour 6
|
||||
## Jour 7
|
||||
## Jour 8
|
||||
|
@ -113,7 +131,7 @@ Liste des langages utilisés
|
|||
|
||||
* Shell
|
||||
* Perl
|
||||
* LOLCODE / HolyC
|
||||
* HolyC
|
||||
* C++
|
||||
* C#
|
||||
* Pascal
|
||||
|
@ -121,13 +139,27 @@ Liste des langages utilisés
|
|||
* Go
|
||||
* Rust
|
||||
* Groovy
|
||||
* Haskell
|
||||
* JS
|
||||
* PHP
|
||||
* Pony
|
||||
* Ruby
|
||||
* Lua
|
||||
* Pawn
|
||||
* PureBasic
|
||||
* Squirrel
|
||||
* Scala
|
||||
|
||||
## Langages non utilisées
|
||||
|
||||
Liste des langages devant être utiliser mais qui ne l’ont pas été. J’essai d’apporter des explications au pourquoi.
|
||||
|
||||
### LOLCODE
|
||||
|
||||
Le LOLCODE ne permet pas la manipulation de chaines de caractères ou de manière peu flexible : [post Stackoverflow](https://stackoverflow.com/questions/29762129/lolcode-string-parsing).
|
||||
|
||||
### Haskell
|
||||
|
||||
Le Haskell est un langage de logique, son foctionnement et surtout sa structure est différente des autres programmes.
|
||||
|
||||
### PureBasic
|
||||
|
||||
Compilateur propriétaire.
|
||||
|
|
1002
jour05/input
1002
jour05/input
File diff suppressed because it is too large
Load diff
|
@ -1,113 +0,0 @@
|
|||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. jour-cinq-prem-part.
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT FILE1 ASSIGN TO "input"
|
||||
ORGANIZATION LINE SEQUENTIAL.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD FILE1.
|
||||
01 INPUT-FILE.
|
||||
02 STR PIC A(17).
|
||||
|
||||
WORKING-STORAGE SECTION.
|
||||
01 MY-FILE.
|
||||
02 MY-STR PIC A(17).
|
||||
01 FILE-STATUS PIC X VALUE 'N'.
|
||||
88 EOF VALUE 'Y'.
|
||||
77 NB-NICE PIC 9(4) VALUE 0.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
main.
|
||||
OPEN INPUT FILE1.
|
||||
PERFORM UNTIL EOF
|
||||
READ FILE1 RECORD INTO MY-FILE
|
||||
* Lorsqu’on arrive à la fin du fichier, on met Y pour le signaler
|
||||
AT END MOVE 'Y' TO FILE-STATUS
|
||||
NOT AT END CALL "parse-str" USING
|
||||
BY CONTENT MY-STR,
|
||||
BY REFERENCE NB-NICE
|
||||
* On passe par référence NB-NICE pour l’incrémenter
|
||||
END-CALL
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
DISPLAY "Nombre de bonnes chaines : " NB-NICE.
|
||||
CLOSE FILE1.
|
||||
STOP RUN.
|
||||
|
||||
******************************************************************
|
||||
* parse-str : parse la chaine de caractères pour voir le nombre de
|
||||
* bonnes chaines. Prend en paramètres 2 arguments :
|
||||
* STR : chaine de caractères de taille 16. Sera parser.
|
||||
* NB : (REFERENCE) le nombre de bonnes chaines. Sera incrémenter.
|
||||
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. parse-str.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
77 CHAR PIC A.
|
||||
88 VOY VALUE 'a','e','i','o','u'.
|
||||
77 I PIC 99.
|
||||
88 END-P VALUE 17.
|
||||
77 NB-VOY PIC 99.
|
||||
77 PRED PIC A.
|
||||
77 TMP PIC AA.
|
||||
88 BAD VALUE 'ab', 'cd', 'pq', 'xy'.
|
||||
77 DOUBLE PIC X.
|
||||
|
||||
* NB-VOY contient le nombre de voyelles
|
||||
* PRED le caractère précédent
|
||||
* TMP forme la chaine contenant le caractère précédent et courant
|
||||
* BAD les mauvaises formes de chaines
|
||||
* DOUBLE est mit à Y lorsque CHAR = PRED
|
||||
*
|
||||
* LINKAGE SECTION contient les paramètres du programme parse-str
|
||||
|
||||
LINKAGE SECTION.
|
||||
77 STR PIC A(17).
|
||||
77 NB PIC 9(4).
|
||||
|
||||
PROCEDURE DIVISION USING STR, NB.
|
||||
parse.
|
||||
MOVE 0 TO NB-VOY.
|
||||
MOVE 'N' TO DOUBLE.
|
||||
d DISPLAY STR.
|
||||
d DISPLAY "=================".
|
||||
PERFORM VARYING I FROM 1 BY 1 UNTIL END-P
|
||||
MOVE STR(I:1) TO CHAR
|
||||
d DISPLAY "ACT. CHAR : " CHAR
|
||||
d DISPLAY "ACT. PRED : " PRED
|
||||
d DISPLAY "I : " I
|
||||
IF VOY
|
||||
THEN ADD 1 TO NB-VOY
|
||||
END-IF
|
||||
IF I >= 2
|
||||
THEN
|
||||
STRING PRED CHAR INTO TMP
|
||||
d DISPLAY "TMP STR : " TMP
|
||||
IF BAD
|
||||
THEN
|
||||
EXIT PERFORM
|
||||
END-IF
|
||||
IF PRED = CHAR
|
||||
THEN
|
||||
MOVE 'Y' TO DOUBLE
|
||||
END-IF
|
||||
d DISPLAY "DOUBLE : " DOUBLE
|
||||
END-IF
|
||||
MOVE CHAR TO PRED
|
||||
END-PERFORM.
|
||||
IF NOT BAD AND NB-VOY >= 3 AND DOUBLE = 'Y'
|
||||
THEN
|
||||
ADD 1 TO NB
|
||||
END-IF.
|
||||
EXIT PROGRAM.
|
||||
END PROGRAM parse-str.
|
||||
|
||||
*************************************************************************
|
||||
|
||||
END PROGRAM jour-cinq-prem-part.
|
211
jour05/jour5.cob
Normal file
211
jour05/jour5.cob
Normal file
|
@ -0,0 +1,211 @@
|
|||
000001 IDENTIFICATION DIVISION.
|
||||
000002 PROGRAM-ID. jour-cinq.
|
||||
000003
|
||||
000004 ENVIRONMENT DIVISION.
|
||||
000005 INPUT-OUTPUT SECTION.
|
||||
000006 FILE-CONTROL.
|
||||
000007 SELECT FILE1 ASSIGN TO "input"
|
||||
000008 ORGANIZATION LINE SEQUENTIAL.
|
||||
000009
|
||||
000010 DATA DIVISION.
|
||||
000011 FILE SECTION.
|
||||
000012 FD FILE1.
|
||||
000013 01 INPUT-FILE.
|
||||
000014 02 STR PIC A(17).
|
||||
000015
|
||||
000016 WORKING-STORAGE SECTION.
|
||||
000017 01 MY-FILE.
|
||||
000018 02 MY-STR PIC A(17).
|
||||
000019 01 FILE-STATUS PIC X VALUE 'N'.
|
||||
000020 88 EOF VALUE 'Y'.
|
||||
000021 77 NB-NICE-PREM PIC 9(4) VALUE 0.
|
||||
000022 77 NB-NICE-DEUX PIC 9(4) VALUE 0.
|
||||
000023
|
||||
000024 PROCEDURE DIVISION.
|
||||
000025 main.
|
||||
000026 OPEN INPUT FILE1.
|
||||
000027 PERFORM UNTIL EOF
|
||||
000028 READ FILE1 RECORD INTO MY-FILE
|
||||
000029* Lorsqu’on arrive à la fin du fichier, on met Y pour le signaler
|
||||
000030 AT END MOVE 'Y' TO FILE-STATUS
|
||||
000031 NOT AT END CALL "hub" USING
|
||||
000032 BY CONTENT MY-STR,
|
||||
000033 BY REFERENCE NB-NICE-PREM
|
||||
000034 BY REFERENCE NB-NICE-DEUX
|
||||
000035* On passe par référence NB-NICE pour les incrémenter
|
||||
000036 END-CALL
|
||||
000037 END-READ
|
||||
000038 END-PERFORM.
|
||||
000039 DISPLAY "Nombres de bonnes chaines :" END-DISPLAY.
|
||||
000040 DISPLAY "Dans la partie 1 : " NB-NICE-PREM END-DISPLAY.
|
||||
000041 DISPLAY "Dans la partie 2 : " NB-NICE-DEUX END-DISPLAY.
|
||||
000042 CLOSE FILE1.
|
||||
000043 STOP RUN.
|
||||
000044
|
||||
000045*****************************************************************
|
||||
000046* hub : exécute les 2 fonctions pour les 2 parties
|
||||
000047* STR : la chaine à passer en paramètre aux deux fonctions
|
||||
000048* NB-PREM : (REFERENCE) nombre bonnes chaines partie 1
|
||||
000049* NB-DEUX : (REFERENCE) nombre bonnes chaines partie 2
|
||||
000050* Ces 2 variables seront incrémentées
|
||||
000051*****************************************************************
|
||||
000052
|
||||
000053 IDENTIFICATION DIVISION.
|
||||
000054 PROGRAM-ID. hub.
|
||||
000055
|
||||
000056 DATA DIVISION.
|
||||
000057 LINKAGE SECTION.
|
||||
000058 77 STR PIC A(17).
|
||||
000059 77 NB-PREM PIC 9(4).
|
||||
000060 77 NB-DEUX PIC 9(4).
|
||||
000061
|
||||
000062 PROCEDURE DIVISION USING STR, NB-PREM, NB-DEUX.
|
||||
000063 route.
|
||||
000064 CALL "parse-prem" USING
|
||||
000065 BY CONTENT STR,
|
||||
000066 BY REFERENCE NB-PREM
|
||||
000067 END-CALL.
|
||||
000068
|
||||
000069 CALL "parse-deux" USING
|
||||
000070 BY CONTENT STR,
|
||||
000071 BY REFERENCE NB-DEUX
|
||||
000072 END-CALL.
|
||||
000073 EXIT PROGRAM.
|
||||
000074
|
||||
000075******************************************************************
|
||||
000076* parse-prem : parse la chaine de caractères pour voir le nombre de
|
||||
000077* bonnes chaines pour la partie 1. Prend en paramètres 2 arguments :
|
||||
000078* STR : chaine de caractères de taille 17 à analyser.
|
||||
000079* NB : (REFERENCE) le nombre de bonnes chaines. Sera incrémenter.
|
||||
000080*****************************************************************
|
||||
000081
|
||||
000082 IDENTIFICATION DIVISION.
|
||||
000083 PROGRAM-ID. parse-prem.
|
||||
000084
|
||||
000085 DATA DIVISION.
|
||||
000086 WORKING-STORAGE SECTION.
|
||||
000087 77 CHAR PIC A.
|
||||
000088 88 VOY VALUE 'a','e','i','o','u'.
|
||||
000089 77 I PIC 99.
|
||||
000090 88 END-P VALUE 17.
|
||||
000091 77 NB-VOY PIC 99.
|
||||
000092 77 PRED PIC A.
|
||||
000093 77 TMP PIC AA.
|
||||
000094 88 BAD VALUE 'ab', 'cd', 'pq', 'xy'.
|
||||
000095 77 DOUBLE PIC X.
|
||||
000096
|
||||
000097*****************************************************************
|
||||
000098* NB-VOY contient le nombre de voyelles
|
||||
000099* PRED le caractère précédent
|
||||
000100* TMP forme la chaine contenant le caractère précédent et courant
|
||||
000101* BAD les mauvaises formes de chaines
|
||||
000102* DOUBLE est mit à Y lorsque CHAR = PRED
|
||||
000103*
|
||||
000104* LINKAGE SECTION contient les paramètres du programme parse-str
|
||||
000105*****************************************************************
|
||||
000106
|
||||
000107 LINKAGE SECTION.
|
||||
000108 77 STR PIC A(17).
|
||||
000109 77 NB PIC 9(4).
|
||||
000110
|
||||
000111 PROCEDURE DIVISION USING STR, NB.
|
||||
000112 parse.
|
||||
000113 MOVE 0 TO NB-VOY.
|
||||
000114 MOVE 'N' TO DOUBLE.
|
||||
000115 PERFORM VARYING I FROM 1 BY 1 UNTIL END-P
|
||||
000116 MOVE STR(I:1) TO CHAR
|
||||
000117 IF VOY THEN
|
||||
000118 ADD 1 TO NB-VOY END-ADD
|
||||
000119 END-IF
|
||||
000120 IF I >= 2
|
||||
000121 THEN
|
||||
000122 STRING PRED CHAR INTO TMP END-STRING
|
||||
000123 IF BAD THEN
|
||||
000124 EXIT PERFORM
|
||||
000125 END-IF
|
||||
000126 IF PRED = CHAR THEN
|
||||
000127 MOVE 'Y' TO DOUBLE
|
||||
000128 END-IF
|
||||
000129 END-IF
|
||||
000130 MOVE CHAR TO PRED
|
||||
000131 END-PERFORM.
|
||||
000132 IF NOT BAD AND NB-VOY >= 3 AND DOUBLE = 'Y' THEN
|
||||
000133 ADD 1 TO NB END-ADD
|
||||
000134 END-IF.
|
||||
000135 EXIT PROGRAM.
|
||||
000136 END PROGRAM parse-prem.
|
||||
000137
|
||||
000138******************************************************************
|
||||
000139* parse-deux : parse la chaine de caractères pour voir le nombre de
|
||||
000140* bonnes chaines pour la partie 2. Prend en paramètres 2 arguments :
|
||||
000141* STR : chaine de caractères de taille 17 à analyser.
|
||||
000142* NB : (REFERENCE) le nombre de bonnes chaines. Sera incrémenter.
|
||||
000143*****************************************************************
|
||||
000144
|
||||
000145 IDENTIFICATION DIVISION.
|
||||
000146 PROGRAM-ID. parse-deux.
|
||||
000147
|
||||
000148 DATA DIVISION.
|
||||
000149 WORKING-STORAGE SECTION.
|
||||
000150 77 CHAR PIC A.
|
||||
000151 77 I PIC 99.
|
||||
000152 88 STR-LENGTH VALUE 17.
|
||||
000153 77 J PIC 99.
|
||||
000154 77 K PIC 99.
|
||||
000155 88 DOUBLE-STR-LENGTH VALUE 16.
|
||||
000156 77 PRED PIC A.
|
||||
000157 77 MYNEW PIC A.
|
||||
000158 77 DOUBLE-CHAR PIC AA.
|
||||
000159 77 DOUBLE-CHAR-NEXT PIC AA.
|
||||
000160 77 BETWEEN PIC X.
|
||||
000161 77 DOUBLE PIC X.
|
||||
000162
|
||||
000163******************************************************************
|
||||
000164* PRED le caractère précédent
|
||||
000165* MYNEW le caractère suivant
|
||||
000166* DOUBLE-CHAR la paire à vérifier
|
||||
000167* DOUBLE-CHAR-NEXT les paires suivantes
|
||||
000168* DOUBLE est mit à Y lorsque 2 pairs sont trouvées
|
||||
000169* BETWEEN est mit à Y lorsque 2 memes lettres en encadrent une
|
||||
000170******************************************************************
|
||||
000171
|
||||
000172 LINKAGE SECTION.
|
||||
000173 77 STR PIC A(17).
|
||||
000174 77 NB PIC 9(4).
|
||||
000175
|
||||
000176 PROCEDURE DIVISION USING STR, NB.
|
||||
000177 deuxieme-part.
|
||||
000178 MOVE 'N' TO BETWEEN.
|
||||
000179 MOVE 'N' TO DOUBLE.
|
||||
000180 PERFORM VARYING I FROM 1 BY 1 UNTIL STR-LENGTH
|
||||
000181 COMPUTE J = I + 1 END-COMPUTE
|
||||
000182 MOVE STR(I:1) TO CHAR
|
||||
000183 IF I > 1 AND I < (LENGTH OF STR - 1) THEN
|
||||
000184 MOVE STR(J:1) TO MYNEW
|
||||
000185 IF PRED = MYNEW THEN
|
||||
000186 MOVE 'Y' TO BETWEEN
|
||||
000187 END-IF
|
||||
000188 END-IF
|
||||
000189
|
||||
000190 IF I < ((LENGTH OF STR) - 2) AND DOUBLE = 'N' THEN
|
||||
000191 MOVE STR(I:2) TO DOUBLE-CHAR
|
||||
000192 ADD 1 TO J END-ADD
|
||||
000193 PERFORM VARYING K FROM J BY 1 UNTIL DOUBLE-STR-LENGTH
|
||||
000194 MOVE STR(K:2) TO DOUBLE-CHAR-NEXT
|
||||
000195 IF DOUBLE-CHAR = DOUBLE-CHAR-NEXT THEN
|
||||
000196 MOVE 'Y' TO DOUBLE
|
||||
000197 END-IF
|
||||
000198 END-PERFORM
|
||||
000199 END-IF
|
||||
000200 MOVE CHAR TO PRED
|
||||
000201 END-PERFORM.
|
||||
000202
|
||||
000203 IF BETWEEN = 'Y' AND DOUBLE = 'Y'
|
||||
000204 THEN
|
||||
000205 ADD 1 TO NB END-ADD
|
||||
000206 END-IF.
|
||||
000207 EXIT PROGRAM.
|
||||
000208 END PROGRAM parse-deux.
|
||||
000209
|
||||
000210 END PROGRAM hub.
|
||||
000211 END PROGRAM jour-cinq.
|
26
jour10/jour10.bs
Normal file
26
jour10/jour10.bs
Normal file
|
@ -0,0 +1,26 @@
|
|||
basInput$ = "1113222113"
|
||||
pred$ = ""
|
||||
act$ = ""
|
||||
new$ = ""
|
||||
k = 0
|
||||
|
||||
for i = 0 to 40
|
||||
print i, " / 40"
|
||||
for j = 1 to len(basInput$) step k
|
||||
k = 1
|
||||
act$ = mid$(basInput$, j, 1)
|
||||
pred$ = act$
|
||||
while pred$ = act$ and (j + k) < len(basInput$)
|
||||
pred$ = act$
|
||||
act$ = mid$(basInput$, j + k, 1)
|
||||
k = k + 1
|
||||
if act$ <> pred$ then
|
||||
k = k - 1
|
||||
endif
|
||||
wend
|
||||
new$ = new$ + str$(k) + pred$
|
||||
next j
|
||||
basInput$ = new$
|
||||
next i
|
||||
|
||||
print "La longeur de la chaine finale est ", len(basInput$)
|
Loading…
Add table
Reference in a new issue