今、私は私のABCを知っています、あなたは私と一緒にゴルフに来ませんか?


46

この大文字と小文字を区別しない正確なテキストを出力するプログラムまたは関数を作成します。

A, B, C, D, E, F, G,
H, I, J, K, L, M, N, O, P,
Q, R, S,
T, U, V,
W, X, Y, Z.

(多くのアメリカの子供がアルファベットを暗記するのを学ぶことを学ぶアルファベットの歌に基づいていますが、より圧縮性のために編集されました。)

出力は上記とまったく同じに見える必要がありますが(大文字と小文字は区別されません)、各行の末尾のスペースや末尾の改行が含まれる場合があります。最後の期間に注意してください。

これはコードゴルフなので、バイト単位の最短コードが優先されます。


4
正規表現ベースの言語は、0幅先読み...考えるために/(?=[HQTW])/
マジックタコ壺

29
思ったH, I, J, K, LMNO, P
モニカの復元

7
最後の行は「Y and Z.」で終わるべきではありませんか?
KM。

@KM。これはsandboxで議論されたので、このバージョンに固執してチャレンジの複雑さを減らすことにしました。
ETHproductions

6
ゴルフは退屈そうです。クリケットの方がいいです。
マノジクマール

回答:


15

VIM、42、40キーストローク/バイト

:h<_<cr>jjYZZP:s/./&, /g<cr>7f r<cr>9;.3;.3;.$ch.

Lynnと、ヘルプからアルファベットを取得するためのヒントを提供してくれた素晴らしいvimに感謝します。

RomanGräfに2バイトの節約をありがとう!

説明:

:h<_<cr>                                      " Open up vim-help
        jj                                    " Move down two lines
          Y                                   " Yank this line (containing the alphabet)
           ZZ                                 " Close this buffer
             P                                " Paste the line we just yanked
              :s/./&, /g<cr>                  " Replace every character with that character followed by a comma and a space
                            7f                " Find the seven space on this line
                               r<cr>          " And replace it with a newline
                                    9;        " Repeat the last search (space) 9 times
                                      .       " Repeat the last edit (replace with a newline)
                                       3;     " Third space
                                         .    " Replace with newline
                                          3;  " Third space
                                            . " Replace with newline

次に、で行の末尾を移動し$、で文字を戻しch、ドットを挿入します。


2
大文字に変換しないでください。OPは、「この正確なテキスト、大文字と小文字を区別しない」と述べました。
ローマングラフ

@RomanGräfヒントをありがとう!
DJMcMayhem

ハ!vimヘルプからアルファベットを取得するのは天才です!あなたはそれを知っていましたか、それともこの挑戦のために調べましたか?
クリスチャンロンドー

3
@christianRondeau思いつきませんでした。Lynnがこの回答
DJMcMayhem

@RomanGräf+1を使用してはいけません
-FantaC

12

05AB1E、16バイト

コード

A',â79334S£»¨'.J

説明:

A                  # Push the alphabet.
 ',â               # Cartesian product with ','.
    79334S         # Push [7, 9, 3, 3, 4].
          £        # Contigious substring, pushes the substrings [0:7], [7:7+9], 
                     [7+9:7+9+3], [7+9+3:7+9+3+3], [7+9+3+3:7+9+3+3+4].
           »       # Gridify, join the inner arrays with spaces and join those arrays
                     with newlines.
            ¨      # Remove the last character.
             '.J   # Append a '.'-character.

CP-1252エンコードを使用します。オンラインでお試しください!



11

JavaScript(ES6)、66 65バイト

暴行@Neilことは不可能だった...私はそれをしなかった理由です。:-)

f=(i=10)=>i>34?"z.":i.toString(++i)+","+` 
`[9568512>>i-9&1]+f(i)

@LevelRiverStからのトリックのおかげで1バイトをゴルフしました。使用String.fromCharCodeは7バイト長くなります:

f=(i=65)=>i>89?"Z.":String.fromCharCode(i,44,i%86%83%80%71?32:10)+f(i+1)

使い方

これは、再帰的にからアルファベットの各文字を生成aするy使用して、.toString()。各文字の後にコンマが追加され、9568512>>i-9&11の場合は改行が追加され、それ以外の場合はスペースが追加されます。再帰が34を超える、つまりtoになるzと、関数は単にを返します"z."


これがどうなるか、待ってください。:3
Downgoat

10

Python 2.7、67 66 63バイト

a=65;exec"print'%c'%a+',.'[a>89]+'\\n'[a%42%39%9^2:],;a+=1;"*26

