Deutsch   English   Français   Italiano  
<652040ed$0$7527$426a74cc@news.free.fr>

View for Bookmarking (what is this?)
Look up another Usenet article

X-Received: by 2002:a5d:4e4e:0:b0:321:13a4:425d with SMTP id r14-20020a5d4e4e000000b0032113a4425dmr62107wrt.7.1696612589361;
        Fri, 06 Oct 2023 10:16:29 -0700 (PDT)
Path: ...!news-out.google.com!nntp.google.com!proxad.net!feeder1-2.proxad.net!cleanfeed1-a.proxad.net!nnrp6-1.free.fr!not-for-mail
Subject: Re: TV Zap
From: =?UTF-8?B?RnJhbsOnb2lzIEd1aWxsZXQ=?= <guillet.francois@wanadoo.fr>
References: <651dbae6$0$7463$426a74cc@news.free.fr> <ay4iMMu4YMzBgOmGxRcBP0UGoRc@jntp>
Newsgroups: fr.sci.maths
X-Newsreader: MesNews/1.08.06.00
Date: Fri, 06 Oct 2023 19:16:29 +0200
MIME-Version: 1.0
X-Face: &W|6U/fRZhPQe.DoT9!N+FjhHe!St`rbs`!**{SIrH/$mU%*Fn![0tKa>3i2/VNC#)OS$je U5Y[[>{4Q-nf3p~%*~&=PX;icirfK\`3U9/6_2Rh%]kBJ=n"e|~+J!_Cehr=@qyLOx^(T[jC(Sqagk WU_Kp8lwP)i=Fjyf
Lines: 68
Message-ID: <652040ed$0$7527$426a74cc@news.free.fr>
Organization: Guest of ProXad - France
NNTP-Posting-Date: 06 Oct 2023 19:16:29 CEST
NNTP-Posting-Host: 90.105.147.124
X-Trace: 1696612589 news-2.free.fr 7527 90.105.147.124:62506
X-Complaints-To: abuse@proxad.net
Content-Type: text/plain; charset="utf-8"; format=flowed
Content-Transfer-Encoding: 8bit
Bytes: 4205

pehache a présenté l'énoncé suivant :
> Le 04/10/2023 à 21:20, François Guillet a écrit :
>> Pour une appli de "zapping" au hasard parmi N chaînes TV, l'utilisateur 
>> cliquera un bouton pour avancer et un autre pour reculer dans une séquence 
>> aléatoire qui fournira le N° de la chaîne à jouer.
>> 
>> Ce numéro aléatoire des chaînes suivantes et précédentes devra être 
>> calculés à partir du N° de chaîne actuellement lue.
>> S'il regarde par exemple la 23, la suivante pourra être la 5 et la 
>> précédente la 47, mais toujours ces deux mêmes à partir de la 23. Il me 
>> semble que VLC fait ça.
>> 
>> Bien sûr on pourra générer au départ des séquences différentes à partir 
>> d'un nombre S mais ensuite la séquence est déterminée.
>> Pour des raisons d'implémentation je ne veux pas à voir à mémoriser une 
>> séquence aléatoire, c'est toujours par calcul qu'on avancera ou reculera 
>> dans la séquence.
>> 
>> Si C est le numéro de la chaîne lue, il me faut donc deux fonctions liées 
>> Favant et Farrière tel que A+ = Fav(S,C) et A- = Far(S,C), où A+ et A- sont 
>> les numéros des chaînes aléatoires suivantes et précédentes.
>> 
>> Et on devra avoir C = Far(S,A+) = Fav(S,A-) puisque la séquence est "figée" 
>> et utilisée de façon bi-directionnelle.
>> 
>> Contrainte supplémentaire, le tour de la séquence devra se faire sur toutes 
>> les chaînes et sans doublon. Quelles fonctions les plus simples possibles 
>> pourrait-on utiliser ?
>
> Si pgcd(N,S) = 1, alors
> Fav(S,C) = modulo(C-1+S,N)+1
> Fav(S,C) = modulo(C-1-S,N)+1
> répond aux critères
>
> Une fois S fixé la série n'a en réalité rien d'aléatoire, mais certains choix 
> de S donnent des séries ont qui l'air (même si seulement l'air) aléatoires.
> N = 12
> S = 1 :    1    2    3    4    5    6    7    8    9   10   11   12
> S = 3 :    1    4    7   10    1    4    7   10    1    4    7   10
> S = 5 :    1    6   11    4    9    2    7   12    5   10    3    8
> S = 7 :    1    8    3   10    5   12    7    2    9    4   11    6
> S = 11:    1   12   11   10    9    8    7    6    5    4    3    2

Ca marche parfaitement et c'est simplissime. Le seul souci a été de me 
retrouver avec des valeurs négatives là où on a -S dans la formule. 
Prendre la valeur absolue ne résolvait rien.
J'ai donc ajouté n*S pour être sûr d'avoir du positif, et bien sûr 
comme c'est un multiple de n le modulo ne change pas.

Cerise sur le gâteau, avec S=1, on zappe dans l'ordre des chaînes.

Résultat en JS. "type" et le type d'avancement qu'on souhaite.
g et d pour droite et gauche : on zappe en aléatoire comme prévu.
h et b pour haut et bas : on zappe par +1 / -1 dans la liste.

switch (type) {
   case 'h' :
      S=1;
		case 'g':
			this.C = 1 + (this.C -1 -S + n*S) % n ;
		break;

		case 'b' :
		S=1;
		case 'd' :
			this.C = 1 + (this.C -1 + S) % n ;
		break;
	}