Beri tahu teman-teman saya tempat "klub koma" mereka berada

16

Terinspirasi oleh adegan "three-comma club" Silicon Valley, seperti ini , dalam tantangan ini Anda akan memberi tahu sepuluh orang "klub koma" tempat mereka masing-masing berada.

Jika Anda tidak terbiasa dengan istilah "klub koma," izinkan saya menjelaskan: Anda berada di klub satu koma jika uang yang Anda miliki berada dalam kisaran inklusif $ 1.000,00 hingga $ 999.999,99; Anda berada di klub dua koma jika berada dalam kisaran $ 1.000.000,00 hingga $ 999.999.999,99; "klub" ini diulangi melalui klub tiga koma, karena tidak ada individu di Bumi (AFAIK) yang memiliki lebih dari satu triliun dolar AS (Yen Jepang akan menjadi cerita yang berbeda dengan sangat cepat). Jadi, jumlah koma di rekening bank Anda, sesuai dengan standar notasi yang paling umum di Amerika Serikat dan Inggris, menunjukkan klub koma tempat Anda berada. Aturan "koma" yang sama berlaku untuk angka negatif (meskipun Anda tidak ingin berada di klub koma negatif): jumlah negatif dalam rentang inklusif [-0,01, -999.

Kasus uji

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

Jawaban yang benar:

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.

Pengaturan array apa pun yang Anda butuhkan untuk mendapatkan friendsarray dan amountsarray tidak diperhitungkan dengan skor Anda. Jadi untuk Python, kode berikut ini tidak masuk hitungan:

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

Sunting: Silakan lihat kasus uji yang direvisi

Saya menghapus koma string yang sebenarnya dari kasus uji untuk membuat hal-hal sedikit lebih sulit, bukan hanya menghitung koma.

situs hitam
sumber
2
Saya tidak berpikir Anda telah membuat format output sangat jelas. Apakah sesuatu seperti "Name number,Name number,..."dapat diterima?
FryAmTheEggman
2
Apakah entri dalam f dijamin positif, atau -$1,234.56juga akan ada di klub 1-koma?
Jonathan Allan
2
@not_a_robot Bisakah Anda menjawab komentar Fry? Apakah cukup untuk menampilkan pasangan nama dan nomor dalam format apa pun?
Martin Ender
1
@FryAmTheEggman Tidak, output harus dalam format"<name> is in the <number of commas>-club."
blacksite
1
Kasus uji tidak spesifik. Dan kalaupun ada, tidak ada ujian yang membahas masalah negatif besar yang dikemukakan oleh Jonathan Allan di atas.
Peter Taylor

Jawaban:

10

JavaScript (ES6), 80 byte

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

Mengambil larik array [teman, jumlah] dan mengembalikan array "teman ada di klub n-koma." string. Bekerja dengan menambahkan nol tambahan tambahan sehingga panjangnya 6-8 untuk klub 0-koma, 9-11 untuk klub 1-koma, 12-15 untuk klub 2-koma dll.

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

Neil
sumber
Saya tidak berpikir ini berfungsi untuk angka negatif. Sebagai contoh, itu akan menempatkan Nelly (-123,45) di klub 1-koma. Saya sarankan yang lebih pendek Math.log10(n*n)/6|0.
Arnauld
@Arnauld Ah ya, saya lupa |0memotong ke nol, jadi itu memberikan jawaban yang tepat untuk Jamie.
Neil
8

PostgreSQL, 61 byte

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

@xadalah nilai absolut dari x, log(x)adalah basis-10 logaritma dan div(y, x)menghitung hasil bagi integer dari y / x.


Mempersiapkan:

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)

Keluaran:

            ?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)
kennytm
sumber
Sangat menyenangkan melihat jawaban SQL yang kompetitif - bagus sekali!
Toby Speight
6

Jelly , 34  32 byte

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

