どの行が重要ですか?


39

次の文字(または改行)のいずれかを指定します。

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

プログラムは、キーボード上の行を出力する必要があります


私のキーボードは(ほぼ)バッテリー切れなので、コードはできるだけ短くする必要があります


プログラムが使用するキーボード(行ルックアップ用)は、次のようになります。


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                                                   

  return改行はどこにありますか。空のキーは何の意味もありません。

"$"
1

"R"
2

"a"
3

"?"
4

"\n"
3

" "
5

where \nは改行文字です。

仕様書

  • プログラムは大文字と小文字を区別しない必要があります
  • プログラムは、表示されたキーボード上の文字を処理するだけで済みます

3
おそらく分類
リルトシアスト

3
それは二重ネストkbdですか?
コナーオブライエン

私は何年も前にキープレスを100×行+位置として返す言語を使用していたことを覚えています...これには完璧だっただろうが、残念ながら私はそれが何であったか覚えていません。たぶん何らかの形のベーシック
...-アダム

@NBZ Blitz Basicですか?
wizzwizz4

1
@ wizzwizz4 BlitzPlusを試しましたか?それは無料で、あなたが望むもののように見えます。
HolyBlackCat

回答:


6

Pyth、62 66 65バイト

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

オンラインでお試しください。

用途は、2ビットのチャンクに細断するとき、を除き、すべての文字の列を表し進の数値表現パックされた文字列!、0から3までの値としては、我々は除外し、!私たちが持っていないので、4を保存したり、持っていますこの番号の先頭に0を追加し、を使用して行の値を追加します+,4Z。文字列を行の値に変換したら、入力の文字コードを使用して値の配列にインデックスを付け、1を追加するだけです。

改行は、Pythによって空の文字列として解釈され、文字コードが0であるため、個別に処理されます。

Pythでベース256を使用する方法を理解できれば、これは短くなりますが、うまく機能させることはできません。


4
o.0
ニカエル

これは私を恥ずかしく思う
-JuanPotato

