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 friends
array dan amounts
array 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.
"Name number,Name number,..."
dapat diterima?-$1,234.56
juga akan ada di klub 1-koma?"<name> is in the <number of commas>-club."
Jawaban:
JavaScript (ES6), 80 byte
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/
sumber
Math.log10(n*n)/6|0
.|0
memotong ke nol, jadi itu memberikan jawaban yang tepat untuk Jamie.PostgreSQL, 61 byte
@x
adalah nilai absolut darix
,log(x)
adalah basis-10 logaritma dandiv(y, x)
menghitung hasil bagi integer dari y / x.Mempersiapkan:
Keluaran:
sumber
Jelly ,
3432 byteLink diad (fungsi) yang mengambil daftar saldo bank sebagai angka (desimal / bilangan bulat) dan daftar nama sebagai string dan mengembalikan daftar string.
Cobalah online! - footer
çY
hanya memanggil fungsi dan bergabung dengan daftar yang dihasilkan dengan umpan baris sehingga memiliki output yang bagus ketika dijalankan sebagai program lengkap.Bagaimana?
sumber
PHP,
7674 byteUntungnya saya tidak harus menggunakan int (seperti yang harus saya lakukan di C); PHP melakukan itu secara implisit untuk
%d
.sumber
Mathematica (86 byte)
Pengaturan (dengan nama sebagai string, uang sebagai angka):
Upaya:
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 mengambilFloor
!sumber
Japt , 36 byte
Ini mengambil jumlah sebagai input pertama, nama sebagai input kedua.
Penjelasan
Japt menggunakan perpustakaan shoco untuk kompresi string.
Terinspirasi oleh solusi @ Neil .
Disimpan 7 byte berkat produk @ETH
Cobalah online!
sumber
Vw0 x4 l /3-2|0
di bagian tengah, menghemat 6 byte :-)V+`...{w0...
MATL,
504843 byteCobalah di MATL Online
Penjelasan
sumber
R, 68 byte
Pengaturan:
Solusinya:
Ambil log 10 basis dari nilai absolut akun, bulatkan lalu cetak dengan namanya.
Saya tidak yakin apakah itu bisa lebih kecil jika
a
akan menjadi vektor karakter ...sumber
log10
panggilan akan menghasilkanNaN
s untuk negatif. Sepertinyalog10(abs(a))
akan berhasil.abs(x)
, gunakanpmax(a,1)
- ini akan memakan waktu kurang dari 1 dan membuatnya 1, memberikan hasil yang baik untuk angka negatif. Dan, bukannyafloor(log10(...)/3)
Anda bisa menggunakanlog10(...)%/%3
. Saya pikir itu akan turun ke 66 byte (dan benar untuk negatif).cat()
dan\n
... mencetak vektor dengan string di dalamnya ke konsol mungkin dianggap cukup baik (* ahem * seperti jawaban Python).JavaScript, 59 byte
Disimpan 3 byte berkat produk @ETH
Disimpan 2 byte berkat @Cyoce
Demo
Tampilkan cuplikan kode
sumber
`${}`
dan Anda dapatn=>m=>...
(n,m)=>...
Vim, 72 byte
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!
sumber
\-=
menambahkan apa pun. Juga, jika Anda menghapus spasi ekstra di input Anda, dan mengubah regex juga\v (\d*).*;
Anda bisa menghemat 4 byte05AB1E , 32 byte
Cobalah online!
Penjelasan
sumber
Python 2, 69 byte
Siapkan array kami:
Dan fungsi kita kemudian bisa:
Memberi kami:
Jika array harus identik dengan yang disediakan dalam pertanyaan, maka solusinya biaya 76 byte:
sumber
Powershell, 82 byte
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.
sumber
Haskell, 71 byte
Menentukan operator '#' yang memberikan jawaban yang benar. Misalnya:
Sayangnya, Haskell tidak memiliki
log10
fungsi kompak seperti banyak bahasa lain, tetapi memilikilogBase
fungsi 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 lamatruncate
daripadafloor
mengitarinya.Program lengkap termasuk uji kasus:
Memberikan hasil sebagai berikut:
sumber
K, 66 byte
sumber
Python 2.7 ,
89 8684 byteCobalah online!
Program lengkap yang mengambil dua daftar - nama sebagai string, saldo bank sebagai angka - dan mencetak string yang dihasilkan.
sumber
C #, 125 byte
Fungsi anonim yang mencetak hasilnya dalam format OP.
Program lengkap dengan kasus uji:
sumber
Python 3 (
207 159 110 9586 byte, terima kasih kepada @iwaseatenbyagrue)Sedikit pengaturan:
Usaha saya:
Hasil:
Sunting: mengubah segalanya menjadi nilai absolut menyelamatkan saya 15 byte.
sumber
["%s is in the %d-comma club."%(p,v.count(','))for p,v in zip(f,a)]
Anda juga harus memasukkan hitungan byte.print'\n'.join([your array])
dan mencetak hasil cetak.-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).math.ceil
fungsi Python kemungkinan menambah sedikit overhead pada skor saya.(-len(str(abs(v)).split('.')[0])
denganlen(str(int(float(v))))
. Di set tes Anda, tidak ada angka negatif (dalam contoh, ada satu). Jika Anda ingin selesai, belanjakan 5 byte untuk dilakukanlen(str(abs(int(float(v)))))
- yang kemudian hanya menghemat 4 byte.Perl 6,
10795 byteBukan pekerjaan paling membanggakan saya, beri saya kepala jika saya lupa teknik golf. EDIT: -12 byte terima kasih kepada @Ven
sumber
^@f.elems
? tapi kamu tidak butuh itu.elems
,for ^@f
berhasil. Anda tidak perlu memberi nama$x
, gunakan$_
saja. Dan jangan gunakan printf, gunakan"{"interpolation"}"
.for @f
? Anda dapat menggunakan$++
sebagai indeks untuk mengikuti (dan indeks ke@a
).Python 2, 87 byte
Sedikit lebih tua (90 byte):
Mengambil input sebagai daftar tupel (nama, jumlah).
Saya melakukan ini di ponsel saya di sekolah jadi saya akan mengujinya nanti.
sumber
dc,
5654 byteIni 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:
yang menghasilkan output biasa,
Berikut ini penjelasan dari kode tersebut:
Catatan, dalam edit 1 saya mengganti
dZrX-
(d = dup, Z = panjang angka, r = swap, X = fraksi, - = kurangi) dengan1/Z
(bagi angka dengan 1, yang dengan skala default nol memotong ke bilangan bulat, kemudian Z = angka panjang), menghemat dua byte.sumber
Swift ,
166158145 byteDan ini kamusnya:
Coba di sini!
sumber
Clojure, 108 byte
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.
sumber
Rebol, 118 byte
Tidak digabungkan dengan deklarasi array:
Keluaran:
sumber
Java 8
154141 byteTidak disatukan
sumber
String.valueOf
dan menggunakannya(((""+Math.abs(m.get(k).longValue())).length()-1)/3)
sebagai gantinya.k->
.