Počítačová hra Operace Flashpoint (Arma: Cold War Assault) od společnosti Bohemia Interactive slaví 25 let. Při této příležitosti bylo publikováno bezplatné hratelné Arma: Cold War Assault Remastered Demo a na GitHubu byly zveřejněny zdrojové kódy.
Na trh v České republice přichází HP EliteBoard G1a. Jde o plnohodnotný AI počítač integrovaný přímo do těla klávesnice, tedy zařízení, které na první pohled vypadá jako minimalistická klávesnice, ale ve skutečnosti nahrazuje klasickou počítačovou jednotku.
V lednu bylo oznámeno, že desktopové prostředí Xfce bude mít vlastní kompozitor pro Wayland s názvem xfwl4. O víkendu byla vydána první preview verze.
Minulý týden byl oficiálně vydán Android 17. Detaily na blogu a stránkách věnovaných vývojářům.
Dnes jde do prodeje zařízení Steam Machine. Steam Machine 512 GB za 1 039 EUR a Steam Machine 2 TB za 1 359 EUR. Do čtvrtka 25. června do 19:00 se lze zapsat na seznamy. Ty budou jednorázově náhodně slosovány, čímž bude určeno pořadí rezervací a čekacích listin.
Vývojáři OpenMW (Wikipedie) oznámili vydání verze 0.51.0 této svobodné implementace enginu pro hru The Elder Scrolls III: Morrowind. Přehled novinek v oznámení o vydání a také na YouTube a PeerTube.
Byla vydána nová verze 2026.3.0 "Carousels & Killer Whales" svobodného softwaru ScummVM (Wikipedie) umožňujícího bezproblémový běh mnoha klasických adventur na zařízeních, pro které nebyly nikdy určeny. Přehled novinek v poznámkách k vydání a na GitHubu.
Tento týden (24. a 27. června) vyprší platnost Microsoft certifikátu v UEFI vydaných v roce 2011. Nové certifikáty byly vydány v roce 2023. Kdo na počítačích, i virtuálních, používá zabezpečené spouštění (Secure Boot), měl by si ověřit, že má certifikáty aktualizovány, viz např. články na Red Hat nebo Fedora. Pro stávající systémy se nic nemění. Nadále se budou normálně spouštět. Zavaděče podepsané pouze klíčem z 2023 se ale na počítačích s pouze certifikátem 2011 nespustí. Ve Fedoře je zavaděč shim ve verzi 16.1-6 podepsán klíči 2011 i 2023.
Uživatelé mobilních telefonů s Linuxem si nyní mohou nainstalovat aplikaci Mobilní Datovka. Díky tomu je přístup k datovým schránkám dostupný i na zařízeních s mobilními linuxovými distribucemi, jako jsou například Mobian, NixOS Mobile, pmOS atd. Aplikace je dostupná na Flathubu.
Software Freedom Conservancy v novém dokumentu shrnuje doporučení, jak přistupovat ke generativní AI založené na LLM při přispívání do svobodného a open-source softwaru. Mimo jiné vyzývá k obezřetnosti, transparentnosti a revizi generovaného kódu člověkem.
Ahoj, narazil jsem na problémek se sestavením algoritmu pro generování náhodných znaků. Ne nejedná se o domácí úkol nebo podobně. Zadání tohoto příkladu bylo u zkoušky z programování v pascalu. Přiznávám trochu jsem se do toho zamotal. Takže zadání bylo následující: Generuj náhodný počet náhodných znaků v rozmezí 150 až 250 znaků z množiny čísel 0 až 9 a velkých a malých písmen anglické abecedy. Generované znaky musí být v poměru zadaném uživatelem. Tz. např. 30% znaků čísel. Generované znaky zapiš do souboru a to náhodně. Nešlo tedy vygeneroval 30% znaků čísel zapsat do souboru a dogenerovat znaky písmen do 100% celkového počtu znaků. Výsledkem měl být soubor, kde bude např. celkem 100 znaků, z toho 30 znaků čísel a 70 znaků velkých a malých písmen.
Ideu jak to udělat jsem měl, ale .... Případ kdy je 100 nebo 0 procent čísel je v pořádku. Problém mám kdy je to mezi
Myslel jsem něco jako
pom:=random(2);
if (pom=0) then ............... "generuj cislo";
else
if pom(1) then
begin
pom:=random(2);
if (pom:=0) then ....... "generuj male pismeno"
else .................. "generuj velke pismeno"
end;
celé to zaobalit do for i:=1 to celkovy_pocet_znaku. Jenze se mi nějak nedaří dostat tam tu podmínku dodržení procent znaku/cisel. Podařilo se mi, že podmínka byla dodržena, ale měl jsem o 1 nebo 2 znaky více, nebo mi seděl celkový počet znaků, ale neseděli procenta.
Nemáte někdo nějaký nápad jak z toho? Pro tu zkoušku to už není podstatné, jen mi to leží v hlavě
Tiskni
Sdílej:
short cisel = 0.3; // 30% tohle at se vsechno nastavi nekde na vstupu
short pismen = 0.7; // 70%
int celkem = 100;
int celkem_cisel = celkem*cisel;
int celkem_pismen = celkem*pismen;
for (i=0,i<=celkem ,i++){
srand((unsigned)time(0)); // aby cisla byla na pohled nahodna
int rozhodovac = rand();
if (((rozhodovac%2)=0 && celkem_cisel>=0) || celkem_pismen=0){
// generovani 1 cisla se zapisem do souboru atd., nechce se mi nad tim premyslet
--celkem_cisel;
}
if (((rozhodovac%2)!=0 && celkem_pismen>=0 || celkem_cisel=0){
// generovani 1 pismena se zapisem do souboru atd
--celkem_pismen;
}
}
import random
import re
# vrati znak 0-9
def getNumber():
return chr(random.randrange(ord('0'), ord('9')))
# vrati A-Za-z
def getChar():
ret = chr(91)
while not re.match('[A-Za-z]', ret):
ret = chr(random.randrange(ord('A'), ord('z')))
return ret
# pomer pouze ciselnych ku neciselnym
num_ratio = 0.3
# celkovy pocet cisel
count = random.randrange(150, 250)
# generovani
while count:
if (random.randint(0, 99) <= 100*num_ratio):
print getNumber()
else:
print getChar()
count -= 1
Dokonalejší verze by si ještě pamatovala počty už vygenerovaných čísel/znaků, ale s tím se mi popravdě už psát nechtělo
(define (gen-items noitems fromc toc)
(if (= noitems 0) '()
(append (gen-items (- noitems 1) fromc toc)
(list (integer->char
(+ (random (+ (- (char->integer toc) (char->integer fromc)) 1)) (char->integer fromc)))))))
(define (shake noshakes str)
(if (= noshakes 0) str
(let* ((pos1 (random (string-length str))) (pos2 (random (string-length str)))
(ch1 (string-ref str pos1)) (ch2 (string-ref str pos2)))
(string-set! str pos1 ch2)
(string-set! str pos2 ch1)
(shake (- noshakes 1) str))))
;Tohle si definuje uzivatel
(define nonums 0.2)
(define nosc 0.3)
(define nolc 0.5)
;A tohle uz se pocita
(define noitems (+ 150 (random (+ 1 (- 250 150)))))
(define str (list->string (append (gen-items (inexact->exact (round (* noitems nolc))) #\A #\Z)
(gen-items (inexact->exact (round (* noitems nosc))) #\a #\z)
(gen-items (inexact->exact (round (* noitems nonums))) #\0 #\9))))
(shake (* (string-length str) 2) str)
Já bych na to hrubou silou:
(use srfi-13)
(use srfi-27)
;; Ze znaku retezce retezec generuje nahodny retezec delky delka ;)
(define (nahodny-retezec retezec delka)
(string-tabulate (lambda _
(string-ref retezec (random-integer (string-length retezec))))
delka))
;; nahodne prohazi seznam
(define (prohazej seznam)
(map cdr
(sort (map (cut cons (random-real) <>) seznam)
(lambda (a b) (< (car a) (car b))))))
(define (generuj delka)
(let* ((cislic (round (* 0.3 delka)))
(retezec-k-prohazeni (string-concatenate
(map nahodny-retezec
'("abcdefghijklmnopqrstuvxwyzABCDEFGHIJKLMNOPQRSTUVXWYZ"
"0123456789") ; mnoziny znaku
(list (- delka cislic) cislic))))) ; prislusne pocty
(list->string (prohazej (string->list retezec-k-prohazeni)))))
(dotimes (i 10) (display (generuj 20)) (newline))
CHARS = (('a'..'z').to_a + ('A'..'Z').to_a)
NUMS = (0..9).to_a
def generate(l)
c = (l*0.3).round
t = [[CHARS, l-c], [NUMS, c]].map{|ch, n| Array.new(n){ch[rand(ch.size)]}}
t.flatten.sort_by {rand}.join
end
Přijde mi rozumně kompaktní a dá se rozšířit na více skupin ekvivalence
if ((procent>0) and (procent<100)) then {generuje pismena i znaky}
begin
cisel:=Int((pocet/100)*procent);
pismen:=(pocet-cisel);
c:=0;
p:=0;
for i:=1 to ((pocet)) do
begin
pom:=random(2);
if ((pom=0) and (c<>cisel)) then
generuj_cisla;
if ((pom=0) and (c=cisel)) then
generuj_znaky;
if ((pom=1) and (p<>pismen)) then
generuj_znaky;
if ((pom=1) and (p=pismen)) then
generuj_cisla;
end
end;
Generuj_cisla a generuj_znaky jsou procedury, které vypadají takto :
procedure generuj_cisla;
begin
znak := random(10)+48; {generuje cisla}
c:=c+1;
write(vystup,chr(znak));
end;
procedure generuj_znaky;
begin
if (random(2))=0 then
begin
znak := random(26)+65; {generuje velka pismena}
p:=p+1;
write(vystup,chr(znak))
end
else
begin
znak := random(26)+97; {generuje male pismena}
p:=p+1;
write(vystup,chr(znak));
end;
end;
Netušíte někdo jak to odladit aby mi neulítával ten jeden či dva znaky? Vyjma možnosti, že je na konci spočítám a přebývající smažu.
int main(int argc,char **argv)
{
// pocet znaku
const int count = 1000;
// pomer
float rate = 0.256;
int zero_rate = (int)(rate*(float)count);
int sum = count;
int z_cnt = 0;
int o_cnt = 0;
do {
if (rand()%sum < zero_rate) {
putchar('0');
z_cnt++;
zero_rate--;
}
else {
putchar('1');
o_cnt++;
}
} while(--sum > 0);
register float f_count = (float)count;
printf("\nfinal rate: %f : %f\n",(float)z_cnt/f_count,(float)o_cnt/f_count);
return 0;
}
cat /dev/urandom | tr -cd A-Za-z0-9 | fold -w8 | head -n 1