-
Notifications
You must be signed in to change notification settings - Fork 5
algorithm wertyu
Jongbin Oh edited this page Jun 8, 2013
·
1 revision
-
한 번에 Accepted. 왠 일이래...
/* @JUDGE_ID:parkpd 10038 C "test" */ /* @BEGIN_OF_SOURCE_CODE */ #include <iostream> #include <vector> #include <set> #include <string> #include <strstream> using namespace std; bool IsInRange(int value, int from, int to) { return (from <= value) && (value <= to); } //#define _UNIT_TEST #ifdef _UNIT_TEST #include "../UnitTest++/src/UnitTest++.h" int main() { UnitTest::RunAllTests(); char temp; cin >> temp; return 0; } #endif // code implement class CKeyMap { public: static char FindNextKey(char input, char& output); static bool FindNextKey(const string& str, char input, char& output); static string ConvertString(const string& input); static bool ConsoleTest(istream& input, ostream& output); const static string KeyboardLine[4]; }; const string CKeyMap::KeyboardLine[4] = { string("`1234567890-="), string("QWERTYUIOP[]\\"), string("ASDFGHJKL;'"), string("ZXCVBNM,./") }; char CKeyMap::FindNextKey(char input, char& output) { if (' ' == input) { output = ' '; return true; } for (int i = 0; i < 4; ++i) { if (FindNextKey(KeyboardLine[i], input, output)) { return true; } } return false; } bool CKeyMap::FindNextKey(const string& str, char input, char& output) { string::size_type it = str.find(input); if ((it != string::npos) && (it != 0)) { output = str[it - 1]; return true; } output = '?'; // 절대 나오지 않는 키 return false; } string CKeyMap::ConvertString(const string& input) { char o; string output; for (size_t i = 0; i < input.size(); ++i) { if (FindNextKey(input[i], o)) { output.push_back(o); } else { return "\n"; } } output.push_back('\n'); return output; } bool CKeyMap::ConsoleTest(istream& input, ostream& output) { string inputString; while (getline(input, inputString)) { string outputString = ConvertString(inputString); output << outputString; } return true; } #ifndef _UNIT_TEST int main() { CKeyMap::ConsoleTest(cin, cout); return 0; } #else // tests struct FixtureKeyMap : public CKeyMap { char output; stringstream testCin; stringstream testCout; }; TEST_FIXTURE(FixtureKeyMap, FindNextKey) { string test = "tesp"; CHECK(FindNextKey(test, 'e', output)); CHECK_EQUAL('t', output); CHECK(FindNextKey(test, 's', output)); CHECK_EQUAL('e', output); CHECK(FindNextKey(test, 'p', output)); CHECK_EQUAL('s', output); CHECK(!FindNextKey(test, 't', output)); CHECK_EQUAL('?', output); } TEST_FIXTURE(FixtureKeyMap, FindNextKey1) { CHECK(FindNextKey('1', output)); CHECK_EQUAL('\'', output); } TEST_FIXTURE(FixtureKeyMap, FindNextKey_Except) { CHECK(FindNextKey(' ', output)); CHECK_EQUAL(' ', output); } TEST_FIXTURE(FixtureKeyMap, ConvertString) { string output = ConvertString("O S, GOMR YPFSU/"); CHECK_EQUAL("I AM FINE TODAY.", output); } TEST_FIXTURE(FixtureKeyMap, ConsoleTest) { testCin << "O S, GOMR YPFSU/\n"; ConsoleTest(testCin, testCout); CHECK_EQUAL("I AM FINE TODAY.", testCout.str()); } #endif /* @END_OF_SOURCE_CODE */ /* @JUDGE_ID:parkpd 10038 C "test" */ /* @BEGIN_OF_SOURCE_CODE */ #include <iostream> #include <vector> #include <set> #include <strstream> #include <algorithm> #include <string> using namespace std; //#define _UNIT_TEST #ifdef _UNIT_TEST #include "../UnitTest++/src/UnitTest++.h" int main() { UnitTest::RunAllTests(); char temp; cin >> temp; return 0; } #endif class CKeyboard { public: static void TestConsole(istream& input, ostream& output); static string ConvertString(string input); static bool ConvertByString(const string& str, char c, char& out); static char ConvertChar(char in); const static string m_ConvertTable[4]; }; const string CKeyboard::m_ConvertTable[] = { string("`1234567890-="), string("QWERTYUIOP[]\\"), string("ASDFGHJKL;'"), string("ZXCVBNM,./") }; void CKeyboard::TestConsole(istream& input, ostream& output) { string inputString; while (getline(input, inputString)) { string outputString = ConvertString(inputString); output << outputString << endl; } } string CKeyboard::ConvertString(string input) { transform( input.begin(), input.end(), input.begin(), &ConvertChar); return input; } bool CKeyboard::ConvertByString(const string& str, char in, char& out) { if (in == ' ') { out = ' '; return true; } int index = (int)str.find(in, 1); if (index != string::npos) { out = str[index - 1]; return true; } out = '?'; return false; } char CKeyboard::ConvertChar(char in) { char out; for (int i = 0; i < 4; ++i) { if (ConvertByString(m_ConvertTable[i], in, out)) { return out; } } return '?'; } #ifndef _UNIT_TEST int main() { CKeyboard::TestConsole(cin, cout); return 0; } #else TEST_FIXTURE(CKeyboard, ConvertByString) { string test = "ABCD"; char output; CHECK(ConvertByString(test, 'C', output)); CHECK_EQUAL('B', output); CHECK(!ConvertByString(test, 'A', output)); CHECK_EQUAL('?', output); CHECK(!ConvertByString(test, 'E', output)); CHECK_EQUAL('?', output); CHECK(ConvertByString(test, ' ', output)); CHECK_EQUAL(' ', output); } TEST_FIXTURE(CKeyboard, ConvertChar) { CHECK_EQUAL('I', ConvertChar('O')); CHECK_EQUAL('?', ConvertChar('?')); } TEST(TestConsole) { stringstream input; stringstream output; input << "O S, GOMR YPFSU/"; CKeyboard::TestConsole(input, output); CHECK_EQUAL("I AM FINE TODAY.", output.str()); }; #endif /* @END_OF_SOURCE_CODE */
-
저도 처음으로 Accept 받아봤네요
-
소스
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; public class Main { private Map<Character, Character> map = new HashMap<Character, Character>(); private final String [] sources = { "`1234567890-=", "QWERTYUIOP[]\\", "ASDFGHJKL;'", "ZXCVBNM,./", " " }; public Main(){ initMap(); } private void initMap(){ for(String source : sources ){ for(int i=1;i<source.length();i++){ map.put(source.charAt(i), source.charAt(i-1)); } } } public Character get(Character key) { Character result = map.get(key); if(result == null){ result = new Character(' '); } return result; } public String transString(String source){ StringBuilder builder = new StringBuilder(); for(int i =0;i<source.length();i++){ builder.append( map.get(source.charAt(i))); } return builder.toString(); } public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { String line ; while((line = reader.readLine())!=null){ Main transfer = new Main(); System.out.println(transfer.transString(line)); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } -
Test Case
import junit.framework.TestCase; public class TransferTestCase extends TestCase { public void testTransCharacter(){ Main map = new Main(); assertEquals(new Character('I'), map.get('O')); assertEquals(new Character('P'), map.get('[')); assertEquals(new Character('-'), map.get('=')); } public void testTransString(){ Main map = new Main(); assertEquals("I AM FINE TODAY.", map.transString("O S, GOMR YPFSU/")); } }
-
쉬운것도 Wrong Answer 라는
- Q 입력시 = 나온다고 가정하는게 맞는건지 모르겠네요 - 정희종
-
KeyboardMain.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class KeyboardMain { private String key = "`01234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"; public static void main(String[] args) { String in; KeyboardMain k = new KeyboardMain(); while((in = ReadLine()) != null) { System.out.println(k.reviseKey(in)); } } public char reviseKeyChar(char in) { int index; if( in == ' ' || (index = key.indexOf(in)) == -1 ) return in; else return key.charAt(index-1); } public String reviseKey(String in) { String result= ""; for(int i=0; i< in.length(); i++) { char ch = this.reviseKeyChar(in.charAt(i)); result = result.concat(Character.toString(ch)); } return result; } public static String ReadLine() { String data = null; try { BufferedReader is = new BufferedReader(new InputStreamReader(System.in)); data = is.readLine(); } catch(IOException e) { System.out.println("IOException " +e); } return data; } } -
KeyboardTest.java
import junit.framework.TestCase; public class KeyboardTest extends TestCase { KeyboardMain k = new KeyboardMain(); public void testReviseKeyChar() { assertEquals("1",k.reviseKeyChar('Q'),'='); assertEquals("1",k.reviseKeyChar('W'),'Q'); assertEquals("1",k.reviseKeyChar('E'),'W'); assertEquals("1",k.reviseKeyChar('R'),'E'); assertEquals("1",k.reviseKeyChar('S'),'A'); } public void testReviseKey() { assertEquals("1","I AM FINE TODAY.",k.reviseKey("O S, GOMR YPFSU/")); assertEquals("1","WHAT A WONDERFUL WORLD",k.reviseKey("EJSY S EPMFRTGI; EPT;F")); assertEquals("1","TEST ONE MORE [TIME]",k.reviseKey("YRDY PMR ,PTR ]YO,R\\")); } }
/* @JUDGE_ID:itmentor 110301 C "test" */
/* @BEGIN_OF_SOURCE_CODE */
#include <iostream>
#include <string>
using namespace std;
int main()
{
string srcString = " 1234567890-=WERTYUIOP[]\\SDFGHJKL;'XCVBNM,./";
string dstString = " `1234567890-QWERTYUIOP[]ASDFGHJKL;ZXCVBNM,.";
while(true)
{
char ln[512];
cin.getline(ln,512);
if( ln[0] == 0 )
break;
string buf = ln;
int bufSize = buf.size();
for(int i = 0 ; i < bufSize ; i++)
{
int index = srcString.find( buf[i] );
cout << dstString[index];
}
cout << std::endl;
}
return 0;
}
/* @END_OF_SOURCE_CODE */
using System;
using System.Collections.Generic;
using System.Text;
namespace Alg
{
class Program
{
static void Main(string[] args)
{
char[] buf = Console.ReadLine().ToUpper().ToCharArray();
string srcString = " 1234567890-=WERTYUIOP[]\\SDFGHJKL;'XCVBNM,./";
string dstString = " `1234567890-QWERTYUIOP[]ASDFGHJKL;ZXCVBNM,.";
foreach (char ch in buf)
{
for (int i = 0; i < srcString.Length; i++)
{
if (ch == srcString[i])
{
Console.Write(dstString[i]);
break;
}
}
}
}
}
}