Przejdź przez klawiaturę


21

Biorąc pod uwagę słowo (lub dowolną sekwencję liter) jako dane wejściowe, musisz interpolować każdą literę tak, aby każda sąsiednia para liter w wyniku również sąsiadowała z klawiaturą QWERTY, tak jakbyś wpisywał dane wejściowe, chodząc po wielkiej klawiaturze. Na przykład „ tak ” może stać się „ y tr es ”, „ cat ” może stać się „ c xz a wer t ”.

Zasady:

  • To jest format klawiatury, którego powinieneś używać:

    qwertyuiop
    asdfghjkl
      zxcvbnm

    Każda para klawiszy dotykająca w tym układzie jest uważana za sąsiadującą. Na przykład „s” i „e” są przylegające, ale „s” i „r” nie.

  • „Słowo” wejściowe będzie się składać z dowolnej sekwencji liter. Będzie zawierał tylko litery, więc nie masz do czynienia ze znakami specjalnymi.
  • Dane wejściowe mogą mieć dowolną wygodną formę: standardowe, ciąg, listę itp. Wielkość liter nie ma znaczenia; możesz wziąć to, co jest wygodniejsze.
  • Dane wyjściowe mogą mieć dowolną wygodną formę: standardowe, ciąg, listę itp. Wielkość liter nie ma znaczenia i nie musi być spójna.
  • Każda ścieżka na klawiaturze jest poprawna, z tą różnicą, że nie można ponownie przekroczyć poprzedniej litery przed przejściem do następnej. Na przykład „ cześć ” może oznaczać „ h j i ” lub „ h jnbgyu i ”, ale nie „ h b h u i ”.
  • Litera nie leży obok siebie, więc „ ankieta ” nie może stać się „ ankietą ”. Zamiast tego musiałoby stać się czymś w rodzaju „ pol k l ”.
  • Żadne litery wyjściowe nie są dozwolone przed słowem ani po nim. Na przykład „ był ” nie może stać się „tre był ” lub „ był dfg”.

To jest kod golfowy, wygrywa najkrótsza odpowiedź w bajtach.


Czyli wyprowadzamy jakiś prawidłowy „spacer” na dane wejściowe? Wydaje się, że byłoby lepiej, biorąc pod uwagę dwa dane wejściowe, określ, czy jest to prawidłowy spacer.
Veskah

Wygląda na to, że dewqwertyjest to poprawna ścieżka dy. Czy możesz to potwierdzić?
Arnauld,

@Arnauld tak, to prawda.
Vaelus,

@Veskah Zgadza się; wypisuje dowolny poprawny spacer dla danych wejściowych. Ma to na celu optymalizację, która może nie być możliwa, jeśli na przykład będzie to krótki spacer.
Vaelus,

Odpowiedzi:


6

Japt -g , 23 bajty

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

Wypróbuj online!

Pobiera dane wejściowe jako tablicę wielkich liter. W przeciwnym razie bardzo podobne do innych odpowiedzi.

Wyjaśnienie:

;                          :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 bajty

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

Wypróbuj online!

Przechodzi całą klawiaturę, dopóki słowo nie zostanie zapisane.


2
Dlaczego import reprzychodzi po kodzie, a nie wcześniej?
BruceWayne,

@BruceWayne Zostałby re.findalloceniony, gdy lambda działa, więc importowanie po definicji lambda jest prawidłowe. Biorąc to pod uwagę, łatwiej jest importować wcześniej, po prostu nie trzeba
Pushkin

@pushkin ah, nie wiedziałem, że dzięki za wyjaśnienie! Czy zaimportowałeś po prostu jako osobistą preferencję / wybór, czy to w ogóle pomaga w liczeniu bajtów?
BruceWayne,

2
@BruceWayne To forum dla tego forum. Jest tak, aby działał w sposób, w jaki strona TiO organizuje kod. Spróbuj kliknąć „Wypróbuj online!” link, aby zobaczyć, co mam na myśli.
mypetlion

8

Python 2 , 274 bajty (optymalne rozwiązanie)

296 300 302 308 315 319 324 327 328 430 432 bajtów

-4 bajty dzięki 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

Wypróbuj online!

To rozwiązanie zapewnia możliwie najkrótszą wydajność. Klawiatura jest przekształcana w wykres służący do znalezienia najkrótszej ścieżki do obliczenia ciągu wyjściowego:

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


1
@mypetlion u dokonałeś ważnej redukcji, możesz zaktualizować odpowiedź :)
mdahmoune


3

05AB1E , 43 bajty

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

Niewłaściwy język dla tego wyzwania, ponieważ nie może używać wyrażenia regularnego, jak inne odpowiedzi ..

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

ü)               # 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

Węgiel drzewny , 48 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

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

Uzyskaj ciąg qwertyuioplkmjnhbgvfcdxsza.

≔⌕η§θ⁰ζ

Znajdź pozycję pierwszego znaku tego słowa. Ten indeks jest zwykle jeden za osiągniętym znakiem, ale ta wartość fałszuje pierwszą iterację pętli, aby wydrukować pierwszy znak słowa.

Fθ

Pętla nad każdą postacią.

F⊕﹪⁻⌕ηιζ²⁶«

Oblicz, ile znaków do wydrukowania, aby uwzględnić kolejny znak słowa i zapętlić tyle razy.

§ηζ≦⊕ζ

Drukuj następny znak cyklicznie indeksowany i zwiększaj indeks.


Czy próbowałeś obrócić ciąg „qwertyuioplkmjnhbgvfcdxsza” i sprawdzić, czy którykolwiek z ruchów obrotowy jest bardziej ściśliwy? Nie znam kompresji węgla drzewnego; może to nie jest możliwe.
Vaelus,

@ Vaelus Też nie wiem, więc wypróbowałem wszystkie 26 rotacji, ale wszystkie kompresują się do 20 bajtów. Oczywiście nie są to wszystkie możliwe spacery ...
Neil
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.