Anahtar Hangi Satırda?


39

Aşağıdaki karakterlerden herhangi birini (veya yeni bir satırı) verin:

`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>?

Programınız, klavyedeki satırı çıkarmalıdır


Klavyem (neredeyse) pilinin bitmediğinden, kodunuz mümkün olduğu kadar kısa olmalıdır


Programınızın kullanması gereken klavye (satır araması için) aşağıdaki gibi görünmelidir:


Row 1:~` !1@2 #3$4 %5^6 &7*8 (9)0 _-+=                          

Row 2:                         Q W E R T Y U I O P {[ }]    |\   
Row 3:                              A S D F G H J K L :; "' return  
Row 4:                                 Z X C V B N M <, >. ?/                 
Row 5:                                                    space                                                   

  returnNewline nerede ? Boş tuşlar hiçbir şey ifade etmiyor.

Örnekler

"$"
1

"R"
2

"a"
3

"?"
4

"\n"
3

" "
5

\nnewline karakteri nerede .

Özellikler

  • Programınız büyük / küçük harf duyarlı olmamalıdır
  • Programınızın yalnızca gösterilen klavyedeki karakterleri kullanması gerekir


3
Bu çift yuvalanmış kbdmı?
Conor O'Brien,

Yıllar önce 100 × satır + pozisyonu gibi tuşlara basılmış bir dil kullandığımı hatırlıyorum ... Bunun için mükemmel olurdu, ama ne yazık ki ne olduğunu hatırlamıyorum. Belki bir tür BASIC ...
Adám

@NBZ Blitz Basic mı?
wizzwizz4

1
@ wizzwizz4 BlitzPlus'ı denediniz mi? ücretsiz ve istediğin gibi görünüyor.
HolyBlackCat

Yanıtlar:


6

Pyth, 62 66 65 bayt

?zh@+,4Zmid2c.Bi."0fÀÓ¸[9Ѷ¤KïLäHÉðbÀ`]ü©¬vS"16 2-CzCd3

Çevrimiçi deneyin.

Kullanımları iki paralık halinde kesilmekte zaman, hariç her karakterin satır temsil onaltılık bir sayı temsil eden bir dolu dize ve !0'dan 3'e kadar bir değer olarak biz dışarıda bırakın ve !biz zorunda kalmamak 4 saklamak veya sahip olmak a bu sayının başında bir 0 kullanın ve ardından satır değerlerini kullanarak ekleyin +,4Z. Dizeyi satır değerlerine dönüştürdüğümüzde, tek yapmamız gereken girişin karakter kodunu değer dizisine dizine eklemek ve ardından 1 eklemek.

Newline ayrı ayrı ele alınır, çünkü Pyth tarafından boş bir dize olarak yorumlanır ve 0 karakter koduna sahiptir.

Base 256'yı Pyth'ta nasıl kullanabileceğimi öğrenebilirsem, bu daha kısa olacaktır, ancak tam olarak çalışmasını sağlayamıyorum.


4
o.0 Japt
nicael ile

Bu beni utandırıyor
JuanPotato

