| Bytes | Lang | Time | Link |
|---|---|---|---|
| 012 | Japt | 240827T225917Z | Shaggy |
| 013 | Uiua | 240827T204936Z | nyxbird |
| 010 | Thunno 2 | 230809T183604Z | The Thon |
| 009 | Vyxal | 210711T094911Z | Wasif |
| 010 | Jelly | 210214T152330Z | caird co |
| 017 | Add++ | 180128T204218Z | caird co |
| 032 | Perl 6 | 160823T114249Z | smls |
| 5052 | R | 160817T143626Z | user5957 |
| 035 | Ruby | 160819T094627Z | Ephi |
| 027 | Ruby | 160821T022952Z | Luis Mas |
| 029 | EXCEL | 160820T210816Z | Anastasi |
| 057 | Java 8 | 160817T181734Z | Nonlinea |
| 039 | TIBasic | 160819T160548Z | Timtech |
| 049 | C | 160818T065230Z | Stefano |
| nan | 160817T184930Z | Yay295 | |
| 032 | Perl | 160817T155443Z | Ton Hosp |
| 066 | PHP 5.6 | 160818T143643Z | Samsquan |
| 041 | C# | 160817T122522Z | TheLetha |
| 048 | C# | 160817T123724Z | TheLetha |
| 046 | Fourier | 160817T192237Z | Beta Dec |
| 035 | Mathematica | 160817T150430Z | user5863 |
| 014 | Actually | 160818T071459Z | user4594 |
| 035 | Haskell | 160818T023426Z | MarLinn |
| 081 | Batch | 160817T235104Z | Neil |
| 098 | dc | 160817T172335Z | Delioth |
| 009 | Pyke | 160817T202050Z | Blue |
| 135 | m4 | 160817T181752Z | Program |
| 068 | Python 3 | 160817T172313Z | Cody |
| 035 | Haskell | 160817T145632Z | Laikoni |
| 033 | MATLAB | 160817T153247Z | mathause |
| 018 | Jellyfish | 160817T151422Z | Zgarb |
| 032 | Python2 | 160817T132625Z | mathause |
| 039 | JavaScript ES6 | 160817T122948Z | Neil |
| 036 | Javascript ES6 | 160817T144825Z | Arnauld |
| 012 | MATL | 160817T124151Z | Luis Men |
| 048 | Javascript ES6 | 160817T135126Z | user5418 |
| 014 | CJam | 160817T130325Z | Business |
| 011 | 05AB1E | 160817T132632Z | Emigna |
| 015 | Dyalog APL | 160817T122212Z | Adá |
| 047 | PowerShell v2+ | 160817T130225Z | AdmBorkB |
| 073 | javascript | 160817T122110Z | Dylan Me |
| 013 | Pyth | 160817T123926Z | Leaky Nu |
Uiua, 13 bytes
▽:@*↧10⌈÷×70
▽:@*↧10⌈÷×70
÷×70 # divide v by 70a
⌈ # ceiling
↧10 # clamp to 10
▽:@* # convert to *s
Thunno 2, 10 bytes
/70/ṃ'*T×ɱ
Explanation
/70/ṃ'*T×ɱ '# Implicit input
/ # Divide v by a
70/ # Divide this by 70
ṃ # Take the ceiling
'*T× '# Push 10 asterisks
ɱ # Take that many characters
# (with a maximum of 10)
# from the string
# Implicit output
Jelly, 10 bytes
÷÷70Ċ«⁵”*x
How it works
÷÷70Ċ«⁵”*x - Main link. Takes v on the left and a on the right
÷ - v ÷ a
÷70 - v ÷ a ÷ 70
Ċ - ⌈v ÷ a ÷ 70⌉
«⁵ - min(⌈v ÷ a ÷ 70⌉, 10)
”*x - Repeat "*" min(⌈v ÷ a ÷ 70⌉, 10) times
Add++, 17 bytes
L^,/70/i9b<"*"$yp
Not often I get to use the ^ flag in code-golf
How it works
L^, ; Create a lambda that returns the stack joined
; Example arguments: [3067 15]
/ ; Divide; [204.46]
70/ ; Divide by 70; [2.921]
i ; Floor; [2]
9b> ; Minimum with 9; [2]
"*" ; Push '*'; [2 '*']
y ; Repeat with an extra; ['*' '*' '*']
Perl 6: 32 bytes
As a lambda that takes two arguments:
{"*"x min 10,ceiling $^x/$^y/70}
R, 68, 50 52 bytes
f=function(v,a)cat(rep("*",1+min(v/a/70,10)),sep="")
rep implicitly places a min on number of 0.
Thanks to @plannapus and @Anastasiya-Romanova秀 for spotting my error.
Ruby, 47 35 bytes
f=->(v,a){'*'*((v/=a*70)<9?v+1:10)}
Called with f.call(v,a)
Saved 12 bytes thanks to user3334690, now the function implicitly returns the result.
Ruby, 27 bytes
->v,a{(?**10)[1..(v/a/70)]}
EXCEL, 29 bytes
If you count Excel as a representation of VBA Excel, then you can use
=REPT("*",MIN(1+v/(70*a),10))
where v and a are the name of reference cells.
Java 8, 57 bytes
Uses a lambda to save bytes, performs the calculation and substrings to return the answer.
(v,a)->"**********".substring(Math.max(0,(700*a-v)/70/a))
Here is my class for testing it.
public class DifficultyCalculator{
static interface h{ String f(int v, int a);}
static void g(h H){
System.out.print(H.f(163,2));System.out.println("\t**");
System.out.print(H.f(548,22));System.out.println("\t*");
System.out.print(H.f(1452,24));System.out.println("\t*");
System.out.print(H.f(1713,37));System.out.println("\t*");
System.out.print(H.f(4162,32));System.out.println("\t**");
System.out.print(H.f(3067,15));System.out.println("\t***");
System.out.print(H.f(22421,19));System.out.println("\t**********");
}
public static void main(String[] args) {
g( // 70
(v,a)->"**********".substring(java.lang.Math.max(0,(int)(10-v/70d/a)))
);
}
}
Update
- -3 [16-08-19] Utilized integer division
- -10 [16-08-18] Removed unnecessary import, thanks to @OlivierGrégoire!
- -18 [16-08-17] Return string instead of print
TI-Basic, 39 bytes
Prompt V,A
sub("**********",1,max(0,min(10,int(V/A/70)+1
C, 54, 51, 50, 49 bytes
Assuming that v is positive or zero and a positive, the x < min clamping case is never met, since there is no way the result of the ceiling operation can be negative. Additionally, integer maths on non-negative values always yields the floor of the result, so we add 1 to get the ceiling.
This solution requires a write function, works on Linux at least.
F(v,a){write(1,"**********",(v/=a*70)>9?10:v+1);}
Test main:
int main() {
F(163, 2);
putchar('\n');
F(548, 22);
putchar('\n');
F(1452, 24);
putchar('\n');
F(1713, 37);
putchar('\n');
F(4162, 32);
putchar('\n');
F(3067, 15);
putchar('\n');
F(22421, 19);
putchar('\n');
}
I've been wanting to do this for a while...
HTML + CSS 491 487 485 bytes
-4 bytes thanks to Conor O'Brien
-2 bytes thanks to Releasing Helium Nuclei
Input is taken as the width and height of the page window; width being the number of Views, and height being the number of Answers.
<style>p{overflow:hidden;width:1ch}@media(max-aspect-ratio:70/2){p{width:1ch}}@media(max-aspect-ratio:70/3){p{width:2ch}}@media(max-aspect-ratio:70/4){p{width:3ch}}@media(max-aspect-ratio:70/5){p{width:4ch}}@media(max-aspect-ratio:70/6){p{width:5ch}}@media(max-aspect-ratio:70/7){p{width:6ch}}@media(max-aspect-ratio:70/8){p{width:7ch}}@media(max-aspect-ratio:70/9){p{width:8ch}}@media(max-aspect-ratio:7/1){p{width:9ch}}@media(max-aspect-ratio:70/11){p{width:10ch</style><p>**********
You can try it in your browser by entering
data:text/html,<style>p{overflow:hidden;width:1ch}@media(max-aspect-ratio:70/2){p{width:1ch}}@media(max-aspect-ratio:70/3){p{width:2ch}}@media(max-aspect-ratio:70/4){p{width:3ch}}@media(max-aspect-ratio:70/5){p{width:4ch}}@media(max-aspect-ratio:70/6){p{width:5ch}}@media(max-aspect-ratio:70/7){p{width:6ch}}@media(max-aspect-ratio:70/8){p{width:7ch}}@media(max-aspect-ratio:70/9){p{width:8ch}}@media(max-aspect-ratio:7/1){p{width:9ch}}@media(max-aspect-ratio:70/11){p{width:10ch</style><p>**********
as a url in a new tab.
Perl, 35 32 bytes
say"*"x(10-($-=10-pop()/70/pop))
Use -E to activate say and give the arguments in the reverse order:
perl -E 'say"*"x(10-($-=10-pop()/70/pop))' 2 163
If arguments on STDIN are allowed the following is 29 bytes:
(echo 163; echo 2) | perl -pe '$_="*"x(10-($-=10-$_/70/<>))'
PHP 5.6, 66 bytes
function a($v,$a){echo str_repeat('*',max(0,min(10,1+$v/$a/70)));}
First we simplify the equation to v/a/70. From there we add 1 since PHP will use this number as an integer for the str_repeat, essentially doing abs($number+1). Then we use the hand-rolled clamp function of max($min_number, min($max_number, $the_number)) to keep it between 1 and 10.
The substr version is a few bytes shorter (due to not having to have to build in the clamp functionality), but this one was more fun to make.
C#, 97 89 87 77 42 41 bytes
v=>a=>new string('*',(v/=a*70)<9?v+1:10);
Saved 10 bytes thanks to Adám
Saved a few bytes thanks to Arnauld
C#, 68 49 48 bytes
v=>a=>"**********".Substring((int)(10-v/a/70d));
This is the C# version of this excellent answer by Neil.
Saved another 19 bytes thanks to Neil
Fourier, 46 bytes
All division in Fourier is integer division, so I just add one after division.
I*10/I/700^~X<0{1}{0~X}X>10{1}{10~X}X(42ai^~i)
Mathematica, 38 35 bytes
StringRepeat["*",10,⌈#/#2/70⌉]&
Thanks to @MartinEnder for 3 bytes
Actually, 14 bytes
:70a\\u9ukm'**
Takes advantage of the fact that 0 views and 0 answers is impossible, and thus ceil(v/a) > 0.
Explanation:
:70a\\u9ukm'**
:70 push 70 ([70 a v])
a invert stack ([v a 70])
\\ integer division twice ([v//a//70])
u add 1 ([v//a//70 + 1])
9uk push 10, make stack into list ([[v//a//70+1, 10]])
m minimum of list
'** push "*", repeat
Haskell, 35 bytes
This solution is as completely different from Laikonis answer as it gets for something this trivial. Yet the score (for now) is exactly the same.
v%a=take(ceiling$v/a/70)[0..9]>>"*"
This produces ten stars, then shaves off some. Easy to extend to arbitrary difficulty with an infinite list.
I did manage to shave off one more byte. But while all test cases work, this shouldn't be correct in general.
v%a=take(1+div v(a*70))[0..9]>>"*"
Batch, 81 bytes
@set/an=(700*%2-%1)/%2/70,n*=!(n^>^>31)
@set s=**********
@call echo %%s:~%n%%%
Port of my JavaScript answer, except that Batch uses integer arithmetic, so I wrote the formula as (700*a-v)/a/70 which will truncate towards zero, and then the n*=!(n^>^>31) clears n if it is negative.
dc, 110 108 104 98 bytes
This was a doozy since slicing isn't a thing. Also, dc doesn't manipulate strings. I just really was waiting for a string one that would be < 5 hours of coding. On the plus side, I finally started writing down common constructs, like for loops. Also had to formulate rounding/ceiling, so thanks for that.
[42P]sd[dsi[li0!=dli1-dsi0!=L]dsLx]sl[Isi[li0!=dli1-dsi0!=L]dsLx]sg[1+]saIk/70*0k1~0!=adI>ldI!>gIP
Invoked in bash:
echo 'v a (above)'|dc
# Wholly:
>> echo '163 2 [42P]sd[dsi[li0!=dli1-dsi0!=L]dsLx]sl[Isi[li0!=dli1-dsi0!=L]dsLx]sg[1+]saIk/70*0k1~0!=adI>ldI!>gIP'|dc
# outputs:
**
>>
Replacing (above) with the code, and v and a with their respective counterparts above. The single quotes are important (otherwise you get bash's history stuff).
Explained:
[42P]sd # Here we store a macro in register d to print 1 * without a newline
[dsi[li0!=dli1-dsi0!=L]dsLx]sl # Store the "less than" case, a for loop which
# uses the top-of the stack as it's number of iterations.
[Isi[li0!=dli1-dsi0!=L]dsLx]sg # Store the "greater than" case. It's the above,
# but it puts 10 on the stack to use instead.
[1+]sa # Store a macro to add 1 to whatever is the top-of-stack.
Ik # Set precision at non-zero to allow decimal division
/70* # Divide the top two of the stack, v/a; multiply by 70 (`/700*10` == `/70`)
# dc is postfix and stack-based, so operators come after operands.
0k1~0!=a # This is a ceiling function.
|> 0k # set precision to 0 to perform integer division
|> 1~ # push the quotient of integer division by 1, and then the remainder. (r is top)
|> 0!=a # If the top-of-stack (decimal part) is not 0, add 1 to the quotient
dI>ldI!>g # Conditional statement
|> dI>l # (d)uplicate the top, push 10 on. If 10 > the old top, execute the `l`ess-than
# case, which loops top-of-stack times.
|> dI!>g # Complement of the above, using the `g`reater-than to loop 10 times.
IP # print a newline
This is probably more golf-able, but I was trying to get it finished to avoid premature optimization.
- 2 bytes saved by duplicating-saving instead of saving-loading
- 4 bytes saved dividing by 70
- 6 bytes from daniero's suggestions (non-strings, ASCII nums instead; 10 => I)
Pyke, 13 9 bytes
/70/\**T<
Explanation:
/ - num_1 / num_2
70/ - ^ / 70
\** - "*" * ^
T< - ^[:10]
m4, 136 135 bytes
define(r,`ifelse($1,0,,eval($1>9),1,*`r(9)',*`r(decr($1))')')define(f,`r(ifelse(eval($1%($2*70)),0,eval($1/$2/70),eval($1/$2/70+1)))')
Defines a macro f which takes v and a, and expands to the correct output. Most of the program is an implementation of ceiling.
Python 3, 69 68 bytes
I didn't want to copy the Python 2 answer, so mine is slightly longer.
from math import*
x=lambda v,a:print(max(0,min(ceil(v/a/70),10))*'*')
Saved 1 byte thanks to Program man
Haskell, 35 bytes
v#a=[1..min(ceiling$v/a/70)10]>>"*"
[1..min(ceiling$v/a/70)10] creates a range from 1 to the computed difficulty (an empty list for difficulty 0). a>>b repeats the list b length a often.
MATLAB, 34 33 bytes
Because I like this challange so much, here is one for MATLAB (outputs trailing whitespaces):
@(v,a)[(ceil(v/a/70)>0:9)*42,'']
Inspired by @Luis Mendo's answer. Thanks to @pajonk for saving one byte.
Jellyfish, 18 bytes
P
#'*
mM/%i
10 %70
Takes input in the format [a v]. Try it online!
Explanation
%is reciprocal, so%70is 1/70.iis input, as a two-element array./%with inputsiand%70reduces the arrayiby flipped division with initial value%70. In other words, it computes v/(a/(1/70)), which is equal to v / (70*a).Mtakes the ceiling of this value, andmtakes the maximum of that and10.#'*repeats the literal*character that many times.Pprints the result without quotes.
Python2, 32 bytes
saved 3 + 2 bytes and corrected off by one error thanks to Leaky Nun
lambda v,a:('*'*10)[:~-v/a/70+1]
similar to Neils answer. Uses the fact that Python2 does integer division.
JavaScript (ES6), 40 39 bytes
v=>a=>"**********".substring(10-v/a/70)
Because substring provides the required clamping and "ceil"ing behaviour. Edit: Normally I'm too lazy to bother, but because it got 4 upvotes, I've followed @MarsUltor's advice to save 1 byte by currying.
Javascript (ES6), 37 36 bytes
v=>a=>"*".repeat((v/=a*70)<9?v+1:10)
Saved 1 byte by currying, thanks to TheLethalCoder
let F=
v=>a=>"*".repeat((v/=a*70)<9?v+1:10)
console.log("Test #1:", F(163)(2)) // **
console.log("Test #2:", F(548)(22)) // *
console.log("Test #3:", F(1452)(24)) // *
console.log("Test #4:", F(1713)(37)) // *
console.log("Test #5:", F(4162)(32)) // **
console.log("Test #6:", F(3067)(15)) // ***
console.log("Test #7:", F(22421)(19)) // **********
MATL, 12 bytes
/70/0:9>42*c
Explanation
The rounding up and clamping are done simultaneously as follows: the number x = v/a/70 is compared against each element of the array [0 1 ... 9]. The numbers of that array that are exceeded by x will become asterisks, and the rest will be spaces.
/ % Take the two numbers implicitly. Divide. (Example: for inputs 3067, 15
% we get 204.47)
70/ % Divide by 70 (we get 2.92)
0:9 % Push array [0 1 ... 9]
> % See which of those are exceeded by the previous number (2.92 exceeds
% 0, 1 and 2, so we get [1 1 1 0 ... 0]). This does the rounding up
% and the clamping
42* % Multiply by 42, which is the ASCII code of '*' (we get [42 42 42 0 ... 0])
% Char 0 will be displayed as space
c % Convert to char. Implicitly display
Javascript ES6, 48 bytes
a=>b=>"*".repeat(Math.ceil(Math.min(a/b/70,10)))
CJam, 18 15 14 bytes
Saved 1 byte thanks to Peter Taylor and 3 bytes thanks to Adnan
'*A*q~d/70/m]<
'*A* e# Push "**********"
q~d/ e# Get the input and divide the two numbers
70/ e# Divide by 70
m] e# Ceil, yielding x
< e# Slice the string, taking the first x elements
05AB1E, 11 bytes
/70/î'*T×s£
Explanation
/ # divide v by a
70/ # divide by 70
î # round up, call this n
'*T× # push 10 asterisks
s£ # take n up to 10 asterisk
# implicitly print
Dyalog APL, 15 bytes
'*'⍴⍨10⌊⌈⎕÷70×⎕
'*'⍴⍨ the character repeated this many times:
10⌊ min(10,...
⎕÷ input divided by
70× seventy times
⎕ input
PowerShell v2+, 47 bytes
-join(('*'*11)[1..($args[0]/$args[1]/70+.499)])
Somewhat a port of @Neil's JavaScript answer.
Takes input $args and divides them, then divides that by 70, and adds .499. Since PowerShell does banker's rounding, this is effectively ceil to two decimal points of precision. If additional precision is required, tack on as many additional 9s as required.
Along with the 1.., this forms a range index into a string. The string is '*'*11, i.e. '***********'. That results in a char-array, so we -join it together back into a string. That string is left on the pipeline and output is implicit. Like Neil's answer, this effectively "clamps" the output to be between 1 and 10 stars.
Test Suite
PS C:\Tools\Scripts\golfing> @(@(163,2), @(548,22), @(1452,24), @(1713,37), @(4162,32), @(3067,15), @(22421,19))|%{($_-join', ')+" -> " +(.\difficulty-of-a-question $_[0] $_[1])}
163, 2 -> **
548, 22 -> *
1452, 24 -> *
1713, 37 -> *
4162, 32 -> **
3067, 15 -> ***
22421, 19 -> **********
javascript: 82 73 bytes
(v,a)=>console.log("*".repeat(Math.min(Math.max(0,Math.ceil(v/a/70),10)))
- saved some bytes after Adám pointed out I overlooked the /700*10=/70, and the removal of parens
Pyth, 17 13 bytes
4 bytes in credit to Luis Mendo for his algorithm.
*\*htS[0T.EccFQ70*\*s>LccFQ70T