Sözcük, bitişik tuşlarla yazılabilir mi?


13

Bunu okumadan önce bu küçük bulmacayı okumanızı öneririm: /puzzling/11408/longest-word-with-adjacent-letters-on-a-keyboard

Tek bir argüman, bir kelime (sadece küçük harfler) alan ve kelime klavyede bitişik tuşlarla yazılabilirse (Evet'e bakın) ve kelime " Bitişik harflerle yazılmamalıdır.

İşte bu meydan okumada kullanılan klavye düzeni:

 ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
 | Q | W | E | R | T | Y | U | I | O | P |
 └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘
   | A | S | D | F | G | H | J | K | L |
   └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┘
     | Z | X | C | V | B | N | M |
     └───┴───┴───┴───┴───┴───┴───┘

Unutmayın: bu kodgolf, bu yüzden en kısa cevap kazanıyor!


Girdinin yalnızca harflerden oluştuğunu varsayabilir miyiz? Hepsinin tek bir vakada verildiğini varsayabilir miyiz?
Martin Ender

2
Bu konuda kafam karıştı: "İki bitişik anahtar maksimum 1.5 * aralarında bir anahtarın boşluğuna sahip olabilir." Kesinlikle bitişik anahtarlar aslında bitişiktir, yani, bağlantılı bulmacada aralarında boşluk yoktur?
Luke

Nasıl tartışılır? STDIN? Bir işlev?
theonlygusti

Yanıtlar:


9

Pyth, 66

?"Yes".Am>2sm^-.uk2Cm.Dx"qwertyuiopasdfghjkl*zxcvbnm"b9.5dC,ztz"No

Burada deneyin.

Pyth'in hipotenüs fonksiyonuna sahip olmadığını öğrendiğim için şaşırdım, bu muhtemelen farklı bir dil tarafından yenilecek. Pyth'e hipotenüs işlevi önereceğim, bu yüzden bu vahşet gelecekte olmayacak.

açıklama

Klavyeyi buna dönüştürüyorum:

┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
| Q | W | E | R | T | Y | U | I | O | P |
└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐
  | A | S | D | F | G | H | J | K | L | * |
  └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───┘
    | Z | X | C | V | B | N | M |
    └───┴───┴───┴───┴───┴───┴───┘

Hangi sonra kodlamak "qwertyuiopasdfghjkl*zxcvbnm". Sonra her tuşun 2D koordinatlarını bulmak için modulo 9.5 ile divmod kullandım. Sonra ardışık tuşlar arasındaki mesafeleri hesaplar ve kare mesafesinin <2 olup olmadığını kontrol ederim.


3

CJam, 83 75 74 bayt

l_1>]z["qwertyuiop asdfghjkl  zxcvbnm "[__B>]z+s_W%+_]zsf{\#)}:*"Yes""No"?

Çevrimiçi deneyin.

açıklama

Genel yaklaşım, her bitişik klavye karakteri çiftini içeren büyük bir bitişik dize oluşturmak ve ardından her bir bitişik giriş karakteri çiftinin o dizede bulunduğunu kontrol etmektir.

Çok basit ve kompakt bir mantık kullanan bitişiklik dizesini nasıl oluşturduğumdan oldukça memnunum.

l_1>]z          "Read a line of input and create a list of every pair of
                 adjacent input characters. There will be a trailing element
                 of just the final character, but that's okay since any single
                 lowercase letter can be found in the adjacency string.";
["qwertyuiop asdfghjkl  zxcvbnm "
              "^ Create the in-row forward adjacency string.";
[__B>]z         "Create the alternating-row forward adjacency string by
                 interleaving the in-row string with a substring of itself
                 starting with the middle row letters:
                   'q w e r t y u i o p   a s d f g h j k l  zxcvbnm '
                 + ' a s d f g h j k l     z x c v b n m  '[no interleave here]
                 -----------------------------------------------------
                   'qawsedrftgyhujikolp   azsxdcfvgbhnjmk l  zxcvbnm '";
+s              "Append the alternating-row forward adjacency string to the
                 in-row forward adjacency string.";
_W%+            "Append the reverse of the forward adjacency string (the
                 backward adjacency string) to the forward adjacency string.";
_]zs            "Double every character in the adjacency string so every
                 character is adjacent to itself.";
f{\#)}          "Map each pair of input characters to its 1-indexed location in
                 the adjacency string (0 if not found).";
:*              "Calculate the product of each pair's location in the adjacency
                 string. This will be nonzero if and only if every pair of
                 input characters are in fact adjacent.";
"Yes""No"?      "If the product is nonzero, produce 'Yes'; otherwise, produce
                 'No'.";
                "Implicitly print the result.";

Hepsi bu, CJam öğreniyorum.
Soham Chowdhury

@octatoan Görünüşe göre ikimiz de Pyth öğrenmekten daha iyi olur. : P
Runer112

Haha, belki bu durumda, evet.
Soham Chowdhury

2

J, 77 bayt

No`Yes{::~[:*/2>+/"1@(2|@-/\3(|,.<.@%~+-:@|)'qazwsxedcrfvtgbyhnujmikXolX'i.])

Kullanımı:

   f=.No`Yes{::~[:*/2>+/"1@(2|@-/\3(|,.<.@%~+-:@|)'qazwsxedcrfvtgbyhnujmikXolX'i.])

   f 'redresser'
Yes
   f 'qwergy'
No
   f 'ppcg'
No

Yöntem:

Oluşturduğum her giriş harfi için dizedeki dizinine göre 2B koordinat (sorudaki resme benzer) 'qazwsxedcrfvtgbyhnujmikXolX'. Girişteki her harf çifti için koordinatlarının Manhattan mesafesinin 2'den küçük olup olmadığını kontrol ederim. Eğer hepsi varsa Yes, Noaksi takdirde (operatörü kötüye kullanarak) çıktılarım .

Burada çevrimiçi deneyin.


Mektubu unuttun p.
mbomb007

@ mbomb007 Bulunmayan karakterler için i.operatör index of the last element + 1yazarak 1 bayt kaydedebilir pve yine de doğru dizini elde edebilirim.
randomra

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.