Существует ли случайный генератор для Linux с хорошим GUI, который может генерировать случайное целое число между двумя целыми числами и отобразить его с большим fontsize?
Я не знаю программного обеспечения. Google не придумал что-то также. Угадайте, что это - слишком простая проблема. Это должны быть приблизительно 30 строк кода, если бы Вы записали это в языке сценариев. Вы могли также создать электронную таблицу LibreOffice, чтобы сделать это. Не должно быть ужасно трудным.
Ниже быстрый и грязный сценарий жемчуга, который я кодировал. Необходимо смочь изменить его сами. Когда Вы выполняете его с perl nameOfTheScript.pl
или сделайте это исполняемым файлом с chmod u+x nameOfTheScript.pl
и затем дважды щелкните по нему, это будет похоже в изображении выше.
#!/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;
ObsessiveFOSS попросил, чтобы я включал другой генератор для случайных чисел (поскольку это - сборка Perl использования этого сценария - в одной). Вы видите, что эскиз на практическом руководстве делает это в моем другом ответе.
ObsessiveFOSS попросил реализовывать Blum, и др. криптографически защищать генератор псевдослучайного числа. Вот мой эскиз о том, как сделать это. Другой код остается таким же как в моем более раннем ответе. Просто нужно заменить randomizeLabel
подпрограмма и вводит этот код вместо этого:
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>" );
}
Как упомянуто это неполно. Нужно было бы использовать побитовые операторы, чтобы извлечь полезные случайные числа, сместить и масштабировать их для установки между $min
и $max
. Прямо сейчас вход для минимума и максимума не использован.
Это может быть сделано очень легко с QML сегодня:
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);
}
}
}
Выполните этот код с qmlscene
: