เดินข้ามแป้นพิมพ์


21

ให้คำ (หรือลำดับตัวอักษรใด ๆ ) เป็นอินพุตคุณต้องแทรกระหว่างตัวอักษรแต่ละตัวเพื่อให้แต่ละคู่ที่อยู่ติดกันในผลลัพธ์นั้นอยู่ติดกันบนคีย์บอร์ด QWERTY ราวกับว่าคุณพิมพ์อินพุตโดยการเดินบนคีย์บอร์ดขนาดยักษ์ ตัวอย่างเช่น ' ใช่ ' อาจกลายเป็น ' y tr es ', ' cat ' อาจกลายเป็น ' c xz a wer t '

กฎ:

  • นี่คือรูปแบบแป้นพิมพ์ที่คุณควรใช้:

    qwertyuiop
    asdfghjkl
      zxcvbnm

    คู่ของคีย์ใด ๆ ที่สัมผัสในเค้าโครงนี้จะถือว่าอยู่ติดกัน ตัวอย่างเช่น 's' และ 'e' อยู่ติดกัน แต่ 's' และ 'r' ไม่ใช่

  • อินพุต "คำ" จะประกอบด้วยลำดับของตัวอักษรใด ๆ มันจะมีตัวอักษรเท่านั้นดังนั้นคุณไม่ได้จัดการกับตัวละครพิเศษ
  • การป้อนข้อมูลสามารถอยู่ในรูปแบบที่สะดวกใด ๆ : stdin, สตริง, รายการ, ฯลฯ กรณีตัวอักษรไม่สำคัญ; คุณสามารถใช้สิ่งที่สะดวกกว่า
  • เอาต์พุตสามารถอยู่ในรูปแบบที่สะดวกใด ๆ : stdout, สตริง, รายการ, ฯลฯ ตัวพิมพ์เล็กและตัวอักษรไม่สำคัญและไม่จำเป็นต้องสอดคล้องกัน
  • เส้นทางใดก็ได้บนแป้นพิมพ์นั้นใช้ได้ยกเว้นว่าคุณไม่สามารถข้ามตัวอักษรก่อนหน้าอีกครั้งก่อนที่จะไปยังตัวอักษรถัดไป ตัวอย่างเช่น ' hi ' อาจกลายเป็น ' h j i ' หรือ ' h jnbgyu i ' แต่ไม่ใช่ ' h b h u i i '
  • จดหมายไม่ได้อยู่ติดกับตัวเองดังนั้น 'แบบสำรวจความคิดเห็น ' จึงไม่สามารถกลายเป็นแบบสำรวจความคิดเห็นได้ มันจะต้องกลายเป็น ' pol k l ' แทน
  • ไม่อนุญาตให้ใช้ตัวอักษรเอาต์พุตก่อนหรือหลังคำ ตัวอย่างเช่น ' was ' ไม่สามารถกลายเป็น 'tre was ' หรือ ' was dfg'

นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ


ดังนั้นเรากำลังแสดงผล 'เดิน' ที่ถูกต้องต่ออินพุตหรือไม่ ดูเหมือนว่าจะดีกว่าที่ได้รับจากสองอินพุตพิจารณาว่าเป็นการเดินที่ถูกต้อง
Veskah

ดูเหมือนว่าเป็นเส้นทางที่ถูกต้องสำหรับdewqwerty dyคุณยืนยันได้ไหม
Arnauld

@Arnauld ใช่มันเป็น
Vaelus

@Veskah ถูกต้อง; เอาต์พุตการเดินที่ถูกต้องสำหรับอินพุต นี่คือการอนุญาตให้มีการปรับให้เหมาะสมซึ่งอาจเป็นไปไม่ได้ถ้ามันต้องเป็นการเดินที่สั้นที่สุด
Vaelus

คำตอบ:


6

Japt -g 23 ไบต์

;D·ÎÔ+D·Årí)pUl)fUq".*?

ลองออนไลน์!

รับอินพุตเป็นอาร์เรย์ของตัวอักษรพิมพ์ใหญ่ คล้ายกันมากกับคำตอบอื่น ๆ

คำอธิบาย:

