Challenges

# The Camelot Wheel

+3
−0

Given a musical key, output its number and letter on the Camelot Wheel (shown below).

# Input

A musical key as a string, as shown on the wheel. The words "Sharp" and "Flat" may be replaced with symbols (such as "#" and "b") if you wish.

# Output

The number and letter, either as a string, tuple, or array.

Examples:

Input->Output
"E Major" -> "12B"
"F-Sharp Minor" -> "11A"
"Bb Minor" -> "3A"


This is code-golf.

Why does this post require moderator attention?
Why should this post be closed?

This is suprisingly hard to compress well. Razetime‭ 4 months ago

I know it's not directly related to the challenge, but reading the phrase "D-Flat Minor" gave me an aneurysm. (D-Flat Minor has 6 flats and a double flat, C# minor is just 4 sharps, way easier to work with) DJMcMayhem‭ 4 months ago

+3
−0

# Python 3, 101, 98, 94 bytes

lambda s:f"{(('FCGDAEB'.index(s[0])-~-ord(s[5])*('-'in s)-3*('i'in s)-6)%12)+1}"+'BA'['i'in s]


Try it online!

def f(s):
n="FCGDAEB".index(s[0])-6
if '-' in s:
n -= ord(s[5]-1)
if 'i' in s:
n -= 3

return f"{(n%12)+1}"+'BA'['i'in s]


# Python 3.9, 95, 91 bytes:

lambda s:f"{(('FCGDAEB'.index(s[0])-~-ord(s[5])*('-'in s)-3*(m:='i'in s)-6)%12)+1}"+'BA'[m]


Isn't the walrus operator great?

Why does this post require moderator attention?

#### 1 comment

+1 for the walrus operator Quintec‭ 3 months ago

+1
−0

# APL (Dyalog Unicode), 110 67 bytes

{(⍕((f⊖⍪'AEBFCGDAEBFD'),r⌽12↑¯6↑5⍴'-')⍳2↑⍵),⎕a⌷⍨1+0≠f←¯3+r←3×'i'∊⍵}


-43 bytes from dzaima.

Requires input exactly as shown in the diagram.

A bit fiddly with the compression, but works correctly.

In both circles, the notes come in the form AEBFCGDAEBFD, so it is rotated as per the level it identifies with.

The hyphens in each note's description also come in the same format(----- ), so that is rotated as per requirement as well.

Based on the above data, we can find the number of the note.

If it's a Major note, then we append a B. Otherwise A.

Why does this post require moderator attention?

#### 1 comment

67 by mostly not changing the algorithm (except using DJ's trick with checking for minor with 'i'∊) dzaima‭ 3 months ago

Featured
Hot Posts
Challenges — Cumulative Counts

This community is part of the Codidact network. We have other communities too — take a look!