Anweisung
Die Schwierigkeit einer Code Golf-Frage kann folgendermaßen berechnet werden:
Wo v
ist die Anzahl der Aufrufe einer Frage?
und a
ist die Anzahl der Antworten, die eine Frage hat
und ⌈ x ⌉ ist der Deckenantrieb .
Ebenfalls:
Die aktuelle Schwierigkeit dieser Frage: ***
Aufgabe
Schreiben Sie ein Programm, das zwei ganze Zahlen enthält (v and a)
und die Schwierigkeit in ausgibt asterisks (*)
.
Die Eingabe kann in Form eines Arrays, einer separaten Zeichenfolge oder als separate Funktionsargumente erfolgen
Testdaten
Views Answers Difficulty Program Output
163 2 2 **
548 22 1 *
1452 24 1 *
1713 37 1 *
4162 32 2 **
3067 15 3 ***
22421 19 10 **********
Beispiel mit Pseudocode
v: 1713
a: 37
out = clamp(ceil(((v/a)/700)*10), 0, 10); // evaluates to 1
//program will output '*'
Der kürzeste Code in Bytes gewinnt! Nachgestellte / führende Leerzeichen sind erlaubt.
/700 * 10
statt/70
?Antworten:
JavaScript (ES6),
40 bis39 ByteDenn es
substring
sorgt für das erforderliche Klemm- und "Decken" -Verhalten. Edit: Normalerweise bin ich zu faul, um mir die Mühe zu machen, aber weil es 4 positive Stimmen gab, habe ich @ MarsUltors Rat befolgt, um 1 Byte durch Curry zu sparen.quelle
v=>a=>
substr
stattdessen verwenden? Ich weiß, der zweite Parameter macht einen Unterschied, aber nicht sicher über die erste ...slice
wäre aber noch kürzer.substr
undslice
ein negatives Argument werden vom Ende der Zeichenfolge zurückgezählt.Ich wollte das schon eine Weile machen ...
HTML + CSS
491487485 Bytes-4 Bytes dank Conor O'Brien
-2 Bytes dank der Freisetzung von Heliumkernen
Die Eingabe wird als Breite und Höhe des Seitenfensters verwendet. width ist die Anzahl der Aufrufe und height die Anzahl der Antworten.
Sie können es in Ihrem Browser versuchen, indem Sie eingeben
als URL in einem neuen Tab.
quelle
}
.05AB1E, 11 Bytes
Erläuterung
Probieren Sie es online aus
quelle
Javascript (ES6),
37-36BytesDank TheLethalCoder 1 Byte durch Currying eingespart
Code-Snippet anzeigen
quelle
v=>a=>
anstelle von verwenden(v,a)=>
?v=70, a=1
?Mathematica,
38-35BytesDanke an @MartinEnder für 3 Bytes
quelle
Clip
, dass die Syntax der OP-Klemme ziemlich identisch ist, aber dann habe ich gesehen, dassStringRepeat
sie das optionale dritte Argument für das Abschneiden enthält.Ceiling[]
.EXCEL, 29 Bytes
Wenn Sie Excel als eine Darstellung von VBA Excel zählen, können Sie verwenden
wo
v
unda
sind die Namen der Referenzzellen.quelle
CJam,
181514 Bytes1 Byte dank Peter Taylor und 3 Byte dank Adnan gespeichert
Probieren Sie es online aus
quelle
C #,
684948 BytesDies ist die C # -Version dieser hervorragenden Antwort von Neil.
Weitere 19 Bytes dank Neil gespeichert
quelle
(int)System.Math.Floor(10-v/a/70)
oder einfach(int)(10-v/a/70)
.70d
alleine lassen, aber es funktioniert besser, danked
.v=>a=>
Java 8, 57 Bytes
Verwendet ein Lambda zum Speichern von Bytes, führt die Berechnung durch und Teilzeichenfolgen, um die Antwort zurückzugeben.
Hier ist meine Klasse zum Testen.
Aktualisieren
quelle
java.lang.
da dies das standardmäßig enthaltene Paket ist.System.out.println((int)2.99);
gedruckt,2
und da ich den vorgefertigten Wert von 10 nehme und ihn dann wieder auflege , ist es dasselbe, als würde ich die Decke von 10 entfernen.MATL , 12 Bytes
Probieren Sie es online!
Erläuterung
Das Aufrunden und Klemmen erfolgt gleichzeitig wie folgt: Die Anzahl
x = v/a/70
wird mit jedem Element des Arrays verglichen[0 1 ... 9]
. Die Zahlen dieses Arrays, die von überschritten werden,x
werden zu Sternchen und der Rest sind Leerzeichen.quelle
Python2, 32 Bytes
3 + 2 Bytes gespeichert und dank Leaky Nun um einen Fehler korrigiert
ähnlich wie Neils Antwort. Verwendet die Tatsache, dass Python2 eine Ganzzahldivision durchführt.
quelle
v=70
unda=1
f=
kann entfernt werdenv, a
kann werdenv,a
Haskell, 35 Bytes
[1..min(ceiling$v/a/70)10]
Erstellt einen Bereich von 1 bis zur berechneten Schwierigkeit (eine leere Liste für die Schwierigkeit 0).a>>b
wiederholt die Listeb
length a
oft.quelle
Pyke,
139 BytesProbieren Sie es hier aus!
Erläuterung:
quelle
C #,
978987774241 BytesDank Adám 10 Bytes gespart
Ein paar Bytes gespart dank Arnauld
quelle
(int)System.Math.Ceiling(v/a/70d)
durch(v+69)/(70*a)
... ersetzen. Beachten Sie, dass v / a nicht negativ sein kann und daherc
sehr vereinfacht werden kann, da Sie dies nicht überprüfen müssen.Perl,
3532 BytesVerwenden Sie
-E
,say
um die Argumente in umgekehrter Reihenfolge zu aktivieren und anzugeben:Wenn Argumente für STDIN zulässig sind, sind 29 Byte zulässig:
quelle
0|
stattdessen haben$-=
? (Denken Operator Vorrang möglicherweise nicht richtig ...)0|
macht eine negative Zahl zu einer riesigen Zahl (die zu Nullen führt*
),$-=
Clips zu 0 (die zu Zehnern führt*
), was ich hier braucheR,
68, 50,52 Bytesrep
setzt implizit eine min auf die Zahl 0.Vielen Dank an @plannapus und @ Anastasiya-Romanova 秀, die meinen Fehler entdeckt haben.
quelle
f=
1+
nachdemmin(
um die gleichen Ausgaben zu erhaltenPyth ,
1713 BytesLuis Mendo für seinen Algorithmus 4 Bytes gutgeschrieben .
Testsuite.
quelle
Javascript ES6, 48 Bytes
quelle
C,
54,51,50, 49 BytesUnter der Annahme, dass
v
positiv oder null unda
positiv ist, wird derx < min
Klemmfall niemals erfüllt, da das Ergebnis des Deckenbetriebs auf keinen Fall negativ sein kann. Darüber hinaus ergibt eine Ganzzahlberechnung mit nicht negativen Werten immer den Grundwert des Ergebnisses. Wir addieren also1
, um die Obergrenze zu ermitteln.Diese Lösung benötigt eine
write
Funktion, funktioniert zumindest unter Linux.Testleitung:
quelle
(v=v/a/70)
durch(v/=a*70)
speichert 1 Byte.Javascript:
8273 Bytesquelle
console.log
, die Rückkehr ist in Ordnung. Sie können auch ein Byte speichern mitv=>a=>
anstelle von(v,a)=>
Dyalog APL , 15 Bytes
'*'⍴⍨
das Zeichen wurde so oft wiederholt:10⌊
min (10, ...⎕÷
Eingabe geteilt durch70×
siebzig mal⎕
EingabeTryAPL online!
quelle
'*'/⍨(⎕÷70×⎕)>⍳10
Qualle , 18 Bytes
Übernimmt Eingaben im Format
[a v]
. Probieren Sie es online!Erläuterung
%
ist wechselseitig, so%70
ist 1/70.i
wird als Array mit zwei Elementen eingegeben./%
mit Eingängeni
und%70
reduziert das Arrayi
durch gespiegelte Division mit dem Anfangswert%70
. Mit anderen Worten, es berechnet v / (a / (1/70)) , was gleich v / (70 * a) ist .M
Nimmt die Obergrenze dieses Wertes undm
nimmt das Maximum von diesem und10
.#'*
wiederholt das wörtliche*
Zeichen so oft.P
druckt das Ergebnis ohne Anführungszeichen.quelle
MATLAB,
3433 BytesDa mir diese Herausforderung so gut gefällt, gibt es hier eine für MATLAB (gibt nachgestellte Leerzeichen aus):
Inspiriert von der Antwort von @Luis Mendo. Vielen Dank an @pajonk für das Speichern eines Bytes.
quelle
[... '']
anstelle von verwendenchar(...)
. Und brauchen Sie das wirklich,ceil
wenn Sie am Ende mit ganzen Zahlen vergleichen?m4,
136135 BytesDefiniert ein Makro,
f
das die korrekte Ausgabe annimmtv
unda
und erweitert. Der größte Teil des Programms ist eine Umsetzung der Obergrenze.quelle
Gleichstrom,
110 108 10498 BytesDies war ein Trottel, da das Schneiden keine Sache ist. Außerdem manipuliert DC keine Strings. Ich habe nur wirklich auf einen String gewartet, der <5 Stunden Codierung sein würde. Auf der positiven Seite habe ich endlich angefangen, gängige Konstrukte aufzuschreiben, wie zum Beispiel für Schleifen. Musste auch Rundung / Decke formulieren, also danke dafür.
In bash aufgerufen:
Ersetzen (oben) durch den Code
v
unda
durch die entsprechenden oben genannten Gegenstücke. Die einfachen Anführungszeichen sind wichtig (ansonsten erhalten Sie die Geschichte der Bash).Erklärt:
Dies ist wahrscheinlich besser zum Golfen geeignet, aber ich habe versucht, es fertigzustellen, um eine vorzeitige Optimierung zu vermeiden.
quelle
[*]n
=>42P
. Jede Instanz von10
kann durch ersetzt werdenI
.[]p
=>IP
Haskell, 35 Bytes
Diese Lösung unterscheidet sich von Laikonis Antwort so sehr, wie es für etwas so Triviales gilt. Dennoch ist die Punktzahl (vorerst) genau die gleiche.
Das bringt zehn Sterne hervor und schert dann einige ab. Einfach mit einer unendlichen Liste auf beliebige Schwierigkeitsgrade zu erweitern.
Ich habe es geschafft, ein weiteres Byte zu entfernen. Aber während alle Testfälle funktionieren, sollte dies im Allgemeinen nicht korrekt sein.
quelle
TI-Basic, 39 Bytes
quelle
PowerShell v2 +, 47 Byte
Etwas eine Portierung von @ Neils JavaScript-Antwort .
Nimmt Eingaben
$args
und dividiert sie, dividiert sie dann durch70
und addiert sie.499
. Da PowerShell die Banker-Rundung durchführt , erfolgt dies effektivceil
auf zwei Dezimalstellen genau. Wenn zusätzliche Präzision erforderlich ist, heften Sie so viele zusätzliche9
s an, wie erforderlich sind.Zusammen mit
1..
bildet dies einen Bereichsindex in eine Zeichenfolge. Der String ist'*'*11
, dh'***********'
. Das ergibt ein char-Array, also fassen wir-join
es wieder zu einem String zusammen. Diese Zeichenfolge verbleibt in der Pipeline und die Ausgabe ist implizit. Wie Neils Antwort "klemmt" dies die Ausgabe effektiv so, dass sie zwischen 1 und 10 Sternen liegt.Test Suite
quelle
Python 3,
6968 BytesIch wollte die Antwort von Python 2 nicht kopieren, daher ist meine etwas länger.
Dank Program man 1 Byte gespeichert
quelle
from math import *
sparen aber ein paar Bytesimport*
ohne Leerzeichen.Eigentlich 14 Bytes
Probieren Sie es online!
Nutzt die Tatsache aus, dass 0 Aufrufe und 0 Antworten unmöglich sind und somit
ceil(v/a) > 0
.Erläuterung:
quelle