Inspiré par les scènes du "club des trois virgules" de la Silicon Valley, comme celle-ci , dans ce défi, vous direz à dix personnes le "club des virgules" auquel ils appartiennent chacun.
Si vous n'êtes pas familier avec le terme «club de virgule», laissez-moi vous expliquer: vous êtes dans le club à une virgule si l'argent que vous avez est compris entre 1 000,00 $ et 999 999,99 $; vous êtes dans le club à deux virgules s'il se situe entre 1 000 000,00 $ et 999 999 999,99 $; ces "clubs" se répètent à travers le club des trois virgules, car aucun individu sur Terre (AFAIK) ne possède plus d'un billion de dollars américains (le yen japonais serait une histoire différente très rapidement). Ainsi, le nombre de virgules que possède votre compte bancaire, selon les normes de notation les plus courantes aux États-Unis et en Grande-Bretagne, indique le club de virgules auquel vous appartenez. Les mêmes règles de "virgule" s'appliquent pour les nombres négatifs (bien que vous ne souhaitiez pas être dans le club de virgule négatif): des montants négatifs dans la plage inclusive [-0.01, -999.
Les cas de test
Friend Amount
John 100000
Jamie 0.05
Kylie 1549001.10
Laura 999999999.99
Russ 986000000
Karla 1
Reid 99.99
Mark 999.99
Manson 1000.01
Lonnie 999999999999.00
Nelly -123.45
Les bonnes réponses:
John is in the 1-comma club.
Jamie is in the 0-comma club.
Kylie is in the 2-comma club.
Laura is in the 2-comma club.
Russ is in the 2-comma club.
Karla is in the 0-comma club.
Reid is in the 0-comma club.
Mark is in the 0-comma club.
Manson is in the 1-comma club.
Lonnie is in the 3-comma club.
Nelly is in the 0-comma club.
Quelle que soit la configuration du tableau dont vous avez besoin pour obtenir un friends
tableau, le amounts
tableau ne compte pas dans votre score. Donc, pour Python, le code suivant ne compte pas:
f = ['John', 'Jamie', 'Kylie', 'Laura', 'Russ', 'Karla', 'Reid', 'Mark', 'Manson', 'Lonnie']
a = ['100000', '0.05', '1549001.10', '999999999.99', '986000000', '1', '99.99', '999.99', '1000.01', '999999999999.00']
Modifier: veuillez consulter les cas de test révisés
J'ai supprimé les virgules de chaîne réelles des cas de test pour rendre les choses un peu plus difficiles, au lieu de simplement compter les virgules.
"Name number,Name number,..."
acceptable?-$1,234.56
également dans le club à 1 virgule?"<name> is in the <number of commas>-club."
Réponses:
JavaScript (ES6), 80 octets
Prend un tableau de tableaux [ami, montant] et renvoie un tableau "ami est dans le club n-virgule". cordes. Fonctionne en ajoutant des zéros de fin supplémentaires pour que la longueur soit de 6-8 pour le club à 0 virgule, de 9 à 11 pour le club à 1 virgule, de 12 à 15 pour le club à 2 virgules, etc.
https://jsfiddle.net/cau40vmk/1/
la source
Math.log10(n*n)/6|0
.|0
tronquer à zéro, donc ça donne la bonne réponse pour Jamie.PostgreSQL, 61 octets
@x
est la valeur absolue dex
,log(x)
est un logarithme en base 10 etdiv(y, x)
calcule le quotient entier de y / x.Installer:
Production:
la source
Gelée ,
3432 octetsUn lien dyadique (fonction) qui prend une liste de soldes bancaires sous forme de nombres (décimales / entiers) et une liste de noms sous forme de chaînes et renvoie une liste de chaînes.
Essayez-le en ligne! - le pied de page
çY
appelle simplement la fonction et rejoint la liste résultante avec des sauts de ligne afin qu'elle ait une sortie agréable lorsqu'elle est exécutée en tant que programme complet.Comment?
la source
PHP,
7674 octetsHeureusement, je n'ai pas besoin de transtyper en int (comme je le ferais en C); PHP le fait implicitement pour
%d
.la source
Mathematica (86 octets)
La configuration (avec des noms sous forme de chaînes, de l'argent sous forme de nombres):
La tentative:
Toutes les fonctions de chaîne de Mathematica incluent "String" dans le nom, donc je pense que les journaux sont plus courts. Il
Max[...,0]
s'agit de gérer les nombres négatifs embêtants ou l'infini négatif pour les personnes qui possèdent entre -1 et 1 dollar. Le journal d'un nombre négatif comprend des éléments imaginaires, mais Mathematica ignore utilement cela lors de la prise d'unFloor
!la source
Japt , 36 octets
Cela prend le montant comme première entrée, le nom comme deuxième.
Explication
Japt utilise la bibliothèque shoco pour la compression de chaînes.
Inspiré par la solution de @ Neil .
7 octets enregistrés grâce à @ETHproductions
Essayez-le en ligne!
la source
Vw0 x4 l /3-2|0
dans la section du milieu, en économisant 6 octets :-)V+`...{w0...
MATL,
504843 octetsEssayez-le sur MATL Online
Explication
la source
R, 68 octets
La mise en place:
La solution:
Prenez le journal de base 10 de la valeur absolue du compte, arrondissez puis imprimez avec les noms.
Je ne sais pas s'il pourrait être plus petit s'il
a
s'agissait d'un vecteur de caractères ...la source
log10
appel produira desNaN
s pour les négatifs. On dirait que çalog10(abs(a))
marcherait.abs(x)
, utilisezpmax(a,1)
- cela prendra moins de 1 et le rendra 1, donnant de bons résultats pour les nombres négatifs. Et, au lieu defloor(log10(...)/3)
vous pouvez utiliserlog10(...)%/%3
. Je pense que cela réduit à 66 octets (et corrige les points négatifs).cat()
et\n
... l'impression du vecteur avec les chaînes dans la console peut être considérée comme assez bonne (* ahem * comme les réponses Python).JavaScript, 59 octets
3 octets enregistrés grâce à @ETHproductions
Sauvegardé 2 octets grâce à @Cyoce
Démo
Afficher l'extrait de code
la source
`${}`
et vous pouvez utiliser la fonction aun=>m=>...
lieu de(n,m)=>...
Vim, 72 octets
D'une manière ou d'une autre, je devrais montrer qu'il y a un retour de fuite, mais je ne sais pas comment. Ceci est juste une réponse regex de base, qui, je suis sûr, pourrait être battue par n'importe quel langage regex. J'aurais utilisé V, mais je pense que les commandes de substitution dans V utilisent
/
comme séparateur par défaut, et je ne pouvais pas comprendre comment faire en sorte de ne pas se plaindre de la division.Prend l'entrée en tant que table OP et renvoie des valeurs en tant que table, mais avec les informations financières remplacées par "est dans le club de virgule X"
Essayez-le en ligne!
la source
\-=
ajoute quoi que ce soit. De plus, si vous supprimez les espaces supplémentaires dans votre entrée et modifiez également l'expression\v (\d*).*;
05AB1E , 32 octets
Essayez-le en ligne!
Explication
la source
Python 2, 69 octets
Configurez nos tableaux:
Et notre fonction peut alors être:
Nous donnant:
Si la baie doit être identique à celle fournie dans la question, la solution coûte 76 octets:
la source
Powershell, 82 octets
En supposant une entrée de tableau 2D de
cc.ps1 @(@("John",100000),@("Jamie",0.05),@("Kylie",1549001.10),@("Laura",999999999.99),@("Russ",986000000),@("Karla",1),@("Reid",99.99),@("Mark",999.99),@("Manson",1000.01),@("Lonnie",999999999999.00),@("Nelly",-123.45))
La sortie est
John is in the 1-comma club. Jamie is in the 0-comma club. Kylie is in the 2-comma club. Laura is in the 2-comma club. Russ is in the 2-comma club. Karla is in the 0-comma club. Reid is in the 0-comma club. Mark is in the 0-comma club. Manson is in the 1-comma club. Lonnie is in the 3-comma club. Nelly is in the 0-comma club.
la source
Haskell, 71 octets
Définit un opérateur '#' qui fournit la bonne réponse. Par exemple:
Malheureusement, Haskell n'a pas de
log10
fonction compacte comme beaucoup d'autres langages, mais il a unelogBase
fonction utile , ce qui signifie que nous n'avons pas besoin de diviser notre réponse par 3. Malheureusement,logBase 1000 0.05
c'est un nombre négatif, nous devons donc utiliser le plustruncate
plutôt quefloor
de la contourner.Programme complet comprenant des cas de test:
Donne les résultats suivants:
la source
K, 66 octets
la source
Python 2.7 ,
89 8684 octetsEssayez-le en ligne!
Programme complet qui prend un tuple de deux listes - les noms sous forme de chaînes, les soldes bancaires sous forme de nombres - et imprime les chaînes résultantes.
la source
C #, 125 octets
Fonction anonyme qui imprime le résultat au format OP.
Programme complet avec cas de test:
la source
Python 3 (
207159110110 95207159110110 86 octets, merci à @iwaseatenbyagrue)Un peu de configuration:
Ma tentative:
Résultats:
Edit: tout convertir en valeurs absolues m'a fait gagner 15 octets.
la source
["%s is in the %d-comma club."%(p,v.count(','))for p,v in zip(f,a)]
vous devez également inclure un nombre d'octets.print'\n'.join([your array])
et imprimer la sortie.-123.45
) sont décalés d'un (puisque vous comptez le-
). Mais pourquoi ne pas prendre une liste de numéros et enregistrer (ai-je mal interprété?). Vous auriez besoin d'ajouter des instructions d'importation, et en l'état, il s'agit d'un extrait et non d'un programme ou d'une fonction (comme les valeurs par défaut, et leur changement est déconseillé sauf si il y a une bonne raison).math.ceil
fonction de Python ajoute probablement un peu de surcharge à mon score.(-len(str(abs(v)).split('.')[0])
parlen(str(int(float(v))))
. Dans votre test, il n'y a pas de nombres négatifs (dans les exemples, il y en a un). Si vous vouliez être completiste, dépensez 5 octets à fairelen(str(abs(int(float(v)))))
- ce qui ne vous fait économiser que 4 octets.Perl 6,
10795 octetsCe n'est pas mon travail le plus fier, donnez-moi une note si j'ai oublié des techniques de golf. EDIT: -12 octets grâce à @Ven
la source
^@f.elems
? btw vous n'avez pas besoin de ça.elems
, çafor ^@f
marche. Vous n'avez pas besoin de nommer votre$x
, utilisez$_
plutôt. Et n'utilisez pas printf, utilisez"{"interpolation"}"
.for @f
? Vous pouvez l'utiliser$++
comme index pour l'accompagner (et indexer@a
).Python 2, 87 octets
Légèrement plus ancien (90 octets):
Prend l'entrée comme une liste de tuples (nom, montant).
Je fais ça sur mon téléphone à l'école donc je vais le tester plus tard.
la source
dc,
5654 octetsCela prend l'entrée de la pile, qui doit être préchargée avec le prénom en haut de la pile, le premier numéro, le deuxième nom, le deuxième numéro, etc.
Voici un exemple de chargement de la pile et d'exécution de la macro, g:
qui produit la sortie habituelle,
Voici une exégèse du code:
Remarque, dans l'édition 1, j'ai remplacé
dZrX-
(d = dup, Z = longueur du nombre, r = swap, X = fraction, - = soustraire) par1/Z
(diviser le nombre par 1, qui avec l'échelle par défaut de zéro tronque en entier; puis Z = nombre longueur), économisant deux octets.la source
Swift ,
166158145 octetsEt voici le dictionnaire:
Essayez-le ici!
la source
Clojure, 108 octets
Je ne sais pas si le fonctionnement sur des flotteurs serait court-circuité que sur des séquences de caractères. Je ne sais pas si la réponse non fonctionnelle est correcte, ce qui renvoie une séquence de réponses.
la source
Rebol, 118 octets
Ungolfed avec déclaration de tableau:
Production:
la source
Java 8
154141 octetsNon golfé
la source
String.valueOf
et utiliser à la(((""+Math.abs(m.get(k).longValue())).length()-1)/3)
place.k->
.