Yazıyor, ancak sola [kapalı]


14

Arka fon

Size bir toplantı için not alma görevi verildi. Google Dokümanınıza yazmaya başlıyorsunuz, ancak toplantı sırasında siz yazarken klavyenize bakmak için yeterli zamanınız yok.

Neyse ki sizin için klavyenize bakmadan yazabilirsiniz. Toplantıdan sonra, yazdığınız her şeyin solda bir anahtar olduğunu fark edersiniz.

Meydan okuma

Bu meydan okuma için QWERTY klavye düzeninin harflerini, sayılarını ve boşluk çubuğunu kullanacaksınız.

  • Bir metin girişi verildiğinde (herhangi bir standart giriş yönteminden), her karakterin klavyede bir sola kaydırıldığı ortaya çıkan metni çıktılayın.

    • Harflerin çoğu için, sadece harfe bakın ve soldaki harfe çevirin ( colur x, tolur r, vb.).

    • Harf qiçin değişmez sekme karakterine çevirme ( \t).

    • Harf aiçin büyük harf kilidini etkinleştirin, böylece dizenin geri kalanının büyük harf kullanımı tersine çevrilir.

    • Harfi için z, dizede sonraki harf.

    • Boşluk çubuğu için çeviri gerekmez.

  • Çeviri yaparken büyük harf kullanımını koruyun ve büyük harf kilidine dikkat edin (büyük harf kilidi etkinse, kasanın tam tersi olduğundan emin olun).

  • Giriş dizesindeki tüm karakterler harf, rakam veya boşluk olacaktır. Noktalama işaretleri veya başka karakterler eklenemez.

Test Durumları

\t değişmez sekme karakteri

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

puanlama

Bayt cinsinden en düşük puan kazanır. İyi eğlenceler!


11
QWERTY klavyenin ilgili satırlarına hızlı bir şekilde başvurmak faydalı olacak ve meydan okumayı kendi içinde tutacak
Jo King

4
Önlerinde bir "Z" varsa sayılar noktalama işaretine mi kaydırılır?
ErikF

10
Ama Z kaymaya karşılık geliyor ...?
İlgisiz String

4
Önerilen test örneği: Azerty->wERT
Jitse

5
Harfi için z, dizede sonraki harf -> sadece mektup harf umurumda zorunda ortalama olmadığını ve basamak ve semboller arasında geçiş yapmak için yok mu? Ne için beklenen çıkış var 0123456789, a0123456789ve z0z1z2z3z4z5z6z7z8z9? (Ayrıca, birçok QWERTY olmayan klavyede 'Caps Lock' gerçekten bir 'Shift Lock' görevi görür. QWERTY'nin bu kalıbı takip etmediğine inanıyorum, ancak bu tanıdık olmayanlar için belirtilmelidir. )
Arnauld

Yanıtlar:


11

JavaScript (V8) , 271 bayt

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(/[?']/,"")

Çevrimiçi deneyin! İlk JavaScript kodum golf. Kesinlikle daha kısa olabilir, ama bence bu iyi bir başlangıç.
Temelde kdizedeki her karakteri bulur ve onu bir öncekiyle değiştirir, sonra Aveya arasındaki her şeyin örneğini değiştirir ve a( Zveya zshift tuşu tek başına hiçbir şey yapmazsa) tüm oluşumlarını kaldırır .
Bu normal bir QWERTY klavye düzeni olmalı, ancak değilse bana bildirin.


Kendi TIO bağlantınızda, zebras=>wveAtest durumu yanlış görünüyor. Birincisi z, ebir büyük harf yazdırmaya neden olmalıdır w. OP'den: " zMektup için, dizedeki bir sonraki harfi büyük yaz."
Night2

@ Night2 Şerefe, OP açıklama yapmadan önce yayınladım. Shift tuşuna bir kez basmanın hiçbir şey yapmayacağını varsaydım.
Matthew Jensen

5

Python 3 , 211 bayt

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'

Çevrimiçi deneyin!

Normal karakterin ve üst karakter değiştirilmiş sürümünün birlikte gruplandığı bir arama dizesi kullanır. Girişteki her karakter için karakteri sola iki yer çeker. Kaydırma XOR büyük harf kilidi etkinken arama değerine değer ekleyerek 1(veya -1geçerli karakter büyük harfle) büyük harf kullanımını değiştirir. Sayılar büyük harf kilidi değiştiricisinden etkilenmez.


2

PHP , 227 bayt

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;

Çevrimiçi deneyin!

~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnmHer bir rakam için solda ÜST KARAKTER modu olan ve her harf için solda harf / anahtar bulunan bir eşleme dizesi ( ) oluşturdum.

Giriş karakterleri ve her karakter için döngü:

  • Karakter aveya ise A, büyük harf kilidi bayrağı ters çevrilir (mantıksal değil).
  • Karakter zveya ise Z, shift flag öğesi olarak ayarlanır 1.
  • Karakter içinde olmadığında aAzZ:
    • Eşleme dizesindeki geçerli karakterin solundaki karakter içinde saklanır $t.
    • Geçerli karakter boşluksa, yazdırılır.
    • Geçerli karakteri bir rakamdır ve vardiya bayrağı ise ise 1, $tyazdırılır basamaklı ise, başka, 1, `basamaklı ise, yazdırılır 0, 9basılır ve aksi takdirde, digit-1basılır.
    • Geçerli karakter, kayma bayrağının durumuna, harf kilit bayrağına ve geçerli karakterin (alt / üst) büyük / küçük harfine dayalı bir harfse, $tküçük veya büyük harf olarak yazdırılır. Buradaki tek özel durum, olduğu gibi yazdırılan sekme karakteridir.
    • Vites değiştirme bayrağı her zaman 0en sonunda geri ayarlanır .

2

Kırmızı , 218 bayt

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]]]]]

Çevrimiçi deneyin!

Şu anda AaZzrakamları etkilemiyor.


Bu işe yaramaz gibi görünüyor'A pear' -> ' OWe'
Jitse

@Jitse Hmm
Galen Ivanov

@Jitse Ama gerçekten rakamlarla iyi çalışmıyor, OP'den tamamen açık değil
Galen Ivanov

2
Katılıyorum, meydan okuma olduğu gibi çok belirsiz.
Jitse

2

C (gcc) , 276 bayt

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 baytlık tavan kedisi sayesinde.

Çevrimiçi deneyin!


k^=!(l^7)Bunun yerine önerk=l^7?k:!k
ceilingcat
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.