:( Newline'ı unuttum! @Nicael yine zirvede olmaya devam ediyor.
Luke

Şimdi bile öldük!
Luke

Pyth'ta boş baytlardan kaçmanız gerekir.
lirtosiast

12

JavaScript (ES6), 105 102 101 bayt

c=>/[~`0-9!@#-&^(-+_=-]/.test(c)+/[asdfghjkl;:'"\n]/i.test(c)*3+/[zxcvbnm,<.>/?]/i.test(c)*4||++c*7^2

açıklama

JavaScript yılında testaynı davranan bir boolean döndüren olarak 1veya 0onların satırla ben çarpın onlara öylesine. Satır 2 için test yapmak en fazla baytı aldı, bu yüzden başka eşleşmediyse bunu varsayılan olarak kullandım.

c=>
  /[~`0-9!@#-&^(-+_=-]/.test(c)   // row 1 regex
  +/[asdfghjkl;:'"\n]/i.test(c)*3 // row 3 regex
  +/[zxcvbnm,<.>/?]/i.test(c)*4   // row 4 regex
  ||++c                           // space ++ = 1, any character on row 2 ++ = NaN
    *7^2                          // 7 XOR 2 = 5, NaN XOR 2 = 2

Ölçek


1
> NaN XOR 2 = 2 - ???
lirtosiast,

1
@ThomasKwa Bu sadece JS lol çalışır. Eğer c="q", ++c= NaN, NaN*7= NaN, NaN^2(uncastables sever tamsayılar için işlenen dönüştürür NaNhale 0ardından) yapar 0 XOR 2ki 2.
user81655 3

5

Glava 1.5 , 164 bayt

Glava, Java kodunu kısaltan bir Java lehçesidir. Bu kod maalesef rekabetçi değildir çünkü bu zorunluluktan sonra kullanılan taahhüt (2 saat geç…) bu programın çalışmasına izin vermeyecek bazı hayati hataları düzeltti.

p(A[0].matches("[`0-9-=~!@#$%^&*()_+]")?1:A[0].replace("\\n","\n").matches("(?i)[asdfghjkl;':\"\n]")?3:A[0].matches("(?i)[zxcvbnm,.\\/<>?]")?4:A[0].matches(" ")?5:2

Bu, komut satırı argümanları üzerinden girdi alan tam bir programdır. Hangi satır düzeniyle eşleştiğini test ederek çalışır, ardından karşılık gelen sayıyı verir.


Glava = Guava + Java?
Downgoat

2
@ Doᴡɴɢᴏᴀᴛ Glava = Golf + Java (
Conor'un

Aslında! @ Doᴡɴɢᴏᴀᴛ
Conor O'Brien

4

Python 3, 142

print(int(("~`!1@2#3$4%5^6&7*8(9)0_-+=""qwertyuiop{[}\|"+"]"*11+'asdfghjkl;:"\n'"'"*13+"zxcvbnm,<.>/""?"*14+" ").index(input().lower())/26)+1)

Muhtemelen daha az göz attığım bir yol var ¯ \ _ (ツ) _ / ¯


4

Pyth , 98

|+++l:"~`0123456789!@#$%^&*()_-=+"z1*l:"asdfghjkl;:'\"\n"rz0 1 3*l:"zxcvbnm,<.>/? "rz0 1 4 l:dz1 2

0-9 serisinin bir nedenden ötürü nasıl çalışacağını bilmiyorum: |, user81655 kullanıcısının yanıtı


Daha jkUTkısa bir yol olup olmadığından emin değil, 0 - 9 aralığındaki dize için kullanabilirsiniz . Ayrıca, örneğin bir kaç bayt kaydetmek için paketlenmiş dizeleri kullanılan olabilir ."!~WÏù¹_(<]úÝ"için "~`!@#$%^&*()_-=+".
Luke,

@Benstopics'ten, regex
metacharacters

4

Bash, 108

Bash cevabı yok mu? Bash cevap. grep -Finbu iş için kesinlikle doğru araçtır.

Bu program iki dosyada.

k, 73 bayt

`1234567890-=~!@#$%^&*()_+
qwertyuiop[]\{}|
asdfghjkl;':"
zxcvbnm,./<>?

5 satır var, sonuncusu boşluk. Dosyayı çoğaltmada sorun yaşıyorsanız, base64:

YDEyMzQ1Njc4OTAtPX4hQCMkJV4mKigpXysKcXdlcnR5dWlvcFtdXHt9fAphc2RmZ2hqa2w7JzoiCnp4Y3Zibm0sLi88Pj8KIA==

b, 34 bayt

Bu programın kendisidir, sadece komut satırı argümanı olarak girdi alır.

grep -Fin "$1" k|tail -n3|head -c1

Puan: 34 + 73 + 1 ( kdosya adı için) = 108 bayt

Ungolfed

grep --fixed-strings --ignore-case --line-number "$1" k|tail --lines=3|head --bytes=1

açıklama

  • grep - Bir dizgede veya normal ifadede eşleşen satırlar için dosyayı ara, yalnızca bu satırları çıkar
  • -Faka --fixed-strings- normal ifadeleri devre dışı bırakma [vs.
  • -iaka -yaka --ignore-case- büyük-küçük harf duyarlı eşleme
  • -naka --line-number- satır numarasını gösterir ve: her satırdan önce (örneğin 4:zxcvbnm,./<>?)
  • "$1" - betiğin ilk komut satırı argümanını arayın, tırnak işaretleri yeni satır ve boşluğu işlemek için gereklidir
  • k - dosyada ara k
  • grepGirdi yeni bir satırsa bu komut beş satırın hepsiyle, aksi halde yalnızca bir satırla eşleşir.
  • | - boru, bir komutun standart çıktısını diğerinin standart girişine gönderir.
  • tail - Son N satırlarını veya standart giriş karakterlerini gösterir.
  • -n3aka --lines=3- son 3 satırı çıkar
  • Girdi yeni satır değilse, işlenecek -nbayrak nedeniyle satır numarası ile başlayan yalnızca bir satır işlenir grep. Aksi takdirde, bu komut yalnızca 3, 4 ve 5 numaralı satırları alır (son 3 satır).
  • | - boru
  • head - ilk N satırını veya standart girdi karakterlerini çıkarır
  • -c1aka --bytes=1- ilk karakteri çıkar
  • Girdi yeni bir satır değilse, girişin bulunduğu satır numarası olan ilk karakteri alır. Girdi yeni bir satırsa, 3, 4 ve 5 numaralı satırların ilk karakterini alır; bu, yeni satır için doğru satır numarası olur.

4

Japt, 73 70 66 bayt

2+`qØÆyuiop\{}[]|\\1dfghjkl;:
'1zxcvbnm,.<>?/\"1 `q1 ®bUv)<0} b!1

Çevrimiçi deneyin! (örnekte, girdi tam anlamıyla bir yeni satırdır)


Güzel, şimdiye kadar en kısa!
ETHproductions

@En iyiyse, en az bir kere kısa bir şey göndermeliyim: D
nicael


@Eth Heh, !1"yanlış" ile eşleşen bir şey, nihayet nasıl yapılacağını biliyorum, teşekkürler :)
nicael

@ Halp, Pyth'u yenmek için 5 bayta ihtiyaç duyuyor.
nicael

4

Java, 300 bayt

import java.util.Scanner;public class A{public static void main(String[] args){String g="~`!1@2#3$4%5^6&7*8(9)0_-+=qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"\r";Scanner i=new Scanner(System.in);int f=g.indexOf((i.nextLine().charAt(0)));System.out.print(f<0?4:(f<26?1:(f<53?2:(f<76?3:5))));}}

Uzman değilim ve bu benim ilk golf denemem, ama düşündüm, ne cehennem, neden olmasın? Yukarıda tam program sürümü, içine giren gerçek kod büyük olasılıkla makul miktarda karakter alacaktır.


boş bir girdiyle kilitlendiğini fark ettim (yeni satır / satır başı). ne zaman tamir edeceğim
Andrew

Topluluğa hoşgeldiniz!
Outgolfer Erik

Hoşgeldiniz (Ocak xD'de yayınlandığından beri biraz geç). Mevcut yaklaşımınızı bu şekilde değiştirmeden biraz golf oynayabilirsiniz: class A{public static void main(String[]a){int f="~'!1@2#3$4%5^6&7*8(9)0_-+=qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"\r".indexOf(new java.util.Scanner(System.in).nextLine().charAt(0));System.out.print(f<0?4:f<26?1:f<53?2:f<76?3:5);}}( 243 bytes ) Gereksiz parantezleri kaldırdım; kısaltılmış args; kaldırıldı public ; doğrudan Dize ve Tarayıcıyı kullandı; ve şimdi bir java.util.Scannerkez kullanılan içe aktarma işlemini kaldırın.
Kevin Cruijssen

219 bayt bunun için Tarayıcı kullanmanıza gerek yok
PrincePolka

3

Pyth, 105 bayt

J?<l-c".^$*+?{}[]\|()"1]z14+\\zrz0?qJd5?:"qwertyuiop[]\|"J)2?:"asdfghjkl;':\"\n"J)3?:"zxcvbnm,./<>?"J)4 1

Açıklama:

J?<l-c".^$*+?{}[]\|()"1]z14+\\zrz0     # Escape input if regex metachar
?qJd5                                  # Check space
?:"qwertyuiop[]\|"J)2                  # Check second row
?:"asdfghjkl;':\"\n"J)3                # Check third row
?:"zxcvbnm,./<>?"J)4                   # Check fourth row
1                                      # If none of these, must be on first row.

