배경
회의 메모를 작성하는 작업이 제공되었습니다. Google 문서에 입력하기 시작했지만 회의 중에 입력하는 동안 키보드를 볼 시간이 충분하지 않습니다.
다행히도 키보드를 보지 않고도 입력 할 수 있습니다. 회의 후에는 입력 한 모든 것이 왼쪽의 열쇠라는 것을 알게됩니다.
도전
이 문제를 해결하기 위해 QWERTY 키보드 레이아웃의 문자, 숫자 및 스페이스 바를 사용하게됩니다.
-
표준 입력 방법으로 텍스트를 입력하면 모든 문자가 키보드에서 왼쪽으로 하나씩 이동하는 결과 텍스트를 출력합니다.
-
문자의 대부분을 위해, 단지 문자를보고 (왼쪽 문자로 번역
c
된다x
,t
된다r
, 등). -
letter의
q
경우 리터럴 탭 문자 (\t
)로 변환하십시오 . -
letter의
a
경우 caps lock을 활성화하여 나머지 문자열의 대소 문자를 바꾸십시오. -
편지 쓰기를 들어
z
, 문자열의 다음 문자를 대문자로. -
스페이스 바에는 번역이 필요하지 않습니다.
-
-
번역하는 동안 대문자를 유지하고 캡 잠금에 유의하십시오 (캡 잠금이 활성화 된 경우 대소 문자가 반대인지 확인).
-
입력 문자열의 모든 문자는 문자, 숫자 또는 공백입니다. 문장 부호 나 다른 문자는 포함 할 수 없습니다.
테스트 사례
\t
리터럴 탭 문자입니다
Hello world -> Gwkki qieks
Code Golf -> Xisw Fikd
Queried apples -> \tyweuws OOKWA
채점
바이트 단위의 최저 점수가 이깁니다. 즐기세요!
답변
자바 스크립트 (V8) , 271 바이트
f=(s,k='~!@#$%^&*()_+`1234567890-=\tQWERTYUIOP{}|\tqwertyuiop[]\\ASDFGHJKL:"\n\\asdfghjkl;\'ZXCVBNM<>?zxcvbnm,./')=>s.replace(/[^ ]/g,c=>k[k.indexOf(c)-1]).replace(/\\([^\\]*)\\?/g,(m,c)=>c.replace(/[a-zA-z]/g,l=>l>'Z'?l.toUpperCase():l.toLowerCase())).replace(/[?']/,"")
온라인으로 사용해보십시오!
내 첫 JavaScript 코드 골프. 확실히 더 짧을 수 있지만 이것이 좋은 시작이라고 생각합니다.
기본적으로 k
문자열 에서 각 문자를 찾아서 이전 문자로 바꾼 다음 A
or 사이의 모든 경우 를 바꾸고 or의 a
모든 발생을 제거합니다 (shift 키는 자체적으로 아무것도하지 않기 때문에).
일반적인 QWERTY 키보드 레이아웃이어야하지만 그렇지 않은 경우 알려주십시오.Z
z
답변
파이썬 3 , 211 바이트
d=' ~!@#$%^&*()`~1!2@3#4$5%6^7&8*9(0) qQwWeErRtTyYuUiIoOpPaAsSdDfFgGhHjJkKlLzZxXcCvVbBnNmM '
c=s=0
for i in input():k=d.find(i);print(end=d[k-2+(c*i.isalpha()^s)*(1-k%2*2)][i in'aAzZ':]);c^=i in'aA';s=i in'zZ'
일반 문자와 해당 시프트 수정 버전이 함께 그룹화 된 조회 문자열을 사용합니다. 입력의 각 문자에 대해 왼쪽에서 두 자리의 문자를 검색합니다. 부가하여 대문자를 변경 1
(또는 -1
이동 XOR 캡 로크가 활성화 될 때 상기 룩업 값에 현재 문자가 대문자 인 경우). 숫자는 캡 잠금 수정 자의 영향을받지 않습니다.
답변
PHP , 227 바이트
for(;''<$s=$argn[$i++];)$s!=a&&$s!=A?$s!=z&&$s!=Z?($t=$m[stripos($m='~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm',$s)-1])+(print$s>' '?$s<A?!$h?$s-1?$s?$s-1:9:'`':$t:($t>=A&&(($s<a)+$h+$c)%2?$t^' ':$t):$s)+$h=0:$h=1:$c=!$c;
~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm
각 숫자마다 왼쪽에 SHIFT 모드가 있고 각 문자마다 왼쪽에 문자 / 키가 있는 매핑 문자열 ( )을 만들었습니다 .
입력 문자와 각 문자를 반복합니다.
- 문자가
a
또는 인A
경우 caps lock 플래그가 반대로됩니다 (논리적 아님). - 문자가
z
또는 인Z
경우 shift 플래그는로 설정됩니다1
. - 캐릭터가 아닌 경우
aAzZ
:- 매핑 문자열에서 현재 문자 왼쪽의 문자가에 저장됩니다
$t
. - 현재 문자가 공백이면 인쇄됩니다.
- 현재 문자가 숫자이며, 시프트 플래그 값의 경우
1
,$t
인쇄 된 숫자 인 경우, 다른,1
,`
자리 인 경우, 인쇄0
,9
인쇄와 달리,digit-1
인쇄된다. - 현재 문자가 문자 인 경우, 시프트 플래그의 상태에 따라 대문자 또는 대문자로 대문자 잠금 플래그 및 현재 문자의 대소 문자 (소문자 / 대문자)
$t
가 인쇄됩니다. 여기서 유일한 특수한 경우는 탭 문자이며 그대로 인쇄됩니다. - Shift 플래그는 항상
0
끝에 다시 설정됩니다 .
- 매핑 문자열에서 현재 문자 왼쪽의 문자가에 저장됩니다
답변
빨강 , 218 바이트
func[t][c: z: 0 rejoin collect[foreach s t[case[find"Aa"s[c: c xor 32]find"Zz"s[z: 32]on
[keep(select/case" poiuytrewq^-lkjhgfdsamnbvcxzPOIUYTREWQ^-LKJHGFDSAMNBVCXZ0987654321~"s)xor either s <#"Z"[0][c xor z]z: 0]]]]]
현재 AaZz
숫자에는 영향을 미치지 않습니다.
답변
C (gcc) , 276 바이트
i;j;k;h;l;m;n;o;f(char*b){char*c=calloc(m=strlen(b),1),*a=" \tqwertyuiop\aasdfghjkl\nzxcvbnm\tQWERTYUIOP\aASDFGHJKL\nZXCVBNM`1234567890";for(i=k=j=n=0;j<=m;l=a[i=index(a,b[j++])-a-1])k=l^7?k:!k,o=l>64&l<91?a[i-30*k]:l<97?h=i?l^7?l?l^10?l:0:32:0:0:a[i+29*k],o?c[n++]=o:n;b=c;}
-33 바이트의 ceilingcat 덕분입니다.