デニスはバイトを保存しました。


exec代わりに使用するとfor、バイトが節約されます。
デニス

6

ゼリー19 18 バイト

ØAp”,ṁ79334DR¤GṖ”.

1バイトのゴルフをしてくれた@Adnanに感謝します!

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

使い方

ØAp”,ṁ79334DR¤GṖ”.  Main link. No arguments.

ØA                  Yield "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
  p”,               Cartesian product with ','; append a comma to each letter.
             ¤      Combine the two links to the left into a niladic chain.
      79334D          Decimal; yield [7, 9, 3, 3, 4].
            R         Range; yield [[1, 2, 3, 4, 5, 6, 7], ..., [1, 2, 3, 4]].
     ṁ              Mold; reshape the array of letters with commata like the
                    generated 2D array.
              G     Grid; separate rows by spaces, columns by linefeeds.
               Ṗ    Pop; discard the last comma.
                ”.  Print the previous result and set the return value to '.'.
                     (implicit) Print the return value.

11
31秒?ダン
...-ETHproductions

5

JavaScript(ES6)、80 74バイト

_=>[...`ABCDEFGHIJKLMNOPQRSTUVWXYZ`].join`, `.replace(/[HQTW]/g,`
$&`)+`.`

ISO-8859-1エンコーディングの使用方法を考え出すことができれば、おそらくこれをatob / btoaで短縮することが可能です。編集:@RickHitchcockのおかげで6バイトを保存しました。


1
@RickHitchcockはい、PHPの回答を読んだ後で自分自身に気付いたところです。
ニール

@RickHitchcockお望み.join`, `ですか?バッククォートの前にバックスラッシュを置きます。(はい、コメントのマークダウンは異なります、ため息...)
ニール


5

R、83 71バイト

a=rbind(LETTERS[-26],","," ");a[3,7+3*c(0,3:5)]="\n";cat(a,"Z.",sep="")

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

3行のマトリックスを作成します(1行に文字、1行にコンマ、もう1行にスペースまたは改行があります)。

編集:ビリーウォブありがとう!


cat(a,sep="")数バイトを節約します:a=rbind(LETTERS,","," ");a[3,7+3*c(0,3:5)]="\n";cat(a[,-26],"Z.",sep="")
Billywob

ありがとう!それは大いに役立ちました![-26]onをLETTERS直接使用すると、さらに1バイト節約されます。
プランナパス

4

CJam、26バイト

'A79333Ab{{',S2$)}*N\}/'.@

オンライン通訳

'A                             Push 'A'
  79333Ab                      Push [7 9 3 3 3]
         {           }/        For each number n in the previous array...
          {      }*              Execute n times...
           ',S                     Push a comma and a space
              2$)                  Copy last letter and increment
                   N\            Place a newline under the letter on top
                       '.@     Push '.' and rotate

4

Brainfuck、117バイト

+[++[-<]-[->->]<]+++[->++>+++>+>+<<<<<--<<->>>]>+[[-<<<<<+.>-.+>.>>>]>[[-<+>]>]<<[<]<.>>]<<-[---<<<+.>-.+>.>]<<<+.>+.

最初の4行にはそれぞれ末尾のスペースがあり、プログラムは8ビットのセルを想定しています。オンラインでお試しください!

(最後の行の処理は難しい...)


4

Perl、37バイト

クレジット@Domヘイスティングスこの解決のためには、(3鉱山より短いバイト、怒鳴る参照します)。

say+(map"$_, ".$/x/[GPSV]/,A..Y),"Z."

-E(または-M5.010)フラグで実行:

perl -E 'say+(map"$_, ".$/x/[GPSV]/,A..Y),"Z."'

私の以前のバージョン、3バイト長い(合計40バイト):

perl -E '$_=join", ",A..Z;s/[HQTW]/\n$&/g;say"$_."'

1
37バイトのわずかに異なるアプローチ(まだ正規表現を使用しています...)say+(map"$_, ".$/x/[GPSV]/,A..Y),"Z."
Dom Hastings

@DomHastingsいいね、よくやった。そして、3つではなく1つのステートメントを使用する方がより美しいです!;-)
ダダ

4

JavaScript(ES6)、66 64バイト

_=>`ABCDEFG
HIJKLMNOP
QRS
TUV
WXY`.replace(/./g,"$&, ")+"Z."

正規表現は文字と一致しますが、キャリッジリターンとは一致しないため、正規表現の置換を使用して、各文字に「、」を追加できます。