:(改行を忘れてしまった!@nicaelがトップに戻りました。-
ルーク

今でも私たちは死んでいます!
ルーク

Pythでnullバイトをエスケープする必要があります。
リルトシアスト

12

JavaScriptの(ES6)、105の 102 101バイト

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

説明

JavaScriptはでtest同じ作用ブール値を返すとして1、または0それらの行によってI乗算それらそう。行2のテストにはほとんどのバイトが使用されたため、一致するものが他にない場合はその行をデフォルトとして使用しました。

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

テスト


1
> NaN XOR 2 = 2 — ???
リルトシアスト

1
@ThomasKwaそれが、JSの仕組みです(笑)。場合c="q"++c= NaNNaN*7= NaNNaN^2(等uncastablesが整数にオペランドを変換NaNなる0)、次いでん0 XOR 2されています2
user81655

5

Glava 1.5、164バイト

Glavaは、Javaコードを短くするJavaの方言です。残念ながら、このチャレンジの後に使用されるコミット(2時間遅れ...)が行われたため、このコードは非競争的であり、このプログラムが機能しない重大なバグを修正しました。

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

これは、コマンドライン引数を介して入力を受け取る完全なプログラムです。一致する行の正規表現をテストするだけで機能し、対応する数値を出力します。


Glava = Guava + Java?
Downgoat

2
@DoᴡɴɢᴏᴀᴛGlava =ゴルフ+ Java(コナーのアイデア
でした

確かに!@Doᴡɴɢᴏᴀᴛ
コナー・オブライエン

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)

おそらく私が見落としているもっと短い方法があります¯\ _(ツ)_ /¯


4

ピス、98

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

何らかの理由で0-9の範囲を機能させる方法がわからない:|、user81655の回答に触発された


jkUT0〜9の範囲の文字列に使用できますが、短い方法があるかどうかはわかりません。あなたはまた、例えば数バイトを保存するためにパックされた文字列を使用することができます."!~WÏù¹_(<]úÝ"ため"~`!@#$%^&*()_-=+"
ルーク

@benstopicsから、これは正規表現のメタ
キャラクター

4

バッシュ、108

Bashの答えはありませんか?バッシュ答え。grep -Fin間違いなくこの仕事に最適なツールです。

このプログラムは2つのファイルにあります。

k、73バイト

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

5行あり、最後の行はスペースです。ファイルの再現に問題がある場合、base64は次のとおりです。

YDEyMzQ1Njc4OTAtPX4hQCMkJV4mKigpXysKcXdlcnR5dWlvcFtdXHt9fAphc2RmZ2hqa2w7JzoiCnp4Y3Zibm0sLi88Pj8KIA==

b、34バイト

これはプログラム自体であり、コマンドライン引数としてのみ入力を受け取ります。

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

スコア:34 + 73 + 1(kファイル名の場合)= 108バイト

非ゴルフ

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

説明

  • grep -文字列または正規表現に一致する行をファイルで検索し、それらの行のみを出力します
  • -Faka- --fixed-strings正規表現を無効にして、[などが正しく処理されるようにします
  • -iaka -yaka- --ignore-case大文字と小文字を区別しないマッチング
  • -naka- --line-number行番号を表示し、すべての行の前に(例4:zxcvbnm,./<>?
  • "$1" -スクリプトの最初のコマンドライン引数を検索します。改行とスペースを処理するには引用符が必要です
  • k -ファイルで検索 k
  • このgrepコマンドは、入力が改行の場合は5行すべてに一致し、そうでない場合は1行のみに一致します。
  • | -パイプ、1つのコマンドの標準出力を次のコマンドの標準入力に送信
  • tail -標準入力の最後のN行または文字を出力する
  • -n3aka- --lines=3最後の3行を出力します
  • 入力が改行ではない場合、処理する行は1行のみです。これは、-nフラグonのために行番号で始まりgrepます。それ以外の場合、このコマンドは行3、4、および5(最後の3行)のみを取ります。
  • | -パイプ
  • head -標準入力の最初のN行または文字を出力する
  • -c1aka- --bytes=1最初の文字を出力します
  • 入力が改行ではなかった場合、これは最初の文字を取ります。これは、入力が見つかった行番号です。入力が改行の場合、3行目、4行目、5行目の最初の文字が結合されます。これは、3行目であり、改行の正しい行番号になります。

4

Japt、73 70 66バイト

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

オンラインでお試しください!(例では、入力は文字通り改行です)


ナイス、今までで最短!
ETHproductions

@Eth yup、少なくとも一度は短いものを投稿する必要があります:D
nicael


@Eth Heh、!1"false"に一致するものです。最終的に私はその方法を知っています、ありがとう:)
nicael

@Eth halp、Pythを倒すには5バイトが必要です。
ニカエル

4

Java、300バイト

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))));}}

私は専門家ではありません。これがゴルフの最初の試みですが、一体何だと思いましたか?上記は完全なプログラムバージョンです。実際のコードでは、かなりの量の文字が削除されます。


空の入力(改行/キャリッジリターン)でクラッシュすることに注意してください。私ができるときに修正されます
アンドリュー

コミュニティへようこそ!
エリックアウトゴルファー

ようこそ(1月xDに投稿してから少し遅れています)。次のように現在のアプローチを変更せずにかなりゴルフをすることができます。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バイト)不要な括弧を削除しました。短縮args; 削除されましたpublic 。StringとScannerを直接使用。java.util.Scanner一度使用されたインポートを削除しました。
ケビンCruijssen 16年

このためにスキャナーを使用する必要がない 219バイト
PrincePolka

3

Pyth、105バイト

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

説明:

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.

最初の行を「他に何もなければならない」行として選択することにしました。これは、ゴルフの後でも表すためにほとんどのバイトを必要としたためです。


プログラミングパズルとコードゴルフへようこそ!コメントを使用して@JuanPotatoで取得してください。ただし、50人の担当者が必要です。だからあなたは働く必要があります。
user48538

3

Perl 6、128バイト

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

文字列リテラルスペースと共に文字クラスを含む正規表現のリストを作成します。次に、スマートマッチを使用firstしてリストにあるメソッドを呼び出し、リストにfirstある現在のアイテムとプログラムに渡された引数を比較します。smartmatchは、正規表現と文字列リテラルの両方に対して「正しいこと」を行うことに注意してください。:kオプションのパラメータfirst方法原因は、私は、を介して出力に1を追加した、リストに一致する項目のインデックスを返しますsay

