나에게 규모를 인쇄


20

아뇨! 나는 곧 이론 시험을 받았고 아직 저울을 기억하지 못한다! 다음을 인쇄하여 주요 척도를 기억하도록 도와주십시오.

7♯ - C♯ D♯ E♯ F♯ G♯ A♯ B♯ C♯
6♯ - F♯ G♯ A♯ B  C♯ D♯ E♯ F♯
5♯ - B  C♯ D♯ E  F♯ G♯ A♯ B
4♯ - E  F♯ G♯ A  B  C♯ D♯ E
3♯ - A  B  C♯ D  E  F♯ G♯ A
2♯ - D  E  F♯ G  A  B  C♯ D
1♯ - G  A  B  C  D  E  F♯ G
0  - C  D  E  F  G  A  B  C
1♭ - F  G  A  B♭ C  D  E  F
2♭ - B♭ C  D  E♭ F  G  A  B♭
3♭ - E♭ F  G  A♭ B♭ C  D  E♭
4♭ - A♭ B♭ C  D♭ E♭ F  G  A♭
5♭ - D♭ E♭ F  G♭ A♭ B♭ C  D♭
6♭ - G♭ A♭ B♭ C♭ D♭ E♭ F  G♭
7♭ - C♭ D♭ E♭ F♭ G♭ A♭ B♭ C♭

이것은 코드 골프이므로 가장 짧은 코드가 승리합니다. 당신은 사용할 수 있습니다 #b기호를 대신 하고 각각.

편집 : 부호를 사용하는 경우 각각 단일 바이트로 계산해야합니다. 이것은 불공정 한 불이익을주지 않기위한 것입니다.


1
출력에서 선행 줄 바꿈이 허용됩니까?
Steadybox

4
아직 Fugue 답변 이 없다고 믿을 수 없습니다 !
leo

출력 형식은 얼마나 엄격합니까? 우리는 배열을 출력 할 수 있습니까? 각 요소가 단일 메모 또는 문자 인 2D 배열은 어떻습니까?
Shaggy

@Shaggy 저는 Kolmogorov 복잡성 질문에 대한 표준이 무엇인지 알지 못하므로 아니오라고 말할 것입니다.
ericw31415

3
: 코드 요소의 모노 스페이스 글꼴에 너무 많은 부분
Chiel ten Brinke

답변:


8

