rick-gnous / AoC-2015

Dépôt pour les réponses de l’Advent of Code 2015. Un langage différent est utilisé pour chaque jour. https://adventofcode.com/2015

Home Page:https://git.gnous.eu/Rick/AoC-2015

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

Ce tableau contient les langages pour chaque jours ainsi que le compilateur, la commande pour compiler et exécuter les différents fichiers. Si vous souhaitez plus d’informations, descendez à la bonne section.

vbnc jour10.vbs mono jour10.exe

Jour Langage Compilateur Commande pour compil Exécution Version
1 C gcc gcc jour1.c ./a.out 10.2.1 20201203
2 Java jdk 11 javac *.java java Main 11.0.9
3 Go go run jour3.go go1.16.4
4 Python python3 run.py 3.9.5
5 Cobol gnucobol cobc -x jour5.cob ./jour5 2.2.0
6
7
8 Perl perl jour8.pl perl 5 version 32
9
10 Visual Basic vbnc vbnc jour10.vbs mono jour10.exe vbnc 0.0.0.5943 Mono 4.8
11 Lua lua jour11.lua 5.2.4
12 Node.JS node jour12.js v14.16.0
13
14 Objective-C gcc [voir plus bas] ./a.out gcc-objc 10.2.1 gnustep-base 1.28.0
15
16
17
18
19
20
21
22
23
24

Jour 1

Le langage utilisé pour ce jour là est le C. Simple et efficace, il vous suffit d’avoir le compilateur gcc d’installé pour pouvoir le compiler.

gcc jour1.c
./a.out

Jour 2

Ici, le langage est le Java et l’approche du problème s’est fait avec des classes. La compilation varie selon votre CLASSPATH mais voici les commandes à entrer afin de faire marcher à coup sûr la compilation.

export CLASSPATH=$CLASSPATH:../class
mkdir ws class
cd ws
javac -d ../class ../*.java
java Main

Jour 3

Pour ce jour, le Go a été utilisé. Un langage qui fait beaucoup pensé au C mais aussi au Python ! Bien qu’il soit possible de compiler le fichier, j’ai utilisé la partie interpréteure du langage.

go run jour3.go

Jour 4

Le langage le plus simple ! Juste un fichier d’une vingtaine de ligne : merci au Python ! J’ai décidé de faire une approche bruteforce au lieu de chercher un moyen de « casser » le MD5. Pardonnez ma fainéantise.

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) sur la première partie.

# pour installer le compilateur
sudo xbps-install gnucobol gmp-devel # sur Void

# pour compiler et exécuter
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. 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 pour les bases et aussi de la documentation officielle GNUCOBOL.

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 :

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 :

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

Le langage utilisé est le Perl. Il suffit d’utiliser la commande perl qui va exécuter le fichier.

perl jour8.pl

Jour 9

Jour 10

Il faut utiliser Mono afin de pouvoir compiler et exécuter le Visual Basic qui utilise .NET.

trizen -S mono-basic mono

Il faut utiliser ensuite le compileur avant d’exécuter le .exe généré avec Mono.

vbnc jour10.vbs
mono jour10.exe

Jour 11

Ce jour utilise le Lua. Il se lance comme en Python avec une commande sur le fichier :

lua jour11.lua

Jour 12

Avant d’écrire le script Node.JS, j’ai utilisé une REGEX pour la première partie. Il suffit d’additionner les nombres du fichier ! Ça se fait très facilement en Bash. Par contre, la REGEX de la partie 2, si elle existe, est beaucoup plus complexe. J’ai préféré réécrire ma réponse à la question 1 en Node.JS, langage logique pour du JSON.

Voici la ligne bash décortiquée en script pour une meilleure compréhension :

sum=0
for i in $(grep -oE '(-)?[[:digit:]]+' input)
do 
    sum=$(($sum + $i))
done
echo $sum

Sinon, il suffit d’installer node et de lancer avec la commande suivante, aucune dépendance n’est requise :

node jour12.js

Jour 13

Jour 14

Pour pouvoir compiler de l’Objective C avec GCC, installez les paquets gcc-objc et gnustep-base-devel.

sudo xbps-install gcc-objc gnustep-base-devel # pour void
# Commandes pour la compilation (ne pas utiliser)
# gcc $(gnustep-config --objc-flags) jour14.m $(gnustep-config --base-libs)
# gcc -lobjc jour14.m
# gcc -lobjc -fconstant-string-class=NSConstantString jour14.m -lgnustep-base

La compilation se fait ensuite en 3 temps : il faut en premier faire les .o du main et de la classe raindeer avant de les mettre dans un seul et même fichier.

gcc -lobjc -fconstant-string-class=NSConstantString raindeer.m -lgnustep-base -c -o rain.o 
gcc -lobjc -fconstant-string-class=NSConstantString jour14.m -lgnustep-base -c -o jour.o 
gcc -lobjc -fconstant-string-class=NSConstantString troupeau.m -lgnustep-base -c -o troupeau.o 
gcc -lobjc -fconstant-string-class=NSConstantString *.o -lgnustep-base 
./a.out

La compréhension de ce langage a été assez longue… Très peu de ressources « potables » en ligne, j’ai compris comment le langage marchait avec StackOverflow et un ou deux sites mieux foutus que les autres. Un grand merci à la documentation d’Apple qui est un bourbier sans nom même s’ils tentent de faire un bon truc. Voici une liste des différents sites qui m’ont été utiles :

Jour 15

Jour 16

Jour 17

Jour 18

Jour 19

Jour 20

Jour 21

Jour 22

Jour 23

Jour 24

Liste des langages à utiliser

  • Shell
  • HolyC
  • C++
  • C#
  • Pascal
  • Freepascal
  • Rust
  • Groovy
  • PHP
  • Pony
  • Ruby
  • Pawn
  • 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.

Haskell

Le Haskell est un langage de logique, son foctionnement et surtout sa structure est différente des autres programmes.

PureBasic

Compilateur propriétaire.

About

Dépôt pour les réponses de l’Advent of Code 2015. Un langage différent est utilisé pour chaque jour. https://adventofcode.com/2015

https://git.gnous.eu/Rick/AoC-2015

License:GNU General Public License v3.0


Languages

Language:COBOL 26.1%Language:Objective-C 18.0%Language:Java 14.2%Language:Lua 13.8%Language:Go 7.9%Language:JavaScript 5.9%Language:VBScript 5.2%Language:C 4.4%Language:Python 2.3%Language:Perl 2.2%