การพิมพ์ แต่ไปทางซ้าย [ปิด]


14

พื้นหลัง

คุณได้รับมอบหมายให้จดบันทึกการประชุม คุณเริ่มพิมพ์บน Google Doc ของคุณ แต่คุณไม่มีเวลาเพียงพอในการประชุมเพื่อดูแป้นพิมพ์ของคุณในขณะที่คุณพิมพ์

โชคดีสำหรับคุณคุณสามารถพิมพ์ได้โดยไม่ต้องดูที่คีย์บอร์ดของคุณ หลังการประชุมคุณตระหนักดีว่าทุกสิ่งที่คุณพิมพ์เป็นกุญแจสำคัญทางซ้าย

ความท้าทาย

สำหรับความท้าทายนี้คุณจะใช้ตัวอักษรตัวเลขและแป้นเว้นวรรคของรูปแบบแป้นพิมพ์ QWERTY

  • เมื่อได้รับการป้อนข้อความ (จากวิธีการอินพุตมาตรฐาน) ให้ส่งออกข้อความผลลัพธ์โดยที่อักขระทุกตัวถูกย้ายไปทางซ้ายบนคีย์บอร์ด

    • สำหรับส่วนใหญ่ของตัวอักษรที่เพียงแค่มองไปที่ตัวอักษรและแปลตัวอักษรไปทางซ้าย ( cกลายเป็นx, tกลายเป็นr, ฯลฯ )

    • สำหรับจดหมายqให้แปลเป็นอักขระแท็บตัวอักษร ( \t)

    • สำหรับจดหมายaให้เปิดใช้งานตัวล็อคแคปดังนั้นการโอนเป็นตัวพิมพ์ใหญ่ของสตริงที่เหลือจะถูกย้อนกลับ

    • สำหรับตัวอักษร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

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สตริงและแทนที่ด้วยหนึ่งก่อนหน้านี้แล้ว swaps กรณีของทุกอย่างระหว่างAหรือaและลบที่ปรากฏทั้งหมดZหรือz(เป็นกุญแจสำคัญในการเปลี่ยนแปลงไม่ได้ทำอะไรของตัวเอง)
นี่ควรเป็นรูปแบบแป้นพิมพ์ QWERTY ปกติ แต่ให้ฉันรู้ถ้าไม่


ในลิงก์ TIO ของคุณzebras=>wveAกรณีทดสอบดูเหมือนว่าผิด ครั้งแรกที่zควรทำให้เกิดการพิมพ์ตัวพิมพ์ใหญ่e wจาก OP: "สำหรับตัวอักษรzพิมพ์ใหญ่ตัวอักษรถัดไปในสตริง"
กลางคืน 2

@ Night2 ไชโยฉันโพสต์ก่อนที่ OP จะชี้แจง ฉันถือว่าการกดปุ่ม Shift หนึ่งครั้งจะไม่ทำอะไรเลย
แมทธิวเซ่น

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'

ลองออนไลน์!

ใช้สตริงการค้นหาที่อักขระปกติและเวอร์ชันที่ปรับเปลี่ยนกะถูกจัดกลุ่มเข้าด้วยกัน สำหรับอักขระแต่ละตัวในอินพุตนั้นจะดึงอักขระสองตัวไปทางซ้าย เปลี่ยนการใช้อักษรตัวพิมพ์ใหญ่โดยการเพิ่ม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ธงแคปล็อคได้รับการย้อนกลับ (ตรรกะไม่)
  • ถ้าตัวละครzหรือธงกะมีการตั้งค่าZ1
  • เมื่อตัวละครไม่ได้อยู่ในaAzZ:
    • $tตัวอักษรด้านซ้ายของตัวละครในปัจจุบันในการทำแผนที่สตริงถูกเก็บไว้ใน
    • หากอักขระปัจจุบันเป็นช่องว่างจะถูกพิมพ์
    • ถ้าตัวละครในปัจจุบันเป็นหลักและถ้าธงกะถูก1, $tถูกพิมพ์อื่นถ้าหลักคือ1, `ถูกพิมพ์ถ้าหลักคือ0, 9ถูกพิมพ์และมิฉะนั้นdigit-1จะถูกพิมพ์
    • หากตัวละครปัจจุบันเป็นตัวอักษรขึ้นอยู่กับสถานะของการเปลี่ยนแปลงธง, ธงล็อคแคปและปลอกของตัวละครปัจจุบัน (ล่าง / บน) $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 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;}

ขอบคุณ ceilingcat สำหรับ -33 ไบต์

ลองออนไลน์!


แนะนำk^=!(l^7)แทนk=l^7?k:!k
ceilingcat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.