이제 내 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])/
Magic Octopus Urn

29
나는 그것이 생각했다 H, I, J, K, LMNO, P?
Monica Monica

7
마지막 줄이 "Y and Z"로 끝나서는 안됩니까?
KM.

@KM. 이것은 샌드 박스 에서 논의되었으며 , 우리는 도전을 덜 복잡하게하기 위해이 버전을 사용하기로 결정했습니다.
ETHproductions

6
골프는 지루해 보인다. 크리켓이 좋습니다.
Manoj Kumar

답변:


15

Vim, 42 , 40 키 스트로크 / 바이트

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

덕분에 린과 그녀의 멋진 정력 응답 팁을위한 도움의 알파벳을 잡아합니다.

2 바이트를 절약 한 RomanGräf에게 감사드립니다!

설명:

: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는 "이 정확한 텍스트는 대소 문자를 구분하지 않습니다"라고 말했습니다.
Roman Gräf

@ RomanGräf 팁 주셔서 감사합니다!
DJMcMayhem

하아! vim help에서 알파벳을 얻는 것은 천재입니다! 알고 계십니까, 아니면이 도전을 찾아 보셨습니까?
Christian Rondeau

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

자바 스크립트 (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)

작동 원리

이 재귀에서 알파벳의 각 문자를 생성 ay사용 .toString(). 각 문자 뒤에 쉼표가 추가되고 9568512>>i-9&11 이면 줄 바꿈이 추가되고 그렇지 않으면 공백이 추가됩니다. 재귀가 34를 넘을 때, 즉 z함수는 단순히를 반환합니다 "z.".


어떻게합니까? 설명 pls? : 3
Downgoat

10

파이썬 2.7, 67 66 63 바이트

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

데니스는 바이트를 저장했습니다.


사용 exec대신하여 for바이트를 저장해야합니다.
Dennis

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 초? Dang ...
ETHproductions

5

자바 스크립트 (ES6), 80 74 바이트

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

ISO-8859-1 인코딩을 사용하는 방법을 알아낼 수 있다면 atob / btoa를 사용하여이를 줄일 수 있습니다. 편집 : @RickHitchcock 덕분에 6 바이트가 절약되었습니다.


1
@RickHitchcock 네, PHP 답변을 읽은 후에 저 자신을 깨달았습니다.
Neil

@RickHitchcock 원 .join`, `하십니까? 백틱 전에 백 슬래시를 넣으십시오. (예, 댓글 표시가 다릅니다, 한숨 ...)
Neil

5

파이크, 23 19 17 바이트

G\,J\.+2cu  /P

여기 사용해보십시오!

G\,J\.+        -    ",".join(alphabet)+"."
       2c      -   split(^, size=2)
            /  -  split_sized(^, V)
         u     -   yield list [7,9,3,3] (actual bytes `u%04%07%09%03%03`)
             P - print(^)

5

R, 83 71 바이트

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

온라인으로 사용해보십시오!

하나는 문자, 하나는 쉼표, 다른 하나는 공백 또는 개행 문자를 사용하여 3 행의 행렬을 만듭니다.

편집 : 감사 Billywob!


cat(a,sep="")몇 바이트를 절약 :a=rbind(LETTERS,","," ");a[3,7+3*c(0,3:5)]="\n";cat(a[,-26],"Z.",sep="")
Billywob

감사! 그것은 많은 도움이되었습니다! [-26]on을 사용하면 LETTERS또 다른 바이트가 직접 저장됩니다.
plannapus

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 바이트

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

처음 네 줄에는 각각 후행 공백이 있으며 프로그램은 8 비트 셀을 가정합니다. 온라인으로 사용해보십시오!

(마지막 줄을 다루는 것은 까다 롭습니다 ...)


4

펄, 37 바이트

이 솔루션에 대한 @Dom Hastings의 크레딧 (내 것보다 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 좋은 사람, 잘 했어. 그리고 세 개가 아닌 하나의 진술을하는 것이 더 아름답습니다! ;-)
Dada

4

자바 스크립트 (ES6), 66 64 바이트

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

정규식은 문자와 일치하지만 캐리지 리턴은 일치하지 않으므로 정규식 바꾸기를 사용하여 각 문자에 ","를 추가 할 수 있습니다.

편집 : ETHProductions 덕분에 2 자 제거


1
다른 JS 골퍼들이 왜이 솔루션을 먼저 사용하지 않았는지 모르겠습니다. 여기, 공감하십시오.
Mama Fun Roll

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의 문자 코드는 입니다 . 그렇게하면 A에서 Z까지 또는 알파벳이 생성됩니다.A90Z65 @" 90


3

씨, 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);}. 쉼표로 구분 된 여러 표현식 (마지막으로 평가됨)까지도 삼항 연산자 사이에 아무 것도 붙일 수 없습니다 ?:.
Level River St


3

루비, 56 54 바이트

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

첫 번째 줄은 리터럴 줄 바꿈으로 끝납니다.

