Letos se uskuteční již 11. ročník soutěže v programování Kasiopea. Tato soutěž, (primárně) pro středoškoláky, nabízí skvělou příležitost procvičit logické myšlení a dozvědět se něco nového ze světa algoritmů – a to nejen pro zkušené programátory, ale i pro úplné začátečníky. Domácí kolo proběhne online od 22. 11. do 7. 12. 2025 a skládá se z 9 zajímavých úloh různé obtížnosti. Na výběru programovacího jazyka přitom nezáleží – úlohy jsou
… více »Byla vydána nová verze 2.52.0 distribuovaného systému správy verzí Git. Přispělo 94 vývojářů, z toho 33 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.
VKD3D-Proton byl vydán ve verzi 3.0. Jedná se fork knihovny vkd3d z projektu Wine pro Proton. Knihovna slouží pro překlad volání Direct3D 12 na Vulkan. V přehledu novinek je vypíchnuta podpora AMD FSR 4 (AMD FidelityFX Super Resolution 4).
Poštovní klient Thunderbird byl vydán v nové verzi 145.0. Podporuje DNS přes HTTPS nebo Microsoft Exchange skrze Exchange Web Services. Ukončena byla podpora 32bitového Thunderbirdu pro Linux.
U příležitosti státního svátku 17. listopadu probíhá na Steamu i GOG.com již šestý ročník Czech & Slovak Games Week aneb týdenní oslava a také slevová akce českých a slovenských počítačových her.
Byla vydána nová verze 9.19 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnout lze například nový balíček BirdNET-Go, tj. AI řešení pro nepřetržité monitorování a identifikaci ptáků.
Byla vydána nová verze 3.38 frameworku Flutter (Wikipedie) pro vývoj mobilních, webových i desktopových aplikací a nová verze 3.10 souvisejícího programovacího jazyka Dart (Wikipedie).
Organizace Apache Software Foundation (ASF) vydala verzi 28 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.
Byl vydán Debian 13.2, tj. druhá opravná verze Debianu 13 s kódovým názvem Trixie. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
Google představil platformu Code Wiki pro rychlejší porozumění existujícímu kódu. Code Wiki pomocí AI Gemini udržuje průběžně aktualizovanou strukturovanou wiki pro softwarové repozitáře. Zatím jenom pro veřejné. V plánu je rozšíření Gemini CLI také pro soukromé a interní repozitáře.
return super().find_class(module, name) AttributeError: Can't get attribute 'array_constructor' on module 'numpy' from '/usr/lib64/python3.10/site-packages/numpy/__init__.py' Error loading data: 'NoneType' object is not callable Error loading puzzle from lib/games/Medium/tmprPirlZ: Unpickled data is None. AttributeError: Can't get attribute 'array_constructor' on module 'numpy' from '/usr/lib64/python3.10/site-packages/numpy/__init__.py' for module: numpy, name: array_constructorOriginální kód:
class MyUnpickler(pickle.Unpickler):
def find_class(self, module, name):
# help unpickle find the correct module (since sys.path is different
# from when we generated the puzzles)
if module == 'sudoku':
return getattr(sudoku, name)
return pickle.Unpickler.find_class(self, module, name)
def loadPuzzles(num, difficulty='Any'):
indexfile = os.path.join(DATA_DIR, difficulty + ".index")
index = file(indexfile).readlines()
puzzlepaths = random.sample(index, num)
puzzles = []
g = sudoku_maker.SudokuGenerator()
for path in puzzlepaths:
path = path.strip()
infile = os.path.join(DATA_DIR, path)
puz = MyUnpickler(file(infile)).load()
d = g.assess_difficulty(puz.grid)
puzzles.append((puz, d))
return puzzles
Převedený kód:
class MyUnpickler(pickle.Unpickler):
def find_class(self, module, name):
if module == 'Numeric':
# Redirect to numpy
module = 'numpy'
elif module == 'sudoku':
return getattr(sudoku, name)
elif module == 'numpy':
if name == 'array_constructor':
# Handle the specific case for array_constructor
# You can return np.array or a custom function if needed
return np.array # or whatever function you need to return
# Add a fallback for unknown classes
try:
return super().find_class(module, name)
except AttributeError as e:
print(f"AttributeError: {e} for module: {module}, name: {name}")
# Optionally log the entire traceback
import traceback
traceback.print_exc()
def load_my_data(file):
# Check if the input is a string (file path) or a file object
if isinstance(file, str):
with open(file, 'rb') as f:
return MyUnpickler(f).load()
#return pickle.Unpickler(f).load()
else:
try:
return MyUnpickler(file).load()
except Exception as e:
print(f"Error loading data: {e}")
return None
def loadPuzzles(num, difficulty='Any'):
indexfile = os.path.join(DATA_DIR, difficulty + ".index")
with open(indexfile, 'r') as file:
index = file.read().strip().splitlines() # Read lines into a list
puzzlepaths = random.sample(index, num)
puzzles = []
g = sudoku_maker.SudokuGenerator()
for path in puzzlepaths:
path = path.strip()
infile = os.path.join(DATA_DIR, path)
try:
with open(infile, 'rb') as f: # Open the file in binary mode
puz = load_my_data(f) # Use the file object here
if puz is None:
raise ValueError("Unpickled data is None.")
d = g.assess_difficulty(puz.grid)
puzzles.append((puz, d))
except Exception as e:
print(f"Error loading puzzle from {infile}: {e}")
# Continue to the next puzzle instead of returning None
return puzzles # Return the list of puzzles, which may be empty if none were loaded
import pickletools
with open("tmpzVugvu",'rb') as fh: pickletools.dis(fh)
je tam skutence Numeric array:
5036: s SETITEM 5037: S STRING 'grid' 5045: p PUT 362 5050: c GLOBAL 'Numeric array_constructor' 5077: p PUT 363 5082: ( MARK 5083: ( MARK 5084: I INT 9 5087: I INT 9 5090: t TUPLE (MARK at 5083) 5091: p PUT 364 5096: S STRING 'b' 5101: p PUT 365 5106: S STRING '\x02\x00\x00\x00\x00\x07\x01\x00\x00\x00\x08\x00\x00\x00\x06\x05\x03\t\x00\x00\x00\x00\t\x04\x02\x08\x00\x00\x00\x00\x00\x04\x00\x00\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x07\x00\x00\x08\x00\x00\x00\x00\x00\x01\t\x03\x05\x00\x00\x00\x00\x03\x05\x07\x04\x00\x00\x00\t\x00\x00\x00\x06\x07\x00\x00\x00\x00\x04' 5426: p PUT 366Podle retezce 'grid' zjistis, ze v sudoku.py je trida SudokuGrid, ktera vyrabi self.grid = Numeric.array(self.grid,typecode='b'). Zaroven je to jedine misto v puvodnim kodu, kde se modul Numeric pouziva. Zadruhe, ChatGPT je k h*vnu, protoze tvoje podminka:
if module == 'Numeric':
# Redirect to numpy
module = 'numpy'
elif module == 'sudoku':
return getattr(sudoku, name)
elif module == 'numpy':
if name == 'array_constructor':
# Handle the specific case for array_constructor
# You can return np.array or a custom function if needed
return np.array # or whatever function you need to return
# Add a fallback for unknown classes
nedava smysl.
['Hard/tmppJClrx']
Numeric array_constructor:
[[2 9 0 0 0 0 0 0 6]
[0 8 0 0 2 6 0 3 0]
[0 3 0 5 0 0 2 0 0]
[5 0 3 0 4 0 0 2 0]
[1 0 0 0 7 0 0 0 5]
[0 7 0 0 8 0 4 0 3]
[0 0 9 0 0 8 0 7 0]
[0 5 0 4 6 0 0 9 0]
[8 0 0 0 0 0 0 5 4]]
Impossible!
Puzzle was:
Solution:
Grid
4 9 8 6 7 2 3 1 5
2 6 3 4 5 1 9 8 7
7 1 5 3 8 9 2 4 6
3 5 7 8 2 6 1 9 4
8 4 1 9 3 7 6 5 2
6 2 9 1 4 5 7 3 8
5 8 6 2 9 3 4 7 1
9 7 2 5 1 4 8 6 3
1 3 4 7 6 8 5 2 9
Puzzle foobared in following state:
Error loading puzzle from lib/games/Hard/tmppJClrx: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Numeric.py
import numpy as np
def array_constructor(pole, typecode, hex_string, typ=True):
# Převod hexadecimálního řetězce na bajty
byte_array = bytes(hex_string, 'latin1')
# Vytvoření NumPy pole z bajtového pole
numpy_array = np.frombuffer(byte_array, dtype=np.uint8)
# Zkontrolujte, zda má pole dostatečný počet prvků pro 9x9
if numpy_array.size < 81:
raise ValueError("Hex string does not contain enough data for a 9x9 array.")
# Přetvoření pole na rozměry 9x9
numpy_array_reshaped = numpy_array[:81].reshape(9, 9)
print ("Numeric array_constructor:")
print (numpy_array_reshaped)
return numpy_array_reshaped
'''
if grid:
if type(grid)==str:
'''
if grid is not False: # Změna podmínky
if isinstance(grid, str):
class DifficultyRating:
def count_values(self, dct):
kk = list(dct.keys()) # Převod dict_keys na seznam, puvodne kk=dct.keys()
kk.sort() # Nyní můžete použít sort()
return [len(dct[k]) for k in kk]
Tiskni
Sdílej: