Yağ Parmaklarımı Düzelt


21

Code Golf Mücadelesi

Bir hastalığım var, parmaklarım şişman ve sık sık kryboard'umun sağında bir tuş yazarak sıkıntı bırakıyorum.

Korkarım, zaman geçtikçe, isdue daha da kötüleşiyor.

Yapacağım her anahtarın adımı wiln; sağa kaydırma shiftne olmak!

Befpre sonra bir programın (ya da functipn) her keystrpke'yi sola geri kaydırmak için yazmasını istiyorum.

TJIS Chal'ın geri kalanında tome yazacağımdan emin olacağım;


Amaç:

Standart bir QWERTY klavyede aşağıdaki yeşil tuşlardan birinin girişini alan ve tuşun karakterini soluna döndüren bir program veya işlev yazın.görüntü tanımını buraya girin


Koşullar:

• Bu programı çalıştıran kişinin yukarıda gösterildiği gibi bir QWERTY klavyesi kullandığını varsayabilirsiniz.

• Giriş ve Çıkış her ikisi de büyük / küçük harf duyarsızdır, bu sorun için herhangi bir durumu (veya durum kombinasyonlarının bir karışımını) kullanabilir ve isterseniz tüm girişlerin tek bir durumda olacağını varsayabilirsiniz.

• Eğer dilinizde bir kullanıcının bir sebeple dönüş anahtarını girmesine izin verme imkanı yoksa, bunun için bir tuşa basılmasını ihmal edebilirsiniz.

• Bu zorluk sadece tuşların varsayılan değerleri içindir, örneğin 4tuşa basıldığında, her zaman olacağını 4ve asla$

• Sadece yeşil tuşlara basılacağını varsayabilirsiniz.


Örnek Input-> Output:

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


Bu , yani en kısa bayt sayısına sahip olan program kazanıyor!


Test vitrinleri verebilir misiniz?
Kritixi Lithos

1
@KritixiLithos Kesinlikle! Ben şimdi tjat düzenleyeceğim @
Albert Renshaw

