To dość proste wyzwanie, ale nie mogłem znaleźć żadnego pytania, które byłoby do niego podobne. Wyzwanie polega na przyjęciu częstotliwości przy użyciu STDIN lub jej odpowiednika, a następnie wygenerowaniu tonu pasującego do tej częstotliwości, w Hz, przez 5 sekund. Na przykład
Input: 400
Output: (a tone of 400 Hz with a duration of 5 seconds)
Zasady
- Dane wejściowe muszą być pobierane za pośrednictwem STDIN lub odpowiednika w Twoim języku
- Odpowiedź musi być pełnym programem
- Wbudowane mogą być używane
- Częstotliwość będzie wynosić od 50 do 5000 Hz
- Odtwarzanie musi być odtwarzane przez 5 sekund
- Wyjście musi mieć postać fali sinusoidalnej
Przypadki testowe
Wkład: 440
Wydajność:
Wkład: 200
Wydajność:
Wkład: 4000
Wydajność:
Nie chodzi o znalezienie języka z najkrótszym rozwiązaniem tego problemu (są takie, w których pusty program rozwiązuje problem) - chodzi o znalezienie najkrótszego rozwiązania w każdym języku. Dlatego żadna odpowiedź nie zostanie oznaczona jako zaakceptowana.
W przeciwieństwie do naszych zwykłych zasad, możesz swobodnie używać języka (lub wersji językowej), nawet jeśli jest nowszy niż to wyzwanie. Języki napisane specjalnie w celu przesłania 0-bajtowej odpowiedzi na to wyzwanie są uczciwą grą, ale nie są szczególnie interesujące.
Pamiętaj, że musi być tłumacz, aby można było przetestować zgłoszenie. Dozwolone jest (a nawet zachęcane) samodzielne pisanie tego tłumacza dla wcześniej niewdrożonego języka.
Pamiętaj też, że języki muszą spełniać nasze zwykłe kryteria dotyczące języków programowania .
Katalog
Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań według języka oraz b) jako ogólnej tabeli wyników.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 63967; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 39060; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(42), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
beep()
funkcji. Czy to gwarancja, że jest to fala sinusoidalna?System.Console.Beep
to fala sinusoidalna na mojej (nowoczesnej, Windows 10) maszynie, więc myślę, że to się liczy. Rozwiązania dotyczące PPCG zasadniczo nie muszą być przenośne.Odpowiedzi:
QBasic,
18 bajtów(zdyskwalifikowany)Jak wspomniano @pabouk, wykorzystuje głośnik PC, więc odtwarza falę prostokątną , a nie sinusoidalną, jak pyta problem. (Wymóg ten został dodany do problemu po opublikowaniu tej odpowiedzi, stąd głosy.) Zostawię to tutaj dla potomności.
Odtwórz dźwięk na wprowadzonej częstotliwości dla 91 taktów, co jest równe 5 sekundom.
źródło
SOUND
polecenie korzysta z głośnika PC, który zgodnie z projektem był napędzany przez układ czasowy 8254, który wytwarza falę prostokątną. --- Chociaż we współczesnych komputerach 8254 może brakować poprawnej emulacjiSOUND
polecenia, powinno ono wytwarzać falę prostokątną.Python2, 40 bajtów
Działa tylko w systemie Windows.
źródło
5e3
zadziała?Mathematica, 42 bajty
Cóż, jeśli możemy użyć wbudowanych ...
Dzięki wymogu pełnego programu, to był pierwszy raz muszę użyć mojego niedawno odkrytej końcówki golfa z użyciem
%
(wynik ostatniej oceny), aby zapisać dwa bajty.Mathematica ma również wbudowaną funkcję,
Sound
która jako argument przyjmuje wysokość i czas trwania, ale niestety wysokość ta musi być podana jako nuta muzyczna. Określenie własnej fali dźwiękowejPlay
wydaje się być jedynym sposobem pracy z częstotliwością.źródło
C #, 80 bajtów
źródło
Beep
ing w Javie?MATLAB, 36 bajtów
Dzięki flawr za oszczędność dwóch bajtów.
źródło
2^-12
zamiast1/4096
.8^-4
jest jeszcze krótszy!PowerShell, 32 bajty
źródło
FakeASM , 12 bajtów
Współpracuje z implementacją referencyjną Windows (pobierz) . Nazywa
Beep
funkcję Windows , która jest sinusoidą na nowoczesnych platformach.źródło
RDA
odczytuje liczbę ze STDIN i zapisuje ją w rejestrzeA
.Bash + X11,
2720 bajtówZawiera to niedrukowalne, więc oto zrzut heksowy:
Pobiera częstotliwość jako argument wiersza poleceń i odtwarza odpowiedni sygnał dźwiękowy o głośności 9% (ponieważ nie określono głośności).
(Uwaga: nie mogłem tego przetestować z powodu problemów z komputerem, ale jestem pewien, że 99% działa).
źródło
echo <BEL>
gdzie<BEL>
jest rzeczywisty znak, oszczędza 6 bajtów.JavaScript, 114 bajtów
Wymaga nieco nowatorskiej przeglądarki, wpisz częstotliwość w monicie. JSFiddle
źródło
prompt()
wywoływany jest po uruchomieniu timera audio o godzinienew AudioContext()
. Uważam, że najkrótszy z nich to 115 bajtówc=new AudioContext(p=prompt());with(c.createOscillator()){frequency.value=p;connect(c.destination);start();stop(5)}
.<script>
tagów, które są wymagane, aby JavaScript mógł uznać pełny program wcześniej. Myślę, że jesteś dobry na 114. Ponadto usunięciep
zadania i samo ustawieniefrequency.value=prompt()
powinno doprowadzić cię do 110.p=prompt();with(new AudioContext)with(createOscillator())frequency.value=p,connect(destination),start(),stop(5)
oszczędza to 3 bajtyNarzędzia Bash + Linux, 95
To jest prawdziwa fala sinusoidalna. Brak sygnałów dźwiękowych. Częstotliwość wejściowa wprowadzona za pomocą wiersza polecenia:
źródło
Przetwarzanie,
148114106 bajtów(Z jakiegoś powodu Przetwarzanie wymaga zarówno użycia instrukcji importu, jak i nowego wiersza, w przeciwnym razie nie rozpoznaje biblioteki).
Nadal nie wiem, jak przekazać argumenty do Przetwarzania, choć wiem, że jest to możliwe, więc ten kod wymaga posiadania pliku o nazwie „s” w folderze szkicu, który ma wartość częstotliwości. Jeśli potrafię wymyślić, jak przekazać argumenty, mógłbym zastąpić ładowanie pliku
args[0]
.źródło
VB.net,
90 bajtów, 74 bajtyDzięki Sehnsucht
To jest mój pierwszy post, więc jeśli zrobiłem coś źle, proszę dać mi znaćźródło
Main(a()As String
iBeep(a(0),5000)
zmniejszając całkowitą liczbę do 74 bajtów zgodnie z licznikiem bajtówTurbo / Borland / Free / GNU Pascal, 95 bajtów
Z powodu problemów z funkcją opóźnienia na nowoczesnych komputerach (cóż, wszystko szybszych niż 200 MHz) próbujących uruchomić pascal Turbo / Borland, może to nie czekać 5 sekund, nawet z poprawioną biblioteką CRT
Konwersję ciągu na liczbę całkowitą można wykonać na FreePascal w krótszych (77 bajtów) i nowoczesnych pochodnych, ponieważ mają one
StrToInt
funkcję:źródło
Program a;
części, dzięki czemu można wygrać 10 bajtów, pomijając go.ParamStr()
i po prostuRead()
w razie potrzeby: pastebin.com/1Tw2d0D6Perl, 27 bajtów
Zasadniczo wersja Perla odpowiedzi na Python (działa również tylko w systemie Windows), jeśli zezwalamy na moduły.
źródło
Vitsy + X11, 20 bajtów
Tłumaczenie mojej odpowiedzi na bash. Nie działa w tłumaczu online (oczywiście).
Pobiera dane wejściowe jako dowolny znak nienumeryczny, po którym następuje częstotliwość (więc dla danych wejściowych 440 Hz można wykonać „a440”).
Wyjaśnienie
źródło
C z WinAPI, 82 bajty
Używa funkcji WinAPI Beep ().
źródło
&x
doscanf
? Możesz również zadeklarowaćx
jako parametr main i pozwolić kompilatorowi na domyślny typ.&x
doscanf()
. Naprawiono teraz; dzięki.Sód , 38 bajtów
źródło
Shadertoy GLSL Sound Shader, 86
„Wejście” podaje się za pomocą
#define
. Wysyła falę sinusoidalną o przybliżonej częstotliwościF
Hz. Zaokrąglone 2 * Pi do 6.3, zamiast „domyślnego” 6.2831, ale brzmi prawie tak samo.Niestety nie ma tu wiele do golfa.
źródło
Jolf, 4 bajty, niekonkurujące
Ten dodatek językowy pojawił się po wyzwaniu.
Fala domyślna to fala sinusoidalna.
źródło
SmileBASIC, 84 bajtów
Konwertuje od Hz do pół kroku i odtwarza określoną nutę z wartością detune w celu uzyskania częstotliwości.
źródło