Link diad (fungsi) yang mengambil daftar saldo bank sebagai angka (desimal / bilangan bulat) dan daftar nama sebagai string dan mengembalikan daftar string.

Cobalah online! - footerçYhanya memanggil fungsi dan bergabung dengan daftar yang dihasilkan dengan umpan baris sehingga memiliki output yang bagus ketika dijalankan sebagai program lengkap.

Bagaimana?

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
Jonathan Allan
sumber
4

PHP, 76 74 byte

// 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));

Untungnya saya tidak harus menggunakan int (seperti yang harus saya lakukan di C); PHP melakukan itu secara implisit untuk %d.

Titus
sumber
Wah! Apakah saya orang pertama yang menghitung bukan menghitung karakter?
Titus
4

Mathematica (86 byte)

Pengaturan (dengan nama sebagai string, uang sebagai angka):

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}

Upaya:

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

Semua fungsi string Mathematica termasuk "String" dalam nama, jadi saya pikir log lebih pendek. The Max[...,0]adalah untuk berurusan dengan angka sial negatif atau tak terhingga negatif bagi orang-orang yang memiliki antara -1 dan 1 dolar. Log dari angka negatif termasuk hal-hal imajiner, tetapi Mathematica sangat membantu mengabaikan hal itu ketika mengambil Floor!

Bukan pohon
sumber
4

Japt , 36 byte

Ini mengambil jumlah sebagai input pertama, nama sebagai input kedua.

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

Penjelasan

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 menggunakan perpustakaan shoco untuk kompresi string.

Terinspirasi oleh solusi @ Neil .

Disimpan 7 byte berkat produk @ETH

Cobalah online!

Oliver
sumber
1
Saya pikir Anda bisa melakukannya Vw0 x4 l /3-2|0di bagian tengah, menghemat 6 byte :-)
ETHproduksi
1
Saya pikir Anda dapat menyimpan byte dengan mengambil input dalam urutan yang berlawanan:V+`...{w0...
ETHproduksi
3

MATL, 50 48 43 byte

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

Cobalah di MATL Online

Penjelasan

`                   % 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
Suever
sumber
3

R, 68 byte

Pengaturan:

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)

Solusinya:

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

Ambil log 10 basis dari nilai absolut akun, bulatkan lalu cetak dengan namanya.

Saya tidak yakin apakah itu bisa lebih kecil jika aakan menjadi vektor karakter ...

Joe
sumber
1
Bagaimana dengan kasus Nelly, yang memiliki -123,45 dolar? Itu log10panggilan akan menghasilkan NaNs untuk negatif. Sepertinya log10(abs(a))akan berhasil.
hitam
Ups, Anda benar, sampel di atas tidak termasuk Nelly. Dan saya salah membaca spesifikasi ... Saya mengerti nilai negatif harus 0 koma klub.
Joe
Alih-alih abs(x), gunakan pmax(a,1)- ini akan memakan waktu kurang dari 1 dan membuatnya 1, memberikan hasil yang baik untuk angka negatif. Dan, bukannya floor(log10(...)/3)Anda bisa menggunakan log10(...)%/%3. Saya pikir itu akan turun ke 66 byte (dan benar untuk negatif).
Gregor --reinstate Monica--
1
Juga patut dicatat bahwa 7 byte penuh dari itu adalah cat()dan \n... mencetak vektor dengan string di dalamnya ke konsol mungkin dianggap cukup baik (* ahem * seperti jawaban Python).
Gregor --reinstate Monica--
Ini memiliki tanda kurung tambahan setelah 3. Ini juga menampilkan klub -1 untuk Jamie. Menggunakan pmax (a, 1) memperbaikinya.
BLT
3

JavaScript, 59 byte

Disimpan 3 byte berkat produk @ETH

Disimpan 2 byte berkat @Cyoce

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

Demo

Oliver
sumber
1
Simpan satu byte dengan `${}`dan Anda dapat n=>m=>...(n,m)=>...
menjelajah
2

