文档章节

codewars069 - Simple Encryption #4 - Qwerty

圣洁之子
 圣洁之子
发布于 2017/04/21 15:05
字数 407
阅读 15
收藏 0

Instructions:

https://www.codewars.com/kata/57f14afa5f2f226d7d0000f4/train/java

Solution:

public class Kata
{

	private static final String first = "qwertyuiop";
	private static final String second = "asdfghjkl";
	private static final String third = "zxcvbnm,.";

	private static Character lower(Character c) {
		if (c == '<') {
			return ',';
		} else if (c == '>') {
			return '.';
		} else if (Character.isUpperCase(c)) {
			return Character.toLowerCase(c);
		} else {
			return c;
		}
	}

	private static Character upper(Character c) {
		if (c == ',') {
			return '<';
		} else if (c == '.') {
			return '>';
		} else if (Character.isLowerCase(c)) {
			return Character.toUpperCase(c);
		} else {
			return c;
		}
	}

	private static Character rotate(final Character c, String key, int direction) {
		Character lower = lower(c);
		String region = null;
		int index = -1;
		if (first.indexOf(lower) != -1) {
			index = 0;
			region = first;
		} else if (second.indexOf(lower) != -1) {
			index = 1;
			region = second;
		} else if (third.indexOf(lower) != -1) {
			index = 2;
			region = third;
		}

		if (region == null) {
			return c;
		} else {
			int pos = region.indexOf(lower);
			int step = Integer.valueOf(String.valueOf(key.charAt(index)));
			pos = pos + step * direction;
			if (pos >= region.length()) {
				pos = pos % region.length();
			} else if (pos < 0) {
				pos = region.length() + pos;
			}
			if (c == lower) {
				return region.charAt(pos);
			} else {
				return upper(region.charAt(pos));
			}
		}
	}

	public static String encrypt(String text, int key) {
		String strkey = String.format("%03d", key);
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < text.length(); i++) {
			sb.append(rotate(text.charAt(i), strkey, 1));
		}
		return sb.toString();
	}

	public static String decrypt(String encryptedText, int key) {
		String strkey = String.format("%03d", key);
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < encryptedText.length(); i++) {
			sb.append(rotate(encryptedText.charAt(i), strkey, -1));
		}
		return sb.toString();
	}



}

Sample Tests:

import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;

public class SolutionTest {
    @Test
    public void encryptExampleTests() {
        assertEquals("S", Kata.encrypt("A", 111));
        assertEquals("Smb", Kata.encrypt("Abc", 212));
        assertEquals("Wave", Kata.encrypt("Wave", 0)); // -> 000
        assertEquals("Tg.y", Kata.encrypt("Wave", 345));
        assertEquals(">fdd", Kata.encrypt("Ball", 134));
        assertEquals(">gff", Kata.encrypt("Ball", 444));
    
        assertEquals("Iaqh qh g iyhi,", Kata.encrypt("This is a test.", 348));
        assertEquals("Sr pgi jlpl Jr,lqlage Zlow Piapc I.skiaa dw. l.s ibnepizi.p ugi. de.se.f l arkwper.c", Kata.encrypt("Do the kata Kobayashi Maru Test. Endless fun and excitement when finding a solution.", 583));          
    }
    
    @Test
    public void decryptExampleTests() {
        assertEquals("A", Kata.decrypt("S", 111));
        assertEquals("Abc", Kata.decrypt("Smb", 212));
        assertEquals("Wave", Kata.decrypt("Wave", 0)); // -> 000
        assertEquals("Wave", Kata.decrypt("Tg.y", 345));
        assertEquals("Ball", Kata.decrypt(">fdd", 134));
        assertEquals("Ball", Kata.decrypt(">gff", 444));
    
        assertEquals("This is a test.", Kata.decrypt("Iaqh qh g iyhi,", 348));
        assertEquals("Do the kata Kobayashi Maru Test. Endless fun and excitement when finding a solution.", Kata.decrypt("Sr pgi jlpl Jr,lqlage Zlow Piapc I.skiaa dw. l.s ibnepizi.p ugi. de.se.f l arkwper.c", 583));
    }
}

© 著作权归作者所有

圣洁之子
粉丝 8
博文 361
码字总数 108478
作品 0
深圳
后端工程师
私信 提问
三种键盘布局qwerty、dvorak、colemak

【qwerty布局】 qwerty布局大家应该都很熟悉了,全世界最普及的键盘布局。 截止到去年接触并使用dvorak布局之前,我使用了十几年qwerty布局,在http://speedtest.10fastfingers.com/测试的最...

好铁
2014/07/25
0
0
Encrypting Properties With Jasypt

Properties are used in many Java applications as a simple way of separating parts that are likely to change, from the parts that are not that likely to change. Consider for exam......

山哥
2012/04/06
0
0
Mutt 1.6 发布,基于文本界面的邮件客户端

Mutt 1.6 发布了。Mutt 是一个很小型但功能强大的,使用文本界面的 MIME 邮件客户端,Mutt 具有高可配置的特性,适合高级邮件用户使用。 与 1.4 版本比较,该版本更新日志: IMAP $imap_che...

oschina
2016/04/05
986
1
REST another WebService???

一、什么是REST REST stands for Representational State Transfer. (It is sometimes spelled "ReST".) It relies on a stateless, client-server, cacheable communications protocol -- a......

Oscarfff
2015/12/19
86
0
25 个最普通 & 最烂的密码

来自@雷锋网的投稿: 在网上用什么密码,是个比较头疼的事情,如果你不选好一点,可能你的密码就被黑客轻易破解了。SplashData列出了2011年网上最平常最烂的一些密码。 这些密码其实有一些可...

红薯
2011/11/18
9.2K
79

没有更多内容

加载失败,请刷新页面

加载更多

阿里云安全中心:自动化安全闭环实现全方位默认安全防护

随着数字化转型的深入发展,企业云上资产越来越多元化,随之而来的是安全威胁的复杂化,企业需要花费大量精力进行告警分析、威胁检测、病毒查杀等工作。Gartner曾指出,随着安全警报的复杂性...

迷你芊宝宝
20分钟前
1
0
好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM

好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM 最近在The Sass Way里看到了Modular CSS typography一文,发现文章在开头部分就提到了OOCSS、 SMACSS、 BEM、这3个词。“如果还不...

好程序员IT
23分钟前
2
0
Gradle的安装和在idea的配置

下载gradle 下载地址:http://services.gradle.org/distributions/ 。我下载的是 gradle-5.4-bin.zip。然后解压到G:\gradle-5.4 配置环境变量。 有3个环境变量: GRADLE_HOME 等于gradle的安...

王坤charlie
23分钟前
1
0
聊聊分布式事务,再说说解决方案

前言 最近很久没有写博客了,一方面是因为公司事情最近比较忙,另外一方面是因为在进行 CAP 的下一阶段的开发工作,不过目前已经告一段落了。 接下来还是开始我们今天的话题,说说分布式事务...

群星纪元
25分钟前
2
0
分布式项目(6)consul注册中心

lelinked
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部