İlk sırayı seçmeye karar verdim çünkü "başka bir şey olmasa gerek" sırasını seçmeliyim çünkü en çok bayt golf oynamaktan sonra bile temsil edilmeli.


Programlama Bulmacaları ve Code Golf'a Hoş Geldiniz! @JuanPotato'yu almak için yorum kullanın. Ancak, bu 50 rep gerektirir. Yani çalışmalısın.
user48538

3

Perl 6, 128 bayt

say 1+(/<[-\d=~!@#$%^&*()_+/`]>/,/<[qwertyuiop[\]\\{}|]>/,/<[asdfghjkl;':"\n]>/,/<[zxcvbnm,./<>?]>/,' ').first: @*ARGS.lc~~*,:k

Karakter sınıfları içeren bir dizge değişmez alanı içeren bir regex listesi hazırlarım. Daha sonra firstlistedeki metodu firstçağırdım (sadece yüksek dereceli fonksiyonun sadece metot versiyonudur ), programa iletilen argümanı listedeki mevcut maddeyle karşılaştırmak için smartmatch'i kullanarak. Smartmatch'in hem regexes hem de string literal için "doğru olanı" yaptığını unutmayın. :kİsteğe bağlı parametre firstyöntemi nedenleri Sonra yoluyla ve çıkış 1 eklemek, hangi listede eşleşen öğenin dizinini geri dönmek için say.

Bu programı kullanırken `` gibi bazı karakterleri ve kabuğunuzdaki boşluğu düzgün bir şekilde atmanız gerekeceğini unutmayın. Örneğin: perl6 klavye.p6 \ `


Kimse henüz söylemediğinden, Programming Puzzles & Code Golf'a hoş geldiniz!
Outgolfer Erik

2

JavaScript ES6, 114 bayt

n=>[`qwertyuiop{}[]|\\`,`asdfghjkl;:
'`,`zxcvbnm,.<>?/"`,` `].map(x=>+(x.indexOf(n.toLowerCase())<0)).indexOf(0)+2

Başka bir JavaScript çözümü. İlke, girdi karakterinin indeksini satırlar artı 2 dizisine döndürmektir (0-9 satırı -1 döndürdüğü için, yani mevcut değilse, -1 + 2 = 1. qdizinin ilk dizesindedir), bu yüzden 0 + 2 = 2 satır döndürür).


2

Perl, 96 77 76 bayt

Kullanarak çalıştırın perl -p. Yalnızca tek karakterleri beslediğinizden emin olun; örneğin, onu bir dosyadan çalıştırmak için key.pl(kabuk kaçış dizileriyle karıştırılmaması için) echo -n q|perl -p key.pl.

$_=/[\d~`!@#-&(-+_=-]/+/[adfghjkls"':;
]/i*3+/[bcnmvxz<>,.?\/]/i*4+/ /*5||2

Regex aralığı işlevselliğini kötüye kullanmak eğlencelidir.


Bana göre bu işe yaramıyor, onu çalıştırarak satırın + 3 dizinini (yani 4 yerine 0, 7 yerine 3, vb.) Alıyorum.
ChatterOne

Girişi nasıl sağladığınıza duyarlıdır. Muhtemelen yeni bir hat izleyen bir karakter sağlıyorsunuz. echoGirişi tam olarak kontrol etmek için kullanıyorum - örneğin. echo -n q|perl -n key.pl, doğru üreten 2.
Mark

Ah anlıyorum. Bu da neden chompgirişi yapmadığınızı açıklar .
ChatterOne

1
Ben ise chompgirdi ed, ben dönüş anahtarı için '3' dönmek mümkün olmaz.
Mark

1
Hey @Mark, $_=~maçlara ihtiyacınız yok , m//(ki bu nedir /.../) $_otomatik olarak çalışıyor ! Ayrıca, -pyerine birkaç tane daha bayt kaydetmek yerine -nkullanabilirsiniz . Değişmez bir yeni satır kullanmak, size başka bir bayt kazandırabilir! Bu kodunuzu biraz azaltmalı! Örnek bir kullanım eklemeye de $_=print\necho -n
Dom Hastings

2

PHP, 173 bayt

Buradaki fikir regex yakalama grubu numarasını satır dizini olarak kullanmaktı. Büyük olasılıkla regex'in kendisinde biraz daha optimizasyon var.

$i=$argv[1];preg_match("%([!#-&\(-+-0-9=@^-`~])|([EIO-RT-UWY[-]eio-rt-uwy{-}])|([\"':-;ADF-HJ-LSadf-hj-ls])|([,.-/<>-?B-CM-NVXZb-cm-nvxz])%",$i,$m);echo array_flip($m)[$i];

preg_match()Çağrı dizisi oluşturur $mkibrit ve biz bunun yazdırmak olsaydı, böyle bir şey (varsayarak bakardım zgirişi edildi):

Array ( [0] => 'z', [1] => '', [2] => '', [3] => '', [4] => 'z' )

Anahtarları ve değerleri değiştirerek, bu diziyi çevirmek, sola sağa hareket eder ve yalnızca son farklı anahtarı tutar, bu yüzden sonuçta:

Array ( 'z' => 4, '' => 3 )

Ardından sonucumuzu almak için girdi karakterini dizideki dizin olarak kullanırız.

Burada dene .


2

C, 145 143 136 132 127 106 bayt

#define c 2124850936,91714965
b[]={8<<18,0,-218071008,7796<<19,c,c};f(a){return a-32?b[a>>4]>>a%16*2&3:4;}

Bu index()POSIX.1-2001 ürününü kullanır ve POSIX.1-2008'de kullanımdan kaldırılmıştır. Bu, ASCII ve 32 bit inç varsayar.


2

Python 3, 89 bayt

print("qwertyuiop{}[]\\|asdfghjkl;:\"\n'''zxcvbnm,.<>/???? ".find(input().lower())//16+2)

Henüz yorum yapamadığım için, şu andaki Python 3 cevabının iyileştirmesini ayrı ayrı gönderiyorum .

Düzenleme : Tüm kod printşimdi ve daha tweaked.


Bu yalnızca bir snippet'tir ve bu nedenle geçerli bir cevap değildir, onu bir print cümlesine sarmanız (tam bir program haline getirmeniz) veya bir işleve dönüştürmeniz gerekir.
FlipTack

@FlipTack: Haklısın. Önerinizi dahil ettim.
creativecoding

PPCG'ye Hoşgeldiniz!
Martin Ender

@MartinEnder: Teşekkürler! :-)
creativecoding


0

CJam, 125 bayt

q_" "={;5}{"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:\"    zxcvbnm,./ZXCVBNM<>?    "\#26/1+}?

açıklama

q                          e# read input
 _" "=                     e# decide if the input is a space
      {;5}                 e# if it is, push 5
          {"..."\#26/1+}?  e# if it isn't, push the correct row

0

SpecBAS - 178 bayt

1 a$="~`!1@2#3$4%5^6&7*8(9)0-_+=qQwWeErRtTyYuUiIoOpP{[}]|\aaaaAsSdDfFgGhHjJkKlL:;'"#34#13"zzzzzzzZxXcCvVbBnNmM<,>.?/"+" "*26
2 INPUT k$: IF k$="" THEN k$=#13
3  ?CEIL(POS(k$,a$)/26)

Her satırın 26 karakter uzunluğunda uzun bir dize kullandım (# 34, çift alıntı için kod ve # 13, dönüş için koddur).

Ardından yuvarlama konumu / 26 sonucunu yazdırın.


0

C # 6, 201 bayt

Burada özel bir şey yok. Dizenin sabit genişliği nedeniyle ToUpper () kullanmak yerine her iki durumu da yazmanın daha ucuz olduğunu gördüm.

using C=System.Console;class P{static void Main(string[]a)=>C.Write("`1234567890-=~!@#$%^&*()_+qwertyuiop[]\\QWERTYUIOP{}|asdfghjkl;'\raASDFGHJKL:\"\nazxcvbnm,./zzzZXCVBNM<>?zzz ".IndexOf(a[0])/26+1);}

Girintili'ye:

using C=System.Console;
class P{
    static void Main(string[]a)=>
        C.Write("`1234567890-=~!@#$%^&*()_+qwertyuiop[]\\QWERTYUIOP{}|asdfghjkl;'\raASDFGHJKL:\"\nazxcvbnm,./zzzZXCVBNM<>?zzz ".IndexOf(a[0])/26+1);
}

1
Bunun için çalıştığını göremiyorum ~ ya da?
Ash Burlaczenko

@ AshBurlaczenko, teşekkürler! O anahtarı özledim. Puanım değişmeden düzeltildi.
El-E-Yemek

0

Python 2, 146 bayt

e="\n";lambda x:("`1234567890-=~!@#$%^&*()_+qwertyuiop[]\\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:\""+e*4+"zxcvbnm,./ZXCVBNM<>?"+e*13+" ").index(x)/26+1

0

Excel, 132 bayt

=INT((FIND(A1,"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:""aaa zxcvbnm,./ZXCVBNM<>?zzzzzz ")-1)/26)+1

Girişimleri içinde duyarlı durumda kullanmak SEARCH()yerine FIND()Excel eşleştiğini ortaya ~, *ve ?hiç (tick). The matching of? means we can't useSEARCH () `, ki büyük 5 byte'ı tıraş ederdi ...

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.