pengantar
Bagi mereka yang tidak terbiasa dengan uap - atau setidaknya aspek khusus ini:
Seringkali pada profil orang, orang meninggalkan komentar yang mengatakan "+ rep _____" atau "-rep _____". Ini adalah cara tidak resmi untuk menunjukkan apakah Anda berpikir seseorang di komunitas memiliki reputasi baik atau buruk, karena sejumlah alasan. Komentar seperti ini terlihat seperti:
+ rep pemain yang bagus
+ perwakilan membantu
-rep hacker
scammer -rep
Tugas
Program harus menerima input melalui cara konsensual apa pun. Input terdiri dari string dengan baris baru opsional ( \n
). Di awal setiap baris, '+rep '
atau '-rep '
mungkin ada. Sisa garis dapat dibuang. Jika garis tidak dimulai dengan '+rep '
atau '-rep '
(perhatikan spasi tambahan), garis tersebut harus diabaikan.
Program kemudian harus menyimpan skor reputasi total. Mulai dari 0
, skor ini harus bertambah pada setiap baris yang dimulai dengan '+rep '
dan dikurangi pada setiap baris yang dimulai dengan '-rep '
.
Hasil ini harus berupa keluaran dengan cara apa pun yang disepakati.
Uji kasus
Input:
+rep fast trade
+rep nice person
-rep too good
Output: 1
Input:
-rep hacker
-rep scammer
-rep was mean
Output: -3
Input:
first
i don't like him
+rep good at cs go
Output: 1
Input (note the lack of a trailing space on the third line):
+rep +rep
hi +rep
-rep
Output: 1
Input:
+ rep
Output: 0
Input:
+rep like
-thing
Output: 1
Bonus
Saya bahkan tidak tahu apakah itu mungkin, tetapi poin bonus jika Anda entah bagaimana bisa mendapatkan komentar ini dari Steam.
0
, bukan1
.Jawaban:
05AB1E ,
181617 byteDisimpan 2 byte berkat Okx
+1 byte karena perubahan spesifikasi di mana rep sekarang perlu diikuti oleh spasi.
Cobalah online!
Penjelasan
sumber
ð¡0è
dengan4£
. Saya sedang mengerjakan solusi untuk ini pada saat yang sama Anda.|ðý#D'·Ý©.åÏ®1:O
bisa 14 atau 15, saya hanya tidak melihatnya. Juga terjebak di 16, mungkin itu akan membantu Anda. Saya akan meninggalkannya di sini. Pada dasarnya mengganti kata "rep" dengan angka "1" sehingga Anda dapat mengarahkan jumlah.0|vy4£'·Ý1:R.V
tidak berfungsi untuk baris yang tidak dimulai dengan +/- rep. Kembali ke papan gambar :(Python 3, 73 byte
Saya yakin jawaban ini adalah sampah dan akan segera dikalahkan, tetapi belum ada jawaban python lainnya
Gunakan seperti ini:
Mengambil dari uap
Berikut ini beberapa contoh kode yang mengambil 100 komentar pertama dari profil KennyS dan menghitung perwakilannya.
sumber
if"rep"==i[1:4]
untuk -1Perl 5 , 25 byte
24 byte kode +
-p
bendera.Cobalah online!
/^\+rep /
kembali1
jika garis dimulai dengan+rep
;/^-rep /
kembali1
jika garis dimulai dengan-rep
(jadi hanya satu dari mereka yang paling banyak). Kami menggunakan$\
untuk menyimpan hasilnya, karena dicetak secara implisit di akhir (terima kasih kepada-p
bendera dan yang tidak cocok}{
).sumber
Python 2 , 54 byte
Cobalah online! Mengambil string multiline sebagai input.
Menghitung penampilan
'+rep '
dan'-rep '
hanya pada awal baris dengan mencari string mengikuti simbol baris baru. Untuk menangkap baris pertama, baris baru ditambahkan ke input.sumber
Retina ,
63515049 byteTidak cukup sesuai dengan spesifikasi jadi saya memperbaiki beberapa masalah tetapi juga banyak golf (dengan meminjam baris pertama dari solusi Kritixi Lithos).
Disimpan byte lain berkat Kritixi Lithos.
Cobalah online!
Penjelasan
Pertama, segala sesuatu dari input dihapus, kecuali untuk
+
dan-
dari setiap+rep
atau-rep
di awal baris.Kemudian pasangan yang berdekatan
+
dan-
dihapus sampai tidak ada lagi yang bisa dihapus. Setelah ini, yang tersisa adalah menjalankan+
s, lari-
s, atau tidak sama sekali.Kemudian jalankan satu atau lebih karakter (salah satu
+
atau-
) diganti dengan karakter yang membentuk run diikuti oleh panjang run. Dengan cara ini,+
diawetkan di awal untuk hasil positif dan-
negatif.Kemudian semua
+
s dihapus, jika perwakilannya positif.Akhirnya, jika string kosong pada titik ini, rep adalah 0, jadi kita tulis 0.
sumber
|¶
dan menambahkans
(mode single-line) setelahm
pada baris pertamaJavaScript, 55 byte
Terima kasih @Neil untuk bermain golf 12 byte Terima kasih @Arnauld untuk bermain golf 2 byte
Cobalah online!
Tampilkan cuplikan kode
sumber
split
sebagai gantinyamatch
(itu selalu mengembalikan array yang lebih lama dari yang Anda inginkan tetapi dua 1s membatalkan). Saya juga mencoba menghilangkan duplikasi tetapi keluar pada 57 byte lagi.Mathematica, 47 byte (penyandian ISO 8859-1)
Fungsi murni mengambil string yang dipisahkan baris baru sebagai input dan mengembalikan integer. Perhatikan bahwa tiga baris baru dalam kode diapit oleh tanda kutip dan dengan demikian masing-masing setara
"\n"
dalam string (tetapi cara ini satu byte lebih pendek dari"\n"
).StringCount
melakukan angkat berat; kami secara manual menambahkan baris baru ke awal string sehingga baris pertama cocok bila sesuai.±
adalah fungsi bantuan unary untuk menghindari pengulanganStringCount
.Solusi alternatif
4 byte lebih lama, tapi saya suka urutannya
±"+"-±"-"
....sumber
Retina ,
59535250 byteCobalah online!
Lihat jawaban Basic Sunset yang lebih singkat dalam bahasa yang sama!
Penjelasan
Menghapus semuanya kecuali untuk
[+-]rep
s.Secara berulang menghapus 1
-
untuk setiap+
dan sebaliknya.Sebutkan a
-
(karena jumlahnya negatif) ke-
s serta mengganti-
s dengan jumlah-
s.Lakukan hal yang sama untuk
+
s, tetapi jangan tambahkan a-
.Akhirnya, jika tidak ada, gantilah dengan a
0
.sumber
PHP, 118 byte
Cobalah online!
Digunakan seperti ini:
sumber
Röda , 53 byte
Cobalah online!
sumber
Java, 109 byte
Mencoba untuk membuat ini lebih pendek menggunakan
Stream
'ssumber
Ditumpuk , 45 byte
Cobalah online!
Atau (49 byte):
Penjelasan
Ini pada dasarnya mengekstrak semua
+
atau-
melekat pada awal baris danrep
. Kemudian, untuk masing-masing, ia menambahkan a#
. Kemudian, untuk keseluruhannya, a0
adalah prepended.#~
mengevaluasi string, yang sekarang terlihat seperti:#+
adalah kenaikan dan#-
penurunan. Dengan demikian, kami memperoleh hasil yang diinginkan.sumber
Retina , 38 byte
Cobalah online!
Solusi yang berbeda (dan lebih pendek) dari yang sudah diposting di Retina.
Penjelasan
(Baris ini memiliki spasi tambahan). Simpan hanya bagian input yang relevan, yaitu pada
+rep
atau-rep
di awal baris.Sortir semua karakter (termasuk baris baru). ini akan menempatkan + s dan -s di samping satu sama lain.
Secara berulang-ulang singkirkan
+-
pasangan sampai paling tidak satu dari dua tanda tetap.Cocokkan yang pertama
-
(jika ada) dan cetak tanpa mengubah string.Hitung jumlah tanda yang tersisa, dan cetaklah karena ini adalah tahap akhir dari program.
sumber
C #, 87 byte
Fungsi anonim yang memisahkan string input dengan menggunakan karakter baris baru, mencari string "rep" yang diawali oleh karakter dan, jika menemukannya, menambah reputasi (the
n
variabel) dengan 1 atau -1.Program lengkap dengan metode ungolfed dan uji kasus:
Perhatikan bahwa kode ASCII untuk
+
43 dan untuk-
adalah 45. Metode ini melewati semua kasus uji dari OP. Namun, jika karakter pertama adalah sesuatu yang lain, ini akan mengarah pada jawaban yang salah!Ini dapat diperbaiki dengan biaya 17 byte:
C # diperbaiki, 104 byte
Fungsi anonim yang dimodifikasi akan memeriksa
+
atau-
menandatangani sebagai karakter pertama di setiap baris.sumber
Japt , 14 byte
Cobalah online!
+1 byte untuk
-x
benderasumber
C ++, 144 byte
Cobalah online!
sumber
C # , 104 byte
Meskipun sudah ada satu solusi - dan milik saya lebih lama - saya masih berpikir saya harus mempostingnya, karena yang sudah ada di sini mungkin gagal jika sesuatu seperti
'=rep '
menghalangi jalannya.Golf
Tidak disatukan
Tidak terbaca dibaca
Kode lengkap
Rilis
104 bytes
- Solusi awal.Catatan
Tidak ada yang perlu ditambahkan
sumber
Ruby, 46 byte
Dapatkan semua +/- perwakilan dari input, dan kumpulkan dalam satu string. Kemudian evaluasi itu untuk rep = 1.
sumber
JavaScript ES6,
8579 byteCobalah
Tidak disatukan
Sejarah
85 byte
sumber