Générateur aléatoire graphique


10

Existe-t-il un générateur aléatoire pour Linux avec une belle interface graphique, qui peut générer un entier aléatoire entre deux entiers et l'afficher avec une grande taille de police?


Que vas-tu faire? Mathématiques mentales?
BigSack

Réponses:


36

Je ne connais aucun logiciel. Google n'a pas non plus trouvé quelque chose. Je suppose que c'est un problème trop simple. Il devrait contenir environ 30 lignes de code si vous l'avez écrit dans un langage de script. Vous pouvez également créer une feuille de calcul LibreOffice pour ce faire. Ça ne devrait pas être terriblement difficile.

Modifier 1:

générateur de nombres pseudo-aléatoires - script perl gui

Ci-dessous est un script perl rapide et sale que j'ai codé. Vous devriez pouvoir le modifier vous-même. Lorsque vous l'exécutez avec perl nameOfTheScript.plou le rendez exécutable avec chmod u+x nameOfTheScript.plpuis double-cliquez dessus, il ressemblera à l'image ci-dessus.

#!/usr/bin/perl
# © 2011 con-f-use@gmx.net. Use permitted under MIT license: http://www.opensource.org/licenses/mit-license.php
use Gtk2 '-init'; # relies on the gnome toolkit bindings for perl

$size = 1e5;   # fontsize in 0.001 pt (only god knows why)

sub randomizeLabel {   #### this does the actual randomisation
    $min = int($entry1->get_text);
    $max = int($entry2->get_text);
    $rand = int(rand($max-$min+1)) + $min;
    $diplabel->set_markup( "<span size=\"$size\">$rand</span>" );
}
#### the rest is gui stuff:
$window = Gtk2::Window->new('toplevel');
$window->set_title('Random Integer Generator');
$window->signal_connect(destroy => sub { Gtk2->main_quit; });
$window->signal_connect(delete_event => sub { Gtk2->main_quit; });
$window->set_border_width(10);
$vbox = Gtk2::VBox->new(0, 5);   $window->add($vbox); $vbox->show;

$diplabel = Gtk2::Label->new;
$diplabel->set_markup("<span size=\"$size\">0</span>");
$vbox->add($diplabel);          $diplabel->show;

$entry1 = Gtk2::Entry->new;     $vbox->add($entry1);    $entry1->show;
$entry2 = Gtk2::Entry->new;     $vbox->add($entry2);    $entry2->show;

$button = Gtk2::Button->new("Generate!");
$button->signal_connect(clicked => \&randomizeLabel, $window);
$vbox->add($button);            $button->show;

$window->show;    Gtk2->main;
exit 0;

Modifier2

ObsessiveFOSS m'a demandé d'inclure un autre générateur de nombres aléatoires (car il s'agit de ce script qui utilise celui intégré à Perl). Vous pouvez voir un croquis sur la façon de le faire dans mon autre réponse .


9
+1 - le fait que vous vous souciez suffisamment d'écrire un script pour le faire est incroyable.
JRG

4
C'est agréable de voir que vous avez passé du temps à fournir un script pour cela. Génial!
samarasa

Content que tu aimes ça.
con-f-use

@ con-f-use ce serait bien si vous pouviez le publier dans la licence gpl.
Lincity

@Alaukik La licence MIT vous conviendrait-elle aussi? C'est plus permissif et compatible GPL?
con-f-use

4

ObsessiveFOSS a demandé de mettre en œuvre le Blum, et al. générateur de nombres pseudo-aléatoires cryptographiquement sécurisé. Voici mon croquis sur la façon de le faire. L'autre code reste le même que dans ma réponse précédente . Il suffit de remplacer le randomizeLabelsous - programme et d'insérer ce code à la place:

use bigint;

# Kinda large primes
$p = 338047573;   # Any pair of large primes will suffice here...
$q = 4182249941;  #+...as long as they fullfill the congruence check below
$rand = 7;    # Seed for the random number generator (x_0 in the wiki)

sub errMsg {
    $dialog = Gtk2::MessageDialog->new($window, 'destroy-with-parent', 'error', 'ok', $_[0]);
    $dialog->signal_connect (response => sub { exit 1; });
    $dialog->run;
}

# Check congruence 3 mod 4 (for quadratic residue)
if( ($p-3)%4 == 0 ) { errMsg('Error: Variable p is ill choosen.'); }
if( ($q-3)%4 == 0 ) { errMsg('Error: Variable q is ill choosen.'); }
# Note: For large cycle lengths gcd(φ(p-1), φ(q-1)) should also be small,...
#+...where φ is Euler's totient function but this is not checked here

# Compute Modulus in Blum Blum Shub
$M = $p*$q;

sub randomizeLabel { # This does the actual randomization
    $min = int($entry1->get_text); $max = int($entry2->get_text); # Boundaries for the desired random range from the input filed of the GUI (included for convenience when modifying the script - not used here)

    # Blum Blum Shub pseudo random number generator
    $rand = ($rand*$rand) % $M;

    # Here you have to extract the bits and shift them in range
    $randout = $rand & (2**6-1); # Change this line. It's an example and extracts the five least significant bits! To extract the ten LSBs use '(2**11-1)' and so on...
    # $randout = ...$min...$max...; # shift it in the right range (not done here)

    $diplabel->set_markup( "<span size=\"$size\">$randout</span>" );
}

Comme mentionné, il est incomplet. Il faudrait utiliser des opérateurs au niveau du bit pour extraire des nombres aléatoires utiles, les déplacer et les mettre à l'échelle pour les ajuster entre $minet $max. À l'heure actuelle, l'entrée pour le minimum et le maximum n'est pas utilisée.


Je soupçonne qu'il existe un module Perl pour CSPRNG qui fait un meilleur travail que mon script.
con-f-use

1

Cela peut être fait très facilement avec QML aujourd'hui:

import QtQuick 2.0
import Ubuntu.Components 0.1

Rectangle {
    id: mainView
    width: units.gu(30) 
    height: units.gu(40)
    Column {
        id: generator
        spacing: units.gu(1)
        anchors.horizontalCenter: mainView.horizontalCenter
        Text {
            id: ramdom_number
            text: "0"
            font.pointSize: 100
            anchors.horizontalCenter: generator.horizontalCenter
        }
        TextField {
            id:min
            text: "0"
        }
        TextField {
            id: max
            text: "100"
        }
        Button {
            text: "Generate!"
            width: generator.width
            onClicked: ramdom_number.text = Math.floor((Math.random()*(max.text-min.text+1))+min.text);
        }
    }
}

Exécutez ce code avec qmlscene:

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.