入力しますが、左[閉じる]


14

バックグラウンド

会議のメモを取るタスクが与えられました。Googleドキュメントで入力を開始しますが、会議中に入力中にキーボードを確認する十分な時間がありません。

幸いなことに、キーボードを見なくても入力できます。ミーティングの後、入​​力したすべてが左側の1つのキーであることがわかります。

チャレンジ

この課題では、QWERTYキーボードレイアウトの文字、数字、スペースバーを使用します。

  • (任意の標準入力メソッドからの)テキストの入力が与えられた場合、結果のテキストを出力します。すべての文字はキーボード上で1つ左に移動します。

    • 大部分の文字については、文字を見て、左の文字に変換するだけです(にcなりx、にtなりますr、など)。

    • letterのq場合、リテラルのタブ文字(\t)に変換します。

    • letterのa場合、Caps Lockを有効にして、残りの文字列の大文字化を逆にします。

    • letterのz場合、文字列の次の文字を大文字にします。

    • スペースバーの翻訳は必要ありません。

  • 変換中は大文字を保持し、Caps Lockに注意してください(Caps Lockが有効になっている場合は、大文字と小文字が逆になっていることを確認してください)。

  • 入力文字列のすべての文字は、文字、数字、またはスペースになります。句読点やその他の文字を含めることはできません。

テストケース

\t リテラルのタブ文字です

Hello world    -> Gwkki qieks
Code Golf      -> Xisw Fikd
Queried apples -> \tyweuws OOKWA

得点

バイト単位の最低スコアが勝ちです。楽しんで!


11
QWERTYキーボードの関連する行のクイックリファレンスが役立ち、チャレンジを自己完結型に保ちます
ジョーキング

4
それらの前に「Z」があった場合、数字は句読点にシフトされますか?
ErikF

10
しかし、Zはシフトに対応しています...?
関連のない文字列

4
推奨されるテストケース:Azerty->wERT
Jitse

5
letterのz場合、文字列の次の文字を大文字にします ->つまり、大文字と小文字を区別するだけで、数字と記号を切り替える必要はありませんか?何のために期待される出力だ0123456789a0123456789z0z1z2z3z4z5z6z7z8z9?(さらに、多くの非QWERTYキーボードでは、「Caps Lock」は実際に「Shift Lock」として機能します。QWERTYはこのパターンに従っていないと思いますが、これに慣れていない人には指定する必要があります。 )
アーナルド

回答:


11

JavaScript(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たりしaて、すべての出現箇所を削除しZたりz(シフトキーが独自に何もしないように)。
これは通常のQWERTYキーボードレイアウトである必要がありますが、そうでない場合はお知らせください。


独自のTIOリンクでは、zebras=>wveAテストケースが間違っているようです。最初ze、大文字を印刷する必要がありますw。OPから:「文字のz場合、文字列の次の文字を大文字にします。」
ナイト2

@ Night2乾杯、OPが明確にする前に投稿しました。Shiftキーを1回押しても何も起こらないと考えました。
マシュージェンセン

5

Python 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'

オンラインでお試しください!

通常の文字とそのシフト変更バージョンがグループ化されたルックアップ文字列を使用します。入力内の各文字について、文字を2つ左に取得します。シフトXORキャップスロックがアクティブなときに、ルックアップ値に1(または-1現在の文字が大文字の場合)を追加することにより、大文字を変更します。数字は、Caps Lock修飾子の影響を受けません。


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、シフトフラグはに設定され1ます。
  • 文字が以下の場合aAzZ
    • マッピング文字列の現在の文字の左側の文字はに格納され$tます。
    • 現在の文字がスペースの場合は、印刷されます。
    • 現在の文字が数字であれば、シフトフラグがある場合は1$t数字がされている場合、他の印刷され1`桁がある場合、印刷され09印刷され、それ以外の場合は、digit-1印刷されます。
    • 現在の文字が英字である場合、シフトフラグのステータスに基づいて、Caps Lockフラグと現在の文字の$t大文字と小文字(大文字/小文字)が小文字または大文字で印刷されます。ここでの唯一の特殊なケースはタブ文字で、そのまま印刷されます。
    • シフトフラグは常に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しかし、実際にはそれがOPから完全には明らかではないが、数字でうまく動作しません
ガレン・イワノフ

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に感謝します。

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.