編集:ETHProductionsのおかげで2文字削除


1
他のJSゴルファーが最初にこの解決策を採用しなかった理由はわかりません。ここで、賛成票を持っています。
ママファンロール

1
ダン、いいね!に変更$1すると、正規表現の括弧を削除できると思います$&
ETHproductions

3

チェダー、70バイト

->[65@"71,72@"80,"QRS","TUV","WXYZ"].map(@.chars.join(", ")).vfuse+'.'

これより短くならないようです。私は非常に興味深い方法を使用するこの他のバージョンを作りましたが、これは最短

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

説明

->                        // Function with no arguments
  [                       // Array, each item represents a line
   65@"71,                // See below on what @" does
   72@"80,
   "QRS",
   "TUV",
   "WXYZ"
  ].map(                  // On each item...
    @.chars.join(", ")    // Join the characters on ", "
  ).vfuse                 // Vertical fuse or join by newlines
  + '.'                   // The period at the end

@"オペレータが遠隔文字列を生成するために使用されます。左の文字コードから右の文字コードまでの文字列を生成します。

例えば65用文字コードであるA90するためZ。実行65 @" 90すると、AからZまたはアルファベットが生成されます。


3

C、 112 102 81バイト

cleblancとLevelRiverStに感謝します!

i,c;main(){for(c=64;++c<91;)printf("%c%c%c",c,44+c/90*2,c=="‌​GPSVZ"[i]?++i,10:32)‌​;}

いい解決策。44は「、」よりも1少なく、46は「。」よりも1少ないため、数バイトを節約できます。
cleblanc

intを宣言する必要はなく、暗黙のintを作成することもできます。これはわずか101バイトですi,c,d;main(){for(c=65;c<91;++c){if(c-"GPSVZ"[i])d=32;else d=10,++i;printf("%c%c%c",c,c-90?44:46,d);}}
-cleblanc

このアプローチは82バイトまで取得できますi,c;main(){for(c=64;++c<91;)printf("%c%c%c",c,44+c/90*2,c=="GPSVZ"[i]?++i,10:32);}。注あなたは絶対に固執することができますことを何でも間の?:三項演算子のを、さらには数式は、カンマで区切られた(それは最後の1と評価されます。)
レベル川セント

3

Brainfuck、157バイト

+++++[>+>+++<<-]>>[->+>++++>+++>++<<<<]>----->+++++.>-.>++.<<<<<+[->>>+.>.>.<<<<<]+++++++++>>.<<[->>>+.>.>.<<<<<]<---[+>+++>>.<<[->>>+.>.>.<<<<<]<]>>>>+.>++.

オンラインで試す


3

ルビー、56 54バイト