;                          :Set D to the keyboard layout
 D·Î                       :Get the first row of keys
    Ô                      :Reversed
     +                     :Concat
      D·Å                  :The other two rows
         rí)               :Interleaved
            p              :Repeat that string
             Ul)           : A number of times equal to the length of the input
                f          :Get the substrings that match
                 U         : The input
                  q".*?    : joined with ".*?"
                           :Implicitly output just once of the matches

14

Python 2 , 83 ไบต์

lambda s:re.findall('.*?'.join(s),'qwertyuioplkmnjhbvgfcxdsza'*len(s))[0]
import re

ลองออนไลน์!

เดินทั้งคีย์บอร์ดจนกว่าคำจะถูกเขียน


2
ทำไมimport reรหัสหลังจากมาถึงไม่มาก่อน?
BruceWayne

@BruceWayne re.findallจะมีการประเมินเมื่อแลมบ์ดาทำงานดังนั้นการนำเข้าหลังจากที่คำจำกัดความของแลมบ์ดาตกลง ที่ถูกกล่าวว่ามันเป็นที่ชัดเจนที่จะนำเข้ามาก่อนไม่จำเป็นต้องมี
pushkin

@ ปุชคินอ่าฉันไม่รู้ว่าขอบคุณสำหรับการชี้แจง! คุณนำเข้าหลังจากเพียงแค่การตั้งค่าส่วนตัว / ตัวเลือกหรือมันช่วยด้วยนับไบต์เลย?
BruceWayne

2
@BruceWayne เป็นบิตของการประชุมสำหรับฟอรัมนี้ เป็นเพียงเพื่อให้ทำงานกับวิธีที่เว็บไซต์ TiO จัดระเบียบรหัส ลองคลิกที่ "ลองออนไลน์!" ลิงก์เพื่อดูสิ่งที่ฉันหมายถึง
mypetlion

8

Python 2 , 274 ไบต์ (ทางออกที่ดีที่สุด)

296 300 302 308 315 319 324 327 328 430 432ไบต์

-4 ไบต์ขอบคุณ mypetlion

from networkx import*
i=input()
M,z='qwertyuiop  asdfghjkl   zxcvbnm'.center(55),i[:1]
G=from_edgelist([(M[e],M[e+h])for h in[-1,1,11,12,-11,-12]for e in range(44)if' '!=M[e]and' '!=M[e+h]])
for y,x in zip(i,i[1:]):z+=[shortest_path(G,y,x)[1:],list(G[y])[0]+y][x==y]
print z

ลองออนไลน์!

โซลูชันนี้ให้ผลลัพธ์ที่สั้นที่สุด แป้นพิมพ์ถูกแปลงเป็นกราฟที่ใช้ในการค้นหาเส้นทางที่สั้นที่สุดเพื่อคำนวณสตริงผลลัพธ์:

puzzles     --> poiuhbvcxzazxcvbhjklkiuytres
programming --> poiuytrtyuioijhgtresasdcvbnmkmkijnbg
code        --> cvbhjioijhgfde
golf        --> ghjiolkjhgf
yes         --> ytres
hi          --> hji
poll        --> polpl


1
@mypetlion U ทำให้ลดความสำคัญ u สามารถอัปเดตคำตอบ :)
mdahmoune


3

05AB1E , 43 ไบต์

ü)Jε©žVćRs`.ιJ«D«Œʒg≠yн®нQyθ®θQ**}yªн¨}JIθ«

ไม่ใช่ภาษาที่เหมาะสมสำหรับความท้าทายนี้เนื่องจากไม่สามารถใช้ regex เหมือนกับคำตอบอื่น ๆ ได้

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

ü)               # Split the input into overlapping pairs
                 #  i.e. "poll" → ["p","o"],["o","l"],["l","l"]]
  J              # Join each inner list together
                 #  i.e. ["p","o"],["o","l"],["l","l"]] → ["po","ol","ll"]
   ε             # Map each to:
    ©            #  Store the current value in the register
    žV           #  Push ["qwertyuiop","asdfghjkl","zxcvbnm"]
    ćR           #  Extract the head, and reverse it
                 #   i.e. ["qwertyuiop","asdfghjkl","zxcvbnm"] → "poiuytrewq"
    s`           #  Swap to take the remainder, and push them to the stack
               #  And then interweave them with each other
                 #   i.e. ["asdfghjkl","zxcvbnm"]
                 #    → ["a","z","s","x","d","c","f","v","g","b","h","n","j","m","k","l"]
        J        #  Join the list to a single string
                 #   i.e. → "azsxdcfvgbhnjmkl"
         «       #  Merge them together
                 #   i.e. "qwertyuiop" and "azsxdcfvgbhnjmkl"
                 #    → "poiuytrewqazsxdcfvgbhnjmkl"
          D«     #  Duplicate it, and append it to itself
                 #   i.e. "poiuytrewqazsxdcfvgbhnjmkl"
                 #    → "poiuytrewqazsxdcfvgbhnjmklpoiuytrewqazsxdcfvgbhnjmkl"
            Œ    #  Get all substrings of this strings
                 #   i.e. → ["p","po","poi",...,"k","kl","l"]
