Briefing
La difficulté d'une question Code Golf peut être calculée comme suit:
Où v
est le nombre de points de vue qu'une question a
et a
est le nombre de réponses qu'une question a
et ⌈ x est l' opérateur de plafond .
Également:
La difficulté actuelle de cette question: ***
Tâche
Ecrivez un programme qui prendra deux entiers (v and a)
et affichera la difficulté en asterisks (*)
.
L'entrée peut être sous la forme d'un tableau, d'une chaîne séparée ou d'arguments de fonction séparés
Données de test
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 **********
Exemple avec pseudocode
v: 1713
a: 37
out = clamp(ceil(((v/a)/700)*10), 0, 10); // evaluates to 1
//program will output '*'
Le code le plus court en octets gagne! Les espaces de fin / fin sont autorisés.
/700 * 10
au lieu de/70
?Réponses:
JavaScript (ES6),
4039 octetsParce que
substring
fournit le comportement de serrage et de "plafond" requis. Edit: Normalement, je suis trop fainéant pour le déranger, mais comme il a reçu 4 votes positifs, j’ai suivi le conseil de @ MarsUltor de sauvegarder 1 octet en curry.la source
v=>a=>
substr
place? Je sais que le second paramètre fait la différence, mais je ne suis pas sûr du premier ...slice
serait encore plus court.substr
etslice
interprètent un argument négatif comme un décompte à partir de la fin de la chaîne.Je voulais faire ça depuis un moment ...
HTML + CSS
491487485 octets-4 octets grâce à Conor O'Brien
-2 octets grâce à la libération des noyaux d'hélium
L'entrée est prise en tant que largeur et hauteur de la fenêtre de page; width étant le nombre de vues et height le nombre de réponses.
Vous pouvez l'essayer dans votre navigateur en entrant
comme une URL dans un nouvel onglet.
la source
}
s aussi.05AB1E, 11 octets
Explication
Essayez-le en ligne
la source
Javascript (ES6),
3736 octetsSauvé 1 octet en currying, grâce à TheLethalCoder
Afficher l'extrait de code
la source
v=>a=>
au lieu de(v,a)=>
?v=70, a=1
ça?Mathematica,
3835 octetsMerci à @MartinEnder pour 3 octets
la source
Clip
la syntaxe à peu près identique à celle de Clamp de OP, mais j’ai vu queStringRepeat
le troisième argument optionnel était la troncature.Ceiling[]
.EXCEL, 29 octets
Si vous comptez Excel comme une représentation de VBA Excel, vous pouvez utiliser
où
v
eta
sont le nom des cellules de référence.la source
CJam,
181514 octetsSauvé 1 octet grâce à Peter Taylor et 3 octets grâce à Adnan
Essayez-le en ligne
la source
C #,
684948 octetsCeci est la version C # de cette excellente réponse de Neil.
A sauvé 19 autres octets grâce à Neil
la source
(int)System.Math.Floor(10-v/a/70)
ou juste(int)(10-v/a/70)
.70d
solitaire maisd
.v=>a=>
Java 8, 57 octets
Utilise un lambda pour enregistrer des octets, effectue le calcul et des sous-chaînes pour renvoyer la réponse.
Voici ma classe pour le tester.
Mise à jour
la source
java.lang.
puisque c'est le paquet inclus par défaut.System.out.println((int)2.99);
imprimé2
. Depuis que je prends la valeur prédéfinie de 10 puis celle-ci au sol, cela revient à retirer le plafond de 10.MATL , 12 octets
Essayez-le en ligne!
Explication
L'arrondi et le bridage se font simultanément comme suit: le nombre
x = v/a/70
est comparé à chaque élément du tableau[0 1 ... 9]
. Les nombres de ce tableau qui sont dépassésx
deviendront des astérisques et le reste sera constitué d'espaces.la source
Python2, 32 octets
sauvegardé 3 + 2 octets et corrigé d'une erreur grâce à Leaky Nun
semblable à Neils répondre. Utilise le fait que Python2 effectue une division entière.
la source
v=70
eta=1
f=
peut être enlevév, a
peut devenirv,a
Haskell, 35 octets
[1..min(ceiling$v/a/70)10]
crée une plage allant de 1 à la difficulté calculée (liste vide pour la difficulté 0).a>>b
répèteb
length a
souvent la liste .la source
Pyke,
13 à9 octetsEssayez-le ici!
Explication:
la source
C #,
978987774241 octets10 octets sauvés grâce à Adám
Enregistré quelques octets grâce à Arnauld
la source
(int)System.Math.Ceiling(v/a/70d)
par(v+69)/(70*a)
... Notez en outre que v / a ne peut pas être négatif,c
peut donc être simplifié beaucoup car vous n'avez pas besoin de vérifier cela.Perl,
3532 octetsUtilisez
-E
pour activersay
et donner les arguments dans l'ordre inverse:Si les arguments sur STDIN sont autorisés, 29 octets sont les suivants:
la source
0|
place$-=
? (La priorité des opérateurs qui pensent peut ne pas être juste ...)0|
un nombre négatif en un nombre énorme (conduisant à zéro*
s),$-=
clips à 0 (conduisant à dix*
s), ce dont j'ai besoin iciR,
68, 5052 octetsrep
place implicitement une minute sur le nombre 0.Merci à @plannapus et @ Anastasiya-Romanova pour avoir repéré mon erreur.
la source
f=
1+
aprèsmin(
pour obtenir les mêmes sortiesPyth ,
17 à13 octets4 octets de crédit à Luis Mendo pour son algorithme .
Suite de tests.
la source
Javascript ES6, 48 octets
la source
C,
54,51,50, 49 octetsEn supposant que ce
v
soit positif ou nul eta
positif, lex < min
cas de serrage n'est jamais rempli, car il n'y a aucun moyen que le résultat de l'opération de plafond puisse être négatif. De plus, le calcul des nombres entiers sur les valeurs non négatives donne toujours le plancher du résultat; nous ajoutons donc1
pour obtenir le plafond.Cette solution nécessite une
write
fonction, fonctionne au moins sur Linux.Test principal:
la source
(v=v/a/70)
par(v/=a*70)
enregistre 1 octet.javascript:
8273 octetsla source
console.log
, le retour c'est bien. Vous pouvez également enregistrer un octet avecv=>a=>
au lieu de(v,a)=>
Dyalog APL , 15 octets
'*'⍴⍨
le caractère répété plusieurs fois:10⌊
min (10, ...⎕÷
entrée divisée par70×
soixante-dix fois l'⎕
entréeTryAPL en ligne!
la source
'*'/⍨(⎕÷70×⎕)>⍳10
Méduse , 18 octets
Prend l'entrée dans le format
[a v]
. Essayez-le en ligne!Explication
%
est réciproque, donc%70
1/70.i
est entrée, sous forme de tableau à deux éléments./%
avec des entréesi
et%70
réduit le tableaui
par division inversée avec la valeur initiale%70
. En d'autres termes, il calcule v / (a / (1/70)) , ce qui est égal à v / (70 * a) .M
prend le plafond de cette valeur, etm
prend le maximum de cela et10
.#'*
répète le*
caractère littéral à plusieurs reprises.P
affiche le résultat sans guillemets.la source
MATLAB,
3433 octetsParce que j'aime tant ce défi, en voici un pour MATLAB (affiche les espaces à la fin):
Inspiré par la réponse de @Luis Mendo. Merci à @pajonk pour avoir sauvegardé un octet.
la source
[... '']
place dechar(...)
. Et avez-vous vraiment besoin duceil
moment où, à la fin, vous comparez avec des entiers?m4,
136135 octetsDéfinit une macro
f
qui prendv
eta
, et se développe jusqu'à la sortie correcte. La majeure partie du programme est une mise en œuvre du plafond.la source
dc,
110 108 10498 octetsC'était un doozy puisque trancher n'est pas une chose. En outre, dc ne manipule pas les chaînes. J'attendais vraiment une chaîne qui nécessiterait moins de 5 heures de codage. Sur le plan positif, j'ai finalement commencé à écrire des constructions communes, comme des boucles for. Aussi dû formuler arrondi / plafond, alors merci pour cela.
Invoqué dans bash:
Remplacer (ci-dessus) par le code, et
v
eta
avec leurs homologues respectifs ci-dessus. Les guillemets simples sont importants (sinon, vous obtiendrez des informations sur l'histoire de bash).A expliqué:
C’est probablement plus facile à jouer au golf, mais j’essayais de le terminer pour éviter une optimisation prématurée.
la source
[*]n
=>42P
. Chaque instance de10
peut être remplacée parI
.[]p
=>IP
Haskell, 35 octets
Cette solution est tout aussi différente de la réponse de Laikoni car elle procure un résultat aussi trivial. Pourtant, le score (pour l'instant) est exactement le même.
Cela produit dix étoiles, puis en rase certaines. Facile à étendre à la difficulté arbitraire avec une liste infinie.
J'ai réussi à supprimer un octet de plus. Mais bien que tous les cas de test fonctionnent, cela ne devrait pas être correct en général.
la source
TI-Basic, 39 octets
la source
PowerShell v2 +, 47 octets
Un peu la réponse JavaScript de @ Neil .
Prend les entrées
$args
et les divise, puis les divise en70
et ajoute.499
. Etant donné que PowerShell effectue l’arrondissement bancaire, laceil
précision est de deux décimales. Si une précision supplémentaire est requise, fixez autant de points supplémentaires9
que nécessaire.Avec
1..
, cela forme un index de plage dans une chaîne. La chaîne est'*'*11
, c'est à dire'***********'
. Cela donne un tableau de caractères, donc nous-join
le regroupons dans une chaîne. Cette chaîne est laissée sur le pipeline et la sortie est implicite. Comme la réponse de Neil, cela "pince" efficacement la sortie entre 1 et 10 étoiles.Suite de tests
la source
Python 3,
6968 octetsJe ne voulais pas copier la réponse Python 2, alors la mienne est un peu plus longue.
Sauvé 1 octet grâce à l'homme du programme
la source
from math import *
économiserez quelques octets.import*
sans espace.En fait, 14 octets
Essayez-le en ligne!
Profite du fait que 0 vues et 0 réponses sont impossibles, et donc
ceil(v/a) > 0
.Explication:
la source