Inspirado en las escenas del "club de tres comas" de Silicon Valley, como esta , en este desafío le contarás a diez personas el "club de comas" al que pertenecen.
Si no está familiarizado con el término "club de coma", permítame explicarle: está en el club de una coma si el dinero que tiene está en el rango inclusivo de $ 1,000.00 a $ 999,999.99; estás en el club de dos comas si está en el rango de $ 1,000,000.00 a $ 999,999,999.99; estos "clubes" se repiten a través del club de tres comas, ya que ningún individuo en la Tierra (AFAIK) posee más de un billón de dólares estadounidenses (el yen japonés sería una historia diferente muy rápidamente). Entonces, la cantidad de comas que tiene su cuenta bancaria, de acuerdo con los estándares de notación más comunes en los Estados Unidos y Gran Bretaña, denota el club de comas al que pertenece. Las mismas reglas de "coma" se aplican a los números negativos (aunque no querría estar en el club de coma negativo): cantidades negativas en el rango inclusivo [-0.01, -999.
Los casos de prueba
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
Las respuestas correctas:
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.
Cualquier configuración de matriz que necesite para obtener una friends
matriz y una amounts
matriz no cuenta para su puntaje. Entonces, para Python, el siguiente código no cuenta:
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']
Editar: consulte los casos de prueba revisados
Eliminé las comas de cadena reales de los casos de prueba para hacer las cosas un poco más difíciles, en lugar de contar las comas.
"Name number,Name number,..."
aceptable?-$1,234.56
también estarían en el club de 1 coma?"<name> is in the <number of commas>-club."
Respuestas:
JavaScript (ES6), 80 bytes
Toma una matriz de matrices [amigo, cantidad] y devuelve una matriz de "amigo está en el club n-coma". instrumentos de cuerda. Funciona agregando ceros finales adicionales para que la longitud sea 6-8 para el club de 0 comas, 9-11 para el club de 1 coma, 12-15 para el club de 2 comas, etc.
https://jsfiddle.net/cau40vmk/1/
fuente
Math.log10(n*n)/6|0
.|0
truncar a cero, por lo que da la respuesta correcta para Jamie.PostgreSQL, 61 bytes
@x
es el valor absoluto dex
,log(x)
es el logaritmo de base 10 ydiv(y, x)
calcula el cociente entero de y / x.Preparar:
Salida:
fuente
Jalea ,
3432 bytesUn enlace diádico (función) que toma una lista de saldos bancarios como números (decimales / enteros) y una lista de nombres como cadenas y devuelve una lista de cadenas.
Pruébalo en línea! - el pie de página
çY
simplemente llama a la función y se une a la lista resultante con avances de línea para que tenga un buen resultado cuando se ejecuta como un programa completo.¿Cómo?
fuente
PHP,
7674 bytesAfortunadamente no tengo que enviar a int (como tendría que hacer en C); PHP lo hace implícitamente para
%d
.fuente
Mathematica (86 bytes)
La configuración (con nombres como cadenas, dinero como números):
El intento:
Todas las funciones de cadena de Mathematica incluyen "Cadena" en el nombre, por lo que creo que los registros son más cortos. El
Max[...,0]
es tratar con los molestos números negativos o el infinito negativo para las personas que poseen entre -1 y 1 dólares. El registro de un número negativo incluye cosas imaginarias, pero Mathematica lo ignora cuando toma unFloor
!fuente
Japt , 36 bytes
Esto toma la cantidad como la primera entrada, el nombre como la segunda.
Explicación
Japt usa la biblioteca shoco para la compresión de cadenas.
Inspirado en la solución de @ Neil .
Guardado 7 bytes gracias a @ETHproductions
Pruébalo en línea!
fuente
Vw0 x4 l /3-2|0
en la sección central, ahorrando 6 bytes :-)V+`...{w0...
MATL,
504843 bytesPruébalo en MATL Online
Explicación
fuente
R, 68 bytes
La puesta en marcha:
La solución:
Tome el registro de base 10 del valor absoluto de la cuenta, redondee hacia abajo e imprima con los nombres.
No estoy seguro de si podría ser más pequeño si
a
fuera un vector de caracteres ...fuente
log10
llamada produciráNaN
s para negativos. Parecelog10(abs(a))
que funcionaría.abs(x)
usarpmax(a,1)
, esto tomará menos de 1 y lo convertirá en 1, dando buenos resultados para números negativos. Y, en lugar defloor(log10(...)/3)
que pueda usarlog10(...)%/%3
. Creo que eso lo reduce a 66 bytes (y lo corrige para los negativos).cat()
y\n
... imprimir el vector con las cadenas en la consola podría considerarse lo suficientemente bueno (* ejem * como las respuestas de Python).JavaScript, 59 bytes
Guardado 3 bytes gracias a @ETHproductions
Guardado 2 bytes gracias a @Cyoce
Manifestación
Mostrar fragmento de código
fuente
`${}`
y puede curry la función enn=>m=>...
lugar de(n,m)=>...
Vim, 72 bytes
De alguna manera debería mostrar que hay un retorno final, pero no estoy seguro de cómo. Esta es solo una respuesta básica de expresiones regulares, que estoy seguro podría ser superada por cualquier lenguaje de expresiones regulares. Hubiera usado V, pero creo que los comandos sustitutos en V usan
/
como separador por defecto, y no pude encontrar la manera de que no se queje de la división.Toma datos como la tabla de OP y devuelve valores como la tabla, pero con la información financiera reemplazada por "está en el club de coma X"
Pruébalo en línea!
fuente
\-=
agregue nada. Además, si elimina los espacios adicionales en su entrada y también cambia la expresión regular\v (\d*).*;
, podría ahorrar 4 bytes05AB1E , 32 bytes
Pruébalo en línea!
Explicación
fuente
Python 2, 69 bytes
Configura nuestras matrices:
Y nuestra función puede ser:
Dándonos:
Si la matriz necesita ser idéntica a la proporcionada en la pregunta, entonces la solución cuesta 76 bytes:
fuente
Powershell, 82 bytes
Suponiendo una entrada de matriz 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 salida es
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.
fuente
Haskell, 71 bytes
Define un operador '#' que proporciona la respuesta correcta. P.ej:
Desafortunadamente, Haskell no tiene una
log10
función compacta como muchos otros idiomas, pero tiene unalogBase
función útil , lo que significa que no necesitamos dividir nuestra respuesta entre 3. Desafortunadamente,logBase 1000 0.05
es un número negativo, por lo que debemos usar el más largotruncate
quefloor
redondearlo.Programa completo que incluye casos de prueba:
Da los siguientes resultados:
fuente
K, 66 bytes
fuente
Python 2.7 ,
89 8684 bytesPruébalo en línea!
Programa completo que toma una tupla de dos listas: nombres como cadenas, saldos bancarios como números e imprime las cadenas resultantes.
fuente
C #, 125 bytes
Función anónima que imprime el resultado en el formato del OP.
Programa completo con casos de prueba:
fuente
Python 3 (
207 159 110 9586 bytes, gracias a @iwaseatenbyagrue)Un poco de configuración:
Mi intento:
Resultados:
Editar: convertir todo a valores absolutos me ahorró 15 bytes.
fuente
["%s is in the %d-comma club."%(p,v.count(','))for p,v in zip(f,a)]
Además, debe incluir un recuento de bytes.print'\n'.join([your array])
e imprimir realmente la salida.-123.45
) están apagados por uno (ya que cuenta el-
). Pero, ¿por qué no tomar una lista de números y guardar (¿he malinterpretado?). Debería agregar declaraciones de importación, y tal como está, este es un fragmento, no un programa o función (como son los valores predeterminados, y se desaconseja cambiarlos a menos que haya una buena razón).math.ceil
función de Python probablemente agrega un poco de sobrecarga a mi puntaje.(-len(str(abs(v)).split('.')[0])
conlen(str(int(float(v))))
. En su conjunto de prueba, no hay números negativos (en los ejemplos, hay uno). Si quisieras ser completista, gasta 5 bytes para hacerlen(str(abs(int(float(v)))))
, lo que solo te ahorra 4 bytes.Perl 6,
10795 bytesNo es mi trabajo más orgulloso, avísenme si he olvidado alguna técnica de golf. EDITAR: -12 bytes gracias a @Ven
fuente
^@f.elems
? por cierto no necesitas eso.elems
,for ^@f
funciona. No necesita nombrar su$x
, use$_
en su lugar. Y no use printf, use"{"interpolation"}"
.for @f
? Puede usarlo$++
como índice para acompañarlo (e indexarlo@a
).Python 2, 87 bytes
Un poco más antiguo (90 bytes):
Toma la entrada como una lista de tuplas (nombre, cantidad).
Estoy haciendo esto en mi teléfono en la escuela, así que lo probaré más tarde.
fuente
dc,
5654 bytesEsto toma la entrada de la pila, que debe cargarse previamente con el primer nombre en la parte superior de la pila, el primer número, el segundo nombre, el segundo número, etc.
Aquí hay un ejemplo de cómo cargar la pila y ejecutar la macro, g:
que produce la salida habitual,
Aquí hay una exégesis del código:
Tenga en cuenta que en la edición 1 reemplacé
dZrX-
(d = dup, Z = longitud del número, r = intercambio, X = fracción, - = restar) con1/Z
(dividir el número por 1, que con la escala predeterminada de cero se trunca a entero; luego Z = número longitud), ahorrando dos bytes.fuente
Swift ,
166158145 bytesY aquí está el diccionario:
Pruébalo aquí!
fuente
Clojure, 108 bytes
No estoy seguro si la operación en flotadores se acortaría que en secuencias de caracteres. No estoy seguro si la respuesta sin función está bien, lo que devuelve una secuencia de respuestas.
fuente
Rebol, 118 bytes
Ungolfed con declaración de matriz:
Salida:
fuente
Java 8
154141 bytesSin golf
fuente
String.valueOf
y usar(((""+Math.abs(m.get(k).longValue())).length()-1)/3)
en su lugar.k->
.