10 Rem --- Animesh Tripathy -- Rachel Carson Middle School - 7th -

20 Rem --- ACSL Junior Divison Contest 4 ----- 2010-2011 ---------

30 Rem --- Matrix Encryption -------------------------------------

40 Dim EncodingMatrix(4)

50 Dim AlphaStringNum(100)

60 Rem Input lines containing alpha string and Encoding Matrix

70 For I=1 to 5

80 Input InputString$:InputString$=Upper$(InputString$)

90 L=len(InputString$) 'Find Length of the Input String

100 CommaPos=Instr(InputString$,",") '1st Command Position in the Input Line

110 Rem Extract AlphaString from the Input Line

120 AlphaString$=Left$(InputString$,CommaPos-1)

130 Rem Extract Rest of the input line as encoding Matrix

140 EncodingMatrix$=Mid$(InputString$,CommaPos+1,L)

150 Gosub 1000 'Extra Integers from the encoding matrix string

160 Gosub 2000 'Build Resulting Alpha String

170 Print ResultString$

180 Next I

190 END

 

1000 Rem Extract Encoding Matrix

1010 LenOfEncodingMatrix=Len(EncodingMatrix$)

1020 K=1:word$=""

1030 For J=1 TO LenOfEncodingMatrix

1040 IF MID$(EncodingMatrix$,J,1) = " " THEN GOTO 1060

1050 IF MID$(EncodingMatrix$,J,1) <> "," THEN word$=word$+MID$(EncodingMatrix$,J,1) ELSE EncodingMatrix(K)=val(word$):word$="":K=K+1

1060 NEXT J

1070 EncodingMatrix(K)=val(word$):word$="":K=K+1

1090 Return

 

2000 Rem Build Resulting Alpha String from Input Alpha String and Encoding Matrix

2010 Rem Print "Input Alpha String=";AlphaString$

2020 LengthOfAlphaString=len(AlphaString$)

2030 Rem Convert Alpha String into Integers and store into array

2040 K=1

2050 For J=1 to LengthOfAlphaString

2060 If Mid$(AlphaString$,J,1) = " " Then AlphaStringNum(K)=27 Else AlphaStringNum(K)=Asc(Mid$(AlphaString$,J,1))-64

2070 K=K+1

2080 Next J

2090 IF (LengthOfAlphaString MOD 2) > 0 Then AlphaStringNum(K)=27

2100 Rem Now Multiply Matrices to get result String

2110 ResultString$=""

2120 M=1

2130 While M<K

2140 Result=EncodingMatrix(1) * AlphaStringNum(M) + EncodingMatrix(2) * AlphaStringNum(M+1)

2150 IF Result >= 27 Then Result = Result MOD 27

2160 IF Result=0 Then ResultString$=ResultString$+" " Else ResultString$=ResultString$+CHR$(Result+64)

2170 Result=EncodingMatrix(3) * AlphaStringNum(M) + EncodingMatrix(4) * AlphaStringNum(M+1)

2180 IF Result >= 27 Then Result = Result MOD 27

2190 IF Result=0 Then ResultString$=ResultString$+" " Else ResultString$=ResultString$+CHR$(Result+64)

2200 M=M+2

2210 Wend

2220 Return