给我打印一个秤


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
我不敢相信还没有赋格答案!
leo

输出格式有多严格?我们可以输出一系列线吗?每个元素都是单个音符或字符的二维数组怎么样?
毛茸茸的

@Shaggy我不知道Kolmogorov复杂性问题的标准是什么,所以我不会。
ericw31415

3
:代码元素中的等宽字体太多了
Chiel 10 Brinke

Answers:


8

木炭66 65字节(如果使用#和b)

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

在线尝试!链接是详细版本的代码。说明:

↑⮌…0¦8‖O

打印字符07反转,然后重叠显示。列表通常向下打印,因此向上打印实际上向右打印;最后将所有内容旋转到位。

⸿×⁷♭M→×⁷♯

开始新的一行,并打印7单位和7尖锐之间的差距。

→⸿⸿¹⁵

留空行并打印15 -s。

FE⁸﹪⊕⊗ι⁷«

取数字0到7,将它们加倍,加1,然后减少模7。将结果循环。

⸿⸿✂׳FCGDAEBι⁺¹⁵ι

留一个空白行,然后从当前值开始,将一式三份的笔记字符串分成15个字符。

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

在下一行中,将15个字符的公寓,空格和利器切片,每个重复7次。

»⟲

打印完所有注释后,将所有内容旋转到位。


你可以统计为1个字节每个而不是3
ericw31415

这是天才,我无法与这种解决方案竞争。
查理

6

红宝石,113个字节(131 126 108 105#和b)

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

在线尝试!

Ruby,116个字节(带有#和b的108个字节)

在线尝试!

Ruby,126个字节(带有#和b的118个字节)

在线尝试!

Ruby,带#和b的131个字节

在线尝试!


您需要打印Unicode的尖角和扁平字符,因为Ruby支持它们。
雅各布

我认为您应该切换到124字​​节的解决方案。这里的指标是字节,而不是字符!
雅各布

你可以统计为1个字节每个而不是3
ericw31415

6

Python 3,135字节

将♯和♭分别计为1个字节

感谢Zacharý -6个字节。

for i in range(15):k=' ♯♭'[(i<7)-(i>7)]+' -';print(str(i-7)[-1]+k,*[v+k[a+8>i>a]for a,v in zip([1,3,5,0,2,4,6,1],('CDEFGAB'*8)[i*3:])])

在线尝试!


5

GNU sed的148 144 + 1 = 145个字节

+1字节的-r标志。

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

最后,进行一些清理:从每行中删除前导字符并替换0b0


4

Befunge,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。最终它将是mod 7,因此可以将其视为重复序列2、5、1、4、0、3、6(即CFBEADG)。
  • 然后,我们的内部循环i,针对音阶中的八个音符,从8递减至1,在每次迭代中递增n
  • 便笺的字母很简单'A' + n%7。它是锐利的还是平坦的,是通过i%7在表中查找来确定的。该表最初是正确的,因为第一个音阶是锐利的。
  • 但是,在输出每一行之后,我们通过切换一个值来更新表。在第一个迭代中,我们将在偏移量5处切换值,但在每个循环中,偏移量均由调整(offset+3)%7
  • 在输出的前半部分,当大于零时,我们将这些表值切换为false。在输出的后半部分,当该小于或等于零时,我们将它们设置回true。

1
您实际上只能在Befunge打高尔夫球。
扎卡里

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

的JavaScript(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
}

>-可以+
乔纳森·弗雷希

@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 the Outgolfer)'17


0

Java 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.