import
java.util.
*
;
import
java.io.
*
;
class
Test2
...
{ public static void main(String[] args) throws Exception ... { BufferedReader bf = new BufferedReader( new FileReader( " shake.in " )); String str1,str2; char a[][]; while (bf.ready()) ... { str1 = bf.readLine(); str2 = bf.readLine(); if (str1.charAt( 0 ) == ' 0 ' && str1.charAt( 1 ) != ' 0 ' ) ... { int m = Integer.parseInt(( new Character(str1.charAt( 1 ))).toString()); a = new char [m][m]; } else if (str1.charAt( 0 ) == ' 0 ' && str1.charAt( 1 ) == ' 0 ' ) ... { a = new char [ 100 ][ 100 ]; } else ... { int m = Integer.parseInt(str1.substring( 0 , 2 )); System.out.println(m); a = new char [m][m]; } fill(a,str2); for ( int i = 2 ;i < str1.length();i ++ ) go(str1.charAt(i),a); for ( int k = 0 ;k < a.length;k ++ ) ... { for ( int j = 0 ;j < a.length;j ++ ) System.out.print(a[k][j]); } System.out.println(); } // end while } // end main public static void go( char c, char a[][]) ... { char tmp; char tmp2; switch (c) ... { case ' R ' : for ( int i = 0 ;i < a.length;i ++ ) if (i % 2 == 0 ) ... { int j; tmp = a[i][a.length - 1 ]; for ( j = a.length - 1 ;j > 0 ;j -- ) a[i][j] = a[i][j - 1 ]; a[i][j] = tmp; } else ... { int j; tmp = a[i][ 0 ]; for (j = 0 ;j < a.length - 1 ;j ++ ) a[i][j] = a[i][j + 1 ]; a[i][j] = tmp; } break ; case ' L ' : for ( int i = 0 ;i < a.length / 2 ;i ++ ) if (i % 2 == 0 ) ... { int j; tmp2 = a[i][a.length - 1 - i]; for ( j = a.length - 1 - i;j > i;j -- ) a[i][j] = a[i][j - 1 ]; tmp = a[a.length - 1 - i][a.length - 1 - i]; for ( j = a.length - 1 - i;j > i + 1 ;j -- ) a[j][a.length - i - 1 ] = a[j - 1 ][a.length - i - 1 ]; a[j][a.length - i - 1 ] = tmp2; tmp2 = a[a.length - i - 1 ][i]; for ( j = i;j < a.length - i - 1 - 1 ;j ++ ) a[a.length - 1 - i][j] = a[a.length - 1 - i][j + 1 ]; a[a.length - 1 - i][j] = tmp; tmp = a[i][i]; for ( j = i;j < a.length - i - 1 - 1 ;j ++ ) a[j][i] = a[j + 1 ][i]; a[j][i] = tmp2; } else ... { int j; tmp = a[i][i]; for ( j = i;j < a.length - i - 1 ;j ++ ) a[i][j] = a[i][j + 1 ]; a[i][j] = a[i + 1 ][j]; tmp2 = a[a.length - i - 1 ][i]; for (j = a.length - i - 1 ;j > i + 1 ;j -- ) a[j][i] = a[j - 1 ][i]; a[j][i] = tmp; tmp = a[a.length - i - 1 ][a.length - i - 1 ]; for (j = a.length - i - 1 ;j > i + 1 ;j -- ) a[a.length - i - 1 ][j] = a[a.length - i - 1 ][j - 1 ]; a[a.length - i - 1 ][j] = tmp2; for (j = i;j < a.length - i - 1 - 1 ;j ++ ) a[j][a.length - i - 1 ] = a[j + 1 ][a.length - i - 1 ]; a[j][a.length - i - 1 ] = tmp; } break ; case ' S ' : for ( int j = 0 ;j < a.length;j ++ ) if (j % 2 == 0 ) ... { int i; tmp = a[ 0 ][j]; for ( i = 0 ;i < a.length - 1 ;i ++ ) a[i][j] = a[i + 1 ][j]; a[i][j] = tmp; } else ... { int i; tmp = a[a.length - 1 ][j]; for (i = a.length - 1 ;i > 0 ;i -- ) a[i][j] = a[i - 1 ][j]; a[i][j] = tmp; } break ; } } public static void fill( char a[][],String str) ... { int k = 0 ; int m = 0 ; String str1 = str.toUpperCase(); for ( int i = 0 ;i < a.length;i ++ ) for ( int j = 0 ;j < a.length;j ++ ) ... { if (k < str.length()) a[i][j] = str1.charAt(k ++ ); else ... { if (m > 25 )m = 0 ; a[i][j] = ( char )(( ' A ' + m ++ ) % ((( int ) ' Z ' + 1 ))); } } } }
Problem B: SHAKE
Input:shake.in output:standard
加密消息 。
DESCRIPTION
Sam 想要与 Sally 相互之间发送秘密消息,因此他们设计了一个简单但有效的加密机制,他们可以手工执行这样的加密。然而,他们很快就陷入了爱河,相互间的消息慢慢变得越来越大。因此,他们决定把加密机制用机器来执行。你的工作是写一个程序来实现他们的“ shake,rattle,roll” 加密机制。(解密不需在此时实现)。
一条明文消息放以行优先的顺序放在一个二维数组中,每个字符在数组一个独一无二的格子中。假如消息不能填满数组,那么空的格子就被从 A 到 Z 的大写字母填充(需要时可重复)。例如,消息“ Meet me at the pizza parlor” 在一个 6 ╳ 6 的二维数组中看起来如下图所示。注意所有字母都以大写字母保存。
为加密这条消息, ”shake,rattle,roll” 操作如下:
Shake : 每奇数列的字母被向上轮换,方法是最上面的字母移到最下面,列中的其他字母都向上移动一个位置。偶数列的向下轮换:最下面的字母移到最上面,列中的其他字母向下移动一个位置。列按从左到右的顺序从 1 开始编号。例如: ( 上右图 )
Rattle: 奇数行的向右轮换一个字母,最右边的字母移到最左端,其他字母向右移动一个位置。偶数行的向左轮换一个字母,最左端的字母移到最右端,其他字母向左移动一个位置。例如:
Roll: 每奇数“环”向右环绕移动一个字母,而偶数“环”则向右环绕移动一个字母,如下图所示。“环”按最右上角的行号的奇偶性分奇偶(右上角的行号为 1 )。
矩阵大小是加密密钥,可以在 3x3 到 100x100 之间改变,矩阵问题正方形。
INPUT:
输入文件可能包含多个加密问题。每个问题由两行组成。第一行是加密密钥,第二行是要加密的消息。加密密钥开始是两个表示矩阵大小的数字,后接一系列的 'S', 'R', 或 'L' 。对每个 ’S’ 表示执行 Shake 操作,对 ’R’ 表示执行 Rattle 操作,对 ’L’ 表示执行 roll 操作。数字 ”00” 表示 100.
加密密钥至多 80 个字母,消息至多 10,000 个字符。假定消息问题可在指定的矩阵中装下。
Sample input
04RSRR
I love ice cream
06SRL
Meet me at the Pizza Parlor
OUTPUT:
每行输出加密后的密文。密文长度是矩阵大小的平方 ( 例,一个 3x3 的矩阵产生长度的字符串密文 )
Sample output
IREAELCIMVE OC
EIEEAGTTIMT E P ZHRZB PAORDAFLEA CMH