Inspiriert von dieser Frage von @ CᴏɴᴏʀO'Bʀɪᴇɴ .
Aus der Frage entnommen:
Ihre Aufgabe ist einfach: Geben Sie bei zwei Ganzzahlen a und b ∏ [a, b] aus; das Produkt des Bereichs zwischen a und b. Sie können a und b in jedem vernünftigen Format verwenden, egal ob es sich um Argumente für eine Funktion, eine Listeneingabe, STDIN usw. handelt. Sie können in jedem vernünftigen Format ausgeben, z. B. als Rückgabewert (für Funktionen) oder als STDOUT. a wird immer kleiner als b sein.
Beachten Sie, dass das Ende exklusiv oder inklusive von b sein kann. Ich bin nicht wählerisch. ^ _ ^
Der Unterschied für diese Herausforderung besteht darin, dass wir in Bezug auf den Bereichstyp wählerisch sein werden. Eingabe ist ein String der Form [a,b]
, (a,b]
, [a,b)
, oder , (a,b)
wo eine []
ist eine integrative Grenze und ()
ist eine exklusive Grenze. Geben Sie anhand der expliziten Grenzen das Produkt des Bereichs an. Außerdem enthält der Eingabebereich immer mindestens 1 Zahl, was bedeutet, dass Bereiche wie (3,4)
ungültig sind und nicht getestet werden müssen.
Testfälle
[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
Dies ist ein Code-Golf , also gewinnt das kürzeste Programm in Bytes.
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](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 Bytes
Um die Zahlen zu extrahieren, die wir auswerten
s[1:-1]
, wird die Eingabezeichenfolge mit entfernten Enden als Tupel ausgegeben. Die Idee ist, dasrange
von diesem Tupel zu bekommen und das Produkt zu nehmen.Das Fudgen geschieht, um die Endpunkte anzupassen. Der obere Endpunkt ist einfach, schneiden Sie einfach das erste Element ab, wenn die Eingabe mit "
(
, done as" beginnt[s<'[':]
.Der andere Endpunkt ist schwieriger. Python bietet keine saubere Möglichkeit, das letzte Element einer Liste bedingt zu
l[:0]
entfernen, da das Ganze entfernt wird. Also machen wir etwas Seltsames. Wir modifizieren die Tupelzeichenfolge, bevor sie ausgewertet wird, um sie an der Zeichenfolge anzuheften,"+True"
oder"+False"
je nachdem, ob s mit]
oder endet)
. Das Ergebnis ist, dass so etwas3,7
entweder3,7+False
was ist3,7
oder3,7+True
was ist3,8
.Alternative, hübscher 72:
quelle
Minecraft 15w35a +, Programmgröße 638 insgesamt (siehe unten)
Wie meine Antwort hier , aber modifiziert. Da Minecraft keine Zeichenfolgeeingabe hat, habe ich mir erlaubt, die Anzeigetafeleingabe beizubehalten. Wenn dies ein Problem ist, betrachten Sie diese Antwort als nicht wettbewerbsfähig.
Dies wird
PI a,b
mit Inklusiv / Exklusiv berechnet, das von den beiden Hebeln angegeben wird. Die Eingabe erfolgt mit diesen beiden Befehlen:/scoreboard players set A A {num}
und/scoreboard players set B A {num}
. Denken Sie daran,/scoreboard objectives add A dummy
vor der Eingabe zu verwenden.Erzielte mit:
{program size} + ( 2 * {input command} ) + {scoreboard command} = 538 + ( 2 * 33 ) + 34 = 638
.Dieser Code entspricht dem folgenden Pseudocode:
Laden Sie die Welt hier herunter .
quelle
Pyth, 20 Bytes
Probieren Sie es online aus: Demo oder Test Suite
Erläuterung:
quelle
Ruby,
7977 Bytes79 BytesUngolfed:
Verwendung:
quelle
Im Ernst, 31 Bytes
Nimmt Eingaben als String (in doppelte Anführungszeichen eingeschlossen)
Online ausprobieren (Eingabe muss manuell erfolgen)
Erläuterung:
quelle
Python 3, 104
Übernimmt die Eingabe von stdin.
quelle
MATLAB,
8670 BytesDies funktioniert auch mit Octave . Sie können es hier online versuchen . Ich habe den Code als Skript zu diesem Arbeitsbereich hinzugefügt, sodass Sie ihn einfach
productRange
an der Eingabeaufforderung eingeben und dann Ihre Eingabe eingeben können, z'(2,5]'
.Der Code durchsucht also zuerst die Eingabe, um die Klammern und die Zahlen zusammen zu extrahieren:
Dies gibt ein Array zurück, aus dem besteht
[bracket, number, number, bracket]
.Das Array wird mit verglichen
42
. Tatsächlich reicht jede Zahl zwischen 42 und 90 aus. Dies bestimmt, um welche Art von Klammer es sich handelt, wobei eine 1 gegeben wird, wenn es sich um eine exklusive Klammer handelt, und eine 0, wenn es sich um eine inklusive Klammer handelt.Zuletzt zeigen wir das Produkt des gewünschten Sortiments an:
Das Produkt besteht aus Zahlen, die mit der ersten Zahl
s(2)
plus dem ersten Klammertypa(1)
(bei exklusiven Klammern ist dies eine 1) beginnen und bis zur zweiten Zahls(3)
minus dem zweiten Klammertyp reichena(4)
. Dies ergibt den richtigen Inklusiv / Exklusiv-Bereich.quelle
Julia, 75 Bytes
Dies ist eine anonyme Funktion, die eine Zeichenfolge akzeptiert und eine Ganzzahl zurückgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=s->...
.Ungolfed:
quelle
Mathematica, 128 Bytes
Das ist zu lang ... Ich denke gerade über eine
StringReplace
+RegularExpression
Lösung nach.quelle
PowerShell,
146104 Bytes42 Bytes werden durch Ändern der Art und Weise, wie die Zahlen aus der Eingabe extrahiert werden, entfernt. Woo!
quelle
Japt,
4341 BytesProbieren Sie es online!
quelle
Perl 6 , 60 Bytes
Es gibt ein bisschen Fehlanpassung, weil die Art und Weise, wie Sie das
(2,5]
Beispiel in Perl 6 schreiben würden, so wäre2^..5
([2^..5]
funktioniert auch).Also muss ich
(2
mit[2^
und,
mit tauschen..
, dann muss ichEVAL
es in eine Range umwandeln.Verwendung:
quelle
CJam, 34 Bytes
Probieren Sie es online aus
Erläuterung:
quelle
JavaScript (ES6), 90 Byte
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
R
102104 BytesUngolfed
Bearbeiten, um negative Zahlen zuzulassen [auf Kosten von 2 weiteren Zeichen
quelle
R
(und in der Antwort behoben)JavaScript (ES6), 79
Als anonyme Methode
Testschnipsel
quelle