$><<(?A..?Y).map{|c|c+('GPSV'[c]?",
":", ")}.join+"Z."

最初の行はリテラルの改行で終わります。

編集:に置き換え'A'..'Y'て2バイトを保存しました?A..?Y


3

Vim、32バイト

26o<C-V><C-V>64,<Esc>r.V{g<C-A>8Jj9Jj3Jj.j4JcH<C-R>"

最後に空白行を残しますが、これは許可されていましたが、この不器用なのは奇妙です。さらに悪いことに、私は挿入モードで終了しています。私は他の人々がここでそれを見ているのを見たので、私はそれが許可されていると思いますか?汚い感じがします。

  • 26o<C-V><C-V>64,<Esc>:最初の<C-V>文字は、2番目の文字を文字通り挿入します。<C-V>64バッファ内のこの葉は、次に文字に、ASCIIコードポイントに変換されますよ。コンマはすでに入っています。
  • r.:もう二度と終わりになることはないので、.今はやりましょう。
  • V{g<C-A>:視覚的な増分を使用64して、すべてのsを大文字のASCIIコードポイントに変換します。
  • 8Jj9Jj3Jj.j4J:任意の線が結合します。1つ目は8J代わりに7J、我々は空白行を扱っているので。繰り返された3Jsは、ドットの繰り返しの対象となります。
  • cH<C-R>":人々は通常i<C-R>、挿入モードの貼り付けと考えていますが、それは挿入モードマクロのようなものです。のようなもの<C-V>65は、入力されたように実行され、10進コードポイントとして解釈されます。これにより、最後に余分な(許可された)行が残り、挿入モードのままになります。

4
ポリシーに問題がある(またはポリシーがない)場合は、回答ではなくメタで取り上げてください。
メゴ

2

PowerShell v3 +、60 78 67バイト

-join(65..90|%{[char]$_+'.,'[$_-le89]+" "+"`n"*($_-in71,80,83,86)})

OK。今回は実際に仕様を読んで理解し、それに従いました。約束する。:D

配列65..90を取得し、各要素をループします|%{...}。繰り返しごとに、連結、インデックス付け、および乗算を使用して新しい文字列を構築しています。

まず、現在の番号を取得してcharキャストし、ASCII文字にします。それは、文字列へのインデックス付けに基づいて、他の文字と連結され'.,'ます90(つまり、Z.残りはすべてカンマである間を考慮します)。これ" "は文字をスペースで区切るために連結された文字列であり"`n"、現在の要素が-in指定された配列であるかどうか(つまり、改行文字で連結する必要があるかどうか)のブール値に基づいた文字列乗算です。結果の文字列はパイプラインに残ります。

これらの文字列は括弧にカプセル化さ-joinれ、新しい文字列にまとめられます。この文字列はパイプラインに残されWrite-Output、最後に暗黙的に結果が出力されます。我々が持っているので`n、文字列には、自動的に印刷時に改行に変換されます。

-inオペレーターにはv3 +が必要です。各行の末尾にスペースがありますが、これはチャレンジ仕様ごとに問題ありません。

PS C:\Tools\Scripts\golfing> .\now-i-know-my-abc.ps1
A, B, C, D, E, F, G, 
H, I, J, K, L, M, N, O, P, 
Q, R, S, 
T, U, V, 
W, X, Y, Z. 

1
最後のピリオドがありません。
ダウンゴート

最初の4行の終わりにコンマがありませんか?
ニール

@ニールグッドグレービー。実際に仕様を理解できるまで、これを削除します。
AdmBorkBork

2

PHP、62バイト

<?=preg_filter("# ([HQTW])#","\n$1",join(", ",range(A,Z)));?>.

比較用87バイト

<?="A, B, C, D, E, F, G,\nH, I, J, K, L, M, N, O, P,\nQ, R, S,\nT, U, V,\nW, X, Y, Z.";

の代わりに実際の改行を使用して、バイトを保存できます\n
アレックスハワンスキー16年

各行の末尾のスペースが許可されているため、正規表現からスペースを削除することでバイトを節約できます。また、正規表現の区切り文字をスキップできるため、ereg_replace(7.0では非推奨で削除されました)を使用してバイトを保存できます。
user59178

@ user59178 3バイト節約できますが、これは避けます。はい、末尾のスペースは許可されます。私は正規表現として書いて"# (?=[HQTW])#""\n"同じバイトへの置き換えを短くして、それを明確にすることができました。非推奨の関数を使用すると、初心者を混乱させる可能性があります。そして、物理的な中断は、Unix以外の他のシステムで間違って解釈される可能性があります。自分の提案として投稿できます。
ヨルクヒュルサーマン

2

MATL、38 29バイト

@Luisのおかげで9バイト節約!

1Y2X{', '&Zc46h1[CEII]I*11hY{

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

説明

1Y2     % Push the upper-case alphabet to the stack
X{      % Break the character array into a cell array (similar to a list)
        % where each element is a letter
', '&Zc % Combine back into a string with ', ' between each element
46h     % Append '.' (via ASCII code) to the end of the string
1       % Push the number 1
[CEII]  % Push the array: [7, 9, 3, 3]
I*      % Multiply this array by 3: [21, 27, 9, 9]  
llh     % Append an 11 to this array: [21, 27, 9, 9, 11] 
Y{      % Break our comma-separated list of characters into groups of this size
        % Implicitly display the result

2

R、146バイト

L=LETTERS
f=function(x,y=""){paste(x,collapse=paste0(", ",y))}
cat(f(c(f(L[1:7]),f(L[8:16]),f(L[17:19]),f(L[20:22]),f(L[23:26])),"\n"),".",sep="")

説明:

LETTERS大文字用に事前定義されています。
このf関数は、ベクトルx ,を追加y(連結に使用)するためのものです。
猫は、\n改行として印刷されるので使用されます。f文字で行を形成するために呼び出され、次に行で再び出力全体を形成するために呼び出されます。

おそらくゴルファーは-私はfの複数の呼び出しが好きではありません...


3
生の出力は77バイト長です。直接短くなる可能性のある印刷
リン

@Lynn、私は知っているが、ここで私はいくつかのゴルフの可能性を見る。
パジョン

2

CJam、31バイト

'[,65>", "*7933Ab{3*/(\:+}%N*'.

説明:

'[,65>                             push uppercase alphabet
      ", "*                        ", " between all letters
           7933Ab                  push [7 9 3 3]
                 {3*/(\:+}%        slices of lengths 21, 27, 9, 9
                           N*'.    join slices with newlines, add final "."

オンラインで試す


2

ジュリア、71バイト

f()=join(join.(['A':'G','H':'P',"QRS","TUV","WXYZ"],[", "]),",\n")*"."

ブロードキャストには0.5以上が必要です .()


一方で、これには現在、末尾のピリオドがなく、print/関数の定義は必要ありませんか?一方、join変数に保存しないとバイトが節約されます。
Sp3000

私の悪いWRTには「。」がありませんjoin。ミスカウント。プログラムを実行すると、文字列が返されます。文字列を返すプログラムは有効な出力ではありませんか?(または、出力としてカウントするものを返すことを許可されている関数のみです。もしそうf()=であれば、tよりも短いprint()
ホワイト

確かに、f()=または()->大丈夫です-関数は割り当て可能であり、複数回実行できるという考え方だと思いますが、これとは対照的に、これはコードスニペットになります。
Sp3000

2

チェダー、57バイト

->(65@"90).sub(/[GPSV]/g,"$0
").sub(/[^Z\n]/g,"$0, ")+"."

オンラインでお試しください!きれいじゃないですか?素敵な長方形です。

2つの正規表現の置換。(65@"90)大文字のアルファベットは、.sub(/[GPSV]/g,"$0\n")置き換えGPSV自体にと"\n".sub(/[^Z\n]/g,"$0, ")すべての非改行と置き換わりZ、それ自体で文字をして", "、そして"."最終的に追加されます.


1
素敵なテクニック、そしてダウンゴートを凌ぐ素敵な仕事;)
ETHproductions

2

Japt、24バイト

;B¬qJ+S r"[HQTW]"@R+XÃ+L

オンラインでテストしてください!

使い方

;                        // Reset various variables. B is set to "ABC...XYZ", J is set to ",", and L is set to ".".
 B¬                      // Take the uppercase alphabet and split into chars.
   qJ+S                  // Join with ", ".
        r"[HQTW]"        // Replace each H, Q, T, or W with
                 @R+XÃ   //   a newline plus the character.
                      +L // Append a period to the result.
                         // Implicit: output last expression

2

Java、116 109 105 104

String f(){String s="";for(char c=65;c<91;)s=s+c+(c>89?46:',')+("GPSV".indexOf(c++)<0?' ':10);return s;}

ゴルフをしていない:

String f() {
  String s = "";
  for (char c = 65; c < 91;) {
    s = s + c
      + (c > 89 ? 46 : ',')
      + ("GPSV".indexOf(c++) < 0 ? ' ' : 10);
  }
  return s;
}

7バイトずつゴルフできます。3つすべて|||(-3)に。変化c==90c>89(-1)。変化'.'46(-1)。(-2)に変更'\n'10ます。
ケビンCruijssen

@KevinCruijssenありがとう、小数を使ってみましたが、3進数の両方の文字定数を置き換えると、式のタイプが整数に変わり、それが壊れました。1つの定数を変更すると機能し、数バイトが圧縮されました。

2
@KevinCruijssenありがとう。私に十分なコーヒーがあれば、自分でそれを更新することを思い出したでしょう。

1
さらに2バイト:の"GPSV".contains(""+c)代わりにc==71|c==80|c==83|c==86
TNT

1
@TNT少し上手くできました。正しい方向へのプッシュのおかげで、その部分を改善できることを知っていました。

1

q、46バイト

-1@'(", "sv/:0 7 16 19 22_,:'[.Q.A]),'",,,,.";


1

Pyth、25バイト

+Pjmj\ dc*G\,j94092 23)\.

結果をSTDOUTに出力するプログラム。

オンラインで試す

使い方

+Pjmj\ dc*G\,j94092 23)\.  Program. Input: none
          G                Yield string literal'abcdefghijklmnopqrstuvwxyz'
         * \,              Cartesian product of that with ',', yielding a list of
                           characters with appended commas
             j94092 23)    Yield the integer 94092 in base-23, giving [7, 16, 19, 22]
        c                  Split the comma-appended character list at those indices
   mj\                     Join each element of that on spaces
  j                        Join that on newlines
 P                         All but the last element of that, removing trailing ','
+                      \.  Append '.'
                           Implicitly print
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.