SHAKE

来源:互联网 发布:python迭代器原理 编辑:程序博客网 时间:2024/05/01 21:53

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”加密机制。(解密不需在此时实现)。

一条明文消息放以行优先的顺序放在一个二维数组中,每个字符在数组一个独一无二的格子中。假如消息不能填满数组,那么空的格子就被从AZ的大写字母填充(需要时可重复)。例如,消息“Meet me at the pizza parlor”在一个66的二维数组中看起来如下图所示。注意所有字母都以大写字母保存。

为加密这条消息,”shake,rattle,roll”操作如下:

Shake:每奇数列的字母被向上轮换,方法是最上面的字母移到最下面,列中的其他字母都向上移动一个位置。偶数列的向下轮换:最下面的字母移到最上面,列中的其他字母向下移动一个位置。列按从左到右的顺序从1开始编号。例如:(上右图)

Rattle:奇数行的向右轮换一个字母,最右边的字母移到最左端,其他字母向右移动一个位置。偶数行的向左轮换一个字母,最左端的字母移到最右端,其他字母向左移动一个位置。例如:

Roll:每奇数“环”向右环绕移动一个字母,而偶数“环”则向右环绕移动一个字母,如下图所示。“环”按最右上角的行号的奇偶性分奇偶(右上角的行号为1)。

 

矩阵大小是加密密钥,可以在3x3100x100之间改变,矩阵问题正方形。

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

原创粉丝点击