Ziel : Bei einer positiven Ganzzahl n
:
- Wenn dies
n
ungerade ist, geben Sie die Liste dern
Zahlen aus, die0
in aufsteigender Reihenfolge am nächsten liegen - Wenn
n
gerade, geben Sie einen Falsey-Wert aus.
Testfälle :
5 -> [-2,-1,0,1,2]
4 -> false (or any Falsey value)
1 -> [0]
Referenzimplementierung
function update(){
var num = +document.getElementById("yield").value;
if(num){
var out = document.getElementById("output");
if(num % 2 == 1){
// base is balanced
var baseArr = [];
for(var i=0;i<num;i++){
baseArr.push(i-Math.floor(num/2));
}
out.innerHTML = baseArr.join(" ");
} else {
out.innerHTML = "false";
}
} else {
out.innerHTML = "<i>enter input</i>";
}
}
setInterval(update,1);
* {
font-family: "Constantia", "Consolas", monospace;
}
[type="number"] {
width: 10px;
width: 2em;
}
#output {
font-family: "Consolas", monospace;
}
Input: <input type="number" id="yield" value="3"> is <span id="output"><i>enter input</i></span>
code-golf
math
number
number-theory
Conor O'Brien
quelle
quelle
Antworten:
Pyth, 10 Bytes
Probieren Sie es online aus.
Wie es funktioniert
quelle
APL,
161513 BytesDanke an @Dennis für -2 Bytes!
Dies ist ein monadischer Zug, der ein leeres Array für gleichmäßige Eingaben liefert. Unten ist das Diagramm:
Erstens
⊢×2|⊢
gibt die Eingabe mal ihren Mod 2; Das heißt, die Gewinnchancen geben sich von selbst und die Gleichgewichte geben 0. Wir⍳
erstellen eine Liste von Zahlen von 1 bis 1 (⍳0
geben das leere Array an) und subtrahieren dann die Hälfte der Eingabe und des Bodens.quelle
Mathematica,
323024 BytesCode-Golf-Trick: Das letzte Argument
And
muss kein Boolescher sein.quelle
Floor
.Range[-a,a=...]
scheint zu arbeiten, ein weiteres Byte zu speichern.OddQ@#&&Range@#-(#+1)/2&
PowerShell,
5052 ByteUff. Ziemlich ausführliche Antwort. Nimmt Eingaben vor
$a
und legt dann eine neue Variable$b
als "Etage" von fest$a/2
. Erzeugt einen neuen Zahlenbereich von(0-$b)
bis$b
, dannjoin
s den Bereich mit Leerzeichen und hat diesen als zweites Element eines Arrays mit zwei Elementen (das erste Element ist0
). Verwendet dann,$a%2
um in dieses Array für die Ausgabe zu indizieren.Alternative Version mit mehr "traditionellem" if / else-Fluss bei 54 Bytes:
Bearbeiten - Muss eine Logik hinzufügen, um einen Falsey-Wert auszugeben, wenn die Eingabe gerade ist
quelle
(0-$b)
auf just ändern-$b
.*0
Wenn Sie nur mit multiplizieren, wird eine Nullzeichenfolge ausgegeben (wird in Powershell als falsch ausgewertet). (siehe: codegolf.stackexchange.com/a/63005/45925 )Haskell,
373631 BytesUnausgeglichen wird durch die leere Liste angezeigt. Anwendungsbeispiel:
g 7
->[-3,-2,-1,0,1,2,3]
.@xnor hat 5 Bytes gefunden. Vielen Dank!
quelle
g n=[x|x<-[-div n 2..(n+1)/2],odd n]
ist genauso lang.g n=[1|odd n]>>[-div n 2..div n 2]
g n=[1|odd n]>>take n[-div n 2..]
spart auch ein Zeichen.JavaScript (ES6),
44434241 Bytedurchgestrichen 44 ist immer noch regulär 44; (
Gibt bei ungeraden Eingaben ein ganzzahliges Array mit einer Länge zurück
x
, das auf zentriert ist0
. für gerade, gibt 0 zurück. Ich denke, das ist so kurz wie es nur geht. (Ein paar Bytes dank @ edc65 und @ ן nɟuɐɯɹɐ ן oɯ gespeichert!)ES6-Alternative: (42 Bytes dank @intrepidcoder)
Vorschläge willkommen!
quelle
x%2&&[for(y of...]
spart ein Byte.n=>Array(n&1&&n--).fill().map((x,i)=>i-n/2)
wenn die Rückgabe eines leeren Arrays zulässig istx=>x%2&&[for(y of Array(x--).keys())y-x/2]
ist 42.Minkolang 0,10 , 18 Bytes
Erläuterung
quelle
J, 12 Bytes
Dies ist ein monadisches Verb, das
0
für gerade Zahlen zurückgibt (falsch). Versuchen Sie es online mit J.js .Testlauf
Wie es funktioniert
quelle
DUP , 31 Bytes
Try it here.
Anonymes Lambda. Verwendungszweck:
Erläuterung
quelle
Python 2,
3432 BytesIm Moment bin ich mir nicht sicher, ob ich ausgeben kann, was ich will, wenn es nicht ausgeglichen ist. Derzeit wird nur eine leere Liste zurückgegeben, wenn die Basis nicht ausgeglichen ist. Es ist eine anonyme Lambda-Funktion, geben Sie ihr also einen Namen, um sie zu verwenden.
quelle
k%2*
, können Sie die Parens vermeiden.CJam,
1312 BytesDies ist eine anonyme Funktion, die eine Ganzzahl aus dem Stapel entfernt und im Gegenzug ein Ziffernarray (ungerade Basis) oder ein leeres Array (gerade Basis) verschiebt. Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
O, 18
Live-Demo.
quelle
Vitsy,
2725 BytesIch werde morgen Golf spielen, aber ich sollte jetzt wirklich ins Bett gehen.
quelle
TeaScript , 16 Bytes
18Ziemlich einfach. Die Sonderzeichen sind eigentlich nur "Abkürzungen" für längere Codesequenzen.
Ich habe noch keine Permalinks erstellt, daher müssen Sie das Einfügen in den Interpreter kopieren
Erläuterung
Diese Antwort ist nicht konkurrierend
quelle
F #, 38 Bytes
Das falsche Ergebnis ist eine leere Liste.
quelle
𝔼𝕊𝕄𝕚𝕟 21 Zeichen / 37 Bytes
Try it here (Firefox only).
Hier ist eine 20-Zeichen / 35-Byte-Antwort (nicht konkurrierend, da die Antwort Änderungen verwendet, die nach dem Stellen der Frage implementiert wurden):
Try it here (Firefox only).
quelle
Japt,
2119 BytesJapt ist eine verkürzte Version von Ja vaScri pt .
Gibt bei ungeraden Eingaben ein ganzzahliges Array mit einer Länge zurück
x
, das auf zentriert ist0
. für gerade, gibt 0 zurück. Grobe JS-Übersetzung:Dabei
x.range(y)
wird eine Liste von Ganzzahlen vonx
bis erstellty
. Testen Sie es online!Im modernen Japt sind dies nur 11 Bytes:
Probieren Sie es online aus!
quelle
R, 30 Bytes
Gibt ungefähr
x:-x
die ganzen Zahlen vonx
bis zurück-x
, auf die ich gesetztx
habe(1-n)/2
. Ich verwende auch den Modulo-2-Faktorn%%2
in der Definition vonx
, umx
auf Null zu zwingen , wenn geraden
ist, und in diesem Fall0:0
zurückkehrt0
(falsey).quelle
Perl, 36 Bytes
Ich habe das Gefühl, dass dies verkürzt werden kann:
Range behandelt Floats als Ganzzahlen, z. B. wird 5/2 = 2,5 stillschweigend in 2 konvertiert.
(Wenn die Formatierung keine Rolle spielt, entfernen Sie sie
$,=$";
für insgesamt 30 Byte.)quelle
Powershell, 49 Bytes
$false
Gerade Zahlen werden ausgewertet, da sie eine Leerzeilenausgabe liefern.Ungerade Zahlen geben die genaue Referenzzeichenfolge aus. Sie können (jetzt
45
) 4 weitere Bytes speichern, indem Sie die[]
aus der Ausgabezeichenfolge entfernen .Powershell, 36 Bytes
Dies hat das gleiche falsche Ergebnis, gibt jedoch die Liste der durch Zeilenumbrüche getrennten Zahlen aus:
quelle
Perl 6, 25 Bytes
Der kürzeste Lambda-Ausdruck, den ich finden könnte, der eine Liste anstelle eines Bereichs ausgibt, ist:
Testen:
Dies nutzt die Tatsache aus, dass Perl 6 die Zahl
0
als falschen Wert behandelt. Wenn die Ausgabe genau sein mussteFalse
könnten Sie ersetzen$_%2
mit$_!%%2
.quelle
05AB1E , 8 Bytes (nicht konkurrierend)
Die Sprache datiert die Herausforderung nach und ist daher nicht konkurrierend. Code:
Probieren Sie es online aus!
Erläuterung:
Verwendet die CP-1252- Codierung.
quelle
PHP, 50 Bytes
Programm, nimmt Eingaben von STDIN entgegen, druckt eine
_
begrenzte Liste oder0
.oder
Funktion nimmt Argument, gibt Array oder zurück
0
.quelle
Java, 145 Bytes
Erklärung: Entschuldigung, ich weiß, das ist wirklich lang. Ich habe keine Antwort für Java gesehen, also habe ich beschlossen, eine einzutragen. Lassen Sie mich wissen, ob ich die Hauptfunktion schreiben muss (ich bin mir nicht sicher, ob das die Richtlinie ist oder nicht). Grundsätzlich teilt es die Zahl durch zwei und multipliziert sie mit -1 für die Untergrenze und für die Obergrenze verwendet es nur die durch zwei geteilte Zahl. Ich bin ein bisschen neu auf dieser Seite. Wenn ich also nichts richtig formatiert habe, lass es mich wissen. Ich weiß auch, dass Antworten mit Lambda-Funktionen verkürzt werden können, aber ich weiß nicht, wie ich sie verwenden soll, und ich bin mir nicht sicher, ob Java sie unterstützt.
Hier ist eine besser lesbare Version, die weniger Golf spielt:
quelle
return
- der Rückgabewert ist eine legitime Form der Ausgabe - ausgeben können, anstatt sie zu verwendenSystem.out
, obwohl Sie in diesem Fallreturn
zum Speichern die Funktion teilweise speichern müssten konstruierte Listen in einer Zeichenfolge). Das neuere Java unterstützt Lambdas und ist normalerweise kürzer als eine "normale" Funktionsdefinition. (Auch, warum das führende Leerzeichen?)Ruby, 25 Bytes
quelle
Ruby, 27 Bytes
Erstellt eine anonyme Lambda-Funktion, die das Array von
n
Zahlen zurückgibt, das 0 am nächsten kommt, wenn n ungerade ist, und andernfalls nil (ein Falsey-Wert in Ruby) zurückgibt.Ruby rundet seine ganzzahlige Division in Richtung -Infinity ab, aber
0-n/2
kürzer als-n/2+1
(da das Minuszeichen sowieso vorhanden ist), und da n jetzt als positiv angesehen wird, wirkt die Rundung zu meinen Gunsten.Alte Version (28 Bytes)
quelle