, 66 65 바이트 (# 및 b를 사용하는 경우)

↑⮌…0¦8‖O⸿×⁷♭M→×⁷♯→⸿⸿¹⁵FE⁸﹪⊕⊗ι⁷«⸿⸿✂׳FCGDAEBι⁺¹⁵ι→⸿✂⭆♭ ♯×⁷κι⁺¹⁵ι»⟲

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

↑⮌…0¦8‖O

문자 07반대로 인쇄 한 다음 겹침으로 반영하십시오. 목록은 일반적으로 아래쪽으로 인쇄되므로 위쪽으로 인쇄하면 실제로 오른쪽으로 인쇄됩니다. 마지막에 모든 것을 제자리로 회전시킵니다.

⸿×⁷♭M→×⁷♯

새 줄을 시작하고 그 사이에 간격을두고 7 개의 플랫과 7 개의 샤프를 인쇄하십시오.

→⸿⸿¹⁵

빈 줄을두고 15 -초를 인쇄하십시오 .

FE⁸﹪⊕⊗ι⁷«

0에서 7까지의 숫자를 취하고 두 배로 늘리고 1을 더한 다음 모듈로 7을 줄입니다. 결과를 반복합니다.

⸿⸿✂׳FCGDAEBι⁺¹⁵ι

빈 줄을 남기고 현재 값에서 시작하는 3 개의 메모 문자열을 15 자로 자릅니다.

→⸿✂⭆♭ ♯×⁷κι⁺¹⁵ι

다음 줄에는 15 자짜리 평평한 부분, 공백, 날카로운 부분이 각각 7 번 반복됩니다.

»⟲

모든 메모를 인쇄 한 후 모든 것을 제자리로 돌리십시오.


당신은 카운트 수 1 바이트 각이 아닌 3 등
ericw31415

이것은 천재 이며이 솔루션과 경쟁 할 수 없습니다.
Charlie

6

루비 , 113 바이트 ( 131 126 108 # 및 B 105)

-7.upto(7){|i|print i.abs," ♭♯"[i<=>0]," - ",(4..11).map{|j|("FCGDAEB"*3)[k=j*2%7-i]+"♭♯ "[~k/7]}*" ",$/}

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

Ruby , 116 바이트 (108은 #와 b)

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

Ruby , 126 바이트 (118은 #와 b)

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

Ruby , 131 바이트, # 및 b

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


Ruby가 지원하므로 유니 코드 샤프하고 플랫 한 문자를 인쇄해야합니다.
Jakob

124 바이트 솔루션으로 전환해야한다고 생각합니다. 여기의 메트릭은 문자가 아닌 바이트입니다!
Jakob

당신은 카운트 수 1 바이트 각이 아닌 3 등
ericw31415


5

GNU sed , 148144 + 1 = 145 바이트

-r플래그의 경우 +1 바이트

s/^/ 7# - C# D# E# F# G# A# B# \n65432101234567/
:
s/((.).(. - )((\S..){3})([^-]+)..\n)([0-7])/\1\2\7\3\6\2 \4\n/
s/ 0#/b0b/
t
s/^.//gm
s/0b/0 /

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

설명

먼저 다음과 같은 종류의 템플릿을 삽입하십시오.

 7# - C# D# E# F# G# A# B# 
65432101234567

첫 번째 줄의 선행 및 후행 공백에 유의하십시오.

루프에서 마지막 줄에서 첫 번째 숫자를 가져 와서 두 번째에서 마지막 줄의 일부로 바꾸십시오.

 7# - C# D# E# F# G# A# B# 
│ └┬─┘└───┬───┘└───┬────┘
2  3      4        6
│  │      └────────│──┐
├──│────────────┐  │  │
│  │      ┌─────│──┘  │
│ ┌┴─┐┌───┴────┐│ ┌───┴───┐
 6# - F# G# A# B  C# D# E# 

보다시피, 초기 공백 (캡처 2)은 뒤에 나오는 문자를 대체하는 데 사용됩니다 B.

이 때 0도달과 초기 공간을 대체 b. 루프는 계속되지만 #s를 공백 으로 바꾸는 대신 각 후속 줄에서 공백이로 바뀝니다 b.

마지막으로, 약간의 정리를 할 : 각 행에서 주인공을 제거하고 교체 0b와 함께 0.


4

비 펀지, 134 (132) 130 바이트

<v:,,," - ",g2+!!\`0::,+*86*-1*2`0::p00:<75
@>4*65*+81v>55+,$$\:00g0`!\9p3+7%\1-:8+#^_
 b#"A"%7:\_^#:-1,*84,g2*+1`0g00!!g9%7:\+1,+

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

설명

  • 우리는 외부 루프가 7에서 -7로 카운트 다운되는 것으로 시작합니다. 이것을 번호라고합니다.
  • 각 행에 대해 '0'+abs(row)(스케일 번호) 를 작성하여 시작한 다음 (row>0)+(row!=0)테이블에서 자연 스럽거나 선명하거나 평평한 지 조회하도록 계산 합니다 #b(세 번째 코드 행의 시작 부분에 표시됨).
  • 우리는 그 규모의 시작 노트를 계산, N 으로, 30 + row*4. 이것은 궁극적으로 모드 7이므로 반복 시퀀스 2,5,1,4,0,3,6 (즉 CFBEADG)으로 생각하십시오.
  • 내부 루프 그런 다음 i 는 스케일의 8 개 음표에 대해 8에서 1로 카운트 다운 하여 각 반복에서 n 을 증가시킵니다 .
  • 메모의 글자는 간단 'A' + n%7합니다. 날카 롭거나 평평한 지 여부 i%7는 테이블 을 조회하여 결정됩니다 . 첫 번째 스케일이 모두 선명하므로 테이블이 처음에 모두 참입니다.
  • 그러나 각 행이 출력 된 후 하나의 값을 토글하여 테이블을 업데이트합니다. 첫 번째 반복에서는 오프셋 5에서 값을 토글하지만 각 루프 오프셋은(offset+3)%7 .
  • 출력의 전반부에서 이 0보다 크면 이러한 테이블 값을 false로 전환합니다. 출력의 후반부에서 이 0보다 작거나 같으면 다시 true로 설정합니다.

1
Befunge에서는 실제로 골프 만 할 수 있습니다.
Zacharý

3

풍선 껌 , 107 바이트

풍선 껌 임계 값

00000000: 4dca a90d 0301 1443 41ee 2a9e f4b1 a5ec  M......CA.*.....
00000010: 8d73 f7e1 fe8b 48a0 e968 aec1 3c87 d7f0  .s....H..h..<...
00000020: 1e3e c377 b80f 8ff9 a3ce c165 74d4 31b8  .>.w.......et.1.
00000030: 8c8a da07 1751 4fdb e022 ea69 1d5c 443d  .....QO..".i.\D=
00000040: 2d83 8ba8 a71b b888 7a5a 828b 524f 6b70  -.......zZ..ROkp
00000050: 51fa 690b 2e4b 47ed c165 e9a8 23b8 2c1d  Q.i..KG..e..#.,.
00000060: 7506 97a5 a3ae e0b2 74d4 0f              u.......t..

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


3

자바 스크립트 (ES6) 130 124 바이트

또는 128 121 바이트 선도적 인 개행.

f=(y=14,x=8)=>x?f(y,x-1)+' '+'BCDEFGA'[(y*3+x)%7]+'# b'[(x*5%7+y)/7|0]:(y?f(y-1)+`
`:'')+`${y<7?7-y+'#':y>7?y-7+'b':'0 '} -`

O.innerText = f()
<pre id=O style="font-size:11px"></pre>


3

C,  212   189   186  185 바이트

바이트를 저장해 준 @Jonathan Frech에게 감사합니다!

#define N n>0?35:98:32);
f(i,n){for(n=8;--n+8;puts(""))for(i=-1,printf("%d%c -",abs(n),n?N++i<8;)printf(" %c%c",(n*4+65+i)%7+65,"\377\277\273\233\231\211\10\0@Ddfv\367\377"[n+7]&1<<i?N}

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

풀림 :

#define N n>0 ? 35 : 98 : 32);
f(i, n)
{
    for (n=8; --n+8; puts(""))
        for (i=-1, printf("%d%c -", abs(n), n?N ++i<8;)
            printf(" %c%c",
                (n*4+65+i)%7 + 65,
                "\377\277\273\233\231\211\10\0@Ddfv\367\377"[n+7] & 1<<i ? N
}

>-일 수 있습니다 +.
Jonathan Frech

@JonathanFrech 감사합니다!
Steadybox

제안 i=~!printf대신 i=-1,printf하고 \b대신\10
ceilingcat

2

젤리 ,  57 56 55  54 바이트

-1 바이트 덕분 EriktheOutgolfer (사용을 7ŒR대체하는 -7r7)

_Ṃị“ b#”
=”B+\Çż
×3⁵+€ịØAḣ7¤ḊḊÇ€Z
7ŒRµṠÑżAW€żÇj€”-UK€Y

원하는 출력을 인쇄 전체 프로그램 (하여 #, b).

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

방법?

_Ṃị“ b#” - Link 1, getSharpsFlatsOrSpaces: list of integers
 Ṃ       - minimum (of the input list)
_        - subtract (from the input list) -- for our purposes this resets whatever our
         -       1st value is to 0, since our inputs are always monotonically increasing
   “ b#” - literal list of characters = [' ', 'b', '#']
  ị      - index into (1-based and modular)

=”B+\Çż - Link 2, addSharpsFlatsOrSpaces: list of characters  e.g."CFBEADGCFBEADGC"
 ”B     - literal character 'B'
=       - equals? (vectorises)                      [0,0,1,0,0,0,0,0,0,1,0,0,0,0,0]
    \   - cumulative reduce with:
   +    -   addition                                [0,0,1,1,1,1,1,1,1,2,2,2,2,2,2]
     Ç  - call the last link (1) as a monad                       "##       bbbbbb"
      ż - zip (with input) ["#C","#F"," B"," E",...," F","bB","bE","bA","bD","bG","bC"]

×3⁵+€ịØAḣ7¤ḊḊÇ€Z - link 3, getNoteLetters: list of integers          e.g. [-7,-6,...,6,7]
×3               - multiply by three       [-21,-18,-15,-12,-9,-6,-3,0,3,6,9,12,15,18,21]
  ⁵              - literal ten                                                         10
   +€            - add for €ach (in [1,10])   [[-20,...,22],[-19,...,23],...,[-11,...31]]
          ¤      - nilad followed by link(s) as a nilad:
      ØA         -   yield uppercase alphabet                "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        ḣ7       -   head to index seven                                        "ABCDEFG"
     ị           - index into ["ADGCFBEADGCFBEA","BEADGCFBEADGCFB","CFBEADGCFBEADGC",...]
           Ḋ     - dequeue    ["BEADGCFBEADGCFB","CFBEADGCFBEADGC","DGCFBEADGCFBEAD",...]
            Ḋ    - dequeue    ["CFBEADGCFBEADGC","DGCFBEADGCFBEAD","EADGCFBEADGCFBE",...]
             Ç€  - call the last link(2) as a monad for €ach
                 -    [[["#C","#F"," B"," E",...," F","bB","bE","bA","bD","bG","bC"],...]
               Z - transpose           [["#C","#D",...,"#C"],["#F",..." B",...,"#F"],...]

7ŒRµṠÑżAW€żÇj€”-UK€Y - Main link: no arguments
7ŒR                  - absolute range of seven     [-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7]
   µ                 - start a new monadic chain (call that r)
    Ṡ                - sign (of r)                 [-1,-1,-1,-1,-1,-1,-1,0,1,1,1,1,1,1,1]
     Ñ               - call the next link (1) as a monad                "####### bbbbbbb"
       A             - absolute value (of r)              [7,6,5,4,3,2,1,0,1,2,3,4,5,6,7]
      ż              - zip                      [[7,'#'],[6,'#'],...,[0,' '],...,[7,'b']]
        W€           - wrap €ach        [[[7,'#']],[[6,'#']],...,[[0,' ']],...,[[7,'b']]]
           Ç         - call the last link (3) as a monad (with r)      see link 3 example
          ż          - zip                     [[[['#',7]],["#C","#D",...,"#C"]],
                                                [[['#',6]],["#F",...," B",..."#F"]], ...]
              ”-     - literal character '-'
            j€       - join for €ach            [[['#',7],'-',"#C","#D",..."#C"],
                                                 [['#',6],'-',"#F",...," B",..."#F"],...]
                U    - upend (reverse each)     [[[7,'#'],'-',"C#","D#",..."C#"],
                                                 [[6,'#'],'-',"F#",...,"B ",..."F#"],...]
                 K€  - join €ach with spaces            [[7+"# - C# D# ... C#"],
                                                         [6+"# - F# ... B  ... F#"], ...]
                   Y - join with newlines
                     - implicit print to STDOUT

1
나는 이것을 위해 젤리를 믿었다.
아웃 골퍼 Erik 14


0

자바 8, 255 바이트

♯ 및 ♭을 각각 1 바이트로 계산합니다.

v->{String r="",t="GABCDEF";for(int i=-8;++i<8;r+="\n"){r+=(i<0?-i+"♯":i>0?i+"♭":"0 ")+" - ";for(String c:((t=t.substring(3)+t.substring(0,3))+t.charAt(0)).split(""))r+=c+("BEADGCF".substring(i<0?7+i:i).contains(c)?i<0?"♯":" ":i>0?"♭":" ")+" ";}return r;}

설명:

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

v->{                   // Method with empty unused parameter and String return-type
  String r="",         //  Result-String, starting empty
         t="GABCDEF";  //  Temp-String `t`, starting at "GABCDEF"
  for(int i=-8;++i<8;  //  Loop from -7 to 7 (inclusive); range (-8;8) == [-7;7]
      r+="\n"){        //    After every iteration: append the result with a new-line
    r+=                //   Append the result-String with:
       (i<0?           //    If `i` is negative:
         -i+"♯"        //     Append the absolute value of `i` + a literal "♯"
        :i>0?          //    Else-if `i` is positive:
         i+"♭"         //     Append `i` + a literal "♭"
        :              //    Else (`i` is 0):
         "0 ")         //     Append a literal "0" + space
     +" - ";           //   And then append a literal " - "
  for(String c:((t=t.substring(3)+t.substring(0,3))
                       //  Split String `t` in the middle,
                       //  and swap the two parts (i.e. "GABCDEF" becomes "CDEFGAB")
                +t.charAt(0))
                       //  Then append the first character
                .split(""))
                       //  And loop over each character:
     r+=c+             //   Append the result-String with this character, plus:
          ("BEADGCF".substring(i<0?
                       //    If `i` is negative
            7+i        //     Take the last `-i` characters of "BEAFGCF"
           :           //    Else (`i` is 0 or positive)
            i)         //     Take the last `7-i` characters of "BEAFGCF"
          .contains(c)?//    And if these last characters contain the current character:
            i<0?       //     And `i` is negative:
             "♯"       //      Append a literal "♯"
            :          //     Else (`i` is 0 or positive)
             " "       //      Append a space
          :i>0?        //    Else-if `i` is positive
            "♭"        //     Append a literal "♭"
          :            //    Else:
           " ")        //     Append a space
      +" ";}           //   And then append a space
  return r;}           //  Return the result-String
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.