Zainspirowany tym pytaniem przez @ CᴏɴᴏʀO'Bʀɪᴇɴ .
Zaczerpnięte z pytania:
Twoje zadanie jest proste: biorąc pod uwagę dwie liczby całkowite aib, wyprowadzanie ∏ [a, b]; to jest iloczyn zakresu od a do b. Możesz wziąć aib w dowolnym rozsądnym formacie, niezależnie od tego, czy są to argumenty funkcji, dane wejściowe listy, STDIN i tak dalej. Możesz wyprowadzać dane w dowolnym rozsądnym formacie, takim jak wartość zwracana (dla funkcji) lub STDOUT. a zawsze będzie mniejsze niż b.
Pamiętaj, że koniec może być wyłączny lub obejmować b. Nie jestem wybredna. ^ _ ^
Różnica w tym wyzwaniu polega na tym, że będziemy wybredni co do rodzaju zasięgu. Wejście jest ciągiem postaci [a,b]
, (a,b]
, [a,b)
, lub (a,b)
, gdzie []
jest granica włącznie i ()
jest wyłącznym granica. Biorąc pod uwagę wyraźne granice, podaj iloczyn zakresu. Również zakres wejściowy zawsze będzie zawierać co najmniej 1 liczbę, co oznacza, że zakresy takie (3,4)
są nieprawidłowe i nie muszą być testowane.
Przypadki testowe
[a,b) => result
[2,5) => 24
[5,10) => 15120
[-4,3) => 0
[0,3) => 0
[-4,0) => 24
[a,b] => result
[2,5] => 120
[5,10] => 151200
[-4,3] => 0
[0,3] => 0
[-4,-1] => 24
(a,b] => result
(2,5] => 60
(5,10] => 30240
(-4,3] => 0
(0,3] => 6
(-4,-1] => -6
(a,b) => result
(2,5) => 12
(5,10) => 3024
(-4,3) => 0
(0,3) => 2
(-4,0) => -6
To jest golf golfowy , więc wygrywa najkrótszy program w bajtach.
Tabela liderów
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
var QUESTION_ID=66285,OVERRIDE_USER=44713;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<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="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><div id="language-list"> <h2>Winners 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><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>
Python 2, 72 bajty
Aby wyodrębnić liczby, które oceniamy
s[1:-1]
, ciąg wejściowy z usuniętymi końcami, co daje krotkę. Chodzi o to, aby zdobyćrange
tę krotkę i wziąć produkt.Krówki zdarzają się w celu dostosowania punktów końcowych. Górny punkt końcowy jest łatwy, wystarczy odciąć pierwszy element, jeśli dane wejściowe zaczynają się od
(
, zrobione jak[s<'[':]
.Drugi punkt końcowy jest trudniejszy. Python nie ma czystego sposobu warunkowego usunięcia ostatniego elementu listy, ponieważ
l[:0]
usuwa całą rzecz. Robimy więc coś dziwnego. Zmodyfikujemy ciąg krotki przed oszacowaniem, aby przylgnął do ciągu"+True"
lub w"+False"
zależności od tego, czy s kończy się na]
lub)
. Rezultat jest taki, że coś w rodzaju3,7
staje się tym,3,7+False
co jest3,7
lub3,7+True
co jest3,8
.Alternatywnie, ładniej 72:
źródło
Minecraft 15w35a +, łączny rozmiar programu 638 (patrz poniżej)
Taka sama jak moja odpowiedź tutaj , ale zmodyfikowana. Ponieważ Minecraft nie ma ciągów wejściowych, mogłem zachować dane wejściowe z tablicy wyników. Jeśli jest to problem, rozważ tę odpowiedź niekonkurencyjną.
Oblicza się to
PI a,b
z włączeniem / wyłączeniem określonym przez dwie dźwignie. Dane wejściowe są podawane za pomocą tych dwóch poleceń:/scoreboard players set A A {num}
i/scoreboard players set B A {num}
. Pamiętaj, aby użyć/scoreboard objectives add A dummy
przed wejściem.Zdobył za pomocą:
{program size} + ( 2 * {input command} ) + {scoreboard command} = 538 + ( 2 * 33 ) + 34 = 638
.Ten kod odpowiada następującemu kodowi psuedocode:
Pobierz świat tutaj .
źródło
Pyth, 20 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Wyjaśnienie:
źródło
Rubinowy,
7977 bajtów79 bajtówNie golfowany:
Stosowanie:
źródło
Poważnie, 31 bajtów
Pobiera dane wejściowe jako ciąg znaków (zawinięty w podwójne cudzysłowy)
Wypróbuj online (dane należy wprowadzić ręcznie)
Wyjaśnienie:
źródło
Python 3, 104
Pobiera dane wejściowe ze standardowego wejścia.
źródło
MATLAB,
8670 bajtówDziała to również z Octave . Możesz spróbować online tutaj . Dodałem kod jako skrypt do tego obszaru roboczego, dzięki czemu możesz po prostu wprowadzić
productRange
monit, a następnie wprowadzić dane wejściowe, np'(2,5]'
.Tak więc kod najpierw skanuje dane wejściowe, aby wyodrębnić nawiasy i liczby razem:
Zwraca tablicę, która jest wykonana
[bracket, number, number, bracket]
.Tablica jest porównywana z
42
, w rzeczywistości wystarczy dowolna liczba od 42 do 90 włącznie. Określa, jaki to był nawias, dając 1, jeśli jest to nawias wyłączny, i 0, jeśli to nawias włącznie.Na koniec wyświetlamy produkt o wymaganym zakresie:
Produkt składa się z liczb oznaczających pierwszą cyfrę
s(2)
a(1)
zaczynających się od plus pierwszego rodzaju nawiasu (który jest 1, jeśli nawias wyłączny), w zakresie od drugiej liczby włącznie z drugims(3)
rodzajem nawiasua(4)
. Daje to prawidłowy zakres włączenia / wyłączenia.źródło
Julia, 75 bajtów
Jest to anonimowa funkcja, która przyjmuje ciąg znaków i zwraca liczbę całkowitą. Aby to nazwać, nadaj mu nazwę, np
f=s->...
.Nie golfowany:
źródło
Mathematica, 128 bajtów
To za długo ... Obecnie myślę o rozwiązaniu
StringReplace
+RegularExpression
.źródło
PowerShell,
146104 bajtówGrał w golfa o 42 bajty, zmieniając sposób, w jaki liczby są wyodrębniane z wejścia. Zabiegać!
źródło
Japt,
4341 bajtówWypróbuj online!
źródło
Perl 6 , 60 bajtów
Jest trochę niedopasowania, ponieważ sposób, w jaki napisałbyś
(2,5]
przykład w Perlu 6, byłby2^..5
([2^..5]
również działa).Więc mam do zamiany
(2
z[2^
, i,
ze..
, to muszęEVAL
go w Range.stosowanie:
źródło
CJam, 34 bajty
Wypróbuj online
Wyjaśnienie:
źródło
JavaScript (ES6), 90 bajtów
Wyjaśnienie
Test
Pokaż fragment kodu
źródło
R,
102104 bajtyBez golfa
edytuj, aby umożliwić liczby ujemne [kosztem kolejnych 2 znaków
źródło
R
(i poprawiony w odpowiedzi)JavaScript (ES6), 79
Jako anonimowa metoda
Testowy fragment kodu
źródło