ʒ              } #  Filter this list by:
 g              #   Where the length is NOT 1 (otherwise pair "ll" would result in "l")
              *  #   and
   yн®нQ         #   Where the first character of the substring and pair are the same
             *   #   and
        yθ®θQ    #   Where the last character of the substring and pair are the same
                 #    i.e. "po" → []
                 #    i.e. "ll" → ["lazsxdcfvgbhnjmkl"]
yª               #  After filtering, append the current pair to the filtered list
                 #   i.e. [] → ["po"]
                 #   i.e. ["lazsxdcfvgbhnjmkl"] → ["lazsxdcfvgbhnjmkl","ll"]
  н              #  Get the first item
                 #   ["po"] → "po"
                 #   ["lazsxdcfvgbhnjmkl","ll"] → "lazsxdcfvgbhnjmkl"
   ¨             #  Remove the last character
                 #   i.e. "po" → "p"
                 #   i.e. "lazsxdcfvgbhnjmkl" → "lazsxdcfvgbhnjmk"
}                # Close the map
 J               # Join everything together
                 #  i.e. ["p","o","lazsxdcfvgbhnjmk"] → "polazsxdcfvgbhnjmk"
  Iθ«            # And append the last character of the input
                 # (and output the result implicitly)
                 #  i.e. "polazsxdcfvgbhnjmk" and "poll" → "polazsxdcfvgbhnjmkl"

3

ถ่าน 48 ไบต์

≔”&⌈″⌊5EWXVNa…-εW¶ζR”η≔⌕η§θ⁰ζFθF⊕﹪⁻⌕ηιζ²⁶«§ηζ≦⊕ζ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

≔”&⌈″⌊5EWXVNa…-εW¶ζR”η

qwertyuioplkmjnhbgvfcdxszaรับสตริง

≔⌕η§θ⁰ζ

ค้นหาตำแหน่งของอักขระตัวแรกของคำ โดยทั่วไปแล้วดัชนีนี้จะผ่านอักขระที่เพิ่งผ่านมา แต่ค่านี้ทำให้การวนซ้ำครั้งแรกของลูปเพื่อพิมพ์อักขระแรกของคำ

Fθ

วนรอบตัวละครแต่ละตัว

F⊕﹪⁻⌕ηιζ²⁶«

คำนวณจำนวนอักขระที่จะพิมพ์เพื่อรวมอักขระถัดไปของคำและวนซ้ำที่หลายครั้ง

§ηζ≦⊕ζ

พิมพ์ตัวอักษรถัดไปจัดทำดัชนีและเพิ่มดัชนี


คุณได้ลองหมุนสตริง“ qwertyuioplkmjnhbgvfcdxsza” และดูว่าการหมุนใด ๆ ที่เกิดขึ้นนั้นสามารถบีบอัดได้มากขึ้นหรือไม่? ฉันไม่คุ้นเคยกับการบีบอัดถ่าน อาจเป็นไปไม่ได้
Vaelus

@Vaelus ฉันไม่รู้เหมือนกันดังนั้นฉันจึงลองหมุนทั้งหมด 26 รอบ แต่มันบีบอัดได้ถึง 20 ไบต์ แน่นอนว่านั่นอาจไม่ใช่เส้นทางเดินที่เป็นไปได้ทั้งหมด ...
Neil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.