首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计数节奏

计数节奏
EN

Code Golf用户
提问于 2022-05-30 01:56:03
回答 3查看 755关注 0票数 10

The叙述性

你是个糟糕的音乐家。你从不费心去学习如何计算节奏。为了弥补这个缺点,您决定编写一个程序,它将告诉您如何在任何给定的时间签名中计数。你仍然是一个糟糕的音乐家,但你至少可以假装你能数节奏。

The Objective

给定时间签名,输出所述时间签名的可能计数模式。

For那些不知道音乐术语的人:A 测量时间签名是一段音乐中的一组数字,它告诉你在一次音乐中有多少次节拍,哪一个音符长度是节拍。例如,一个3/4时间签名告诉您,每个度量都有3拍子,四分之一音符(4)是节拍。一个11/16 T.S.告诉你,在一种度量中有11十六音节拍(16)。数数3/4可以简单地算作"1 2 3"11/16可以算作"1 la li 2 e & a 3 e & a" (这比数到11更直观;我稍后会给它下定义)。重要的是要注意,几乎所有T.S的底部数都是2。“S是2的力量。对于这个挑战,我们将忽略不理性的T.S。‘S。我们也不会看T.S。’以大于16的节拍来衡量。”

生成计数模式的How:带有X/1X/2X/4的时间签名可以简单地用数字来计数(4/2可以算作"1 2 3 4")。使用X/8X/16的S更棘手一些。可以通过将节拍组合在一起形成更大的节拍来计算(6/8,尽管有6‘节拍’,但通常被视为有三重奏细分的2节拍)。在这个挑战中,拍子应该分组为 1**(**"1"**),** 2**(**"1 &"**),** 3**(**"1 la li"**),或者** 4**(**"1 e & a"**)**对于X/83组应该优先于2,但是如果可能的话,应该避免1。(对于7/8,尽管3+3+1优先考虑3's,3+2+2更好,因为它避免了1)对于X/163组应该优先于4,但是如果可能的话,应该避免21。(对11/16来说,尽管3+3+3+2优先考虑3的S,但3+4+4更好,因为它避免了2),重要的是要注意到,分组的顺序并不重要,即3+22+3都是5/8__的可接受分组。这在正常情况下是很重要的,但你是个糟糕的音乐家。还要注意的是,T.S.'s‘比1/8’大‘可以完全用2_S和3_’D59_‘来分类;T.S.’比5/16更大‘可以完全用3_和4_分类。

呼!真是一口!

的规格

You将以时间签名作为输入。可以在合理范围内格式化(使用常识!)。You将输出一个可接受的计数模式。这将是一串计数(1la&等)。被空格隔开。您的输出不应该包括前导或尾随空格。Test案例:澄清一下,“分子”是正整数,“分母”是1__、2__、4__、8__或16__。同样,请注意一些T.S.'s有多个有效的输出。

代码语言:javascript
复制
"Input", "Output"
"1/1", "1"
"3/2", "1 2 3"
"4/4", "1 2 3 4"
"1/8", "1"
"10/8", "1 la li 2 la li 3 & 4 &"
"2/16", "1 &"
"5/16", "1 la li 2 &"
"29/16", "1 la li 2 la li 3 la li 4 la li 5 la li 6 la li 7 la li 8 e & a 9 e & a"

"Input", "Invalid Output"
"6/4", "1 la li 2 la li"
"7/8", "1 la li 2 la li 3"
"10/8", "1 & 2 & 3 & 4 & 5 &"
"12/16", "1 e & a 2 e & a 3 e & a"

这是密码-高尔夫,所以以字节为单位的最短答案获胜!

EN

回答 3

Code Golf用户

回答已采纳

发布于 2022-05-30 19:00:56

果冻,46 字节数

代码语言:javascript
复制
Œṗi@€o⁸Ṁ;ṢƊɗÞ:5×6Œ?Ɗ}Ḣị““&“la li“e & a”˹Ƈ€K€K

接受节拍和音符长度并打印结果的完整程序。

在网上试试!

怎么做?

代码语言:javascript
复制
Œṗi@€o⁸Ṁ;ṢƊɗÞ:5×6Œ?Ɗ}Ḣị“...”˹Ƈ€K€K - Main Link: beats, B; note-length L
Œṗ                                  - all integer partitions of B
                    }               - using L:
                   Ɗ                -   last three links as a monad - f(L):
                                                             e.g. 1,2,4,8,16
             :5                     -     integer divide by 5  -> 0,0,0,1,3
               ×6                   -     multiply by six      -> 0,0,0,6,18
                 Œ?                 -     shortest permutation of [1..N] which has that
                                            lexicographic 1-based-index in a list of all
                                            permutaions of [1..N]
                                                               -> [],[],[],[3,2,1],[3,4,2,1]
                                                                  (our ordering)
            Þ                       - sort (the partitions) by:
           ɗ                        -   last three links as a dyad - f(Partition, Ordering)
    €                               -     for each (run-length, R) in the partition:
  i@                                -       first 1-indexed index of R in Ordering or 0
     o⁸                             -       logical OR with the Partition (vectorises)
                                              (replaces 0s with the larger, original Rs)
          Ɗ                         -       last three links as a monad - f(X):
       Ṁ                            -         maximum of X
         Ṣ                          -         sorted X
        ;                           -         concatenate
                     Ḣ              - head
                       “...”        - ["", "&", "la li", "e & a"]
                      ị             - index into
                            Ė       - enumerate (i.e. [A, B, ...] -> [[1,A],[2,B],...])
                               €    - for each:
                             ¹Ƈ     -   keep truthy (i.e. drop the "" entries)
                                K€  - join each with spaces
                                  K - join with spaces
                                    - implicit print
票数 4
EN

Code Golf用户

发布于 2022-05-30 22:56:45

木炭,70字节

代码语言:javascript
复制
NθNη⪫E⊟Φ…⟦Eθ¹E÷⁺²θ³⁻³‹ι﹪±θ³E÷θ³⁺³‹ι﹪θ³⟧⊕÷η⁸⁼θΣι⁺⊕κ§⪪“/^e)R⁼0⁷Vⅉ8⮌✳”,ι 

在网上试试!链接是详细的代码版本。解释:

代码语言:javascript
复制
NθNη

输入时间签名。

代码语言:javascript
复制
⟦Eθ¹E÷⁺²θ³⁻³‹ι﹪±θ³E÷θ³⁺³‹ι﹪θ³⟧

尝试创造三种拍子模式:所有的单一拍子,尽可能多的三组和其余的两组,尽可能多的三组和其余的四组。

代码语言:javascript
复制
…...⊕÷η⁸

根据分母的不同,只考虑前两种模式。

代码语言:javascript
复制
Φ...⁼θΣι

只保留那些实际上相当于整个酒吧的句型。(这防止了例如5/16试图使用三组和四组)。

代码语言:javascript
复制
⪫E⊟...⁺⊕κ§⪪...,ι 

取最后一个成功模式,用其节拍数和组后缀替换通过拆分压缩字符串e & a,, &, la li获得的组尾,最后用空格连接组。

票数 2
EN

Code Golf用户

发布于 2022-05-31 00:50:31

维沙尔,56字节

代码语言:javascript
复制
5<[ɾ|Ṅµ1k½d⁰LǔJ3Jvḟs;tṘ¨2›:£`e&a`fJ¥:\&"¥«cb|«"ṄWḣi;]fṄ₴

在网上试试!

05AB1E港相当慢。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/247985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档