Sto passando per Z3py e ho una domanda su come utilizzare l'API in un paio di casi specifici. Il codice seguente è una versione semplificata di qualcosa che alla fine vorrei usare per Z3. Alcune delle mie domande sono: 1. C'è un modo per creare una serie arbitrariamente lunga di valori come la variabile 'a' sotto? 2. È possibile accedere a ciascun elemento della matrice nei loop tramite Z3py? 3. È possibile assegnare un risultato a una variabile originale o è necessaria una nuova variabile? La conversione in CNF aggiungerà automaticamente un ID univoco? (ovvero a + = b)Apprendimento Z3py - È disponibile il supporto per array e loop
Nel complesso, sono perso su come applicare l'API Z3py per qualcosa di simile all'algoritmo di seguito, in cui la soluzione dipende da "b". Qualsiasi aiuto o suggerimento è/è apprezzato, grazie.
import sys
import struct
a = "\xff\x33\x01\x88\x02\x11\x03\x55"
b = sys.stdin.read(1) #a byte of user input - value 'a' is good
c = ''
d = ''
for x in range(len(a)):
c += struct.pack('B', int(a[x].encode('hex'), 16)^int(b.encode('hex'), 16))
print c.encode('hex')
second = '\x23\x23'
x = 0
while x < len(c):
d += struct.pack('h', int(c[x:x+1].encode('hex'), 16)^int(second.encode('hex'), 16))
x += 2
print d.encode('hex')
if d == '\xbd\x23\x43\x23\x40\x23\x41\x23':
print "Good"
else:
print "Bad"
Vorrei verificare se ho capito la domanda. Sembra che tu voglia usare Z3Py per risolvere il problema: dato 'a' e' d', trova 'b' tale da stampare' Buono'. È così? –
Sì, è giusto. – daybreak