Tulis program atau fungsi yang hanya menggunakan karakter yang berisi string ^
dan v
(Anda dapat mengasumsikan tidak akan ada karakter lain). Baca dari kiri ke kanan string ini mewakili urutan klik mouse yang dilakukan pengguna tunggal saat melihat pertanyaan atau jawaban Stack Exchange untuk pertama kalinya.
Setiap ^
mewakili klik tombol upvote dan setiap v
mewakili klik tombol downvote . (Untuk contoh yang berfungsi terlihat sedikit ke kiri.)
Asumsikan bahwa tidak ada batasan suara yang berlaku sehingga semua klik terdaftar dengan benar.
Cetak atau kembali:
1
atau+1
jika postingan akhirnya diunggulkan.0
jika pos akhirnya tidak terpilih. (-0
dan+0
tidak valid)-1
jika postingan akhirnya downvoted.
Posting dimulai dengan nol suara bersih dari pengguna dan tombol mengubah suara bersih sebagai berikut:
Net Votes Before Button Pressed Net Votes After
1 ^ 0
1 v -1
0 ^ 1
0 v -1
-1 ^ 1
-1 v 0
Kode terpendek dalam byte menang.
Kasus uji:
[empty string] -> 0
^^ -> 0
^v -> -1
^ -> 1
v -> -1
v^ -> 1
vv -> 0
^^^ -> 1
vvv -> -1
^^^^ -> 0
vvvv -> 0
^^^^^ -> 1
vvvvv -> -1
^^^^^^ -> 0
vvvvvv -> 0
^^v -> -1
^v^ -> 1
^vv -> 0
vv^ -> 1
v^v -> -1
v^^ -> 0
^vvv^^vv^vv^v^ -> 1
^vvv^^vv^vv^v^^ -> 0
^vvv^^vv^vv^v^^^ -> 1
^vvv^^vv^vv^v^^v -> -1
^vvv^^vv^vv^v^^vv -> 0
^vvv^^vv^vv^v^^vvv -> -1
^vvvvvvvvvvvv -> 0
^^vvvvvvvvvvvv -> 0
^^^vvvvvvvvvvvv -> 0
vvv^^^^^^^^^^^^ -> 0
vv^^^^^^^^^^^^ -> 0
v^^^^^^^^^^^^ -> 0
code-golf
arithmetic
Hobi Calvin
sumber
sumber
^
karakter dapat menyebabkan perubahan skor -1, +1 atau +2? Apakah saya padat di mana? Apa yang sedang terjadi?Jawaban:
Gol> <> 0.3.11 ,
131211 byteCobalah online . Meskipun ini akan berfungsi dengan baik di pembaruan berikutnya, saya telah mencantumkannya sebagai 0.3.11 untuk berjaga-jaga.
Penjelasan
Perhatikan bahwa penggunaan pertama
@
menarik 0 dari bagian bawah tumpukan untuk menginisialisasi penghitungan suara untuk iterasi pertamaUntuk menggambarkan dengan tabel lengkap:
sumber
kode mesin x86, 24 byte
Ini adalah fungsi menggunakan konvensi pemanggilan panggilan cepat, yang mengambil string dan mengembalikan integer 8-bit.
Saya mengujinya dengan program C berikut, yang harus dikompilasi untuk mode 32-bit.
sumber
JavaScript (ES7),
474644433736 byteDicoret 44 masih teratur 44 :(
Menyimpan total running
s
. Menggunakanfor of
loop untuk beralih ke setiap karakter dalam string dan pembaruans
berdasarkan karakter saat ini dan nilai sebelumnya.Suntingan: Diputar
~s&&-1
ke!~s-1
. Ekspresi ini harus sama dengan 0 jikas
sama dengan -1 dan -1 jika tidak. Disimpan 6 byte berkat @nderscore.Cara ekspresi bekerja:
sumber
v=>[for(x of v)v=x<"v"?~~v<1:!~v-1]|v
CJam,
1814 byteVersi terbaru dengan peningkatan signifikan yang disumbangkan oleh Dennis:
Cobalah online
Penjelasan:
sumber
Melewati 93 - 55 byte
52 karakter dan 3 baris baru.
Diuji pada penerjemah ini .
Ini
j
sama jauhnya dari^
danv
di ASCI sehingga digunakan untuk melakukan konversi aritmatika pada akhirnya, daripada menggunakan ruang kondisional.sumber
brainfuck, 146 byte
Program ini mengambil setiap byte input dan membandingkannya dengan yang terakhir. Jika mereka sama, itu membuang input dan menyimpan "0" sebagai "input sebelumnya", jika tidak maka simpan secara normal.
Jika hasil akhirnya adalah
v
, ia mencetak-
. Jika hasil akhirnya adalah nol, 1 ditambahkan ke sel kosong. Akhirnya, 48 ditambahkan ke sel itu dan dicetak.sumber
Javascript ES6,
9148 karakterPenjelasan:
undefined
diakhiri olehd
.Uji:
Jawab sejarah:
sumber
Python 2, 49
Iterate melalui dengan fungsi pembaruan
yang mengambil hitungan suara saat ini
x
dan karakter baruc
dan menghasilkan penghitungan suara baru.Idenya adalah untuk menggunakan
cmp
fungsi Python 2 , yang membandingkan dua argumennya dan memberikan masing-1, 0, 1
-<, ==, >
masing. Yang batincmp('u',c)
memberi-1
untukv
dan1
untuk^
; karakter apa pun di antara mereka cukup untuk'u'
. Yang luar kemudian membandingkannya denganx
, yang membericmp(1,x)
untuk^
dancmp(-1,x)
untukv
, yang memiliki nilai yang benar.Iterasi langsung adalah 3 karakter lebih lama (52), meskipun akan menjadi satu karakter pendek (48) jika mengambil
input()
dengan kutipan diizinkan.Fungsi rekursif terbaik yang saya temukan adalah satu char lagi (50)
sumber
Prolog,
159152 byteKode:
Uji sendiri:
Penerjemah Online di sini
Contoh
Sunting: Disimpan 7 byte dengan menyatukan r-klausa dengan OR.
sumber
CJam, 16 byte
Ini akan macet setelah mencetak 0 , jika ada. Kesalahan bisa ditekan dengan Java interpreter. Jika Anda mencoba ini secara online , abaikan segala sesuatu kecuali garis keluaran terakhir.
Bagaimana itu bekerja
sumber
Python 2,
177 15972 byteMasih agak baru untuk hal kode golf ini.
EDIT: Memperbaiki perilaku yang salah.
EDIT 2: Terima kasih @MorganThrapp untuk mencukur banyak byte.
sumber
JavaScript (ES6),
64595852 byteIni didasarkan pada pengamatan bahwa hanya bentangan terakhir dari pengulangan (salah satu
^
atauv
) yang mempengaruhi hasilnya.Terima kasih kepada Neil untuk bermain golf 6 byte.
sumber
f=v=>(t=/\^*$|v*$/.exec(v)[0]).length*(t<'v'?1:-1)%2
sudah cukup.>
atau<
operator. Terima kasih atas tipsnya[0]
yang mungkin membingungkan Anda.f=v=>(t=/\^*$|v*$/.exec(v))[0].length*(t<'v'?1:-1)%2
, yang berfungsi karena mengetik paksaan dengan array.Haskell, 40 byte
sumber
f
sebagai fungsi infiks%
. Juga, saya pikirv
bisa menjadi_
.-1
untukvv
bukan 0?1%_=-1
_%_=0
, 12 karakter.Scala, 75 byte
Tes untuk fungsi yang diimplementasikan.
sumber
APL, 17
Untuk penerjemah tanpa notasi garpu (seperti GNU APL), itu akan menjadi
{⍺×⍺≠⍵}/⌽0,2-'^ '⍳⍞
(19). Ini mungkin solusi yang paling membosankan karena ia bekerja langsung dari definisi masalah.sumber
Ruby,
4135 byteRegex. Hanya menekan tombol terakhir yang menarik, jadi periksa panjangnya. Kemudian bandingkan dengan
"a"
(atau huruf apa saja antara^
danv
) untuk mendapatkan1
atau-1
.sumber
C # 6, 18 + 80 = 98 byte
Membutuhkan:
Fungsi yang sebenarnya:
Cara kerjanya: kode pertama menghapus semuanya sebelum
^^
atau yang terakhirvv
. Konten itu tidak relevan karena mengklik tombol yang sama dua kali akan selalu membatalkan suara Anda. Hal ini dilakukan dengan membelah pada^^
danvv
dan mengambil item terakhir. Jika item ini adalah string kosong (.Length<1
), maka fungsinya kembali0
karena semua suara telah dibatalkan. Jika string itu tidak kosong, maka itu hanya terlihat pada karakter terakhir dari string asli: itu akan menimpa semua suara sebelumnya. Jika kode char lebih kecil dari 95, maka itu akan menjadi 94^
,, jadi ia mengembalikan1
, sebaliknya-1
.sumber
Python 2.7,
797588sumber
(-1,(1,0)[n==0])[n>0]
untuk menghemat 10 byte. Juga, jangan gunakana=str.count
. Sebenarnya biaya Anda 4 byte.Minkolang 0,11 ,
2822 byteCoba di sini.
Penjelasan
Perhatikan bahwa tidak ada
N.
pada akhirnya. Itu karena saya membiarkannya membungkus awal. Ketika input kosong, penghitungan akhir adalah output sebagai integer dan program berhenti.sumber
Pyth, 13 byte
sumber
Mathematica, 60 byte
sumber
@#&
? Itu tidak berguna (kecuali jikaSequence
terlibat, tetapiSequence
tidak terlibat.Bentuk Skrip , 26 byte
Bagaimana itu wajan:
sumber
C # 6, 18 +
9795 =115113 byte, tanpa metode string, LINQ yang berlebihanBenar-benar layak didahului oleh
Punya ide menggunakan
x<95?1:-1
bukanx=='^'?1:-1
dari jawaban ProgramFOX iniKebetulan:
sumber
C:
6766 Bytesgolf:
ungolfed:
sumber
Pergi, 179 byte
Sebuah sangat solusi naif.
Tidak Disatukan:
sumber
Perl 5, 41 byte
40 byte, ditambah 1 untuk
-p
/(.)\1*$/;
membandingkan string input ke regex/(.)\1*$/
, yaitu melihat apakah string diakhiri dengan satu karakter yang diulang beberapa kali ≥1 kali.Jika demikian,
$&
apakah keseluruhan string pengulangan dan$1
merupakan karakter; jika tidak (yaitu string input kosong), kedua variabel tersebut adalah string kosong.$1=~v?-1:1
membandingkan$1
dengan regexv
dan mengembalikan −1 jika cocok dan 1 sebaliknya.Dan kalikan itu ± 1 dengan
(length$&)%2
, panjang$&
modulo 2.sumber
05AB1E ,
141211 bytePort of @ Sp3000 's Gol> <> answer .
CATATAN: @Grimy sudah memposting alternatif 8 byte yang lebih pendek untuk 05AB1E , jadi pastikan untuk membesarkannya!
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
05AB1E , 8 byte
Cobalah online!
Solusi alternatif dengan panjang yang sama:
u㤮öÓÆ(
,㤮ögÓÆ(
.sumber
^^ -> 0
CJam,
2724 byteCobalah secara Online .
Yang saya ambil dari jawaban Dennis adalah
g
(fungsi tanda).sumber
Ruby, 43
9-i/11
mengevaluasi ke 1 atau -1 ketika diberi kode ascii dari^
(94) atauv
(118)Dalam program uji:
sumber