Skip to content

Instantly share code, notes, and snippets.

View ssaurel's full-sized avatar

Sylvain Saurel ssaurel

View GitHub Profile
@ssaurel
ssaurel / shuffle.py
Created May 8, 2023 14:10
shuffle method for a Flipping Bits Game on the SSaurel's Blog
def shuffle(self):
for _ in range(self.level * self.level):
if random.random() > 0.5:
self.flipcol(random.randint(0, self.level - 1))
else:
self.fliprow(random.randint(0, self.level - 1))
@ssaurel
ssaurel / flip.py
Created May 8, 2023 14:09
Flip methods for a Flipping Bits Game on SSaurel's Blog
# method to flip a column
def flipcol(self, r):
for i in range(len(self.board[r])):
self.board[r][i] ^= 1 # 0 -> 1, 1 -> 0
# method to flip a row
def fliprow(self, c):
for row in self.board:
row[c] ^= 1
@ssaurel
ssaurel / SitemapGenerator.py
Created May 1, 2023 16:04
SitemapGenerator Program in Python for the SSaurel's Blog
from pip._vendor import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import urllib
import xml.etree.ElementTree as ET
class SitemapGenerator:
def __init__(self, root, filename):
@ssaurel
ssaurel / generatefile.py
Created May 1, 2023 16:02
generatefile method of the SitemapGenerator class for a tutorial on the SSaurel's Blog
def generatefile(self):
urlsbylevel = {}
maxlevel = 0
for key, value in self.urls.items():
if value > maxlevel :
maxlevel = value
listurls = None
@ssaurel
ssaurel / crawl.py
Created May 1, 2023 16:00
Crawl method of the SitemapGenerator class for a tutorial on the SSaurel's Blog
def crawl(self, url, level):
print("Level: " + str(level) + "/ Explore " + url)
page = requests.get(url)
if page.status_code == 200 :
url = urllib.parse.urldefrag(url)[0] # we don't add url with fragments
if url not in self.urls :
self.urls[url] = level
<html>
<head>
<title>Bitcoin Price in Words - Sylvain Saurel</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Sriracha&display=swap" rel="stylesheet">
<script type="text/javascript">
var textToSpeech = "";
@ssaurel
ssaurel / sayBitcoinPrice.js
Created March 26, 2021 14:59
sayBitcoinPrice for Bitcoin Price in Words
function sayBitcoinPrice() {
if (textToSpeech) {
const utterance = new SpeechSynthesisUtterance(textToSpeech);
utterance.lang = 'en-US';
speechSynthesis.speak(utterance);
}
}
@ssaurel
ssaurel / numberToWords.js
Created March 26, 2021 14:56
Number to Words for Bitcoin Price in Words
var a = ['','one ','two ','three ','four ', 'five ','six ','seven ','eight ','nine ','ten ','eleven ','twelve ','thirteen ','fourteen ','fifteen ','sixteen ','seventeen ','eighteen ','nineteen '];
var b = ['', '', 'twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety'];
function numberToWords (num) {
if ((num = num.toString()).length > 9)
return 'MOON';
n = ('000000000' + num).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/);
if (!n)
@ssaurel
ssaurel / parseJson.js
Created March 26, 2021 14:50
Parse JSON for Bitcoin Price in Words
function parseJson(json) {
var time = "on " + json["time"]["updated"];
var usdValue = json["bpi"]["USD"]["rate"];
var gbpValue = json["bpi"]["GBP"]["rate"]; // ToDo later
var euroValue = json["bpi"]["EUR"]["rate"]; // ToDo later
var usdValueInWords = (numberToWords(usdValue.split(".")[0].replace(",","")) + " dollars").toUpperCase();
document.getElementById("content").innerHTML = usdValueInWords;
@ssaurel
ssaurel / bpi_call.js
Created March 26, 2021 14:45
BPI Call For Bitcoin Price in Words
function bitcoinPrice() {
var xmlhttp = new XMLHttpRequest();
var url = "https://api.coindesk.com/v1/bpi/currentprice.json";
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var json = JSON.parse(this.responseText);
parseJson(json);
}
};