day 8 parts 1 & 2
This commit is contained in:
parent
43d12dae95
commit
327a6eb4c6
3
08/Makefile
Normal file
3
08/Makefile
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
all:
|
||||||
|
nasm -g -felf32 main.s && ld -melf_i386 -g main.o
|
||||||
|
|
732
08/input
Normal file
732
08/input
Normal file
@ -0,0 +1,732 @@
|
|||||||
|
LLLLLLLRRRLRRRLRLRLRLRRLLRRRLRLLRRRLLRRLRRLRRLRLRRLRLRRRLRRLRLRRRLRRLRRLRLRRLLRLLRLRRRLRRLRLLLLRRLLLLRLRLRLRRRLRLRLLLRLRRRLRRRLRRRLRLRRLRRRLRLLLRLLRRLRRRLRRLRRLRRLRLRRRLRLRLRLLRRRLRRRLRRLRRRLLLRRLRRLRRRLRLRRRLRRRLRLRRLRRRLRLRRLRLRRLRRRLRLRRLRLLRRRLLRLRRLRRRLLLRLRRLRRRR
|
||||||
|
|
||||||
|
DGK = (KVQ, XHR)
|
||||||
|
KTC = (TVB, MTH)
|
||||||
|
CGR = (VVK, BKP)
|
||||||
|
LCG = (FQC, KHX)
|
||||||
|
PSZ = (FSF, QSM)
|
||||||
|
FBJ = (FHP, SPX)
|
||||||
|
KJD = (NRQ, VDH)
|
||||||
|
NCM = (JPJ, KNG)
|
||||||
|
TXH = (HNK, VHQ)
|
||||||
|
NND = (TRC, DFM)
|
||||||
|
JQN = (CNX, XLD)
|
||||||
|
RHB = (CDG, GBT)
|
||||||
|
JBN = (PXV, GVN)
|
||||||
|
DFC = (JRN, TXH)
|
||||||
|
TXG = (CHT, VBL)
|
||||||
|
XXQ = (JDC, JGV)
|
||||||
|
SVF = (FVD, LHQ)
|
||||||
|
FVK = (LCG, RNB)
|
||||||
|
XKT = (MPF, XJJ)
|
||||||
|
MHB = (JSJ, VQM)
|
||||||
|
FVC = (HXF, VVN)
|
||||||
|
JJR = (VNS, SLM)
|
||||||
|
RMT = (GDS, XHP)
|
||||||
|
CHT = (PXS, VLF)
|
||||||
|
SFJ = (XGC, LPM)
|
||||||
|
BJL = (XDN, VXN)
|
||||||
|
PQK = (NHS, DVB)
|
||||||
|
PDB = (JPQ, TVJ)
|
||||||
|
RGL = (DNN, NCN)
|
||||||
|
KRN = (SBL, PHL)
|
||||||
|
MTF = (PJL, KQR)
|
||||||
|
BTL = (CCF, LDP)
|
||||||
|
NLV = (CPM, HVL)
|
||||||
|
GCQ = (QMF, JVH)
|
||||||
|
KVH = (VKD, PQG)
|
||||||
|
RLB = (GSS, JVP)
|
||||||
|
QRB = (TNL, DKN)
|
||||||
|
JFV = (RDR, NSB)
|
||||||
|
BFC = (LGH, XLX)
|
||||||
|
HGQ = (SLM, VNS)
|
||||||
|
FQC = (VFQ, BXC)
|
||||||
|
DDS = (XHR, KVQ)
|
||||||
|
VQV = (SFT, BFQ)
|
||||||
|
XFD = (HVV, FLH)
|
||||||
|
TVP = (XQF, KSS)
|
||||||
|
GBH = (NPX, LDB)
|
||||||
|
KHL = (MGS, MMD)
|
||||||
|
NPX = (BJL, SFF)
|
||||||
|
VMG = (DHX, GVC)
|
||||||
|
RTJ = (XRF, BPK)
|
||||||
|
TLM = (NCG, QBB)
|
||||||
|
LXS = (TVB, MTH)
|
||||||
|
XNM = (QFL, KQK)
|
||||||
|
KQR = (QRD, JBN)
|
||||||
|
JQD = (DNN, NCN)
|
||||||
|
QCF = (MXL, MXL)
|
||||||
|
QMH = (NKG, SDJ)
|
||||||
|
NKK = (MCB, RLB)
|
||||||
|
MPJ = (BTL, JTF)
|
||||||
|
TLS = (VPJ, LMD)
|
||||||
|
XJB = (LML, TKZ)
|
||||||
|
HGF = (HBF, QHB)
|
||||||
|
KNJ = (QKM, XLR)
|
||||||
|
XCF = (QCJ, HTN)
|
||||||
|
HFS = (NKC, JFV)
|
||||||
|
QLS = (QBB, NCG)
|
||||||
|
QFL = (NXQ, QBN)
|
||||||
|
MTH = (FLN, LQR)
|
||||||
|
VND = (KMM, MQH)
|
||||||
|
NQQ = (VVH, NDL)
|
||||||
|
BTV = (QSM, FSF)
|
||||||
|
SLT = (NRQ, VDH)
|
||||||
|
NKG = (TBV, XCV)
|
||||||
|
SLM = (LBN, HPK)
|
||||||
|
CMQ = (KKS, VBH)
|
||||||
|
JTF = (LDP, CCF)
|
||||||
|
VFC = (GKH, KPS)
|
||||||
|
KCC = (JVM, MTF)
|
||||||
|
KFP = (MVX, NMX)
|
||||||
|
NQF = (QSK, KCC)
|
||||||
|
GGC = (VBV, TJR)
|
||||||
|
QQS = (NKK, NQC)
|
||||||
|
LXK = (FXC, QBC)
|
||||||
|
DVQ = (TFF, LKB)
|
||||||
|
PBL = (BGQ, FHQ)
|
||||||
|
KHV = (BVJ, XSD)
|
||||||
|
LDB = (SFF, BJL)
|
||||||
|
RJG = (LJB, CJM)
|
||||||
|
RCX = (QTB, PPL)
|
||||||
|
FLH = (HSX, KVX)
|
||||||
|
XTV = (HST, VCC)
|
||||||
|
GDC = (CMH, NCT)
|
||||||
|
RDP = (FKR, GHJ)
|
||||||
|
NXM = (PVV, KRX)
|
||||||
|
SCQ = (MFN, GRB)
|
||||||
|
MRT = (XGT, VLK)
|
||||||
|
DHJ = (XHP, GDS)
|
||||||
|
XFL = (TJK, QMH)
|
||||||
|
XQF = (CCQ, RPH)
|
||||||
|
CLV = (CKD, CCD)
|
||||||
|
CMT = (NCD, XDM)
|
||||||
|
NCT = (SXG, CLF)
|
||||||
|
JSS = (GMJ, LJC)
|
||||||
|
TLQ = (CRC, DXQ)
|
||||||
|
DMJ = (HHB, DRV)
|
||||||
|
JBH = (FVC, HDX)
|
||||||
|
QXK = (QSB, JBH)
|
||||||
|
DQN = (QMD, GDN)
|
||||||
|
SDH = (PRH, BCX)
|
||||||
|
QSB = (HDX, FVC)
|
||||||
|
MTP = (VVG, SPN)
|
||||||
|
CTM = (MFG, GGJ)
|
||||||
|
HND = (MNV, TXG)
|
||||||
|
MJS = (DMJ, QQG)
|
||||||
|
JNL = (LKB, TFF)
|
||||||
|
QLL = (FKM, HNH)
|
||||||
|
PNM = (PQR, NRL)
|
||||||
|
VSF = (LPM, XGC)
|
||||||
|
QBC = (QQS, MVF)
|
||||||
|
BFM = (FBP, BQJ)
|
||||||
|
KNG = (RTJ, CXN)
|
||||||
|
VFQ = (HFS, LBS)
|
||||||
|
LKB = (QVB, TXF)
|
||||||
|
KQD = (CDJ, CDJ)
|
||||||
|
ZZZ = (DHJ, RMT)
|
||||||
|
XKX = (HVP, NJF)
|
||||||
|
GSL = (QMS, DHM)
|
||||||
|
PNT = (CDJ, GJZ)
|
||||||
|
KBN = (CMQ, JBG)
|
||||||
|
DNX = (SFM, GFJ)
|
||||||
|
NMX = (XRR, LKL)
|
||||||
|
VPJ = (PSK, GQL)
|
||||||
|
XQD = (QCF, QCF)
|
||||||
|
HRM = (RHB, XXJ)
|
||||||
|
LCL = (MRT, FMB)
|
||||||
|
DRG = (RNB, LCG)
|
||||||
|
BKP = (QLL, MMQ)
|
||||||
|
FSF = (SLR, XGV)
|
||||||
|
KHX = (BXC, VFQ)
|
||||||
|
SXG = (NHL, KGK)
|
||||||
|
MJD = (TDH, RFP)
|
||||||
|
NRL = (CSG, MPT)
|
||||||
|
FBP = (QGC, GXH)
|
||||||
|
HDT = (LHQ, FVD)
|
||||||
|
BMP = (RMG, JXM)
|
||||||
|
NCN = (SLT, KJD)
|
||||||
|
NXQ = (JPP, QQL)
|
||||||
|
NGV = (HNJ, VVQ)
|
||||||
|
NPN = (MXL, NJK)
|
||||||
|
FVD = (XBQ, NKF)
|
||||||
|
GQM = (QCG, GGC)
|
||||||
|
QBP = (XML, HND)
|
||||||
|
VQT = (BTL, JTF)
|
||||||
|
HKP = (CMH, NCT)
|
||||||
|
JHP = (NDL, VVH)
|
||||||
|
FRL = (SHD, FNH)
|
||||||
|
FLN = (NVL, HGF)
|
||||||
|
MXH = (QSD, KKR)
|
||||||
|
BGL = (XCX, RFC)
|
||||||
|
RSQ = (MKH, TLS)
|
||||||
|
VML = (RJM, CXK)
|
||||||
|
XHP = (MJS, DNP)
|
||||||
|
GRV = (XRN, TVQ)
|
||||||
|
GKH = (BCF, VSD)
|
||||||
|
SPH = (MVX, NMX)
|
||||||
|
TLD = (LFR, GFQ)
|
||||||
|
LML = (QKS, NND)
|
||||||
|
PKT = (VXC, CMF)
|
||||||
|
LLQ = (THT, GRV)
|
||||||
|
CKD = (SPB, QDV)
|
||||||
|
KRM = (JQV, JNG)
|
||||||
|
RNS = (HJJ, MLV)
|
||||||
|
FKR = (FKK, BHN)
|
||||||
|
XNH = (SCQ, KLF)
|
||||||
|
GDN = (LBL, FHT)
|
||||||
|
CRB = (NHQ, QRB)
|
||||||
|
JKQ = (DPT, KBN)
|
||||||
|
NJF = (RJG, NGF)
|
||||||
|
NRT = (NSK, CSL)
|
||||||
|
LJR = (VTT, HCQ)
|
||||||
|
HLK = (DFC, DPV)
|
||||||
|
PQR = (MPT, CSG)
|
||||||
|
DNF = (NJF, HVP)
|
||||||
|
MPV = (HJD, XSF)
|
||||||
|
TBV = (XTJ, SVH)
|
||||||
|
LKX = (XFJ, HBM)
|
||||||
|
KTP = (CGR, RVR)
|
||||||
|
HVL = (BJH, QXK)
|
||||||
|
GJD = (XJJ, MPF)
|
||||||
|
HLC = (VVQ, HNJ)
|
||||||
|
JTX = (NCD, XDM)
|
||||||
|
CSG = (MFF, RKT)
|
||||||
|
PCH = (PGJ, GQM)
|
||||||
|
SFF = (VXN, XDN)
|
||||||
|
TCF = (KNG, JPJ)
|
||||||
|
LDP = (XFD, SBS)
|
||||||
|
XCR = (GJD, XKT)
|
||||||
|
QBM = (GFB, LRH)
|
||||||
|
CLP = (RJM, CXK)
|
||||||
|
MTT = (HST, VCC)
|
||||||
|
TQL = (BPM, GGT)
|
||||||
|
LFR = (HNF, RDP)
|
||||||
|
JHN = (CMT, JTX)
|
||||||
|
XCX = (CHG, CHG)
|
||||||
|
XGT = (HLK, QJF)
|
||||||
|
TQS = (TKL, MNF)
|
||||||
|
KFL = (HGQ, JJR)
|
||||||
|
LHQ = (XBQ, NKF)
|
||||||
|
CCQ = (DBP, HHC)
|
||||||
|
TKL = (VDN, PBP)
|
||||||
|
LBX = (BXM, SDH)
|
||||||
|
XLX = (NGJ, LHJ)
|
||||||
|
GVN = (BPG, TNK)
|
||||||
|
CCX = (HCQ, VTT)
|
||||||
|
KQK = (QBN, NXQ)
|
||||||
|
NQC = (MCB, RLB)
|
||||||
|
MPF = (DFT, SBG)
|
||||||
|
BNH = (MLV, HJJ)
|
||||||
|
CJM = (LBH, TNM)
|
||||||
|
CND = (VKB, PGQ)
|
||||||
|
HXM = (GMJ, LJC)
|
||||||
|
TKZ = (NND, QKS)
|
||||||
|
RKT = (LNQ, KFL)
|
||||||
|
GXH = (RQP, LBX)
|
||||||
|
TFF = (QVB, TXF)
|
||||||
|
LNK = (FDC, MXH)
|
||||||
|
KPK = (BNH, RNS)
|
||||||
|
QQG = (HHB, DRV)
|
||||||
|
MFP = (PQK, NBF)
|
||||||
|
VVK = (QLL, MMQ)
|
||||||
|
GFB = (RHN, LCN)
|
||||||
|
PPD = (QCJ, HTN)
|
||||||
|
FXV = (BPM, GGT)
|
||||||
|
KSS = (CCQ, RPH)
|
||||||
|
KCM = (LTB, PCH)
|
||||||
|
RHN = (FXV, TQL)
|
||||||
|
LFV = (DDJ, NQF)
|
||||||
|
JKG = (BGQ, FHQ)
|
||||||
|
MBS = (RQJ, LDQ)
|
||||||
|
HHC = (NGV, HLC)
|
||||||
|
CCD = (QDV, SPB)
|
||||||
|
RFM = (FTB, HSB)
|
||||||
|
QCG = (VBV, TJR)
|
||||||
|
GRH = (LXK, LGQ)
|
||||||
|
CDJ = (QQJ, BFC)
|
||||||
|
THT = (TVQ, XRN)
|
||||||
|
QRD = (PXV, GVN)
|
||||||
|
VHQ = (SXV, GJL)
|
||||||
|
MLV = (VRM, MCP)
|
||||||
|
XRR = (CLV, PBJ)
|
||||||
|
NMS = (DGK, DDS)
|
||||||
|
JPS = (JKT, KHL)
|
||||||
|
DJJ = (QMS, DHM)
|
||||||
|
MFG = (TLQ, VQD)
|
||||||
|
GPQ = (SHL, BNR)
|
||||||
|
QVB = (GDC, HKP)
|
||||||
|
LNN = (CMF, VXC)
|
||||||
|
VBQ = (LNN, PKT)
|
||||||
|
MMS = (SVV, HRM)
|
||||||
|
BGJ = (HXM, JSS)
|
||||||
|
QCK = (JSJ, VQM)
|
||||||
|
PKB = (XNH, JQH)
|
||||||
|
BCF = (TQR, TLL)
|
||||||
|
JRN = (VHQ, HNK)
|
||||||
|
SHL = (DMK, JBX)
|
||||||
|
LRG = (NSK, CSL)
|
||||||
|
NJV = (FJH, TXC)
|
||||||
|
GHQ = (FSB, HFX)
|
||||||
|
LHN = (TLS, MKH)
|
||||||
|
HBF = (BMP, GLM)
|
||||||
|
DTP = (DVQ, JNL)
|
||||||
|
FXR = (FTB, HSB)
|
||||||
|
PDS = (XLD, CNX)
|
||||||
|
SXV = (CPC, JNF)
|
||||||
|
QMF = (GGF, JDP)
|
||||||
|
JVP = (GPC, DNX)
|
||||||
|
RMG = (HRF, PKB)
|
||||||
|
LRH = (LCN, RHN)
|
||||||
|
HVP = (RJG, NGF)
|
||||||
|
TRC = (VKX, RQL)
|
||||||
|
PJL = (QRD, JBN)
|
||||||
|
HNK = (GJL, SXV)
|
||||||
|
CHM = (NBF, PQK)
|
||||||
|
PGH = (KMM, MQH)
|
||||||
|
SDN = (MFP, CHM)
|
||||||
|
DMK = (VRP, NNX)
|
||||||
|
MRR = (NGK, SMQ)
|
||||||
|
QDV = (NDM, JPT)
|
||||||
|
PGJ = (QCG, GGC)
|
||||||
|
BVJ = (NLV, HBR)
|
||||||
|
PGQ = (BGK, GBH)
|
||||||
|
LKL = (CLV, PBJ)
|
||||||
|
FDC = (KKR, QSD)
|
||||||
|
JDP = (PDB, PTX)
|
||||||
|
NJJ = (HSJ, GRH)
|
||||||
|
TVJ = (HDT, SVF)
|
||||||
|
NJK = (RBV, ZZZ)
|
||||||
|
HHN = (DPP, TLD)
|
||||||
|
QMS = (BLS, TQS)
|
||||||
|
QVR = (CVB, BNJ)
|
||||||
|
FFQ = (RMJ, HGZ)
|
||||||
|
LGQ = (QBC, FXC)
|
||||||
|
JPP = (RSG, KTG)
|
||||||
|
DPV = (TXH, JRN)
|
||||||
|
HBR = (CPM, HVL)
|
||||||
|
NSK = (JQN, PDS)
|
||||||
|
SBS = (HVV, FLH)
|
||||||
|
BFQ = (VBQ, JPB)
|
||||||
|
LBN = (LXJ, CCR)
|
||||||
|
RBD = (KRM, PNX)
|
||||||
|
NQX = (LML, LML)
|
||||||
|
XSA = (QKS, NND)
|
||||||
|
NDB = (HFX, FSB)
|
||||||
|
QMD = (LBL, FHT)
|
||||||
|
XTJ = (JDT, JDT)
|
||||||
|
GLH = (SHL, BNR)
|
||||||
|
FXC = (MVF, QQS)
|
||||||
|
HSX = (NFN, LVG)
|
||||||
|
JNF = (JJH, FNR)
|
||||||
|
CXK = (SPC, TVP)
|
||||||
|
GGF = (PDB, PTX)
|
||||||
|
XBQ = (QNX, JCQ)
|
||||||
|
LJC = (SFJ, VSF)
|
||||||
|
MMD = (XLK, CND)
|
||||||
|
HFG = (JKT, KHL)
|
||||||
|
NHQ = (TNL, DKN)
|
||||||
|
JVM = (KQR, PJL)
|
||||||
|
CGH = (RTC, VFC)
|
||||||
|
HNF = (GHJ, FKR)
|
||||||
|
TMF = (NMS, GJH)
|
||||||
|
NGJ = (NXM, BDB)
|
||||||
|
MRM = (JKQ, MPS)
|
||||||
|
QTC = (JSS, HXM)
|
||||||
|
TNM = (JFF, QXR)
|
||||||
|
DHK = (LJR, CCX)
|
||||||
|
XSB = (MRR, CXC)
|
||||||
|
XRN = (XDP, QBP)
|
||||||
|
XCV = (XTJ, SVH)
|
||||||
|
VVA = (QSM, FSF)
|
||||||
|
NKC = (RDR, NSB)
|
||||||
|
MXL = (RBV, RBV)
|
||||||
|
PTX = (TVJ, JPQ)
|
||||||
|
VRL = (NQX, XJB)
|
||||||
|
RQK = (MPS, JKQ)
|
||||||
|
PBJ = (CKD, CCD)
|
||||||
|
VRP = (DQN, QLC)
|
||||||
|
KLF = (MFN, GRB)
|
||||||
|
XXJ = (GBT, CDG)
|
||||||
|
HST = (QHV, MMS)
|
||||||
|
SFT = (JPB, VBQ)
|
||||||
|
NRR = (LCL, MQR)
|
||||||
|
CSL = (JQN, PDS)
|
||||||
|
LHJ = (BDB, NXM)
|
||||||
|
TXK = (DHK, KLC)
|
||||||
|
CDK = (XCX, XCX)
|
||||||
|
FHT = (NGQ, JHN)
|
||||||
|
QQJ = (LGH, XLX)
|
||||||
|
BQJ = (GXH, QGC)
|
||||||
|
TTA = (QKM, XLR)
|
||||||
|
TVB = (FLN, LQR)
|
||||||
|
PPL = (FRL, NCX)
|
||||||
|
SPS = (XFJ, HBM)
|
||||||
|
SVH = (JDT, VRL)
|
||||||
|
QBB = (PXG, MTP)
|
||||||
|
JSJ = (VVB, NRR)
|
||||||
|
KKS = (RGL, JQD)
|
||||||
|
JDT = (NQX, NQX)
|
||||||
|
GKQ = (LLT, JRH)
|
||||||
|
VVH = (BPT, KRN)
|
||||||
|
JCQ = (CRB, PBS)
|
||||||
|
QXR = (BTV, PSZ)
|
||||||
|
VQR = (RCX, KKP)
|
||||||
|
QSM = (SLR, XGV)
|
||||||
|
JKD = (JDC, JGV)
|
||||||
|
XLD = (LFS, QVR)
|
||||||
|
TJK = (NKG, SDJ)
|
||||||
|
PVV = (HDK, VQV)
|
||||||
|
BDB = (PVV, KRX)
|
||||||
|
MPS = (KBN, DPT)
|
||||||
|
FHP = (PPD, XCF)
|
||||||
|
HTN = (KCM, PXC)
|
||||||
|
GHJ = (BHN, FKK)
|
||||||
|
JCC = (LQM, KVH)
|
||||||
|
LQR = (HGF, NVL)
|
||||||
|
LGM = (DDJ, NQF)
|
||||||
|
NJN = (QCF, NPN)
|
||||||
|
PRH = (DFF, DFF)
|
||||||
|
XDM = (FBJ, PJM)
|
||||||
|
HFN = (KRS, XSB)
|
||||||
|
GLM = (JXM, RMG)
|
||||||
|
RQP = (BXM, SDH)
|
||||||
|
BPG = (QJT, KTP)
|
||||||
|
JPB = (LNN, PKT)
|
||||||
|
DKN = (CJD, BGR)
|
||||||
|
CDG = (GSL, DJJ)
|
||||||
|
XDN = (CGM, VMG)
|
||||||
|
NQP = (SKT, JCC)
|
||||||
|
DNP = (QQG, DMJ)
|
||||||
|
NNX = (DQN, QLC)
|
||||||
|
FTB = (JFL, VJJ)
|
||||||
|
FHQ = (SMJ, XFK)
|
||||||
|
GGT = (KPK, LNT)
|
||||||
|
NGF = (LJB, CJM)
|
||||||
|
QFX = (KCN, TMF)
|
||||||
|
NKF = (JCQ, QNX)
|
||||||
|
DBP = (NGV, HLC)
|
||||||
|
RBV = (RMT, DHJ)
|
||||||
|
NML = (MBV, VCG)
|
||||||
|
KXJ = (MXH, FDC)
|
||||||
|
GFQ = (RDP, HNF)
|
||||||
|
SHD = (CMG, CTM)
|
||||||
|
GTX = (LNK, KXJ)
|
||||||
|
HXF = (KTC, LXS)
|
||||||
|
CMM = (NQP, SBR)
|
||||||
|
SDJ = (TBV, XCV)
|
||||||
|
CHG = (RMJ, RMJ)
|
||||||
|
DPT = (CMQ, JBG)
|
||||||
|
BGR = (RLM, NML)
|
||||||
|
THM = (XQD, NJN)
|
||||||
|
HJJ = (MCP, VRM)
|
||||||
|
NRQ = (JHR, GCQ)
|
||||||
|
KKR = (HSN, NJJ)
|
||||||
|
KVX = (LVG, NFN)
|
||||||
|
LTT = (TLD, DPP)
|
||||||
|
NVL = (QHB, HBF)
|
||||||
|
CXN = (XRF, BPK)
|
||||||
|
KLC = (CCX, LJR)
|
||||||
|
JDC = (DNF, XKX)
|
||||||
|
MGS = (XLK, CND)
|
||||||
|
RLM = (VCG, MBV)
|
||||||
|
VDN = (NMQ, TPR)
|
||||||
|
HSB = (JFL, VJJ)
|
||||||
|
HDS = (KLC, DHK)
|
||||||
|
XSD = (NLV, HBR)
|
||||||
|
HJD = (NJQ, PBQ)
|
||||||
|
CGM = (DHX, GVC)
|
||||||
|
LDQ = (PBL, JKG)
|
||||||
|
RDR = (XHQ, MGQ)
|
||||||
|
GPC = (GFJ, SFM)
|
||||||
|
NQT = (KRS, XSB)
|
||||||
|
TDH = (RBD, XLP)
|
||||||
|
QJF = (DFC, DPV)
|
||||||
|
VNS = (HPK, LBN)
|
||||||
|
QSD = (NJJ, HSN)
|
||||||
|
JHR = (QMF, JVH)
|
||||||
|
SMQ = (FXR, RFM)
|
||||||
|
CMG = (MFG, GGJ)
|
||||||
|
NKQ = (VFC, RTC)
|
||||||
|
VXC = (LHN, RSQ)
|
||||||
|
DHX = (LCT, XNM)
|
||||||
|
TCX = (NQT, HFN)
|
||||||
|
DRV = (TFN, QBM)
|
||||||
|
JPT = (GQX, XCR)
|
||||||
|
HRF = (JQH, XNH)
|
||||||
|
MCS = (BGJ, QTC)
|
||||||
|
PQG = (NCM, TCF)
|
||||||
|
XHR = (PJK, VPN)
|
||||||
|
MLX = (PGH, VND)
|
||||||
|
MKH = (VPJ, LMD)
|
||||||
|
TJR = (VQT, MPJ)
|
||||||
|
VLF = (GLG, QFX)
|
||||||
|
JNG = (KLR, MPV)
|
||||||
|
HDK = (BFQ, SFT)
|
||||||
|
HFX = (MLX, SPL)
|
||||||
|
BXC = (HFS, LBS)
|
||||||
|
CCT = (GTX, HPT)
|
||||||
|
VLK = (HLK, QJF)
|
||||||
|
NCD = (PJM, FBJ)
|
||||||
|
VGT = (JNL, DVQ)
|
||||||
|
LMD = (PSK, GQL)
|
||||||
|
KRX = (HDK, VQV)
|
||||||
|
QNX = (CRB, PBS)
|
||||||
|
NJQ = (GHQ, NDB)
|
||||||
|
TNV = (FBP, BQJ)
|
||||||
|
GNR = (XQD, NJN)
|
||||||
|
KKP = (QTB, PPL)
|
||||||
|
DBX = (KCQ, CPS)
|
||||||
|
VRM = (TLM, QLS)
|
||||||
|
LVG = (BRP, NJV)
|
||||||
|
NHL = (SPS, LKX)
|
||||||
|
MNV = (VBL, CHT)
|
||||||
|
PJK = (HHN, LTT)
|
||||||
|
VBH = (JQD, RGL)
|
||||||
|
GRB = (NKQ, CGH)
|
||||||
|
SKT = (KVH, LQM)
|
||||||
|
TPR = (RXR, KHV)
|
||||||
|
VVB = (LCL, MQR)
|
||||||
|
VKX = (MRM, RQK)
|
||||||
|
LTB = (PGJ, GQM)
|
||||||
|
QCJ = (KCM, PXC)
|
||||||
|
BGQ = (SMJ, SMJ)
|
||||||
|
RCV = (NQQ, JHP)
|
||||||
|
DHM = (TQS, BLS)
|
||||||
|
KRS = (CXC, MRR)
|
||||||
|
JFL = (BLT, PNM)
|
||||||
|
TXC = (NRT, LRG)
|
||||||
|
MVX = (LKL, XRR)
|
||||||
|
QSK = (JVM, MTF)
|
||||||
|
BGK = (LDB, NPX)
|
||||||
|
GJZ = (BFC, QQJ)
|
||||||
|
PXC = (LTB, PCH)
|
||||||
|
HMQ = (BGJ, QTC)
|
||||||
|
RXR = (BVJ, XSD)
|
||||||
|
BXM = (PRH, BCX)
|
||||||
|
FJH = (LRG, NRT)
|
||||||
|
GJH = (DGK, DDS)
|
||||||
|
BPT = (SBL, PHL)
|
||||||
|
RQL = (RQK, MRM)
|
||||||
|
SJB = (RQJ, LDQ)
|
||||||
|
NFN = (NJV, BRP)
|
||||||
|
MND = (NQQ, JHP)
|
||||||
|
NMQ = (KHV, RXR)
|
||||||
|
XGV = (TXK, HDS)
|
||||||
|
SPC = (KSS, XQF)
|
||||||
|
RMJ = (SMR, QRS)
|
||||||
|
CNX = (LFS, QVR)
|
||||||
|
KLR = (HJD, XSF)
|
||||||
|
XLP = (KRM, PNX)
|
||||||
|
LPM = (CMM, PHF)
|
||||||
|
FNR = (CCT, VTP)
|
||||||
|
NGQ = (CMT, JTX)
|
||||||
|
CCR = (BFM, TNV)
|
||||||
|
LCN = (FXV, TQL)
|
||||||
|
HVV = (HSX, KVX)
|
||||||
|
FSB = (MLX, SPL)
|
||||||
|
GGJ = (TLQ, VQD)
|
||||||
|
NHS = (DRG, FVK)
|
||||||
|
RQJ = (PBL, JKG)
|
||||||
|
VCC = (MMS, QHV)
|
||||||
|
HDX = (VVN, HXF)
|
||||||
|
VQM = (NRR, VVB)
|
||||||
|
TFN = (GFB, LRH)
|
||||||
|
QRS = (VQR, MDS)
|
||||||
|
HBM = (VTQ, SDN)
|
||||||
|
CCF = (SBS, XFD)
|
||||||
|
VCG = (HMQ, MCS)
|
||||||
|
NBF = (DVB, NHS)
|
||||||
|
DVB = (FVK, DRG)
|
||||||
|
PGB = (TDH, RFP)
|
||||||
|
XRF = (KFP, SPH)
|
||||||
|
KMM = (PDJ, GQN)
|
||||||
|
KTG = (GGQ, HNR)
|
||||||
|
BJH = (JBH, QSB)
|
||||||
|
JJH = (CCT, VTP)
|
||||||
|
LBH = (JFF, JFF)
|
||||||
|
GLG = (TMF, KCN)
|
||||||
|
TQR = (THM, GNR)
|
||||||
|
MQH = (GQN, PDJ)
|
||||||
|
MQR = (FMB, MRT)
|
||||||
|
FNH = (CTM, CMG)
|
||||||
|
SMR = (VQR, MDS)
|
||||||
|
GDS = (DNP, MJS)
|
||||||
|
LCT = (KQK, QFL)
|
||||||
|
VKB = (GBH, BGK)
|
||||||
|
VTQ = (CHM, MFP)
|
||||||
|
TNK = (QJT, KTP)
|
||||||
|
HNJ = (VVS, GCX)
|
||||||
|
JKT = (MMD, MGS)
|
||||||
|
PBP = (TPR, NMQ)
|
||||||
|
CPS = (KNJ, RFZ)
|
||||||
|
RNB = (KHX, FQC)
|
||||||
|
CMF = (LHN, RSQ)
|
||||||
|
HPK = (CCR, LXJ)
|
||||||
|
MFN = (NKQ, CGH)
|
||||||
|
HHB = (QBM, TFN)
|
||||||
|
DDJ = (QSK, KCC)
|
||||||
|
DFM = (RQL, VKX)
|
||||||
|
FKM = (GKQ, VJG)
|
||||||
|
HSJ = (LGQ, LXK)
|
||||||
|
HPT = (KXJ, LNK)
|
||||||
|
BNR = (JBX, DMK)
|
||||||
|
GJL = (CPC, JNF)
|
||||||
|
DFF = (KCQ, KCQ)
|
||||||
|
MCB = (GSS, JVP)
|
||||||
|
CPC = (JJH, FNR)
|
||||||
|
XLR = (MJK, DSM)
|
||||||
|
SBG = (JDG, XFL)
|
||||||
|
XSF = (NJQ, PBQ)
|
||||||
|
NGK = (RFM, FXR)
|
||||||
|
HSN = (GRH, HSJ)
|
||||||
|
LQM = (PQG, VKD)
|
||||||
|
VXN = (VMG, CGM)
|
||||||
|
PSK = (VGT, DTP)
|
||||||
|
JQH = (KLF, SCQ)
|
||||||
|
RJM = (SPC, TVP)
|
||||||
|
VSD = (TLL, TQR)
|
||||||
|
KCN = (GJH, NMS)
|
||||||
|
QHB = (GLM, BMP)
|
||||||
|
FMB = (VLK, XGT)
|
||||||
|
GBT = (DJJ, GSL)
|
||||||
|
LGH = (NGJ, LHJ)
|
||||||
|
SLR = (HDS, TXK)
|
||||||
|
VVQ = (GCX, VVS)
|
||||||
|
MDS = (RCX, KKP)
|
||||||
|
KVQ = (VPN, PJK)
|
||||||
|
CLF = (NHL, KGK)
|
||||||
|
XFK = (KQD, PNT)
|
||||||
|
CJD = (NML, RLM)
|
||||||
|
MCP = (TLM, QLS)
|
||||||
|
SPL = (PGH, VND)
|
||||||
|
GSS = (GPC, DNX)
|
||||||
|
RPH = (DBP, HHC)
|
||||||
|
HNR = (XXQ, JKD)
|
||||||
|
VBV = (VQT, MPJ)
|
||||||
|
PHF = (NQP, SBR)
|
||||||
|
BRP = (FJH, TXC)
|
||||||
|
AAA = (RMT, DHJ)
|
||||||
|
PBQ = (GHQ, NDB)
|
||||||
|
PXG = (VVG, SPN)
|
||||||
|
PNX = (JQV, JNG)
|
||||||
|
XHQ = (SJB, MBS)
|
||||||
|
VBL = (VLF, PXS)
|
||||||
|
VVG = (MTT, XTV)
|
||||||
|
PXS = (GLG, QFX)
|
||||||
|
MMQ = (FKM, HNH)
|
||||||
|
PHG = (HFN, NQT)
|
||||||
|
MFF = (KFL, LNQ)
|
||||||
|
PJM = (FHP, SPX)
|
||||||
|
SMJ = (KQD, KQD)
|
||||||
|
XGC = (CMM, PHF)
|
||||||
|
PDJ = (QCK, MHB)
|
||||||
|
SPN = (MTT, XTV)
|
||||||
|
BPK = (KFP, SPH)
|
||||||
|
MVF = (NQC, NKK)
|
||||||
|
LJB = (LBH, LBH)
|
||||||
|
GQN = (QCK, MHB)
|
||||||
|
NCG = (MTP, PXG)
|
||||||
|
GQL = (VGT, DTP)
|
||||||
|
NCX = (FNH, SHD)
|
||||||
|
HGZ = (QRS, SMR)
|
||||||
|
GMJ = (VSF, SFJ)
|
||||||
|
RFP = (XLP, RBD)
|
||||||
|
TXF = (GDC, HKP)
|
||||||
|
NBA = (SMR, QRS)
|
||||||
|
QTB = (FRL, NCX)
|
||||||
|
QLC = (GDN, QMD)
|
||||||
|
QHV = (SVV, HRM)
|
||||||
|
XTM = (GRV, THT)
|
||||||
|
VPN = (HHN, LTT)
|
||||||
|
RFZ = (XLR, QKM)
|
||||||
|
CMH = (SXG, CLF)
|
||||||
|
GFJ = (TCX, PHG)
|
||||||
|
VTT = (LGM, LFV)
|
||||||
|
RTC = (GKH, KPS)
|
||||||
|
XFJ = (VTQ, SDN)
|
||||||
|
GCX = (PGB, MJD)
|
||||||
|
MJK = (CLP, VML)
|
||||||
|
QQL = (RSG, KTG)
|
||||||
|
NSB = (XHQ, MGQ)
|
||||||
|
HCQ = (LGM, LFV)
|
||||||
|
GQX = (GJD, XKT)
|
||||||
|
RVR = (VVK, BKP)
|
||||||
|
JBG = (KKS, VBH)
|
||||||
|
JFF = (BTV, BTV)
|
||||||
|
BPM = (LNT, KPK)
|
||||||
|
LNQ = (JJR, HGQ)
|
||||||
|
FKK = (GLH, GPQ)
|
||||||
|
SBL = (CDK, BGL)
|
||||||
|
LNT = (BNH, RNS)
|
||||||
|
JRH = (JPS, HFG)
|
||||||
|
VVS = (MJD, PGB)
|
||||||
|
DPP = (LFR, GFQ)
|
||||||
|
MNF = (PBP, VDN)
|
||||||
|
QKM = (DSM, MJK)
|
||||||
|
JPJ = (CXN, RTJ)
|
||||||
|
QGC = (RQP, LBX)
|
||||||
|
CVB = (MND, RCV)
|
||||||
|
RFC = (CHG, FFQ)
|
||||||
|
KPS = (BCF, VSD)
|
||||||
|
XML = (MNV, TXG)
|
||||||
|
JVH = (JDP, GGF)
|
||||||
|
CRC = (XTM, LLQ)
|
||||||
|
VJG = (JRH, LLT)
|
||||||
|
SPB = (JPT, NDM)
|
||||||
|
JGV = (XKX, DNF)
|
||||||
|
GGQ = (XXQ, JKD)
|
||||||
|
XLK = (PGQ, VKB)
|
||||||
|
JBX = (NNX, VRP)
|
||||||
|
RSG = (HNR, GGQ)
|
||||||
|
GVC = (LCT, XNM)
|
||||||
|
XDP = (XML, HND)
|
||||||
|
CXC = (SMQ, NGK)
|
||||||
|
PXV = (TNK, BPG)
|
||||||
|
NDM = (XCR, GQX)
|
||||||
|
CPM = (BJH, QXK)
|
||||||
|
KGK = (LKX, SPS)
|
||||||
|
BLT = (NRL, PQR)
|
||||||
|
BHN = (GLH, GPQ)
|
||||||
|
BLS = (TKL, MNF)
|
||||||
|
PHL = (CDK, BGL)
|
||||||
|
BCX = (DFF, DBX)
|
||||||
|
HNH = (GKQ, VJG)
|
||||||
|
VKD = (NCM, TCF)
|
||||||
|
DSM = (VML, CLP)
|
||||||
|
DNN = (SLT, KJD)
|
||||||
|
SBR = (SKT, JCC)
|
||||||
|
TNL = (BGR, CJD)
|
||||||
|
DFT = (XFL, JDG)
|
||||||
|
MPT = (RKT, MFF)
|
||||||
|
TVQ = (XDP, QBP)
|
||||||
|
LLT = (JPS, HFG)
|
||||||
|
DXQ = (XTM, LLQ)
|
||||||
|
SFM = (PHG, TCX)
|
||||||
|
BNJ = (MND, RCV)
|
||||||
|
PBS = (NHQ, QRB)
|
||||||
|
JXM = (HRF, PKB)
|
||||||
|
VTP = (HPT, GTX)
|
||||||
|
SVV = (XXJ, RHB)
|
||||||
|
MHA = (QQJ, BFC)
|
||||||
|
MBV = (HMQ, MCS)
|
||||||
|
VJJ = (BLT, PNM)
|
||||||
|
QJT = (RVR, CGR)
|
||||||
|
VVN = (LXS, KTC)
|
||||||
|
QKS = (TRC, DFM)
|
||||||
|
MGQ = (MBS, SJB)
|
||||||
|
NDL = (BPT, KRN)
|
||||||
|
JPQ = (SVF, HDT)
|
||||||
|
VDH = (JHR, GCQ)
|
||||||
|
KCQ = (KNJ, KNJ)
|
||||||
|
XJJ = (DFT, SBG)
|
||||||
|
JQV = (MPV, KLR)
|
||||||
|
VQD = (DXQ, CRC)
|
||||||
|
JDG = (TJK, QMH)
|
||||||
|
SPX = (XCF, PPD)
|
||||||
|
LXJ = (TNV, BFM)
|
||||||
|
LBL = (NGQ, JHN)
|
||||||
|
QBN = (QQL, JPP)
|
||||||
|
LFS = (CVB, BNJ)
|
||||||
|
LBS = (JFV, NKC)
|
||||||
|
TLL = (THM, GNR)
|
5
08/input_test
Normal file
5
08/input_test
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
LLR
|
||||||
|
|
||||||
|
AAA = (BBB, BBB)
|
||||||
|
BBB = (AAA, ZZZ)
|
||||||
|
ZZZ = (ZZZ, ZZZ)
|
10
08/input_test2
Normal file
10
08/input_test2
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
LR
|
||||||
|
|
||||||
|
DGA = (DGB, XXX)
|
||||||
|
DGB = (XXX, DGZ)
|
||||||
|
DGZ = (DGB, XXX)
|
||||||
|
EHA = (EHB, XXX)
|
||||||
|
EHB = (EHC, EHC)
|
||||||
|
EHC = (EHZ, EHZ)
|
||||||
|
EHZ = (EHB, EHB)
|
||||||
|
XXX = (XXX, XXX)
|
207
08/main.s
Normal file
207
08/main.s
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
global _start
|
||||||
|
[bits 32]
|
||||||
|
[section .text]
|
||||||
|
|
||||||
|
%include "utils.s"
|
||||||
|
|
||||||
|
_start:
|
||||||
|
mov esi, file
|
||||||
|
|
||||||
|
; goto end of move string
|
||||||
|
skip_move:
|
||||||
|
lodsb
|
||||||
|
cmp al, 'L'
|
||||||
|
jge skip_move
|
||||||
|
|
||||||
|
; put pairs in memory
|
||||||
|
xor ebp, ebp ; state
|
||||||
|
; s0: IDX s1: L s2: R
|
||||||
|
; get the next thing
|
||||||
|
get_next_id:
|
||||||
|
cmp esi, file.over ; input over
|
||||||
|
jae got_ids
|
||||||
|
lodsb
|
||||||
|
cmp al, 'A'
|
||||||
|
jl get_next_id
|
||||||
|
cmp al, 'Z'
|
||||||
|
jg get_next_id
|
||||||
|
; we have first char
|
||||||
|
sub al, 'A'
|
||||||
|
movzx ebx, al ; id
|
||||||
|
lodsb ; id += next * 26
|
||||||
|
sub al, 'A'
|
||||||
|
movzx eax, al
|
||||||
|
mov ecx, 26
|
||||||
|
mul ecx
|
||||||
|
add ebx, eax
|
||||||
|
lodsb ; id += next * 26^2
|
||||||
|
sub al, 'A'
|
||||||
|
movzx eax, al
|
||||||
|
mov ecx, 26*26
|
||||||
|
mul ecx
|
||||||
|
add ebx, eax
|
||||||
|
; case based on state
|
||||||
|
cmp ebp, 0
|
||||||
|
je .idx
|
||||||
|
cmp ebp, 1
|
||||||
|
je .left
|
||||||
|
; right
|
||||||
|
mov [pairs+edi*8+4], ebx ; right
|
||||||
|
xor ebp, ebp ; reset state
|
||||||
|
jmp get_next_id
|
||||||
|
.left:
|
||||||
|
mov [pairs+edi*8], ebx ; left
|
||||||
|
inc ebp ; progress state
|
||||||
|
jmp get_next_id
|
||||||
|
.idx:
|
||||||
|
mov edi, ebx ; curr_id
|
||||||
|
cmp eax, 0 ; last is A
|
||||||
|
jne .d
|
||||||
|
.idx_a:
|
||||||
|
mov eax, [used_starts]
|
||||||
|
mov [curr_ids+eax*4], ebx
|
||||||
|
inc dword [used_starts]
|
||||||
|
.d:
|
||||||
|
inc ebp ; progress state
|
||||||
|
jmp get_next_id
|
||||||
|
got_ids:
|
||||||
|
|
||||||
|
; set what done is
|
||||||
|
mov ecx, [used_starts]
|
||||||
|
mov edi, full_cycled
|
||||||
|
mov al, 1
|
||||||
|
rep stosb
|
||||||
|
|
||||||
|
mov edx, file
|
||||||
|
; walk move string
|
||||||
|
find_move_end:
|
||||||
|
mov esi, edx ; restore
|
||||||
|
lodsb
|
||||||
|
cmp al, 'L'
|
||||||
|
je .left
|
||||||
|
cmp al, 'R'
|
||||||
|
je .right
|
||||||
|
mov edx, file
|
||||||
|
jmp find_move_end
|
||||||
|
.right:
|
||||||
|
mov edx, esi ; save
|
||||||
|
mov esi, curr_ids
|
||||||
|
mov edi, curr_ids
|
||||||
|
mov ecx, [used_starts]
|
||||||
|
.right_l:
|
||||||
|
lodsd
|
||||||
|
mov eax, [pairs+eax*8+4] ; right
|
||||||
|
stosd
|
||||||
|
loop .right_l
|
||||||
|
jmp check_ZZZ
|
||||||
|
.left:
|
||||||
|
mov edx, esi ; save
|
||||||
|
mov esi, curr_ids
|
||||||
|
mov edi, curr_ids
|
||||||
|
mov ecx, [used_starts]
|
||||||
|
.left_l:
|
||||||
|
lodsd
|
||||||
|
mov eax, [pairs+eax*8] ; left
|
||||||
|
stosd
|
||||||
|
loop .left_l
|
||||||
|
check_ZZZ:
|
||||||
|
; find cycles - i'm sure this is an awful way of doing this
|
||||||
|
inc dword [final_value]
|
||||||
|
mov esi, curr_ids
|
||||||
|
xor ecx, ecx
|
||||||
|
.zzz_l:
|
||||||
|
lodsd
|
||||||
|
cmp eax, 16900
|
||||||
|
jle .zzz_l_cont ; not Z
|
||||||
|
; check if this Z and string position in cycles
|
||||||
|
mov edi, ecx
|
||||||
|
shl edi, 10 ; *1024
|
||||||
|
add edi, cycles
|
||||||
|
.check_cycles:
|
||||||
|
mov ebx, [edi] ; Z
|
||||||
|
test ebx, ebx
|
||||||
|
jz .new_cycle
|
||||||
|
cmp ebx, eax
|
||||||
|
jne .check_cycles_cont
|
||||||
|
cmp edx, [edi+4] ; str pos & cycle str pos
|
||||||
|
jne .check_cycles_cont
|
||||||
|
; match, increment count
|
||||||
|
inc dword [edi+8]
|
||||||
|
mov byte [starts_cycled+ecx], 1
|
||||||
|
jmp .zzz_l_cont
|
||||||
|
.check_cycles_cont:
|
||||||
|
add edi, 16
|
||||||
|
jmp .check_cycles
|
||||||
|
.new_cycle:
|
||||||
|
mov [edi], eax ; Z
|
||||||
|
mov [edi+4], edx ; str pos
|
||||||
|
mov dword [edi+8], 1 ; count
|
||||||
|
mov eax, [final_value]
|
||||||
|
mov dword [edi+12], eax ; cycle len
|
||||||
|
.zzz_l_cont:
|
||||||
|
inc ecx
|
||||||
|
cmp ecx, [used_starts]
|
||||||
|
jl .zzz_l
|
||||||
|
.cont:
|
||||||
|
; check if we've seen everything cycle
|
||||||
|
mov ebx, [starts_cycled]
|
||||||
|
cmp ebx, [full_cycled]
|
||||||
|
jne find_move_end
|
||||||
|
mov ebx, [starts_cycled+4]
|
||||||
|
cmp ebx, [full_cycled+4]
|
||||||
|
jne find_move_end
|
||||||
|
|
||||||
|
; done, print cycles
|
||||||
|
xor ecx, ecx
|
||||||
|
print_cycles:
|
||||||
|
mov esi, ecx
|
||||||
|
shl esi, 10 ; *1024
|
||||||
|
add esi, cycles
|
||||||
|
.l:
|
||||||
|
lodsd ; Z
|
||||||
|
mov ebx, eax
|
||||||
|
test eax, eax
|
||||||
|
jz .cont
|
||||||
|
mov eax, ecx ; Start Num
|
||||||
|
call print_dec
|
||||||
|
call space
|
||||||
|
mov eax, ebx
|
||||||
|
call print_dec
|
||||||
|
call space
|
||||||
|
lodsd ; str pos (skip print)
|
||||||
|
call print_dec
|
||||||
|
call space
|
||||||
|
lodsd ; count
|
||||||
|
call print_dec
|
||||||
|
call space
|
||||||
|
lodsd ; cycle len
|
||||||
|
call print_dec
|
||||||
|
call newline
|
||||||
|
jmp .l
|
||||||
|
.cont:
|
||||||
|
inc ecx
|
||||||
|
cmp ecx, [used_starts]
|
||||||
|
jl print_cycles
|
||||||
|
.done:
|
||||||
|
call newline
|
||||||
|
|
||||||
|
; lol go use an online calculator for lcm
|
||||||
|
|
||||||
|
game_over:
|
||||||
|
mov eax, [final_value]
|
||||||
|
call print_dec
|
||||||
|
jmp exit
|
||||||
|
|
||||||
|
[section .data]
|
||||||
|
final_value: dd 0
|
||||||
|
used_starts: dd 0
|
||||||
|
starts_cycled: dq 0
|
||||||
|
full_cycled: dq 0
|
||||||
|
file_lim: dd file.over - file
|
||||||
|
file: incbin "input"
|
||||||
|
.over:
|
||||||
|
|
||||||
|
[section .bss]
|
||||||
|
curr_ids: resd 8
|
||||||
|
cycles: resb 1024*16
|
||||||
|
pairs: resd 131072
|
97
08/main_part1.s
Normal file
97
08/main_part1.s
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
global _start
|
||||||
|
[bits 32]
|
||||||
|
[section .text]
|
||||||
|
|
||||||
|
%include "utils.s"
|
||||||
|
|
||||||
|
_start:
|
||||||
|
mov esi, file
|
||||||
|
|
||||||
|
; goto end of move string
|
||||||
|
skip_move:
|
||||||
|
lodsb
|
||||||
|
cmp al, 'L'
|
||||||
|
jge skip_move
|
||||||
|
|
||||||
|
; put pairs in memory
|
||||||
|
xor ebp, ebp ; state
|
||||||
|
; s0: IDX s1: L s2: R
|
||||||
|
; get the next thing
|
||||||
|
get_next_id:
|
||||||
|
cmp esi, file.over ; input over
|
||||||
|
jae got_ids
|
||||||
|
lodsb
|
||||||
|
cmp al, 'A'
|
||||||
|
jl get_next_id
|
||||||
|
cmp al, 'Z'
|
||||||
|
jg get_next_id
|
||||||
|
; we have first char
|
||||||
|
sub al, 'A'
|
||||||
|
movzx ebx, al ; id
|
||||||
|
lodsb ; id += next * 26
|
||||||
|
sub al, 'A'
|
||||||
|
movzx eax, al
|
||||||
|
mov ecx, 26
|
||||||
|
mul ecx
|
||||||
|
add ebx, eax
|
||||||
|
lodsb ; id += next * 26^2
|
||||||
|
sub al, 'A'
|
||||||
|
movzx eax, al
|
||||||
|
mov ecx, 26*26
|
||||||
|
mul ecx
|
||||||
|
add ebx, eax
|
||||||
|
; case based on state
|
||||||
|
cmp ebp, 0
|
||||||
|
je .idx
|
||||||
|
cmp ebp, 1
|
||||||
|
je .left
|
||||||
|
; right
|
||||||
|
mov [pairs+edi*8+4], ebx ; right
|
||||||
|
xor ebp, ebp ; reset state
|
||||||
|
jmp get_next_id
|
||||||
|
.left:
|
||||||
|
mov [pairs+edi*8], ebx ; left
|
||||||
|
inc ebp ; progress state
|
||||||
|
jmp get_next_id
|
||||||
|
.idx:
|
||||||
|
mov edi, ebx ; curr_id
|
||||||
|
inc ebp ; progress state
|
||||||
|
jmp get_next_id
|
||||||
|
got_ids:
|
||||||
|
|
||||||
|
mov esi, file
|
||||||
|
mov ebx, 0 ; curr idx
|
||||||
|
; walk move string
|
||||||
|
find_move_end:
|
||||||
|
lodsb
|
||||||
|
cmp al, 'L'
|
||||||
|
je .left
|
||||||
|
cmp al, 'R'
|
||||||
|
je .right
|
||||||
|
mov esi, file
|
||||||
|
jmp find_move_end
|
||||||
|
.right:
|
||||||
|
mov ebx, [pairs+ebx*8+4] ; right
|
||||||
|
jmp check_ZZZ
|
||||||
|
.left:
|
||||||
|
mov ebx, [pairs+ebx*8] ; left
|
||||||
|
check_ZZZ:
|
||||||
|
inc dword [final_value]
|
||||||
|
cmp ebx, 17575 ; ZZZ
|
||||||
|
jne find_move_end
|
||||||
|
got_ZZZ:
|
||||||
|
|
||||||
|
|
||||||
|
game_over:
|
||||||
|
mov eax, [final_value]
|
||||||
|
call print_dec
|
||||||
|
jmp exit
|
||||||
|
|
||||||
|
[section .data]
|
||||||
|
final_value: dd 0
|
||||||
|
file_lim: dd file.over - file
|
||||||
|
file: incbin "input"
|
||||||
|
.over:
|
||||||
|
|
||||||
|
[section .bss]
|
||||||
|
pairs: resd 100000 ; idk we only need a few 10,000
|
146
08/utils.s
Normal file
146
08/utils.s
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
; call # val val2
|
||||||
|
; int $0x80 eax eax edx -
|
||||||
|
;
|
||||||
|
; arg1 arg2 arg3 arg4 arg5 arg6 arg7
|
||||||
|
; ebx ecx edx esi edi ebp -
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mov eax, 1 ; exit
|
||||||
|
int 0x80
|
||||||
|
|
||||||
|
; filename in EBX
|
||||||
|
; return handle in EBX
|
||||||
|
; read only
|
||||||
|
open_file:
|
||||||
|
push eax
|
||||||
|
push ecx
|
||||||
|
mov eax, 5 ; open
|
||||||
|
xor ecx, ecx ; read only
|
||||||
|
int 0x80
|
||||||
|
mov ebx, eax
|
||||||
|
pop ecx
|
||||||
|
pop eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
; file handle in EBX
|
||||||
|
; buffer in ECX
|
||||||
|
; count of bytes to read in EDX
|
||||||
|
; return bytes actually read in EAX
|
||||||
|
; exits on error
|
||||||
|
read_file:
|
||||||
|
mov eax, 3 ; read
|
||||||
|
int 0x80
|
||||||
|
test eax, eax
|
||||||
|
js .err
|
||||||
|
ret
|
||||||
|
.err:
|
||||||
|
mov eax, 4 ; write
|
||||||
|
mov ebx, 1 ; stdout
|
||||||
|
mov ecx, .err_str
|
||||||
|
mov edx, 21
|
||||||
|
int 0x80
|
||||||
|
jmp exit
|
||||||
|
.err_str: db `Could not read file.\n`
|
||||||
|
|
||||||
|
; string input in ESI
|
||||||
|
; value in EAX
|
||||||
|
; CF set if none, clear if some
|
||||||
|
; ESI set past checked area
|
||||||
|
dec_parse:
|
||||||
|
push ebx
|
||||||
|
push edx
|
||||||
|
push edi
|
||||||
|
xor eax, eax
|
||||||
|
xor edi, edi
|
||||||
|
mov ebx, 10 ; base
|
||||||
|
lodsb
|
||||||
|
sub al, '0'
|
||||||
|
js .no_input
|
||||||
|
cmp al, 9
|
||||||
|
jle .got_char
|
||||||
|
.no_input:
|
||||||
|
stc ; set CF
|
||||||
|
jmp .done
|
||||||
|
.loop:
|
||||||
|
xor eax,eax
|
||||||
|
lodsb
|
||||||
|
sub al, '0'
|
||||||
|
js .dec_done
|
||||||
|
cmp al, 9
|
||||||
|
jg .dec_done
|
||||||
|
.got_char:
|
||||||
|
xchg edi,eax
|
||||||
|
mul ebx
|
||||||
|
add edi,eax
|
||||||
|
jmp .loop
|
||||||
|
.dec_done:
|
||||||
|
clc ; clear CF
|
||||||
|
.done:
|
||||||
|
mov eax,edi
|
||||||
|
pop edi
|
||||||
|
pop edx
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
; modifies no regs
|
||||||
|
newline:
|
||||||
|
pushad
|
||||||
|
push 10
|
||||||
|
mov eax, 4 ; write
|
||||||
|
mov ebx, 1 ; stdout
|
||||||
|
mov ecx, esp ; string
|
||||||
|
mov edx, 1 ; length
|
||||||
|
int 0x80
|
||||||
|
add esp, 4
|
||||||
|
popad
|
||||||
|
ret
|
||||||
|
; modifies no regs
|
||||||
|
space:
|
||||||
|
pushad
|
||||||
|
push 9
|
||||||
|
mov eax, 4 ; write
|
||||||
|
mov ebx, 1 ; stdout
|
||||||
|
mov ecx, esp ; string
|
||||||
|
mov edx, 1 ; length
|
||||||
|
int 0x80
|
||||||
|
add esp, 4
|
||||||
|
popad
|
||||||
|
ret
|
||||||
|
|
||||||
|
; input in EAX, all regs unmodified
|
||||||
|
print_dec:
|
||||||
|
pushad ; save regs
|
||||||
|
; max 4294967296 is 10 chars
|
||||||
|
; round to nearest 32-bit boundary
|
||||||
|
sub esp, 12
|
||||||
|
; string in ECX, length in EDX
|
||||||
|
lea ecx, [esp+11] ; last possible byte
|
||||||
|
; check for 0
|
||||||
|
test eax, eax
|
||||||
|
jz .zero
|
||||||
|
mov ebx, 10 ; base 10
|
||||||
|
xor esi, esi ; counter
|
||||||
|
.div_shit:
|
||||||
|
xor edx, edx
|
||||||
|
; divide
|
||||||
|
div ebx
|
||||||
|
dec ecx ; next char
|
||||||
|
inc esi
|
||||||
|
; store
|
||||||
|
add dl, '0'
|
||||||
|
mov byte [ecx], dl
|
||||||
|
; check if done
|
||||||
|
test eax, eax
|
||||||
|
jnz .div_shit ; continue
|
||||||
|
mov edx, esi ; counter in edx
|
||||||
|
jmp .write
|
||||||
|
.zero:
|
||||||
|
mov byte [ecx], '0'
|
||||||
|
mov edx, 1 ; length
|
||||||
|
.write:
|
||||||
|
mov eax, 4 ; write
|
||||||
|
mov ebx, 1 ; stdout
|
||||||
|
int 0x80
|
||||||
|
add esp, 12 ; restore stack
|
||||||
|
popad ; restore regs
|
||||||
|
ret
|
Loading…
Reference in New Issue
Block a user