Klavye dalga ışığımı simüle et!
(Aşağıdaki metindeki kelime çerçevesi gerçek bir çerçeve anlamına gelmez, tanımlanmamış bir zaman birimi için yer tutucu olarak kullanılır)
Görev
Yalnızca aşağıdaki gibi harflerden oluşan bir klavye düzeniniz olduğunu hayal edin:
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
Örneğin f, bir tuşa her bastığınızda , klavye etrafındaki tuşları şu şekilde aydınlatır (sırasız, her satır ayrı bir çerçevedir):
F
RTGVCD
YHBXSE
UJNWAZ
IKMQ
OL
P
Gördüğünüz gibi, her bir çerçeve önceden aydınlatılmış olanların etrafındaki tuşları aydınlatıyor, ancak daha önce aydınlatılmış olanları değil.
Her karede hangi tuşlara basılması gerektiğini belirledikten sonra, bunları görselleştirmeniz gerekir. Her çerçeve için, varsayılan klavye düzenini (tüm boşluklarla birlikte), ancak yanan tuşlar büyük harfle yazdırırsınız. Örneğimizde:
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
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
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
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
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
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
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
Kurallar
Giriş tek bir harf olacaktır, büyük harfle yazılıp yazılmayacağını seçebilirsiniz.
Çıktı şunlardan biri olabilir:
a. Görselleştirilmiş klavyenin her saniyesini temsil eden çok satırlı dizeler dizisi
b. Görselleştirilmiş klavyenin her çerçevesinin en az bir satır ile ayrılmış tek bir çok satırlı dize
Artık hiçbir tuş yanmadığında son bir satırsonu satırı veya / ve son klavye görselleştirmesini çıkarabilirsiniz.
Test durumları
Input: F
Output:
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
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
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
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
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
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
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
Input: Q
Output:
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
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
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
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
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
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
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
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
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
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
Input: Z
Output:
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
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
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
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
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
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
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
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
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
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
Yanıtlar
Haskell , 229 bayt
e=zip[0..]
x!y=abs$x-y
k=e["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"]
f c=filter(any(<"a").words)[unlines[[[z..]!!sum[32|z>'@',max(2*y!i)(y!i+x!j)/=d*2]|(x,z)<-e m]|(y,m)<-k]|(i,l)<-k,(j,h)<-e l,c==h,d<-[0..9]]
Çevrimiçi deneyin!
f büyük harfli bir char argümanını alır ve çok satırlı dizelerin bir listesini döndürür.
(i,j)Verilen karakterin konumunu arayan klavye düzeni üzerinde döngü yapar . Bulduğunda, her biri için klavyenin d<-[0..9]bir dizesini ( unlines[…]) üretir ve tüm harfleri onaltılık olmayan d küçük harfle yazılır. Wave'in klavyeden ayrılması asla 10 adımdan uzun sürmez, bu yüzden sorun değil. Son olarak, herhangi bir büyük harf içermeyen dizeler sonuçtan çıkarılır.
Klavyedeki iki nokta arasındaki onaltılık mesafeyi şu şekilde hesaplıyorum: \ $ \ max \ left (2 | y_1-y_2 |, | x_1-x_2 | + | y_1-y_2 | \ right) \ $ . İşte bu metriğin altındaki bir noktanın çevresindeki bazı mesafeler:
6666666 6 6 6 6
654444456 6 4 4 4 6
65432223456 6 4 2 2 4 6
6543210123456 --> on staggered grid: 6 4 2 0 2 4 6
65432223456 6 4 2 2 4 6
654444456 6 4 4 4 6
6666666 6 6 6 6
Kömür , 82 bayt
≔⪪”&±=K≕⦃Vj@η⟲.w\`o:7➙1”¶υ≔⊟Φυ№ιθηΦEχEυ⁺× μ⪫⭆λ⎇⁼ι⌈↔⊟E⟦⟦⁻μ⌕υη⁻ξ⌕ηθ⟧⟧⊞OπΣπ↥νν ⊙ι⊙λ№αν
Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı sürümüne yöneliktir. Küçük harfle girdi alır. Açıklama:
≔⪪”&±=K≕⦃Vj@η⟲.w\`o:7➙1”¶υ
Listeyi alın qwertyuiop, asdfghjkl, zxcvbnmyarma sıkıştırılmış dize.
≔⊟Φυ№ιθη
Yukarıdaki listenin girdiyi içeren öğesini bulun.
Eχ
0'dan 9'a kademeli ızgara üzerindeki girişten uzakta her adıma karşılık gelen listelerin bir listesini oluşturun.
Eυ⁺× μ⪫⭆λ⎇⁼ι⌈↔⊟E⟦⟦⁻μ⌕υη⁻ξ⌕ηθ⟧⟧⊞OπΣπ↥νν
Kademeli ızgaradaki girişten istenen uzaklıkta olan harfleri büyük harfle yazın, ardından her satırın önüne artan sayıda boşluk koyarak ve harfleri çift aralıkla koyarak sonucu kademelendirin.
Φ...⊙ι⊙λ№αν
Yalnızca büyük harf içeren listeleri yazdırın.
Mesafe için kullandığım formül, maksimum \$|x_2-x_1|\$, \$|y_2-y_1|\$ve \$|x_2-x_1+y_2-y_1|\$toplamları, nerede \$y\$(0-endeksli) satır geri sayım yapıyor ve \$x\$ (çarpık) sütun:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6
05AB1E , 59 57 50 bayt
-3 bayt için Kevin Cruijssen'e teşekkürler !
Giriş küçük harflidir, program klavyeleri boş satırlarla ayırarak yazdırır. Bazı tuşlar için son koyu klavyeyi çıkarır.
Lynn'in cevabından uzaklık ölçüsünü kullanır .
žVðæ.ιSðý©Ik19‰¸Þ2Ý18Ýâαε¬sO;‚à}>ZFD®sÅÏu}19ô»,¶?<
Çevrimiçi deneyin!
Yorum yaptı :
# keyboard creation
žV # push ["qwertyuiop", "asdfghjkl", "zxcvbnm"]
ð # push a space
æ # push the powerset ["", " "]
.ι # interleave both lists
S # split into a list of characters
δý # join with spaces
© # store this value in the register
I # push the input
k # the index of the input in the keyboard string
19‰ # divmod by 19 to get [y, x]-coordinates
¸Þ # cycle this value forever
2Ý # push [0..2]
18Ý # push [0..18]
â # cartesian product to get a list of all coordinates
α # take the element-wise difference [dy, dx] for each coord
# apply distance metric
ε } # map over the absolute differences:
¬ # get the first element dy
s # swap back to [dy, dx]
O # sum it
; # halve it
‚ # pair into a list [dy, (dy+dx)/2]
à # take the maximum
> # increment every value
# so that the input position has value 1 (only truthy value)
# generate the outputs
Z # take the maximum of the distances
F # iterate that many times:
D # duplicate the distance list
® # push the keyboard string
s # swap to the distance list
ÅÏ } # apply where truthy (==1)
u # uppercase
19ô # split into groups of 19
» # join by newlines
, # print
¶? # print a newline
<# decrement distance list
Jöle , 64 bayt
“¤Äı’b3’s2
+Ɱ¢ẎfØqŒṪ¤Q
ḢØqœiWÇƬḟ"ṖẎ$Ƥ$LƇœịØqżŒu$µyⱮØqK€2Żẋ@⁶¤;")
Bir klavye listesi veren 1 karakterlik bir listeyi kabul eden bir monadik Bağlantı, her klavye karakter listelerinin bir listesidir (örneklerde verilen aralık dahil).
Çevrimiçi deneyin! (Altbilgi, ortaya çıkan klavyeleri yeni satır karakterleriyle birleştirir ve sonucu, örneklerde olduğu gibi görüntülemek için satırsonu karakter çiftleriyle birleştirir.)