Скажи моїм друзям, до якого «кома-клубу» вони належать


16

Натхненні сценами "Клубу з трьома комами" в Силіконовій долині, як ця , в цьому виклику ви будете розповідати десяти людям про "клуб з комами", до якого вони належать.

Якщо ви не знайомі з терміном "комовий клуб", дозвольте мені пояснити: ви перебуваєте в клубі з одним комами, якщо кошти у вас є в межах від $ 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']

Редагувати: Перегляньте переглянуті тестові приклади

Я вилучив фактичні рядкові коми з тестових випадків, щоб зробити речі трохи складнішими, на відміну від простого підрахунку коми.


2
Я не думаю, що ви зробили вихідний формат дуже зрозумілим. Чи є щось на зразок "Name number,Name number,..."прийнятного?
FryAmTheEggman

2
Чи є записи у f гарантовано позитивними, або вони -$1,234.56також будуть в клубі з 1 комою?
Джонатан Аллан

2
@not_a_robot Не могли б ви звернутися до коментаря Фрая? Чи достатньо вивести пари імені та числа в будь-якому форматі?
Мартін Ендер

1
@FryAmTheEggman Ні, вихід повинен бути у форматі"<name> is in the <number of commas>-club."
blacksite

1
Тестові випадки не є специфічними. І навіть якби вони були, немає жодної тестової справи, яка б висвітлювала проблему великих негативів, порушених Джонатаном Алланом вище.
Пітер Тейлор

Відповіді:


10

JavaScript (ES6), 80 байт

a=>a.map(([s,n])=>s+` is in the ${n.toFixed(n<0?3:4).length/3-2|0}-comma club.`)

Бере масив [friend, sum] масивів і повертає масив "friend is in n-command club". струни. Працює, додаючи додаткові знаки нуля, щоб довжина становила 6-8 для клубу з 0 комами, 9-11 для клубу з 1 комами, 12-15 для клубу з 2 комами тощо.

https://jsfiddle.net/cau40vmk/1/


Я не думаю, що це працює для негативних чисел. Наприклад, вона поставила б Неллі (-123,45) в клуб з 1 комами. Я б запропонував коротше Math.log10(n*n)/6|0.
Арнольд

@Arnauld Ага так, я забув усі |0нулі до нуля, тому це дає правильну відповідь для Джеймі.
Ніл

8

PostgreSQL, 61 байт

SELECT f||' is in the '||div(log(@a),3)||'-comma club.'FROM p

@xце абсолютне значення x, log(x)є базою-10 логарифм і div(y, x)обчислює ціле частка від ділення у / х.


Налаштування:

