To zadanie jest proste: Napisz program lub funkcję, która wyświetli listę wszystkich nut (używając angielskich nazw nut) od A ♭ do G♯.
Wszystkie nuty bez nazwy składającej się z jednej litery (tj. Czarne nuty na klawiaturze muzycznej) powinny mieć wydrukowane dwa razy swoje imię, raz jako nuta nuty, raz jako płaska jednej. Ostre lub płaskie nuty, które można opisać pojedynczą literą, takie jak B♯ (C) lub F ♭ (E), nie powinny być wyprowadzane.
Oto przykład wyniku:
Ab, A, A#, Bb, B, C, C#, Db, D, D#, Eb, E, F, F#, Gb, G, G#
Dane techniczne
Program lub funkcja nie może przyjmować żadnych danych wejściowych.
Notatki mogą być drukowane w dowolnej kolejności i na dowolnej liście wyników dozwolonej przez nasze standardowe reguły We / Wy
Ostre i płaskie symbole Unicode (♯ / ♭) mogą być zastąpione przez
b
i#
Jak zawsze, standardowe luki są zabronione.
Ponieważ jest to kod-golf , wygrywa najmniejszy program w bajtach.
źródło
"C "
zamiast"C"
?Odpowiedzi:
Malbolge ,
482370353 bajtówR1: Usunięto przecinki między nimi (jak nie jest wymagane przez wyzwanie)
R2: Ogol kilka bajtów
Wypróbuj online!
źródło
Zespół CP-1610 ( Intellivision ), 31 DECLE 1 = 39 bajtów
Procedura pobierania wskaźnika wyjściowego w R4 i zapisywania tam nut, oddzielonych spacjami. W przykładowym kodzie piszemy bezpośrednio na ekranie.
Zrzut szesnastkowy (tylko rutyna)
Pełne źródło
Wydajność
zrzut ekranu z jzIntv
1. Kod operacyjny CP-1610 jest kodowany za pomocą 10-bitowej wartości, zwanej „DECLE”. Ta procedura ma 31 DECLEs długości, zaczynając od 4820 $, a kończąc na 483E $ (w zestawie).
źródło
Python 3 , 50 bajtów
Wypróbuj online!
Python 2: 48 bajtów
Ten kod można dostosować tak, aby zawierał B # i Cb, bez dodatkowych bajtów. Można to osiągnąć poprzez zastąpienie
5
z6
.Dodatkowo jest (w końcu) krótszy niż zwykły ciąg znaków:
Python 3 , 51 bajtów
Wypróbuj online!
Python 2: 50 bajtów
źródło
05AB1E ,
161513 bajtów-2 bajty dzięki @maxb .
Wypróbuj online.
Wyjście w postaci listy, w której nuty jednoznakowe mają spację końcową.
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak kompresować duże liczby całkowite? ), Aby zrozumieć, dlaczego tak
Ž7×
jest1999
.Ž7×
alternatywnie może być₄·<
(1000, podwójnie, zmniejsz o 1) dla tej samej liczby bajtów.źródło
7£
naprawdę konieczne? Bez niego działa dobrze.Galaretka , 18? * 20 bajtów
Monadyczny link zwracający listę list znaków.
* Jeśli mieszana lista (a) list znaków i (b) znaków jest dopuszczalna, usuń końcowe
W€
18.Wypróbuj online!
W jaki sposób?
źródło
bytes
w nagłówku.Retina 0.8.2 , 33 bajty
Wypróbuj online! Wyjaśnienie:
Wstaw nazwy nuty bazowej.
Rozwiń każdą notatkę, aby uwzględnić wersje płaskie i ostre.
Usuń
B#
,E#
a także notatki po nich (Cb
iEb
).źródło
Perl 6 , 41 bajtów
Wypróbuj online!
Prosty iloczyn banknotów i ostrych narzędzi / płaskich, a następnie usunięcie dodatkowych nieważnych nut. To anonimowy blok kodu, który tworzy ciąg znaków:
źródło
R , 50 bajtów
Wypróbuj online!
Nudna odpowiedź.
R , 60 bajtów
Wypróbuj online!
źródło
Cb
iE#
.Węgiel drzewny , 21 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
Japt ,
2322 bajtówSpróbuj
źródło
<6
ale jest<5
w wyjaśnieniu.dzaima / APL REPL,
382825 bajtówWypróbuj online!
źródło
⎕←
.{}
LOL.Stax ,
1715 bajtówUruchom i debuguj
Program bonusowy: wydrukuj fantazyjne symbole
źródło
Rubinowy , 43 bajty
Wypróbuj online!
Przy takim zakresie
0..20
wydrukowałby tablicę zawierającą wszystkie mieszkania, wszystkie zwierzęta naturalne i wszystkie ostre przedmioty. NiepożądaneFb Cb E# B#
są pomijane przy użyciu zakresu2..18
Notatki są drukowane uporządkowane zgodnie z https://en.wikipedia.org/wiki/Circle_of_fifths , czyli innymi słowy, rosnąc o 7 półtonów (stosunek częstotliwości prawie dokładnie 1,5) za każdym razem.
Prowadzi to do podanej kolejności liter banknotów, w której każda nuta jest o pięć stopni włącznie (znana jako „piąta”) powyżej poprzedniej. Na przykład
F->C
jestFGABC
źródło
pieprzenie mózgu , 106 bajtów
Wypróbuj online!
Wysyła każdą nutę oddzieloną znakami powrotu karetki.
źródło
Zsh , 36 bajtów
Brzydsze rozwiązanie, ale oszczędza dwie postacie.
(F)
dołącza do listy w nowej linii i//[BE]#???
usuwa potrzebne nam fragmenty ciągu.Wypróbuj online!
Zsh , 38 bajtów
Zawsze lubię, gdy Zsh pokonuje Perla (mam nadzieję, że nie odezwę się zbyt wcześnie ...).
Wypróbuj online!
źródło
Galaretka , 21 bajtów
Wypróbuj online!
źródło
Brachylog , 36 bajtów
Wypróbuj online!
Obecnie jestem w trakcie brutalnego wymuszania indeksu powerset, który pozwoliłby mi się pozbyć
⟨h₅ct₁₄⟩⟨h₁₂ct₅⟩
(i przez rozszerzenie↺
, ponieważ dane wyjściowe nie muszą być w tej samej kolejności co przykładowe dane wyjściowe), ale zajmuje to całkiem sporo podczas gdy ... może powinienem poświęcić chwilę, aby faktycznie ustalić, w jakiej kolejności generowane są listy podrzędne, i obliczyć indeks w ten sposób ...źródło
Płótno , 23 bajty
Wypróbuj tutaj!
22 bajty z dodatkowymi znakami nowego wyjścia
źródło
PHP , 65 bajtów
Tworzy listę z pętlą. Elementy są oddzielane za
_
pomocą separatora końcowego.Wypróbuj online!
PHP , 43 bajty
PHP wypisuje wszystko, co jest, gdy nie ma go w środku,
<?php
i?>
tagi.Wypróbuj online!
źródło
Pyth ,
2321 bajtówWypróbuj online!
Edycja: Częściowe przepisanie w celu zapisania 2 bajtów, poprzednia wersja:
s%2c*<r1G7"b #"xLG"fhoq
Wypróbuj online!źródło
Commodore C64 / TheC64 Mini (prawdopodobnie inne 8-bitowe warianty BASIC Commodore) - 52 tokenizowane bajty BASIC
Naciśnięcie
CTRL
klawisza plusN
na klawiaturze C64 powoduje przejście do „trybu biznesowego” zestawu znaków dla wielkich / małych liter. Możemy wydrukować to w ciągu jednego bajta / tokena; a ponieważ mamy 40 kolumn, przestrzeń od G do G # nie jest wymagana.W tym przypadku nie musimy zamykać łańcucha, ponieważ nie jest to linia z wieloma instrukcjami z
:
separatorem.Jak to wygląda na ekranie Commodore C64 (i kompatybilnych) pokazano poniżej.
źródło
Beczka , 43 bajty
Ciąg skompresowany.
TIO
źródło
APL (Dyalog Unicode) , 45 bajtów
Wypróbuj online!
Prosta
⎕R
operacja eplace, poprzedzająca,
każdy element w łańcuchu, który pasuje do każdej litery w⎕A
alfabecie, a następnie upuszcza pierwsze 2 znaki, które są,
.źródło
Brainfuck, 214 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 84 bajtów
Wypróbuj online!
Samo zwrócenie ciągu (jak pokazano poniżej) byłoby krótsze o 36 bajtów, ale gdzie w tym jest zabawa?
źródło
pieprzenie mózgu ,
255115 bajtówWypróbuj online!
źródło
All notes without a name consisting of a single letter (i.e. black notes on a musical keyboard) should have their name printed twice, once as the sharp of a note, once as the flat of one. Sharp or flat notes that can be described with a single letter, like B♯ (C) or F♭ (E) should not be outputted.
Wydaje mi się to dość jasne i nie widzę historii edycji w OP na moim ekranie.Bash 5 , 42 bajty
Wydajność:
źródło
Perl 5 ,
4741 bajtówWypróbuj online!
źródło
T-SQL, 124 bajty
Podziały linii służą wyłącznie do wyświetlania.
Dłuższa, ale o wiele bardziej interesująca niż wersja trywialna (50 bajtów) :
źródło
Z80Golf ,
3129 bajtówWypróbuj online!
Objaśnienie :
Z80Golf to prosta fantazja oparta na 8-bitowym procesorze Z80. Program jest ładowany w miejscu pamięci
0x0000
, a reszta pamięci jest wypełniona zerami. Wyjście odbywa się przez wywołanie0x8000
, które wyświetli wartość rejestru A jako znak.Program rozpoczyna się od danych, które będą przetwarzane, łącznie 6 bajtów. Każda para bajtów określa sufiks nuty i maskę bitów kontrolującą, które litery można łączyć z tą nutą. Aby zapisać bajty, znak sufiksu jest odwrócony (
xor 0xff
) - pozwala to na wykonanie danych jako instrukcji z niewielkimi efektami ubocznymi, umożliwiając usunięcie przeskoku, który pomija te dane:W ten sposób procesor dekoduje to:
Te dane są odczytywane dwa bajty na raz do pary rejestrów DE. Wskaźnik stosu służy do wskazywania następnego elementu. Zaczyna się od 0, a ponieważ Z80 używa pełnego, malejącego stosu, każdy pop odczyta następną parę danych - wszystkie operacje na stosie są 16-bitowe.
Pętla zewnętrzna jest implementowana z licznikiem malejącym w rejestrze B, dla którego Z80 zapewnia specjalne wsparcie w postaci
djnz
instrukcji:Aktualny list znajduje się w rejestrze A. Ponieważ przyrost dobrze pasuje na początku pętli, ładujemy o jeden mniej niż faktyczna wartość początkowa
A
:źródło