このプログラムを使用するときは、シェルの `やスペースなどの特定の文字を適切にエスケープする必要があることに注意してください。例えば:perl6 keyboard.p6 \ `


まだ誰も言っていないので、プログラミングパズルとコードゴルフへようこそ!
エリックアウトゴルファー

2

JavaScript ES6、114バイト

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

別のJavaScriptソリューション。原則として、行の配列に2を加えた入力文字のインデックスを返します(したがって、0-9行は-1を返すため、存在しない場合は-1 + 2 = 1 qが配列の最初の文字列にあり、したがって、0 + 2 = 2行目を返します)。


2

Perl、96 77 76バイト

を使用して実行しperl -pます。必ず1つのキャラクターにフィードしてください。たとえば、ファイルから実行するkey.pl(シェルエスケープシーケンスをいじるのを避けるため)echo -n q|perl -p key.pl

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

正規表現の範囲機能を乱用するのは楽しいです。


私にはこれは機能せず、実行すると行のインデックス+ 3(つまり、0ではなく3、4ではなく7など)を取得します。
ChatterOne

入力方法に敏感です。おそらく、文字とそれに続く改行を提供しているでしょう。echo入力を正確に制御するために使用します-例えば。echo -n q|perl -n key.pl、これは正しく生成され2ます。
マーク

ああなるほど。まあ、それはあなたがchomp入力しない理由も説明しています。
ChatterOne

1
chomp入力を編集すると、リターンキーに「3」を返すことができません。
マーク

1
ちょっと@マーク、あなたは$_=~試合のために必要はありません、m//(これは何であるか/.../$_自動的に動作します!あなたが使用している場合も-pの代わりに-n使用できる$_=代わりにprint、よりカップルを保存するためにバイト。代わりにリテラル改行を使用すると、\nもう1バイト節約できます!それはあなたのコードをかなり減らすはずです!使用例を追加する価値があるかもしれませんので、テストする人はあなたが使用する必要があることを知っていますecho -n:)
Dom Hastings

2

PHP、173バイト

ここでのアイデアは、正規表現をキャプチャするグループ番号を行インデックスとして使用することでした。おそらく正規表現自体でさらにいくつかの最適化。

$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()コールは、配列を作成します$mマッチのを、私たちはそれを印刷した場合、それはこの(仮定のようになりたいz入力されたが):

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

キーと値を交換することでその配列を反転すると、左から右に移動し、最後の個別のキーのみが保持されるため、次のようになります。

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

次に、入力文字を配列のインデックスとして使用して、結果を取得します。

ここで試してみてください


2

C、145143136132127127106バイト

#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;}

これはindex()POSIX.1-2001から使用され、POSIX.1-2008では非推奨です。 これは、ASCIIおよび32ビット整数を想定しています。


2

Python 3、89バイト

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

まだコメントできないので、現在のPython 3の回答の改善点を個別に投稿しています。

編集:すべてのコードをprint現在およびさらに調整しました。


これは単なるスニペットであり、有効な答えではありません。印刷ステートメントでラップする(完全なプログラムにする)か、関数に変換する必要があります。
FlipTack

@FlipTack:そのとおりです。あなたの提案を取り入れました。
creativecoding

PPCGへようこそ!
マーティンエンダー

@MartinEnder:ありがとう!:-)
creativecoding


0

CJam、125バイト

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

説明

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バイト

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)

各行が26文字の長い文字列を使用しました(#34は二重引用符のコード、#13はリターンのコードです)。

次に、丸め位置/ 26の結果を印刷します。


0

C#6、201バイト

ここでは特別なことは何もありません。文字列の幅が固定されているため、ToUpper()を使用するよりも両方のケースを記述する方が安価であることがわかりました。

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);}

インデント:

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
〜または `?でこれが機能しているのが見えません。
アッシュBurlaczenko

@AshBurlaczenko、ありがとう!私はその鍵を逃しました。スコアを変更せずに修正しました。
手電子食品

0

Python 2、146バイト

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

0

Excel、132バイト

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

敏感なケースを使用しようとするSEARCH()代わりに、FIND()Excelが一致していることを明らかにした~*?しますか(tick). The matching ofmeans we can't useSEARCH() `、これは大量の5バイトを削ります...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.