Vim, 72 byte

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

Entah bagaimana saya harus menunjukkan bahwa ada trailing return, tetapi tidak yakin bagaimana. Ini hanya jawaban regex dasar, yang saya yakin bisa dikalahkan oleh bahasa regex apa pun. Saya akan menggunakan V, tetapi saya berpikir bahwa perintah pengganti dalam V digunakan /sebagai pemisah secara default, dan saya tidak tahu bagaimana membuatnya tidak mengeluh tentang pembagian tersebut.

Mengambil input sebagai tabel OP, dan mengembalikan nilai sebagai tabel, tetapi dengan informasi keuangan diganti dengan "is in the X comma club"

Cobalah online!

nmjcman101
sumber
Saya tidak berpikir \-=menambahkan apa pun. Juga, jika Anda menghapus spasi ekstra di input Anda, dan mengubah regex juga \v (\d*).*;Anda bisa menghemat 4 byte
DJMcMayhem
2

05AB1E , 32 byte

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

Cobalah online!

Penjelasan

Ä                                 # 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
Emigna
sumber
2

Python 2, 69 byte

Siapkan array kami:

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]

Dan fungsi kita kemudian bisa:

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

Memberi kami:

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

Jika array harus identik dengan yang disediakan dalam pertanyaan, maka solusinya biaya 76 byte:

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

Powershell, 82 byte

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

Dengan asumsi input array 2D dari

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))

Outputnya adalah 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.

Tor
sumber
2

Haskell, 71 byte

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

Menentukan operator '#' yang memberikan jawaban yang benar. Misalnya:

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

Sayangnya, Haskell tidak memiliki log10fungsi kompak seperti banyak bahasa lain, tetapi memiliki logBasefungsi yang berguna , yang berarti kita tidak perlu membagi jawaban kita dengan 3. Sayangnya,logBase 1000 0.05 adalah angka negatif, jadi kita perlu menggunakan lebih lama truncatedaripadafloor mengitarinya.

Program lengkap termasuk uji kasus:

(#) :: (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

Memberikan hasil sebagai berikut:

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.
Jules
sumber
1

K, 66 byte

    /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")
Chromozorz
sumber
1

Python 2.7 , 89 86 84 byte

for g,b in zip(*input()):print g,'is in the',`(len('%d'%b)+~(b<0))/3`+'-comma club.'

Cobalah online!

Program lengkap yang mengambil dua daftar - nama sebagai string, saldo bank sebagai angka - dan mencetak string yang dihasilkan.

Jonathan Allan
sumber
1

C #, 125 byte

(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");};

Fungsi anonim yang mencetak hasilnya dalam format OP.

Program lengkap dengan kasus uji:

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);
    }
}
adrianmp
sumber
1

Python 3 ( 207 159 110 95 86 byte, terima kasih kepada @iwaseatenbyagrue)

Sedikit pengaturan:

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]

Usaha saya:

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

Hasil:

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

Sunting: mengubah segalanya menjadi nilai absolut menyelamatkan saya 15 byte.

