Grafischer Zufallsgenerator


10

Gibt es einen Zufallsgenerator für Linux mit einer schönen Benutzeroberfläche, der eine zufällige Ganzzahl zwischen zwei Ganzzahlen erzeugen und mit einer großen Schriftgröße anzeigen kann?


Was wirst du machen? Mentale Mathematik?
BigSack

Antworten:


36

Ich kenne keine Software. Google hat sich auch nichts ausgedacht. Ich denke, das ist ein zu einfaches Problem. Es sollten ungefähr 30 Codezeilen sein, wenn Sie es in einer Skriptsprache geschrieben haben. Sie können dazu auch eine LibreOffice-Tabelle erstellen. Sollte nicht besonders schwierig sein.

Bearbeiten 1:

Pseudozufallszahlengenerator - Perl-GUI-Skript

Unten ist ein schnelles und schmutziges Perl-Skript, das ich codiert habe. Sie sollten es selbst ändern können. Wenn Sie es mit perl nameOfTheScript.plausführen oder ausführbar machen chmod u+x nameOfTheScript.plund dann darauf doppelklicken, sieht es wie im obigen Bild aus.

#!/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;

Edit2

ObsessiveFOSS hat mich gebeten, einen weiteren Generator für Zufallszahlen einzuschließen (da dieses Skript Perls eingebauten verwendet). Sie können eine Skizze dazu in meiner anderen Antwort sehen .


9
+1 - die Tatsache, dass Sie sich genug darum gekümmert haben, ein Skript dafür zu schreiben, ist erstaunlich.
jrg

4
Es ist schön zu sehen, dass Sie Zeit damit verbracht haben, ein Skript dafür bereitzustellen. Groß!
Samarasa

Froh, dass Sie es mögen.
con-f-use

@ con-f-use Es wäre schön, wenn Sie es in der gpl-Lizenz veröffentlichen könnten.
Lincity

@Alaukik Wäre die MIT-Lizenz auch für Sie in Ordnung? Es ist freizügiger und GPL-kompatibel?
con-f-use

4

ObsessiveFOSS bat um die Implementierung von Blum et al. kryptographisch sicherer Pseudozufallszahlengenerator. Hier ist meine Skizze, wie es geht. Der andere Code bleibt der gleiche wie in meiner früheren Antwort . Man muss nur das randomizeLabelUnterprogramm ersetzen und stattdessen diesen Code einfügen :

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>" );
}

Wie bereits erwähnt ist es unvollständig. Man müsste bitweise Operatoren verwenden, um nützliche Zufallszahlen zu extrahieren, sie zu verschieben und zu skalieren, um zwischen $minund zu passen $max. Derzeit wird die Eingabe für Minimum und Maximum nicht verwendet.


Ich vermute, es gibt ein Perl-Modul für CSPRNG, das einen besseren Job macht als mein Skript.
con-f-use

1

Mit QML ist dies heute sehr einfach möglich:

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);
        }
    }
}

Führen Sie diesen Code aus mit qmlscene:

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.