Generator acak grafis

10

Apakah ada generator acak untuk linux dengan GUI yang bagus, yang dapat menghasilkan bilangan bulat acak antara dua bilangan bulat dan menampilkannya dengan ukuran font yang besar?

siswa
sumber
Apa yang akan kau lakukan? Matematika Mental?
BigSack

Jawaban:

36

Saya tidak tahu perangkat lunak apa pun. Google juga tidak menemukan sesuatu. Kira ini masalah yang terlalu sederhana. Seharusnya sekitar 30 baris kode jika Anda menulisnya dalam bahasa scripting. Anda juga bisa membuat spreadsheet LibreOffice untuk melakukannya. Seharusnya tidak terlalu sulit.

Edit 1:

pseudo-random number generator - skrip perl gui

Di bawah ini adalah skrip perl cepat dan kotor yang saya kode. Anda harus dapat memodifikasinya sendiri. Ketika Anda menjalankannya dengan perl nameOfTheScript.platau membuatnya dapat dijalankan dengan chmod u+x nameOfTheScript.pldan kemudian klik dua kali, itu akan terlihat seperti pada gambar di atas.

#!/usr/bin/perl
# © 2011 [email protected]. 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 meminta saya untuk memasukkan generator lain untuk nomor acak (karena skrip ini menggunakan build-in satu dari Perl). Anda dapat melihat sketsa tentang bagaimana melakukannya di jawaban saya yang lain .

con-f-use
sumber
9
+1 - fakta bahwa Anda cukup peduli untuk menulis skrip sehingga menakjubkan.
JRG
4
Sangat menyenangkan untuk melihat bahwa Anda menghabiskan waktu untuk menyediakan skrip untuk ini. Bagus!
samarasa
Senang kamu menyukainya.
con-f-use
@ con-f-use akan lebih baik jika Anda bisa merilisnya di lisensi gpl.
Lincity
@Alaukik Apakah Lisensi MIT juga baik-baik saja dengan Anda. Ini lebih permisif dan kompatibel dengan GPL?
con-f-use
4

ObsessiveFOSS diminta untuk mengimplementasikan Blum, et al. generator nomor pseudo-acak kriptografi aman. Inilah sketsa saya tentang cara melakukannya. Kode lainnya tetap sama seperti pada jawaban saya sebelumnya . Anda hanya perlu mengganti randomizeLabelsubrutin dan memasukkan kode ini sebagai gantinya:

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

Seperti yang disebutkan itu tidak lengkap. Seseorang harus menggunakan operator bitwise untuk mengekstraksi angka acak yang berguna, menggeser dan menskalakannya agar sesuai antara $mindan $max. Saat ini input untuk minimum dan maksimum tidak digunakan.

con-f-use
sumber
Saya menduga ada modul Perl untuk CSPRNG yang melakukan pekerjaan lebih baik daripada skrip saya.
con-f-use
1

Ini dapat dilakukan dengan sangat mudah dengan QML hari ini:

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

Jalankan kode ini dengan qmlscene:

masukkan deskripsi gambar di sini

Sylvain Pineau
sumber