편집 : 로 바꾸어 두 바이트를 저장 'A'..'Y'했습니다 ?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>는 두 번째를 문자 그대로 삽입합니다. 는 <C-V>64버퍼에서이 잎이 다음 문자로, ASCII 코드 포인트로 전환됩니다에요. 쉼표는 이미 있습니다.
  • r.: 다시는 끝나지 않을 것이므로 .지금하십시오.
  • V{g<C-A>: 시각적 증분을 사용하여 모든 64s를 대문자의 ASCII 코드 포인트로 바꿉니다.
  • 8Jj9Jj3Jj.j4J: 임의의 라인이 결합합니다. 첫 번째는 8J대신에 7J우리가 빈 줄을 취급하고 있기 때문이다. 반복되는 3Js는 도트 반복에 적합합니다.
  • cH<C-R>": 사람들은 일반적으로 i<C-R>삽입 모드 붙여 넣기로 생각 하지만 삽입 모드 매크로와 비슷합니다. 물건처럼 <C-V>65입력하고, 소수점 코드 포인트로 해석처럼 실행됩니다. 이렇게하면 끝에 추가 (허용) 줄이 남고 삽입 모드를 유지합니다.

4
정책에 문제가 있거나 정책이 부족한 경우 답변이 아닌 메타에 적용하십시오.
Mego

2

PowerShell v3 +, 60 78 67 바이트

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

승인. 실제로 이번에는 사양을 읽고 이해하고 준수했습니다. 약속. :디

배열 65..90을 가져와 각 요소를 반복 |%{...}합니다. 반복 할 때마다 연결, 색인 및 곱셈을 사용하여 새 문자열을 구성합니다.

먼저 현재 숫자를 가져 와서 charASCII 문자로 변환합니다. 그것은 '.,'우리가 있든 없든 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
마지막 기간이 없습니다.
Downgoat

처음 네 줄의 끝에 쉼표가 없어야합니까?
Neil

@ 닐 좋은 그레이비. 실제로 사양을 이해할 수있을 때까지 이것을 삭제하겠습니다.
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.
Alex Howansky

각 줄에 후행 공백이 허용되면 정규식에서 공백을 삭제하여 바이트를 절약 할 수 있습니다. 또한 정규식에서 구분 기호를 건너 뛸 수 있으므로 (7.0에서 더 이상 사용되지 않고 제거 된) ereg_replace를 사용하여 바이트를 저장할 수 있습니다.
user59178

@ user59178 3 바이트를 절약 할 수는 있지만 이것을 피할 수 있습니다. 예. 후행 공간이 허용됩니다. 정규식으로 작성 "# (?=[HQTW])#"하고 교체를 "\n"동일한 바이트로 짧게하고 더 명확하게 만들 수 있습니다. 더 이상 사용되지 않는 기능을 사용하려면 초보자에게 혼란을 줄 수 있습니다. 그리고 물리적 중단은 다른 시스템보다 유닉스보다 잘못 해석 될 수 있습니다. 자신의 sugesstion으로 게시 할 수 있습니다.
Jörg Hülsermann

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문자를 호출하여 행을 형성 한 다음 행을 다시 작성하여 전체 출력을 형성합니다.

아마 골프 타기-나는 여러 번의 전화를 좋아하지 않는다 ...


3
원시 출력의 길이는 77 바이트입니다. 직접 짧아 질 수있는 인쇄 ...
Lynn

@Lynn, 나는 알고 있지만 여기서 골프 가능성을 볼 수 있습니다.
pajonk 2016 년

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/ function 정의 가 필요하지 않습니까? 반면에 join변수에 저장 하지 않으면 바이트가 저장됩니다.
Sp3000

내 나쁜 wrt에 "."이 누락되었으며에 대한 포인터 주셔서 감사합니다 join. 계산이 잘못되었습니다. 프로그램을 실행하면 문자열이 반환됩니다. 문자열을 반환하는 프로그램이 유효한 출력이 아닙니까? (또는 출력으로 계산할 항목 만 반환 할 수있는 기능 f()=일뿐입니다.보다 짧은 경우 print())
Lyndon White

확실 f()=하거나 ()->괜찮습니다-기능은 할당 가능하고 여러 번 실행될 수 있다는 생각이며, 대조적으로 이것은 코드 스 니펫입니다.
Sp3000

2

체다, 57 바이트

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

온라인으로 사용해보십시오! 아름답 지 않습니까? 좋은 사각형입니다.

두 개의 정규식 대체. (65@"90)대문자 알파벳은, .sub(/[GPSV]/g,"$0\n")대체 GPSV그 자체로하고 "\n", .sub(/[^Z\n]/g,"$0, ")이외의 모든 줄 바꿈과 대체 Z자체와 문자를하고 ", ", 그리고 "."마지막을 추가합니다 ..


1
멋진 기술과 멋진 직업 아웃 고프 다운 다운;)
ETHproductions

2

apt, 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

자바 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); 변화 c==90c>89(-1); 변화 '.'46(-1); (-2)로 변경 '\n'합니다 10.
Kevin Cruijssen

@ KevinCruijssen 덕분에 십진수를 사용해 보았지만 삼항의 두 문자 상수를 바꾸면 표현식 유형이 정수로 변경되어 파산합니다. 하나의 상수를 변경하면 효과가 있었고 몇 바이트를 짜 냈습니다.

2
@KevinCruijssen 감사합니다. 커피가 충분하다면 직접 업데이트해야한다는 것을 기억했을 것입니다.

1
2 바이트 더 : "GPSV".contains(""+c)대신 c==71|c==80|c==83|c==86.
TNT

1
@ TNT 나는 약간 더 잘 할 수있었습니다. 올바른 방향으로 밀어서 부품을 개선 할 수 있다는 것을 알고있었습니다.



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.