situs hitam
sumber
1
Yang terpenting, ini adalah cuplikan kode, Biasanya kami hanya mengizinkan fungsi atau program lengkap. Sedangkan untuk bermain golf, Anda dapat menghapus banyak ruang. Coba: ["%s is in the %d-comma club."%(p,v.count(','))for p,v in zip(f,a)]Anda juga harus memasukkan hitungan byte.
Conor O'Brien
Anda dapat melakukan print'\n'.join([your array])dan mencetak hasil cetak.
Elronnd
2
Selamat datang di situs ini! Negatif (mis. -123.45) Dimatikan oleh satu (karena Anda menghitung -). Tetapi mengapa tidak mengambil daftar angka dan menyimpan (apakah saya salah menafsirkan?). Anda harus menambahkan pernyataan impor, dan sebagaimana adanya, ini adalah cuplikan bukan program atau fungsi (sebagaimana standarnya, dan perubahan dari mereka tidak disarankan kecuali ada alasan yang bagus).
Jonathan Allan
1
Terima kasih, @Jonathan Allan. Saat ini saya mencoba untuk meningkatkan ini sehingga saya tidak perlu menghitung impor. Saya menyadari bahwa math.ceilfungsi Python kemungkinan menambah sedikit overhead pada skor saya.
blacksite
2
Anda dapat menyimpan 9 byte dengan menggantinya (-len(str(abs(v)).split('.')[0])dengan len(str(int(float(v)))). Di set tes Anda, tidak ada angka negatif (dalam contoh, ada satu). Jika Anda ingin selesai, belanjakan 5 byte untuk dilakukan len(str(abs(int(float(v)))))- yang kemudian hanya menghemat 4 byte.
iwaseatenbyagrue
1

Perl 6, 107 95 byte

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

Bukan pekerjaan paling membanggakan saya, beri saya kepala jika saya lupa teknik golf. EDIT: -12 byte terima kasih kepada @Ven

Håvard Nygård
sumber
mengapa parens di sekitar ^@f.elems? tapi kamu tidak butuh itu .elems, for ^@fberhasil. Anda tidak perlu memberi nama $x, gunakan $_saja. Dan jangan gunakan printf, gunakan "{"interpolation"}".
Ven
Aku bahkan tidak mengerti mengapa kamu membutuhkan itu. Kenapa tidak pergi for @f? Anda dapat menggunakan $++sebagai indeks untuk mengikuti (dan indeks ke @a).
Ven
sakit edit segera setelah di pc :)
Håvard Nygård
1
@Ven, terima kasih atas informasi $ ++. Menghemat banyak masalah dalam program "nyata" saya. Baru saja mengambil Perl 6.
Håvard Nygård
Apakah Anda yakin interpolasi tidak menyimpan byte?
Mulia
1

Python 2, 87 byte

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

Sedikit lebih tua (90 byte):

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

Mengambil input sebagai daftar tupel (nama, jumlah).

Saya melakukan ini di ponsel saya di sekolah jadi saya akan mengujinya nanti.

Daniel
sumber
1

dc, 56 54 byte

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

Ini mengambil input dari tumpukan, yang harus dimuat sebelumnya dengan nama depan di atas tumpukan, angka pertama, nama kedua, nomor kedua, dll.

Berikut adalah contoh memuat tumpukan dan menjalankan makro, 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

yang menghasilkan output biasa,

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.

Berikut ini penjelasan dari kode tersebut:

[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

Catatan, dalam edit 1 saya mengganti dZrX-(d = dup, Z = panjang angka, r = swap, X = fraksi, - = kurangi) dengan 1/Z(bagi angka dengan 1, yang dengan skala default nol memotong ke bilangan bulat, kemudian Z = angka panjang), menghemat dua byte.

James Waldby - jwpat7
sumber
1

Swift , 166 158 145 byte

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)}

Dan ini kamusnya:

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
]

Coba di sini!

Tuan Xcoder
sumber
0

Clojure, 108 byte

(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)

Tidak yakin apakah beroperasi pada float akan disingkat dari pada urutan karakter. Tidak yakin apakah jawaban yang tidak berfungsi baik-baik saja yang mengembalikan urutan jawaban.

NikoNyrh
sumber
0

Rebol, 118 byte

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."]]

Tidak digabungkan dengan deklarasi array:

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."]
]

Keluaran:

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.
draegtun
sumber
0

Java 8 154 141 byte

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

Tidak disatukan

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);
}
anacron
sumber
1
Anda dapat menghapus String.valueOfdan menggunakannya (((""+Math.abs(m.get(k).longValue())).length()-1)/3)sebagai gantinya.
Kevin Cruijssen
1
Dan Anda juga dapat menghapus tanda kurung di sekitar k->.
Kevin Cruijssen