Diese Aufgabe ist einfach: Schreiben Sie ein Programm oder eine Funktion, die die Liste aller Noten (unter Verwendung englischer Notennamen) von A ♭ bis G♯ ausgibt.
Bei allen Noten ohne Namen, die aus einem einzelnen Buchstaben bestehen (dh schwarzen Noten auf einer Musiktastatur), sollte der Name zweimal gedruckt werden, einmal als Schärfe einer Note, einmal als Ebene einer Note. Scharfe oder flache Noten, die mit einem Buchstaben wie B♯ (C) oder F F (E) beschrieben werden können, sollten nicht ausgegeben werden.
Hier ist ein Beispiel für die Ausgabe:
Ab, A, A#, Bb, B, C, C#, Db, D, D#, Eb, E, F, F#, Gb, G, G#
Spezifikationen
Das Programm oder die Funktion darf keine Eingabe annehmen.
Die Notizen können in beliebiger Reihenfolge und in einer Liste gedruckt werden, die nach unseren Standard-E / A-Regeln zulässig ist
Die scharfen und flachen Unicode-Symbole (♯ / ♭) können durch
b
und ersetzt werden#
Standardlücken sind wie immer verboten.
Da es sich um Code-Golf , das kleinste Programm, in Bytes, gewinnt.
quelle
"C "
statt"C"
?Antworten:
Malbolge ,
482370353 BytesR1: Entfernte Kommas dazwischen (wie von der Challenge nicht benötigt)
R2: Rasiere ein paar Bytes ab
Probieren Sie es online!
quelle
CP-1610- Baugruppe ( Intellivision ), 31 DECLEs 1 = 39 Byte
Eine Routine, die einen Ausgabezeiger in R4 nimmt und die Notizen dort durch Leerzeichen getrennt schreibt. Im Beispielcode schreiben wir direkt auf den Bildschirm.
Hex-Dump (nur Routine)
Volle Quelle
Ausgabe
Screenshot von jzIntv
1. Ein CP-1610-Opcode wird mit einem 10-Bit-Wert codiert, der als "DECLE" bezeichnet wird. Diese Routine ist 31 DECLE lang und beginnt bei 4820 US-Dollar und endet bei 483 US-Dollar (im Lieferumfang enthalten).
quelle
Python 3 , 50 Bytes
Probieren Sie es online!
Python 2: 48 Bytes
Dieser Code kann so angepasst werden, dass er B # und Cb enthält, ohne dass zusätzliche Bytes anfallen. Dies kann durch Ersetzen
5
durch erreicht werden6
.Außerdem ist es (endlich) kürzer als nur die einfache Zeichenfolge auszugeben:
Python 3 , 51 Bytes
Probieren Sie es online!
Python 2: 50 Bytes
quelle
05AB1E ,
161513 Bytes-2 Bytes dank @maxb .
Probieren Sie es online aus.
Ausgabe als Liste, wobei die einzelnen Zeichen mit einem Leerzeichen am Ende versehen sind.
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E (Abschnitt Wie komprimiere ich große ganze Zahlen? ) An, um zu verstehen, warum dies so
Ž7×
ist1999
.Ž7×
könnte alternativ₄·<
(1000, doppelt, um 1 verringert) für die gleiche Byteanzahl sein.quelle
7£
wirklich nötig? Scheint ohne gut zu laufen.Jelly , 18 × 20 Bytes
Ein monadischer Link, der eine Liste von Zeichenlisten zurückgibt.
* Wenn eine gemischte Liste von (a) Zeichenlisten und (b) Zeichen akzeptabel ist, entfernen Sie das Nachstellen
W€
für 18.Probieren Sie es online!
Wie?
quelle
bytes
in der Kopfzeile.Retina 0.8.2 , 33 Bytes
Probieren Sie es online! Erläuterung:
Fügen Sie die Basisnotennamen ein.
Erweitern Sie jede Note um flache und scharfe Versionen.
Löschen
B#
,E#
und auch die Noten nach ihnen (Cb
undEb
).quelle
Perl 6 , 41 Bytes
Probieren Sie es online!
Einfaches Kreuzprodukt der Noten und der Scharfen / Flächen, gefolgt vom Entfernen der zusätzlichen ungültigen Noten. Dies ist ein anonymer Codeblock, der die Zeichenfolge erzeugt:
quelle
R , 50 Bytes
Probieren Sie es online!
Langweilige Antwort.
R , 60 Bytes
Probieren Sie es online!
quelle
Cb
und ausE#
.Holzkohle , 21 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Japt ,
2322 BytesVersuch es
quelle
<6
aber es ist<5
in der Erklärung.dzaima / APL REPL,
382825 BytesProbieren Sie es online!
quelle
⎕←
.{}
LOL zu zählen .Stax ,
1715 BytesFühren Sie es aus und debuggen Sie es
Bonusprogramm: Drucken Sie die ausgefallenen Symbole aus
quelle
Ruby , 43 Bytes
Probieren Sie es online!
Mit diesem Bereich
0..20
würde ein Array gedruckt, das alle Ebenen, alle natürlichen Elemente und alle scharfen Elemente enthält. Die unerwünschtenFb Cb E# B#
werden durch die Verwendung des Bereichs weggelassen2..18
Die Noten werden in der Reihenfolge https://en.wikipedia.org/wiki/Circle_of_fifths ausgedruckt, dh jeweils um 7 Halbtöne aufsteigend (ein Frequenzverhältnis von fast genau 1,5).
Dies führt zu der angegebenen Reihenfolge der Notenbuchstaben, in der jede Note fünf Grad (als "fünfte" bezeichnet) über der vorherigen Note liegt. Zum Beispiel
F->C
istFGABC
quelle
Brainfuck , 106 Bytes
Probieren Sie es online!
Gibt jede Note getrennt durch Wagenrücklauf aus.
quelle
Zsh , 36 Bytes
Eine hässlichere Lösung, die jedoch zwei Zeichen speichert.
(F)
Verbindet eine Liste mit Zeilenumbrüchen und//[BE]#???
entfernt die Teile der Zeichenfolge, die wir benötigen.Probieren Sie es online!
Zsh , 38 Bytes
Ich genieße es immer, wenn Zsh Perl schlägt (hoffentlich spreche ich nicht zu früh ...).
Probieren Sie es online!
quelle
Jelly , 21 Bytes
Probieren Sie es online!
quelle
Brachylog , 36 Bytes
Probieren Sie es online!
Ich bin gerade dabei, den Powerset-Index zu erzwingen, der es mir ermöglichen würde, ihn zu entfernen
⟨h₅ct₁₄⟩⟨h₁₂ct₅⟩
(und zwar↺
, da die Ausgabe nicht in der gleichen Reihenfolge wie die Beispielausgabe erfolgen muss), aber es dauert ziemlich lange während ... vielleicht sollte ich eine Minute beiseite legen, um herauszufinden, in welcher Reihenfolge Unterlisten generiert werden, und den Index auf diese Weise berechnen ...quelle
Canvas , 23 Byte
Probieren Sie es hier aus!
22 Bytes mit zusätzlichen Zeilenumbrüchen in der Ausgabe
quelle
PHP , 65 Bytes
Erstellt die Liste mit einer Schleife. Elemente werden durch
_
ein nachstehendes Trennzeichen getrennt.Probieren Sie es online!
PHP , 43 Bytes
PHP gibt alles so aus, wie es ist, wenn es nicht in
<?php
und?>
Tags ist.Probieren Sie es online!
quelle
Pyth ,
2321 BytesProbieren Sie es online!
Bearbeiten: Teilweises Umschreiben, um 2 Bytes zu sparen, Vorgängerversion:
s%2c*<r1G7"b #"xLG"fhoq
Online ausprobieren!quelle
Commodore C64 / TheC64 Mini (wahrscheinlich andere Commodore 8-Bit-BASIC-Varianten) - 52 tokenisierte BASIC-Bytes
Durch Drücken der
CTRL
Plus-TasteN
auf der C64-Tastatur wird der Zeichensatz für Groß- / Kleinschreibung in den Geschäftsmodus versetzt. Wir können dies in einer Zeichenfolge in einem Byte / Token ausdrucken; und da wir 40 Spalten haben, ist der Raum von G zu G # nicht erforderlich.In diesem Fall muss die Zeichenfolge nicht geschlossen werden, da es sich nicht um eine Zeile mit mehreren Anweisungen und einem
:
Trennzeichen handelt.Wie dies auf einem Commodore C64 (und kompatiblen) Bildschirm aussieht, wird unten gezeigt.
quelle
Fass , 43 Bytes
Die Zeichenfolge, komprimiert.
TIO
quelle
APL (Dyalog Unicode) , 45 Byte
Probieren Sie es online!
Einfache
⎕R
Eplace-Operation,,
bei der jedem Element in der Zeichenfolge, das mit jedem Buchstaben im Buchstaben⎕A
übereinstimmt, vorangestellt wird und die ersten beiden Zeichen gelöscht werden,
.quelle
Brainfuck, 214 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 84 Byte
Probieren Sie es online!
Nur die Zeichenfolge (wie unten gezeigt) zurückzugeben, wäre um 36 Byte kürzer, aber wo ist der Spaß dabei?
quelle
Brainfuck ,
255115 BytesProbieren Sie es online!
quelle
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.
Das scheint mir ziemlich klar zu sein und ich sehe keinen Bearbeitungsverlauf auf dem OP auf meinem Bildschirm.Bash 5 , 42 Bytes
Ausgabe:
quelle
Perl 5 ,
4741 BytesProbieren Sie es online!
quelle
T-SQL, 124 Bytes
Zeilenumbrüche dienen nur zu Anzeigezwecken.
Länger aber viel interessanter als die Trivialversion (50 Bytes) :
quelle
Z80Golf ,
3129 BytesProbieren Sie es online!
Erklärung :
Z80Golf ist nur eine einfache Fantasy-Maschine, die auf der 8-Bit-CPU Z80 basiert. Das Programm wird an der Speicherstelle geladen
0x0000
und der Rest des Speichers wird mit Nullen gefüllt. Die Ausgabe erfolgt durch einen Aufruf0x8000
, der den Wert von Register A als Zeichen ausgibt.Das Programm startet mit den zu verarbeitenden Daten, insgesamt 6 Bytes. Jedes Bytepaar gibt ein Notensuffix und eine Bitmaske an, die steuert, welcher der Buchstaben mit dieser Notiz kombiniert werden kann. Um Bytes zu sparen, wird das Suffix-Zeichen invertiert (
xor 0xff
). Dadurch können die Daten als Anweisungen mit geringen Nebenwirkungen ausgeführt werden, sodass ein Sprung entfernt werden kann, der diese Daten überspringt:So dekodiert die CPU das:
Diese Daten werden jeweils zwei Bytes in das DE-Registerpaar eingelesen. Der Stapelzeiger zeigt auf das nächste Element. Sie beginnt bei 0, und da der Z80 einen vollständigen, absteigenden Stapel verwendet, lesen alle Pops das nächste Datenpaar - alle Stapeloperationen sind 16-Bit-Operationen.
Die äußere Schleife ist mit einem Dekrementierungszähler im B-Register implementiert, für den der Z80 eine besondere Unterstützung in Form der
djnz
Anweisung bietet :Der aktuelle Buchstabe wird im A-Register gespeichert. Da das Inkrement am Anfang der Schleife gut passt, laden wir eines weniger als den tatsächlichen Startwert von
A
:quelle