Вдохновленные сценами Силиконовой долины "клуб с тремя запятыми", такими как эта , в этом вызове вы расскажете десяти людям о "клубе запятых", к которому они принадлежат.
Если вы не знакомы с термином «клуб запятых», позвольте мне объяснить: вы находитесь в клубе с запятыми, если ваши деньги находятся в диапазоне от 1000,00 до 999 999,99 долларов США; вы находитесь в клубе с двумя запятыми, если он находится в диапазоне от 1 000 000,00 до 999 999 999,99 долларов США; эти "клубы" повторяются через клуб с тремя запятыми, поскольку ни один человек на Земле (AFAIK) не владеет более чем одним триллионом долларов США (японская иена очень быстро станет другой историей). Таким образом, число запятых на вашем банковском счете, в соответствии со стандартами обозначений, наиболее распространенными в Соединенных Штатах и Великобритании, обозначает клуб запятых, к которому вы принадлежите. Те же правила «запятых» применяются к отрицательным числам (хотя вы не хотели бы быть в клубе с отрицательными запятыми): отрицательные суммы в включающем диапазоне [-0,01, -999.
Тестовые случаи
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
Правильные ответы:
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.
Какие бы настройки массива вам ни понадобились, чтобы получить friends
массив, amounts
массив не учитывается при подсчете очков. Так что для Python следующий код не считается:
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']
Изменить: Пожалуйста, смотрите пересмотренные тестовые случаи
Я удалил фактические строковые запятые из тестовых случаев, чтобы сделать все немного сложнее, а не просто считать запятые.
"Name number,Name number,..."
приемлемым?-$1,234.56
также будут в клубе с 1 запятой?"<name> is in the <number of commas>-club."
Ответы:
JavaScript (ES6), 80 байт
Принимает массив массивов [friend, amount] и возвращает массив "friend in n-comma club". строки. Работает, добавляя дополнительные конечные нули, так что длина составляет 6-8 для клуба с 0 запятыми, 9-11 для клуба с 1 запятой, 12-15 для клуба с 2 запятыми и т. Д.
https://jsfiddle.net/cau40vmk/1/
источник
Math.log10(n*n)/6|0
.|0
до нуля, так что это дает правильный ответ для Джейми.PostgreSQL, 61 байт
@x
является абсолютным значениемx
,log(x)
является логарифмом по основанию-10 иdiv(y, x)
вычисляет целочисленное отношение y / x.Настроить:
Выход:
источник
Желе ,
3432 байтаДвоичная ссылка (функция), которая принимает список банковских балансов в виде чисел (десятичных / целых) и список имен в виде строк и возвращает список строк.
Попробуйте онлайн! - нижний колонтитул
çY
просто вызывает функцию и объединяет результирующий список с переводами строки, чтобы он имел хороший результат при запуске в качестве полной программы.Как?
источник
PHP,
7674 байтаК счастью, мне не нужно приводить к int (как это было бы в C); PHP делает это неявно для
%d
.источник
Mathematica (86 байт)
Установка (с именами в виде строк, деньги в виде чисел):
Попытка:
Все строковые функции Mathematica включают в себя «String», поэтому я думаю, что журналы короче.
Max[...,0]
Должно иметь дело с числами досадной отрицательными или отрицательной бесконечностью для людей , которые имеют между -1 и 1 долларами. Журнал отрицательного числа включает в себя мнимые вещи, но Mathematica услужливо игнорирует это при взятииFloor
!источник
Japt , 36 байт
Это принимает в качестве суммы в качестве первого ввода, имя в качестве второго.
объяснение
Japt использует библиотеку shoco для сжатия строк.
Вдохновленный @ Нила решения .
Сохранено 7 байт благодаря @ETHproductions
Попробуйте онлайн!
источник
Vw0 x4 l /3-2|0
в средней части, сохранив 6 байтов :-)V+`...{w0...
MATL,
504843 байтаПопробуйте это на MATL Online
объяснение
источник
R, 68 байт
Настройка:
Решение:
Возьмите из базы 10 логарифм абсолютной стоимости счета, округлите вниз и напечатайте с именами.
Я не уверен, что он может быть меньше, если
a
будет символьный вектор ...источник
log10
вызов произведетNaN
s для негативов. Похоже,log10(abs(a))
будет работать.abs(x)
использования используйтеpmax(a,1)
- это займет что-то меньше 1 и сделает его 1, давая хорошие результаты для отрицательных чисел. И вместоfloor(log10(...)/3)
тебя можно использоватьlog10(...)%/%3
. Я думаю, что это уменьшает до 66 байт (и исправляет негативы).cat()
и\n
... печать вектора со строками в нем на консоли может считаться достаточно хорошей (* ahem *, как в ответах Python).JavaScript, 59 байт
Сохранено 3 байта благодаря @ETHproductions
Сохранено 2 байта благодаря @Cyoce
демонстрация
Показать фрагмент кода
источник
`${}`
и вы можете использовать функциюn=>m=>...
вместо(n,m)=>...
Vim, 72 байта
Каким-то образом я должен показать, что есть конечный результат, но не уверен, как. Это просто основной ответ регулярного выражения, который, я уверен, может быть побежден любым языком регулярных выражений. Я бы использовал V, но я думаю, что команды замены в V используют
/
по умолчанию в качестве разделителя, и я не мог понять, как заставить его не жаловаться на разделение.Принимает ввод в качестве таблицы OP и возвращает значения в виде таблицы, но с финансовой информацией, замененной на «находится в клубе запятых X»
Попробуйте онлайн!
источник
\-=
добавляет. Кроме того, если вы удалите лишние пробелы в своем входе и также измените регулярное выражение,\v (\d*).*;
вы можете сохранить 4 байта05AB1E , 32 байта
Попробуйте онлайн!
объяснение
источник
Python 2, 69 байт
Настройте наши массивы:
И наша функция может быть:
Давать нам:
Если массив должен быть идентичен указанному в вопросе, тогда решение стоит 76 байт:
источник
Powershell, 82 байта
Предполагая ввод двумерного массива
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))
Выход
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.
источник
Haskell, 71 байт
Определяет оператор '#', который дает правильный ответ. Например:
К сожалению, в Haskell нет компактной
log10
функции, как во многих других языках, но у нее есть полезнаяlogBase
функцияlogBase 1000 0.05
, поэтому нам не нужно делить наш ответ на 3. К сожалению, это отрицательное число, поэтому нам нужно использовать дольшеtruncate
, чемfloor
округлять его.Полная программа, включая тестовые случаи:
Дает следующие результаты:
источник
К, 66 байт
источник
Python 2,7 ,
89 8684 байтаПопробуйте онлайн!
Полная программа, которая принимает кортеж из двух списков - имена в виде строк, банковские балансы в виде чисел - и печатает полученные строки.
источник
C #, 125 байт
Анонимная функция, которая печатает результат в формате ОП.
Полная программа с тестовыми примерами:
источник
Питон 3 (
207 159 110 9586 байт, благодаря @iwaseatenbyagrue)Немного о настройке:
Моя попытка:
Результаты:
Редактировать: преобразование всего в абсолютные значения сэкономило мне 15 байтов.
источник
["%s is in the %d-comma club."%(p,v.count(','))for p,v in zip(f,a)]
Кроме того, вы должны включить количество байтов.print'\n'.join([your array])
и на самом деле распечатать вывод.-123.45
) отключены на один (так как вы считаете-
). Но почему бы не взять список чисел и сохранить (я неправильно истолковал?). Вам нужно было бы добавить операторы импорта, и в нынешнем виде это фрагмент кода, а не программа или функция (как по умолчанию, и изменение их не рекомендуется, если нет веской причины).math.ceil
функция Python, вероятно, добавляет немного накладных расходов на мой счет.(-len(str(abs(v)).split('.')[0])
наlen(str(int(float(v))))
. В вашем тестовом наборе нет отрицательных чисел (в примерах есть одно). Если вы хотите быть законченным, потратьте 5 байтов,len(str(abs(int(float(v)))))
что сэкономит вам только 4 байта.Perl 6,
10795 байтНе моя гордая работа, дай мне знать, если я забыл какие-нибудь техники игры в гольф. РЕДАКТИРОВАТЬ: -12 байт благодаря @Ven
источник
^@f.elems
? Кстати, вам это не нужно.elems
,for ^@f
работает. Вам не нужно называть свой$x
, используйте$_
вместо этого. И не используйте printf, используйте"{"interpolation"}"
.for @f
? Вы можете использовать$++
в качестве индекса, чтобы идти вместе с ним (и индексировать в@a
).Python 2, 87 байт
Немного старше (90 байт):
Вводит в виде списка кортежей (имя, количество).
Я делаю это на своем телефоне в школе, поэтому я проверю это позже.
источник
постоянный ток,
5654 байтаДля этого требуется ввод из стека, который должен быть предварительно загружен с первым именем в верхней части стека, первым номером, вторым именем, вторым номером и т. Д.
Вот пример загрузки стека и запуска макроса, g:
который производит обычный вывод,
Вот толкование кода:
Обратите внимание, что в редактировании 1 я заменил
dZrX-
(d = dup, Z = длина числа, r = своп, X = дробь, - = вычесть) на1/Z
(разделить число на 1, которое по умолчанию со шкалой от нуля усекается до целого числа; затем Z = число длина), сохраняя два байта.источник
Swift ,
166158145 байтовА вот и словарь:
Попробуй это здесь!
источник
Clojure, 108 байт
Не уверен, что работа с плавающей точкой будет короче, чем с последовательностями символов. Не уверен, что не функциональный ответ в порядке, который возвращает последовательность ответов.
источник
Реболь, 118 байт
Развернутый с объявлением массива:
Выход:
источник
Java 8
154141 байтUngolfed
источник
String.valueOf
и использовать(((""+Math.abs(m.get(k).longValue())).length()-1)/3)
вместо.k->
.