Napisz program do gry w popularny angielski rymowanek.
(Ten plik objęty jest licencją Creative Commons Uznanie autorstwa-Na tych samych warunkach 3.0 Unported . Uznanie autorstwa: Helix84 z angielskiej Wikipedii ; Blahedo z angielskiej Wikipedii .)
Niektóre artykuły z Wikipedii, które mogą być przydatne:
- Twinkle Twinkle Little Star (zawiera klip audio, jak powinno brzmieć wyjście twojego programu)
- Współczesne symbole muzyczne (aby dowiedzieć się o notacji muzycznej używanej powyżej)
- Uwaga # Częstotliwość nut (herc) (wzór do obliczania częstotliwości każdej nuty)
Niektóre wytyczne dotyczące przesyłania:
Twój program musi korzystać z karty dźwiękowej komputera. Jeśli Twój język programowania nie ma wygodnego dostępu do sprzętu audio, Twój program musi utworzyć plik wyjściowy w jakimś standardowym formacie, takim jak WAV lub MIDI.
Twój program musi faktycznie wygenerować dane wyjściowe. Na przykład osadzanie pliku Ogg Vorbis z Wikipedii nie jest dozwolone.
Jakość dźwięku musi być akceptowalna. Przynajmniej piosenka powinna być łatwo rozpoznawalna. Najlepiej też powinien brzmieć dobrze.
Należy skoncentrować się na rozmiarze kodu, jakości dźwięku lub obu (wyjaśnij, który z nich zdecydowałeś). Świetne byłyby również eleganckie rozwiązania. Baw się dobrze!
To jest golf golfowy , więc wygrywa najkrótszy kod
Odpowiedzi:
QBasic (56)
Nacisk kładziony jest na wspomnienia :)
(Nie posiadaj QBasic, aby to przetestować)
źródło
JavaScript (
214212211 znaków)Otwórz Safari, Opera lub Google Chrome na JavaScript Shell , a następnie wprowadź poniższy kod:
Unminified dla czytelności (nawet wtedy może to być trudne do zrozumienia):
Z kilkoma innymi znakami może również działać w przeglądarce Firefox, ale możesz zmienić tę
audio/wav
część, aby przynajmniej zapisać plik WAV.źródło
open(...)
naAudio(...).play()
(8 dodatkowych znaków), aby mógł korzystać z działającego wbudowanego odtwarzacza audio Firefox.C # (długość: LOL)
Więc to, co zrobiłem tutaj, to wdrożenie obsługi generowania pliku .wav z łańcucha używanego dla rozwiązania QBasic w C # (pojedyncza oktawa, bez przypadkowych zdarzeń). Nacisk położono na:
unsafe
bloków koduźródło
FromDigits["LOL",36]==28101
To nie wygląda na LOL <sub> 36 </sub> bajtów ...Python (259)
źródło
import ttls
?C, 277 znaków
Perl, 203 znaków
Korzystnie, OSS 'S
/dev/dsp
domyślnie 8kHz Mono U8; wszystko, co tutaj robię, to otworzyć urządzenie i napisać obliczone próbki.źródło
j,f;main(i){char b[8000];f=open("/dev/dsp",1);for(i=24;i--;write(f,b,j))for(j=0;j<8000;j++)b[j]=(i%4&&j/400%20==9?1:1+sinf(j*powf(2,("@BDEGIG@BDEGBDEG@BDEGIG@"[i]-64)/12.)))*127;}
PowerShell: 207
Kod do gry w golfa:
Niegolfowany, z komentarzami:
Nie jest to najlepiej brzmiąca wersja piosenki, ale działa.
źródło
n{
zamiastn {
?C - 520
Guz.
Dlaczego warto korzystać ze sprzętu z ubiegłego wieku, takiego jak głośniki i słuchawki? Ten doskonały fragment kodu pozwala odtwarzać utwór na nowoczesnym sprzęcie: stacji dyskietek!
Bez specjalnych wymagań:
-lm
/dev/fd0
, więc zmień urządzenie lub uruchom jako administratorTrochę wygina reguły, ale rozważmy na chwilę napęd dyskietek jako urządzenie dźwiękowe, a kontroler IDE zintegrowaną kartę dźwiękową.
źródło
HyperCard 2.2 - 113
Sposób użycia: Uruchom HyperCard, wpisz ⌘M, aby otworzyć okno komunikatu, wklej powyższy kod i naciśnij enter.
harpsichord
można zastąpićflute
lub,boing
aby uzyskać inne dźwięki.źródło
harpsichord
->flute
-6 usuń odstęp między instrumentem a cytatami -1 łącznie -7C, 96 znaków
Generuje nieprzetworzone 8-bitowe niepodpisane dane audio mono w klasycznym stylu bajtebeat . Zalecane częstotliwości próbkowania dla odtwarzania wynoszą od 8 do 16 kHz; zmiana częstotliwości próbkowania zmienia tempo i wysokość.
Aby skompilować i grać w systemie Linux, zapisz powyższy kod jako
twinkle.c
i uruchom następujące polecenia:Kilka uwag na temat działania kodu:
Ogólną sztuczką stosowaną w przypadku takich kompozycji bajtebraza jest to, że
putchar()
przyjmuje wartość całkowitą, ale drukuje tylko osiem niskich jej bitów. Zatem,putchar(t)
gdziet
rośnie licznik, generuje falę piłokształtną, a częstotliwość fali można zmienić, mnożąct
ją przez odpowiednią wartość.!!(t>>9&7|!(-t>>12&7))
tworzy powtarzalny wzór nutowy 6 + 1. W szczególności!!(t>>9&7)
ocenia,0
kiedyt>>9 & 7 == 0
i gdzie1
indziej. W ten sposób generuje przerwę 512 próbek w przebiegu co 4096 próbek, a!(-t>>12&7)
eliminuje co ósmą taką przerwę.96+"#d|dOE3#dOE3dOE3"[t>>13&15]
generuje melodię: kod ASCII każdego znaku w łańcuchu plus 96 podaje względną częstotliwość odpowiedniej nuty. W rzeczywistości wartościami są przybliżone częstotliwości w Hz nut tonu koncertowego w 3 / małej oktawie, tj. Z A odpowiadającym 220. Jednak ponieważ ton podstawowy, z którym te wartości są zwielokrotnione, wynosi około 64 Hz (przy graniu przy 16 kHz lub 32 Hz przy częstotliwości 8 kHz), musimy zmniejszyć wynik o pięć oktaw,>>5
aby uzyskać częstotliwość z powrotem w rozsądnym zakresie.Ps. Jeśli chcesz wypróbować ten kod w JavaScript opartej bytebeat odtwarzacza, należy wymienić
[t>>13&15]
z.charCodeAt(t>>13&15)
.źródło
Pyton
317305301To jest moje rozwiązanie, używając tylko standardowych bibliotek Pythona:
A oto więcej białych znaków dla czytelności:
źródło
Mathematica, 86 znaków
źródło
Arduino, 688
Podłącz brzęczyk do wyjścia 11. Skoncentrowałem się głównie na jakości , ale także na długości kodu.
źródło
"ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc "
usunąć spację?int beats[] =
usunąć miejsce?for (long
usunąć miejsce?11, LOW
usunąć miejsce?note, int
usunąć miejsce?i], duration
usunąć miejsce?11, OUTPUT
usunąć miejsce?ffeeddc "
jest z pewnym opóźnieniem, którego nie potrzebujesz na końcu ibeats[] =
nie ma powodu, aby mieć miejsce. Powinieneś także stworzyć wersję koncentrującą się na długości kodu, tylko do cholery!bash + say + gunzip, 136 bajtów
say
jest oczywiście poleceniem zamiany tekstu na mowę w systemie OS X. To jest ... głupkowaty. Tak, chodźmy z Dorky.117 bajtów to oczywiście strumień gzip zawierający znaki niedrukowalne. Oto zrzut skryptu xxd zawierający te znaki:
Wyjaśnienie
117 bajtów to następujący skrypt spakowany:
Zgadza się, właśnie stworzyłem kilka różnych
say
głosów mówiących „o”. Aby dowiedzieć się, które z nich, napisałem skrypt za pomocą aubionotów, aby uzyskać szybką i brudną ocenę wysokości każdego głosu, a następnie wykonałem wiele prób i błędów, wyszukując te, które brzmią w większości poprawnie.Zastanawiałem się nad tym, aby spróbować zagrać w golfa ręcznie, ale jest tak wiele powtórzeń, że doszedłem do wniosku, że Zopfli wykona to krócej, więc wybrałem łatwą drogę.
źródło
SmileBASIC, 45 bajtów
źródło
PowerShell,
120117 bajtów[Console]::beep
, etykiety nutowe i częstotliwości inspirowane IsziGłówny pomysł :
A
,C
,D
,E
,F
,G
.double duration
.$_-band7
I) każdej noty zastosowań jako wskaźnik w tablicy częstotliwości (A->1
,C->3
,D->4
...)(0,110,0,65,73,82,87,98)[$_-band7]*4
zamiast Isziego(0,440,0,262,294,330,349,392)[$_-band7]
.[console]::Beep
nie jest najdokładniejszym instrumentem muzycznym, więc może nieco podrobić :)Objaśnienie : Dla każdego znaku z ciągu melodii
ccggaaGffeeddCggffeeDggffeeDccggaaGffeeddC
skrypt:[console]::beep
aby odtworzyć nutęźródło