CREATE TEMP TABLE p AS
SELECT * FROM (VALUES
    ('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)
) AS p (f, a)

Вихід:

            ?column?            
--------------------------------
 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.
(11 rows)

Приємно бачити конкурентну відповідь SQL - молодець!
Toby Speight

6

Желе , 34  32 байти

AḞbȷL’⁶;“£ṙƬs⁾`¬ụṂ“¢<ỴȦ8£l»jµ€⁹żY

Діадичне посилання (функція), яке приймає список залишків банку як числа (десяткових знаків / цілих чисел) та список імен як рядків і повертає список рядків.

Спробуйте в Інтернеті!- колонтитул çYпросто викликає функцію та приєднується до отриманого списку з каналами рядків, щоб він мав приємний вихід при запуску як повноцінна програма.

Як?

AḞbȷL’⁶;“£ṙƬs⁾`¬ụṂ“¢<ỴȦ8£l»jµ€⁹żY - Main link: bankBalances, names
                             €    - for each bankBalance:
A                                 - absolute value (treat negatives and positives the same)
 Ḟ                                - floor (get rid of any pennies)
  bȷ                              - convert to base 1000
    L                             - length (number of digits in base 1000)
     ’                            - decrement by one
      ⁶;                          - concatenate a space with that   ...because -------.
        “         “       »       - compressed list of strings:                       ↓
         £ṙƬs⁾`¬ụṂ                -     " is in the"  ← cannot compress a trailing space :(
                   ¢<ỴȦ8£l        -     "-comma club."
                           j      - join that list of strings with the "number plus space"
                            µ     - monadic chain separation (call that result L)
                              ⁹   - right argument (names)
                               ż  - zip with L

4

PHP, 76 74 байт

// data as associative array
$d=[Poorman=>-1234,John=>100000,Jamie=>0.05,Kylie=>1549001.10,Laura=>999999999.99,Russ=>1000000000,Karla=>1,Reid=>99.99,Mark=>999.99,Manson=>1000.01,Lonnie=>999999999999.00];
// code
foreach($d as$n=>$a)printf("$n is in the %d-comma club.
",log($a*$a,1e6));

На щастя, мені не доведеться кидати до int (як я мав би в C); PHP робить це неявно для %d.


Гей! Я перший тут, хто порахував замість того, щоб рахувати символи?
Тит

4

Математика (86 байт)

Налаштування (з іменами як рядки, гроші як цифри):

n = {"John", "Jamie", "Kylie", "Laura", "Russ", "Karla", "Reid", "Mark", "Manson", "Lonnie", "Nelly"};
m = {100000, 0.05, 1549001.10, 999999999.99, 1000000000, 1, 99.99, 999.99, 1000.01, 999999999999.00, -123.45}

Спроба:

MapThread[#~~" is in the "~~ToString@Max[Floor@Log[10^3,#2],0]~~"-comma club."&,{n,m}]

Усі рядкові функції Mathematica включають у назву "String", тому я думаю, що журнали коротші. Max[...,0]Повинно мати справу з числами прикрою негативними або негативною нескінченністю для людей , які мають між -1 і 1 доларами. Журнал від'ємного числа включає уявні речі, але Mathematica корисно ігнорує це під час прийому Floor!


4

Japt , 36 байт

Це приймає суму як перший вхід, назву як другий.

V+`   e {w0 x4 l /3-2|0}-¬mµ club

Пояснення

V+`   e {w0 x4 l /3-2|0}-¬mµ club
V+                                   // Second input +
  `                                  // compressed string:
      e                              // " is in the " 
        {              }             // Insert here:
         w0                          //   The larger of 0 and the first input
            x4                       //   Rounded to the 4th decimal
               l                     //   Length
                        -¬mµ club    // "-comma club"
                                     // A closing backtick is auto-inserted at the end of the program

Japt використовує бібліотеку шоко для стискання рядків.

Натхненний @ Нілу рішення .

Збережено 7 байт завдяки @ETHproductions

Спробуйте в Інтернеті!


1
Я думаю, що ви можете просто зробити це Vw0 x4 l /3-2|0в середньому розділі, заощадивши 6 байт :-)
ETHproductions

1
Я думаю, що ви можете зберегти байт, взявши введення в зворотному порядку:V+`...{w0...
ETHproductions

3

MATL, 50 48 43 байт

`j' is in the 'i|kVn3/XkqV'-comma club'&hDT

Спробуйте в MATL Online

Пояснення