Şunu mu demek istedin ]-> [?
shooqie


3
Umurunuzda olmayabilir, ancak işte ilginç bir önemsiz kısım: bu bir ANSI klavye düzeni. Enter tuşunun üstündeki ters eğik çizgiyi not edin; ters eğik düğmenin Z'nin solunda olduğu bir ISO klavyenin aksine (Aynı zamanda Amerikan, ancak tanımlaması daha kolay!)
Doddy

Yanıtlar:


7

Ruby, 76 71 69 bayt

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

5

Perl 6 , 87 83 69 bayt

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

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

Çevrimiçi deneyin!

Bu zor kodlu dizgiyi daha kısa bir şeye kodlamanın bir yolu olup olmadığını merak ediyorum ...

( GB’nin regex fikrini -14 bayt çaldı.)


1
Belki $"aralıkları
Ven,

5

Jöle , 34 33 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

Ø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
Jelly'i tanımıyorum, kodun hakkında bir açıklama ekler misin? Tüm klavyenin bir
harfini

1
Henüz vaktim olmadı, ama en kısa zamanda bir açıklama ekleyeceğim.
Dennis,

1
Bitti. Ben de biraz golf oynadım.
Dennis,

1
Øqşık! Bunu sevdim, teşekkürler!
Albert Renshaw

4

Python 3, 85 78 bayt:

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

1
Dizgiyi isteğe bağlı parametre olarak geçirerek 1 lambda kullanarak: lambda x,k="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.find(x)-1]birkaç baytı azaltmak için
Rod

İyi nokta, bunu ekleyeceğim.
L3viathan

Sanırım 1'in solunda olmak için bir hareket çubuğuna ihtiyacın var.
xnor

@ xnor Doğru, düzeltildi.
L3viathan

4

Python , 76 bayt

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

Çevrimiçi deneyin!

Karakter dizgisini kaydırılmış versiyonu ile sıkıştırarak her anahtarı sola doğru götüren bir sözlük yapar. Alt satırda fonksiyon, en üstteki tanım bir tanımdır.

translateBir harita oluşturmak için kullanmak daha uzun bir çözüm verdi. Çevrimiçi deneyin!

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

4

Retina , 53 51 bayt

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

Çevrimiçi deneyin!

Her karakteri 1 geri döndüren basit bir harf çevirisi. Her şey 1için /aşağıdaki bölümü kullanarak yeni bir dizi ise, orijinal karakter kümesidir oDiğer setini belirtmek için.

Hve Lretinada transliterasyon için özel karakter sınıflarıdır (sırasıyla Hex rakamları ve büyük harflerle eşleştirilir), ancak neyse ki klavyede alfabetik olarak sıralanan dizilerin ( FGHve JKL) sıralarında yer alırlar , bu yüzden onları aralıklara koyarak kaçmayı önleyebiliriz ve bu şekilde kazanırız. 2 bayt.


3

C ++, 109 bayt

void f(char i){std::string k="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";std::cout<<k[k.find(i)-1];}

Çevrimiçi deneyin!


3

TI-Basic, 70 bayt

Bundan daha kısa olabileceğinden şüpheliyim ...

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

PS iki baytlık jetonladır Str1, `, \, sub(, ve inString(.


3

V , 57 54 51 bayt

hxVpMultiline klavye için sahip olduklarım yerine kullanmak için @ nmjcman101 sayesinde 3 bayt kaydedildi

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

Çevrimiçi deneyin!

<esc>olduğunu 0x1bve <c-r>bir0x12

Not: Bu giriş tuşunu desteklemiyor

Yazdırılamaz, yani burada 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

açıklama

Programın çoğu klavyeyi oluşturur. iinsert moduna girer ve onu izleyen her karakter tampon belleğe yazdırılır. Fakat burada küçük bir tuhaflık var, ¬191 ile 9 arasında karakter ekliyor .

Program, ekleme modunda çıkar <esc>. Ve sonra burada /<c-r>atampondaki argümanı arar. Bu, imleci bulduğu karakterin üzerine getirir.

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

% 100 değilim, ama sanırım yerine hylHVGp@DJMcMayhem'in motosiklet sorusunda yaptığını yapabilirsiniz hxVp. Neden Goraya koyduğunu bilmiyorum, hepsi bir satır değil mi? Ayrıca dhVpişe yarar.
nmjcman101

@ nmjcman101 Ah evet, Gklavyenin multiline olduğu zamandan beri saklamalıydım . Teşekkürler!
Kritixi Lithos

2

PowerShell, 82 bayt

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

Enter tuşu desteklenir, ancak test edilemez, Read-Hostçünkü herhangi bir değeri olmayan enter isabet hareketi PowerShell'de hiçbir şey döndürmez.


2

Japt , 56 42 bayt

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

açıklama

;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)

Çevrimiçi deneyin!


Bu harika, bir açıklama ekleyebilir misiniz?
Albert Renshaw

1
@AlbertRenshaw Bir açıklama eklendi.
Oliver

2

Java 8, 99 bayt

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

Açıklama:

Burada dene.

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
Pes ediyorum. Regex ile yapmaya çalışıyordum, ama bazı özel karakterler ile sefil başarısız c->"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./".replaceAll("(?s).*(.)"+c+".*","$1").
Olivier Grégoire

2

JavaScript (ES6), 74 bayt

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

Dizemde /olmadığı için , artan olduğunda çıktının ortaya çıkmasına neden olan indexOfdöner . Bir dize işlemek için 93 bayt:-1.

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

@KevinCruijssen Yanlışlıkla bu üç anahtarı değiştirdiğimi tespit ettiğiniz için teşekkür ederiz. Onları şimdi değiştirmedim.
Neil

1

GNU sed , 72 + 1 (r bayrağı) = 73 bayt

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

Return tuşu, test edilemez çünkü sed by design, girişi \nsınırlayıcı olarak kullanarak bölüştürür ve daha sonra komut dosyasını satır sayısı kadar çalıştırır.

Test çalıştırması: sürekli giriş-çıkış çifti (bittiğinde Ctrl + D veya Ctrl + C tuşlarına basın)

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

1

05AB1E , 50 bayt

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

Çevrimiçi deneyin!

Açıklama:

'`                                                  # 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))

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.