Fat Fingersを修正する


21

コードゴルフチャレンジ

私には期限があり、fingrrsは太っていて、キーボードを右に1つキーボードに固定するという理由で頻繁にやります。

時間が経つにつれて、この問題は悪化するのではないかと心配しています。

私はすべてのkeystrpkeをSopnします。右にずらしてください!

Befpreそれから私はプログラム(またはfunctipn)がすべてのkeystrpkeを左に戻すようにautpすることを望みます。

残りのtjis chal; typongに私の本を必ず連れて行きます。anuconfudionを引き起こさないようにしましょう!


目的:

標準のQWERTYキーボードで次の緑色のキーのいずれかを入力し、その左側のキーの文字を返すプログラムまたは関数を作成します。ここに画像の説明を入力してください


条件:

•このプログラムを実行している人が、上の図のようなQWERTYキーボードを使用していると思われるかもしれません。

入力と出力はどちらも大文字と小文字を区別しません。このチャレンジでは任意のケース(または大文字と小文字の組み合わせ)を使用できます。また、必要に応じてすべての入力が1つのケースにあると仮定することもできます。

•言語に何らかの理由でユーザーがリターンキーを入力できるようにする方法がない場合、このためのその1つのキーストロークを無視できます。

•このチャレンジは、キーのデフォルト値のためだけのものです。たとえば、4キーが押された場合、常にそうで4あり、決してないことを想定できます。$

•緑のキーのみが押されると想定できます。


Input-> Output