`                   % Do...While loop
  j                 % Explicitly grab the next input as a string
  ' is in the the ' % Push this string literal to the stack
  i                 % Grab the next input as a number
  |                 % Compute the absolute value
  k                 % Round towards zero
  V                 % Convert to a string
  n3/Xk             % Divide the length of the string by 3 and round up
  q                 % Subtract one
  V                 % Convert to a string
  '-comma club'     % Push this string literal to the stack
  &h                % Horizontally concatenate the entire stack
  D                 % Display the resulting string
  T                 % Push TRUE to the stack, causing an infinite loop which automatically
                    % terminates when we run out of inputs
                    % Implicit end of do...while loop

3

R, 68 байт

Установка:

f <- c('John', 'Jamie', 'Kylie', 'Laura', 'Russ', 'Karla', 'Reid', 'Mark', 'Manson', 'Lonnie', 'Nelly')
a <- c(100000, 0.05, 1549001.10, 999999999.99, 986000000, 1, 99.99, 999.99, 1000.01, 999999999999.00, -123.45)

Рішення:

cat(paste0(f, " is in the ",floor(log10(abs(a))/3)),"-comma club.\n"))

Візьміть базовий 10 журнал абсолютного значення рахунку, округніть його та надрукуйте з іменами.

Я не впевнений, чи міг би бути меншим, якби aбув векторний символ ...


1
А як щодо справи Неллі, яка має -123,45 доларів? Цей log10виклик створить NaNs для негативів. Схоже log10(abs(a)), спрацювало б.
коваль

На жаль, ви праві, приклад вище не включав Неллі. І я неправильно прочитав специфікацію ... Я зрозумів, що негативне значення повинно бути 0 комою.
Джо

Замість abs(x)використання pmax(a,1)- це займе що-небудь менше 1 і зробить це 1, даючи хороші результати за від’ємними числами. І замість floor(log10(...)/3)вас можна використовувати log10(...)%/%3. Я думаю, що це зводиться до 66 байт (і правильно для негативів).
Грегор - відновити Моніку

1
Також варто зауважити, що цілих 7 байт - це cat()та \n... друк вектора з рядками в ньому на консоль, може вважатися досить хорошим (* ах *, як відповіді Python).
Грегор - відновити Моніку

Це має додаткові дужки після 3. Це також виводить клуб -1 для Джеймі. Використання pmax (a, 1) виправляє це.
BLT

3

JavaScript, 59 байт

Збережено 3 байти завдяки @ETHproductions

Збережено 2 байти завдяки @Cyoce

n=>m=>n+` is in the ${m>1?Math.log10(m)/3|0:0}-comma club.`

Демо


1
Збережіть байт за допомогою, `${}`і n=>m=>...замість цього ви можете (n,m)=>...
присвоїти

2

Vim, 72 байти

:%s;\v +\-=(\d+).*;\=' is in the '.(len(submatch(1))-1)/3.' comma club'

Я повинен якось показати, що є зворотне повернення, але не знаю як. Це лише основна відповідь на регулярні висловлювання, на яку я впевнений, що будь-яка мова регулярного вираження може бути переможена. Я б використав V, але думаю, що команди-замінники V використовуються /як роздільник за замовчуванням, і я не міг зрозуміти, як зробити так, щоб не скаржитися на поділ.

Приймає дані як таблицю ОП і повертає значення як таблицю, але з фінансовою інформацією, заміненою на "знаходиться в X-клубі кома"

Спробуйте в Інтернеті!


Я не думаю, що \-=додає нічого. Крім того, якщо ви видалите зайві пробіли у своєму введенні та теж зміните регулярний вираз, \v (\d*).*;ви можете зберегти 4 байти
DJMcMayhem

2

05AB1E , 32 байти

Äï€g3/î<“-comma†Ú“«“€ˆ€†€€ “ì‚ø»

Спробуйте в Інтернеті!

Пояснення

Ä                                 # absolute value of input
 ï                                # convert to int
  €g                              # length of each
    3/                            # divided by 3
      î                           # round up
       <                          # decrement
        “-comma†Ú“«               # append string "-comma club" to each number
                   “€ˆ€†€€ “ì     # prepend string "is in the " to each number
                             ‚    # pair with second input
                              ø   # zip
                               »  # join by spaces and newlines

2

Python 2, 69 байт

Налаштуйте наші масиви:

n = ['John', 'Jamie', 'Kylie', 'Laura', 'Russ', 'Karla', 'Reid', 'Mark', 'Manson', 'Lonnie']
a = [100000, 0.05, 1549001.10, 999999999.99, 1000000000, 1, 99.99, 999.99, 1000.01, 999999999999.00]

І наша функція може бути:

f=lambda n,a:'%s is in %s comma club'%(n,min(3,(len(str(int(a)))/3)))

Даючи нам:

>>> [f(x,y) for x,y in zip(n,a)]
['John is in 2 comma club', 'Jamie is in 0 comma club', 'Kylie is in 2 comma club', 'Laura is in 3 comma club', 'Russ is in 3 comma club', 'Karla is in 0 comma club', 'Reid is in 0 comma club', 'Mark is in 1 comma club', 'Manson is in 1 comma club', 'Lonnie is in 3 comma club']

Якщо масив повинен бути ідентичним тому, який передбачений у запитанні, тоді рішення коштує 76 байт:

f=lambda n,a:'%s is in %s comma club'%(n,min(3,(len(str(int(float(a))))/3)))

2

Powershell, 82 байти

$args[0]|%{$_[0]+" is in the "+(('{0:N}'-f$_[1]-split',').Count-1)+"-comma club."}

Припускаючи вхід 2D-масиву

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.


2

Haskell, 71 байт

n#a=n++" is in the "++(show.truncate.logBase 1e3.abs$a)++"-comma club."

Визначає оператора "#", який забезпечує правильну відповідь. Наприклад:

*Main> "John"#100000
"John is in the 1-comma club."

На жаль, у Haskell немає компактної log10функції, як у багатьох інших мов, але вона має корисну logBaseфункцію, це означає, що нам не потрібно ділити свою відповідь на 3. На жаль, logBase 1000 0.05це від’ємне число, тому нам потрібно використовувати довше truncate, ніжfloor округляти його.

Повна програма, включаючи тестові приклади:

(#) :: (RealFrac n, Floating n) => [Char] -> n -> [Char]
n#a=n++" is in the "++(show.truncate.logBase 1e3.abs$a)++"-comma club."

testCases = [
 ("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)]

main = putStrLn $ unlines $ map (uncurry (#)) testCases

Дає такі результати:

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.

1

К, 66 байт

    /n is names and a is amounts
    n
    ("John";"Jamie";"Kylie";"Laura";"Russ";"Karla";"Reid";"Mark";"Manson";"Lonnie")
    a
    ("100000";"0.05";"1549001.10";"999999999.99";"1000000000";,"1";"99.99";"999.99";"1000.01";"999999999999.00")
    /the function
    {x," is in the ",($(#.q.cut[3;*"."\:y])-1)," comma club"}./:+(n;a)
    /output
    ("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 3 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")


1

C #, 125 байт

(p,n)=>{for(int x=0;x<p.Length;x++)Console.Write(p[x]+" is in the "+(n[x]<1e3?0:n[x]<1e6?1:n[x]<1e9?2:3)+"-comma club.\n");};

Анонімна функція, яка друкує результат у форматі ОП.

Повна програма з тестовими кейсами:

using System;

class CommaClub
{
    static void Main()
    {
        Action<string[], double[]> f =
        (p,n)=>{for(int x=0;x<p.Length;x++)Console.Write(p[x]+" is in the "+(n[x]<1e3?0:n[x]<1e6?1:n[x]<1e9?2:3)+"-comma club.\n");};

        // test cases:
        string[] personArr = new[] {"John", "Jamie", "Kylie", "Laura", "Russ", "Karla", "Reid", "Mark", "Manson", "Lonnie", "Nelly"};
        double[] amountArr = new[] {100000, 0.05, 1549001.10, 999999999.99, 1000000000, 1, 99.99, 999.99, 1000.01, 999999999999.00, -123.45};
        f(personArr, amountArr);
    }
}

1

Пітон 3 ( 207 159 110 95 86 байт, завдяки @iwaseatenbyagrue)

Трохи налаштування:

f = ['John', 'Jamie', 'Kylie', 'Laura', 'Russ', 'Karla', 'Reid', 'Mark', 'Manson', 'Lonnie', 'Nelly']
a = [100000, 0.05, 1549001.10, 999999999.99, 986000000, 1, 99.99, 999.99, 1000.01, 999999999999.00, -123.45]

Моя спроба:

['%s is in the %d-comma club.'%(p,-(-len(str(int(abs(v))))//3)-1) for p,v in zip(f,a)]

Результати:

['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.']

Редагувати: перетворення всього в абсолютні значення врятувало мені 15 байт.


1
Найголовніше, що це фрагмент коду, як правило, ми дозволяємо лише функції або повні програми. Що стосується гольфу, ви можете видалити багато просторів. Спробуйте: ["%s is in the %d-comma club."%(p,v.count(','))for p,v in zip(f,a)]Крім того, ви повинні включити кількість байтів.
Conor O'Brien

Ви можете робити print'\n'.join([your array])і фактично друкувати вихід.
Елронд

2
Ласкаво просимо на сайт! Мінуси (наприклад -123.45) вимикаються одним (оскільки ви рахуєте -). Але чому б не взяти список номерів і зберегти (чи я неправильно трактував?). Вам потрібно буде додати заяви про імпорт, і, як він стоїть, це фрагмент, а не програма або функція (як за замовчуванням, і зміна з них не перешкоджає, якщо немає вагомих причин).
Джонатан Аллан

1
Дякую, @JonathanAllan Зараз я намагаюся покращити це, тому мені не доведеться рахувати імпорт. Я усвідомлюю, що math.ceilфункція Python, ймовірно, додає трохи моїх накладних витрат до моєї оцінки.
коваль

2
Ви можете зберегти 9 байт, замінивши (-len(str(abs(v)).split('.')[0])на len(str(int(float(v)))). У вашому тестовому наборі немає від’ємних чисел (у прикладах є одне). Якщо ви хотіли бути завершеним, витратьте 5 байтів, щоб зробити це len(str(abs(int(float(v)))))- це заощадить лише 4 байти.
iwaseatenbyagrue

1

Perl 6, 107 95 байт

for @f {printf "%s is in the %d-comma club.\n",@f[$++],(abs(@a[$++].split(".")[0]).chars-1)/3;}

Не моя найгордіша робота, дайте мені голову, якщо я забув будь-яку техніку з гольфу. EDIT: -12 байт завдяки @Ven


чому парени навколо ^@f.elems? До речі, вам це не потрібно .elems, for ^@fпрацює. Вам не потрібно називати своє $x, використовуйте $_натомість. І не використовуйте printf, використовуйте "{"interpolation"}".
Вен

Я навіть не розумію, навіщо це вам потрібно. Чому б не піти for @f? Ви можете використовувати $++як індекс, щоб перейти разом з ним (і індексувати в @a).
Вен

неправильно редагувати, як тільки я на ПК :)
Håvard Nygård

1
@Вен дякую за голову щодо $ ++. Врятує мені багато клопоту в моїх "справжніх" програмах. Щойно зібрав Perl 6.
Håvard Nygård

Ви впевнені, що інтерполяції не зберігають байти?
Вен

1

Python 2, 87 байт

for n,a in input():print n+' is in the %dd-comma club.'%'{:20,.2f}'.format(a).count(',')

Трохи старший (90 байт):

for n,a in input():print n+' is in the '+`'{:20,.2f}'.format(a).count(',')`+'-comma club.'

Вводиться як список кортежів (ім'я, кількість).

Я роблю це на своєму телефоні в школі, щоб потім перевірити.


1

постійного струму, 56 54 байт

[P[ is in the ]Pd*vdZrX-1-3/n[-comma club.]pstz0<g]sglgx

Це вимагає введення з стека, який повинен бути попередньо завантажений ім'ям у верхній частині стека, першим номером, другим ім'ям, другим номером тощо.

Ось приклад завантаження стека та запуску макросу, g:

#!/usr/bin/dc
_123.45         [Nelly]
999999999999.00 [Lonnie]
1000.01         [Manson]
999.99          [Mark]
99.99           [Reid]
1               [Karla]
986000000       [Russ]
999999999.99    [Laura]
1549001.10      [Kylie]
0.05            [Jamie]
100000          [John]
[P[ is in the ]Pd*v1/Z1-3/n[-comma club.]pstz0<g]sglgx

який дає звичайний вихід,

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.

Ось екзегеза коду:

[P[ is in the ]Pd*v1/Z-1-3/n[-comma club.]pstz0<g]sglgx

[                    # begin macro string
P                    # print and pop person name
[ is in the ]P       # print and pop ' is in the '
# Get absolute value of number by squaring and square root
d*v                  # d=dup, *=multiply, v=root
1/                   # 1/ truncates to integer since scale is 0
Z                    # Z=number length
1-3/n                # n=print and pop (#digits - 1)//3
[-comma club.]p      # print '-comma club.' and newline
st                   # pop '-comma club.' off stack into register t
z0<g                 # Do macro g if 0 is less than z=stack height
]                    # end macro string
sg                   # Save macro g
lgx                  # Load g and do its initial execution

Зауважте, що в редагуванні 1 я замінив dZrX-(d = дуб, Z = довжина числа, r = своп, X = дріб, - = віднімання) на 1/Z(ділити число на 1, яке за шкалою за замовчуванням на нуль скорочує на ціле число; тоді Z = число довжина), економлячи два байти.


1

Свіфт , 166 158 145 байт

var c="comma club",i=0
f.map{k,v in var a=abs(v);print(k,(1000..<1000000~=a ?1:1000000..<1000000000~=a ?2:1000000000..<1000000000000~=a ?3:0),c)}

І ось словник:

var f = [
    "John": 100000, "Jamie": 0.05, "Kylie" : 1549001.10,
    "Laura": 999999999.99,"Russ":1000000000,"Karla": 1,
    "Reid": 99.99,"Mark": 999.99, "Manson": 1000.01,
    "Lonnie": 999999999999.00, "Nelly": -123.45
]

Спробуйте тут!


0

Clojure, 108 байт

(def f ["John", "Jamie", "Kylie", "Laura", "Russ", "Karla", "Reid", "Mark", "Manson", "Lonnie", "Nelly"])
(def a ["100000", "0.05", "1549001.10", "999999999.99", "986000000", "1", "99.99", "999.99", "1000.01", "999999999999.00", "-123.45"])

(map #(str %" is in the "(quot(-(count(nth(partition-by #{\.}(drop-while #{\-}%2))0))1)3)"-comma club.")f a)

Не впевнений, чи буде операція на поплавках короткою, ніж на послідовностях символів. Не впевнений, чи не відповідає функція відповіді, яка повертає послідовність відповідей.


0

Ребол, 118 байт

d: charset"0123456789"forskip s 2[c: 0 parse s/2[opt"-"any[3 d and d(++ c)]]print[s/1"is in the"join c"-comma club."]]

Невикольований з оголошенням масив:

s: [
    {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}
    {Baz} {1.12345678}     ;; added extra Baz test case
]

d: charset "0123456789"
forskip s 2 [
    c: 0
    parse s/2 [
        opt "-"
        any [3 d and d (++ c)]
    ]
    print [s/1 "is in the" join c "-comma club."]
]

Вихід:

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.
Baz is in the 0-comma club.

0

Java 8 154 141 байт

m.keySet().stream().map(k->k+" is in the "+(((""+Math.abs(m.get(k).longValue()))).length()-1)/3+"-comma club.").forEach(System.out::println);

Безумовно

public static void main(String[] args) {
    Map<String, Number> m = new LinkedHashMap<String, Number>(){{
        put("John", 100000);
        put("Jamie", 0.05);
        put("Kylie", 1549001.10);
        put("Laura", 999999999.99);
        put("Russ", 1000000000);
        put("Karla", 1);
        put("Reid", 99.99);
        put("Mark", 999.99);
        put("Manson", 1000.01);
        put("Lonnie", 999999999999.00);
        put("Nelly", -123.45);
    }};
    m.keySet().stream().map(k->k+" is in the "+(((""+Math.abs(m.get(k).longValue()))).length()-1)/3+"-comma club.").forEach(System.out::println);
}

1
Ви можете видалити String.valueOfта використовувати (((""+Math.abs(m.get(k).longValue())).length()-1)/3)натомість.
Кевін Кройсейсен

1
А також можна видалити круглі дужки навколо k->.
Kevin Cruijssen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.