타이핑하지만 왼쪽에 [닫힘]


14

배경

회의 메모를 작성하는 작업이 제공되었습니다. 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

채점

바이트 단위의 최저 점수가 이깁니다. 즐기세요!


11
QWERTY 키보드의 관련 행에 대한 빠른 참조가 유용 할 것이며 도전 과제를 독립적으로 유지하십시오
Jo King

4
앞에 "Z"가 있으면 숫자가 구두점으로 이동합니까?
ErikF

10
그러나 Z는 교대에 해당합니다 ...?
관련이없는 문자열

4
권장 테스트 사례 : Azerty->wERT
Jitse

5
편지 쓰기를 들어 z, 문자열의 다음 문자를 대문자 -> 우리는 편지 총액에 관심을 가질 수는 평균 않습니다와 숫자 및 기호를 전환 할 필요가 없습니다? 무엇에 대한 예상 출력의 0123456789, a0123456789그리고 z0z1z2z3z4z5z6z7z8z9? (QWERTY 이외의 많은 키보드에서 'Caps Lock'은 실제로 'Shift Lock'역할을합니다. QWERTY는이 패턴을 따르지 않는다고 생각하지만 익숙하지 않은 사용자에게는 지정해야합니다. )
Arnauld

답변:


11

자바 스크립트 (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문자열 에서 각 문자를 찾아서 이전 문자로 바꾼 다음 Aor 사이의 모든 경우 를 바꾸고 or의 a모든 발생을 제거합니다 (shift 키는 자체적으로 아무것도하지 않기 때문에). 일반적인 QWERTY 키보드 레이아웃이어야하지만 그렇지 않은 경우 알려주십시오.Zz


자신의 TIO 링크에서 zebras=>wveA테스트 사례가 잘못된 것 같습니다. 첫 번째 ze대문자를 인쇄 해야합니다 w. OP에서 : " zletter의 경우 문자열에서 다음 문자를 대문자로 사용하십시오."
Night2

@ Night2 Cheers, OP가 설명하기 전에 게시했습니다. Shift 키를 한 번 눌러도 아무 효과가 없다고 가정했습니다.
Matthew Jensen

5

파이썬 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 캡 로크가 활성화 될 때 상기 룩업 값에 현재 문자가 대문자 인 경우). 숫자는 캡 잠금 수정 자의 영향을받지 않습니다.


2

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끝에 다시 설정됩니다 .

2

빨강 , 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숫자에는 영향을 미치지 않습니다.


작동하지 않는 것 같습니다'A pear' -> ' OWe'
Jitse

@Jitse Hmm
Galen Ivanov

@Jitse 그러나 실제로 숫자와 잘 작동하지 않습니다, 그것은 OP에서 완전히 명확하지 않습니다
Galen Ivanov

2
나는 도전이있는 그대로 매우 모호하다는 것에 동의한다.
Jitse

2

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 덕분입니다.

온라인으로 사용해보십시오!


추천 k^=!(l^7)대신k=l^7?k:!k
천장 고양이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.