S->-> a
4-> 3
=-> -
[->p


これはなので、バイトカウントが最も短いプログラムが勝ちます!


テストケースを提供してもらえますか?
KritixiのLithos

1
@KitixiLithos Certaimly!今からtjatを編集します@
アルバートレンショー

という意味ですか]-> [
shooqie


3
気にしないかもしれませんが、面白いトリビアがあります。これはANSIキーボードレイアウトです。Enterキーの上のバックスラッシュに注意してください。バックスラッシュボタンがZの左側にあるISOキーボードとは対照的です(これもアメリカ

回答:


7

ルビー、76 71 69バイト

->a{"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"[/.#{a}/][0]}

5

Perl 6の87の 83 69バイト

{[Q"`1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./".comb].&{%(.[1..*]Z=>$_)}{$_}}

{~Q"`1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./".match(/.)>$_/)}

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

そのハードコードされた文字列をより短いものにエンコードする方法があるかどうか疑問に思います...

(-14バイトのGBの正規表現のアイデアを盗んだ。)


1
私たちが持っていたかもしれない場合$"の範囲は、いくつかの文字を救うことができる
ヴェン

5

ゼリー34 33バイト

ØD”`1¦ṭØqż“[]\“;'¶“,./“0-=”Fṡ2UZy

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

使い方

ØD”`1¦ṭØqż“[]\“;'¶“,./“0-=”Fṡ2UZy  Main link. Argument: s (string)

ØD                                 Digits; yield "0123456789".
  ”`1|                             Replace '0' with a backtick.
       Øq                          Qwerty; yield
                                   ["qwertyuiop", "asdfghjkl", "zxcvbnm"].
      ṭ                            Tack; add "`123456789" as the last element of
                                   the qwerty array.
          “[]\“;'¶“,./“0-=”        Yield ["[]\\", ";'\n", "0-="].
         ż                         Zip; combine the strings of the array to the
                                   left with the corresponding strings of the array
                                   to the right, yielding an array of string pairs.
                           F       Flatten, yielding a string.
                            ṡ2     Obtain all overlapping pairs of characters.
                              U    Upend; reverse each pair.
                               Z   Zip, yielding a pair of strings.
                                y  Translate the input s according to the generated
                                   replacement table.

3
私はゼリーを知りません、あなたのコードの説明を追加できますか?キーボード全体の文字列リテラルを入力せずにどのように逃げたのか不思議です
アルバートレンショー

1
まだ時間がありませんでしたが、できるだけ早く説明を追加します。
デニス

1
できた 私も少しゴルフをしました。
デニス

1
Øq気の利いた!私はこれが好きです、ありがとう!
アルバートレンショー

4

Python 3、85 78バイト:

lambda x,k="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.‌​find(x)-1]

1
あなたは1つのラムダを使用して、オプションのパラメータとして文字列を渡すことができますlambda x,k="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.find(x)-1]いくつかのバイトを減らすために
ロッド

良い点、私はそれを追加します。
L3viathan

1の左側にバック
ティック

@xnorそう、それを修正。
L3viathan

4

Python、76バイト

s="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?"
dict(zip(s,'`'+s)).get

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

文字列をシフトされたバージョンで圧縮することにより、各キーを左に持っていく辞書を作成します。一番下の行は関数、一番上の行は定義です。

translateマッピングの作成に使用すると、より長いソリューションが得られました。オンラインでお試しください!

lambda s:s.translate("';"*22+"_0__9`12345678_LM-<>_\\VXSWDFGUHJKNBIO=EARYCQZT\nP][___"*4)

4

網膜53 51バイト

T`1-90\-=QW\ERTYUI\OP[]\\ASDF-HJ-L;'¶ZXCVBNM,./`\`o

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

すべての文字を1ポジション後方にシフトする単純な音訳。から1までのすべて/が元の文字セットで、次の部分が新しいセットでありo、その他のセットを示すために使用されます。

HLは、網膜の文字変換用の特殊文字クラスです(それぞれ16進数と大文字にマッピングされます)が、幸いなことに、それらはキーボード上でアルファベット順のシーケンス(FGHおよびJKL)で発生するため、範囲に入れてそれらのようにすることでエスケープを回避できます2バイト。



3

TI-Basic、70バイト

これよりも短くなるとは思わない...

Input Str1
"`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./
sub(Ans,inString(Ans,Str1)-1,1

2バイトのトークンがあるPS Str1`\sub(、とinString(


3

V57 54 51バイト

@ nmjcman101のおかげhxVpで、マルチラインキーボードの代わりに3バイトを節約できました。

i`¬190-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./<esc>/<C-r>a
hxVp

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

<esc>である0x1b<c-r>され0x12

注:これはEnterキーをサポートしていません

印刷できないものが含まれているので、ここにhexdumpがあります

00000000: 6960 ac31 3930 2d3d 7177 6572 7479 7569  i`.190-=qwertyui
00000010: 6f70 5b5d 5c61 7364 6667 686a 6b6c 3b27  op[]\asdfghjkl;'
00000020: 7a78 6376 626e 6d2c 2e2f 1b2f 1261 0a68  zxcvbnm,././.a.h
00000030: 7856 70                                  xVp

説明

プログラムのほとんどがキーボードを生成します。i挿入モードに入り、それに続くすべての文字がバッファに出力されます。しかし、ここには小さな癖があり、¬191〜9の文字を挿入します。

プログラムはで挿入モードを終了します<esc>。そして、ここ/<c-r>aでバッファ内の引数を検索します。これにより、見つかった文字の上にカーソルが移動します。

h                  " move the cursor to the left
 x                 " delete this character
  Vp               " select this line and replace it with the deleted character

私は100%ではありませんが、hylHVGpあなたの代わりに、@ DJMcMayhemがオートバイの質問でしたことを行うことができると思いますhxVp。なぜそこに入れるのか分かりませんGが、それはすべて一行ではありませんか?またdhVp動作します。
nmjcman101

@ nmjcman101あ、はい、Gキーボードがマルチラインだったときからずっと続けているに違いありません。ありがとう!
クリチキシリトス

2

PowerShell、82バイト

$k="1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./";$k[$k.IndexOf((read-host))-1]

EnterキーはサポートされRead-Hostていますが、PowerShellでは値なしでEnterキーを押すと何も返されないため、テストできません。


2

ジャプト 56 42バイト

;D=Dv ·q i"[]\\",A i";'",22 +",./")Dg1nDbU

説明

;D=Dv ·q i"[]\\",A i";'",22 +",./")Dg1nDbU

;D=D                                        // Shortcut for QWERTY (with newlines and spaces), assigning to variable D
    v                                       // Setting D to lowercase
      ·q                                    // Joining D into an array with no spaces or newlines
        i"[]\\",A                          // Inserting "[]\" into index 10 (A)
                   i";'",22                 // Inserting ";'" into index 22
                           +",./"           // Appending ",./"
                                  Dg        // Returns the character at index:
                                    1n      //    -1+
                                       DbU  //     Index of U (the input)

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


これはクールです、説明を追加できますか?
アルバートレンショー

1
@AlbertRenshaw説明を追加しました。
オリバー

2

Java 8、99バイト

c->{String r="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";return r.charAt(r.indexOf(c)-1);}

説明:

ここで試してみてください。

c->{                // Method with character as both parameter and return-type
  String r="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";
                    //  Literal String of the qwerty keyboard layout of the challenge
  return r.charAt(  //  Return the character at the following index:
    r.indexOf(c)    //   The index of the input character
    -1);            //   -1 to shift it to the left
}                   // End of method

1
あきらめる。私は正規表現でそれをやろうとしましたが、私は無残一部の特殊文字で失敗します... c->"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./".replaceAll("(?s).*(.)"+c+".*","$1")
オリビエグレゴワール

2

JavaScript(ES6)、74バイト

c=>(s=".,mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")[s.indexOf(c)+1]

/は文字列にないので、をindexOf返します。-1インクリメント.すると出力されます。文字列を処理するための93バイト:

s=>s.replace(/./g,c=>s[s.indexOf(c)+1],s="><mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")

@KevinCruijssenこれら3つのキーを誤って移動してしまったことに気付いてくれてありがとう。私は今それらのシフトを解除しました。
ニール

1

GNU sed、72 + 1(rフラグ)= 73バイト

s:$:`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./:
s:(.).*(.)\1.*:\2:

設計によってsed \nが区切り文字として使用して入力を分割し、行がある限りスクリプトを実行するため、リターンキーはテストできません。

テスト実行:連続入出力ペア(完了したら、Ctrl + DまたはCtrl + Cを押します)

me@LCARS:/PPCG$ sed -rf shift_key.sed
s
a
4
3
=
-
a
\
1
`
\
]

1

05AB1E、50バイト

'`žhÀ"-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"JDÀ‡

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

説明:

'`                                                  # 1 char string: `
  žh                                                # Push numbers 0123456789
    À                                               # Rotated 1 left (123456890)
     "-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"      # Push string literal
                                              J     # Join all elements pushed to the stack to one string
                                               D    # Duplicate
                                                À   # Rotate 1 left
                                                 ‡  # Transliterate: a.get(b.indexOf(input))

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