Ini adalah tantangan di mana dua orang, 1 dan 2, berlari untuk jabatan. Orang-orang secara menentukan memilih dengan cara tertentu di dunia 1 dan 2, yang dapat memungkinkan para kandidat untuk mengetahui hasilnya sebelum pemilihan.
CATATAN: ini tidak dimaksudkan untuk merujuk pada pemilihan luar atau peristiwa politik lainnya.
Dua orang berlari untuk kantor. Kami akan memanggil orang-orang ini 1 dan 2. Karena mereka berdua ingin tahu apakah mereka akan memenangkan pemilihan, mereka memutuskan untuk menggunakan pengetahuan mereka tentang orang-orang dan beberapa kode untuk mengetahui apa hasilnya. Karena ingin meminimalkan pengeluaran pemerintah, kode ini harus sesingkat mungkin.
Tugas Anda: Diberikan serangkaian orang berdasarkan bagaimana mereka memberikan suara, hasil siapa yang memenangkan pemilihan.
Ada lima jenis orang di dunia 1 dan 2 yang menyenangkan dan menarik:
A
: orang yang pasti akan memilih 1.B
: orang yang pasti akan memilih 2.X
: orang yang akan memilih siapa pun orang di sebelah kiri mereka akan memilih. Jika tidak ada orang di sebelah kiri mereka, maka mereka memilih siapa pun orang di sebelah kanan mereka akan memilih. Jika tidak jelas untuk siapa orang yang berhak memilihnya, maka mereka tidak memberikan suara.Y
: orang akan memilih lawan dari orang di sebelah kiri mereka. Jika tidak ada orang di sebelah kiri mereka, maka mereka memilih lawan dari siapa pun di sebelah kanan mereka. Jika tidak jelas untuk siapa orang yang berhak memilihnya, maka mereka tidak memberikan suara.N
: orang yang tidak memilih.
Ini dievaluasi dari kiri ke kanan.
Contoh:
Siapa pun yang "dievaluasi" dalam huruf kecil, untuk kejelasan.
Input: `XXAYAN`
xX Votes for whoever their friend is voting for. Their friend has not decided yet, so it is unclear, so they do not vote.
Xx Person to left is voting "none" so votes "none."
a Votes for 1
Ay Since person on left is voting for 1, votes for 2.
a Votes for 1
n Does not vote
Jajak pendapat akhir:
2 orang memberikan suara untuk 1
1 orang memilih 2
3 orang tidak memilih
1 memiliki suara terbanyak, jadi 1 menang!
Kasus uji:
Anda dapat menggunakan karakter atau nilai lain sebagai input dan output, selama mereka berbeda. (Misalnya: angka alih-alih huruf, huruf berbeda, huruf kecil, benar / salah atau positif / negatif (untuk output), dll.)
Input -> Output
"AAAA" -> 1
"BBBB" -> 2
"BBAXY" -> 2
"BAXYBNXBAYXBN" -> 2
"XXAYAN" -> 1
"AAAABXXXX" -> 2
"AXNXXXXAYB" -> 1
"NANNY" -> 1
"XA" -> 1
"YAB" -> 2
"XY" -> anything (do not need to handle test cases with no victor)
"AB" -> anything (do not need to handle test cases with no victor)
sumber
none
merupakan kebalikan darinone
, jika perilakuNY
dalam komentar sudah benar.XA
,XB
,YA
danYB
.Jawaban:
Perl 5,
5680726553 byte+26 byte untuk menangani case X atau Y di posisi pertama dan A atau B di posisi kedua. output adalah
1
jika 1 menang kosong (nilai false dalam perl) sebaliknya.TIO
menggunakan
P
danS
bukannyaX
danY
memungkinkan untuk menggunakan operasi xor pada karakter, akan menghemat lebih banyak bytemenggunakan kelompok ulang cabang
(?|
..|
..)
, sehingga$1
$2
mengacu sesuai kelompok di cabang. Menggunakan\0
dan\3
bukannyaX
danY
72 byte
65 byte
53 byte
sumber
X
danY
pada awal string. CobaXBA
danYAB
.Java 8,
153141135131129 byteMenggunakan bilangan bulat integer sebagai input dengan
A=1, B=2, N=3, X=4, Y=5
dan menghasilkan bilangan bulat positif (>= 1
) jika A menang, bilangan bulat negatif (<= -1
) jika B menang, atau0
jika itu seri.-18 byte terima kasih kepada @ OlivierGrégoire .
Cobalah online.
Penjelasan:
sumber
i=0;for(int n:a)i+=n<2?1:n<3?-1:0;return i>0;
menyimpan beberapa byte byte.i=0;for(int n:a)i+=n>2?0:3-n*2;return i>0;
ini lebih pendek.System.out.println(java.util.Arrays.toString(a));
setelah loop Anda dapat melihatnya berubah seperti yang Anda harapkan (imo). Jenis uji seperti apa yang menurut Anda menghasilkan hasil yang salah dan karena bagian kode mana?Haskell,
60504859 bytePenggunaan
1
untukA
,-1
untukB
,0
untukN
,2
untukX
dan4
untukY
. KembaliTrue
jikaA
menang, jika tidakFalse
.Cobalah online!
Dalam cara rekursif dalam daftar input kami tambahkan
1
untuk setiap suara untukA
,-1
untuk setiap suara untukB
dan0
"tidak ada suara".l
adalah suara terakhir,v
yang berikutnya. Jikav=1
,-1
atau0
(atauv<2
) kami hanya menambahkannya ke jumlah. Jikav
"suara yang sama" (X
dalam tantangan,2
untuk solusi saya) kami menyimpan dan menambahkanl
((3-2)*l
=l
). Jikav
"memilih yang berlawanan" (Y
dalam tantangan,4
untuk solusi saya), pertama-tama kita meniadakanl
((3-4)*l
=-l
) dan kemudian menambahkannya. Kasing dasar adalah daftar kosong yang memulai penjumlahan dengan0
. Rekursi dimulai denganl
set kerem s 2
tempats
elemen kedua dari daftar input (x!!1
).rem s 2
peta1
dan-1
untuk dirinya sendiri, semua nilai lainnya0
. Tetap memilih mengabaikan suaral
[*] danX
atauY
mendapatkan tetangga yang tepat jika itu adalah suara memperbaiki. Jika jumlah keseluruhan positif,A
menang.[*] ini membuat daftar tunggal dengan suara tetap seperti
[1]
pekerjaan, karena karena kemalasan Haskell ke elemen kedua tidak pernah dievaluasi. Input seperti[2]
gagal dengan kesalahan, tetapi tidak harus dipertimbangkan.sumber
JavaScript (ES6),
78 7573 byteCobalah online!
sumber
05AB1E ,
34333230 byteMenggunakan integer-array sebagai input
A=-1, B=1, N=0, X=2, Y=3
dan mengeluarkan bilangan bulat negatif (<= -1
) jika A menang, bilangan bulat positif (>= 1
) jika B menang, atau0
jika itu seri.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Retina 0.8.2 , 70 byte
Cobalah online! Tautan termasuk kasus uji. Output
0
untuk seri. Penjelasan:Tangani
Y
pemilih di sebelah kanan orang dengan suara yang diputuskan.Tangani
X
pemilih di sebelah kanan orang dengan suara yang diputuskan, dan kemudian putar kembali sampai semua yang memungkinkanY
danX
suara dapat diputuskan.Tangani
X
pemilih awal di sebelah suara yang diputuskan, dan jugaY
pemilih awal di sebelah suara yang diputuskan. Karena pemilih ini akan memberikan suara yang berlawanan dengan suara yang diputuskan, kami hanya dapat menghapus kedua suara dalam kasus ini.Hapus yang tersisa tanpa suara atau suara ragu-ragu, dan batalkan semua pasangan suara yang diputuskan yang bertentangan. Ulangi sampai semua suara yang mungkin dibatalkan. Dalam hal seri, tidak ada yang tersisa, jika tidak, suara yang tersisa akan semua dari jenis yang sama.
Keluaran
1
jika ada suara, tetapi2
jika adaB
suara.sumber
JavaScript (Node.js) , 42 byte
Cobalah online!
Hemat 1 byte, terima kasih untuk Shaggy.
sumber
0
,1
dan3
bukannya1
dan2
?3
juga benar di JS. Saya selalu menganggap0
/1
sebagai falsey / truthy. Dan karena kita tidak lagi membutuhkan output yang berbeda,0
= 1 menang dan>= 1
= 2 menang juga baik-baik saja. Jadi +1 dari saya.Python
32,125121117 byte(Terima kasih kepada Jonathan Frech)
Menggunakan lekukan tab
Input: daftar
int
di mana 'A' = 1, 'B' = 0, 'X' = 4, 'N' = 3, 'Y' = - 1, jadi "AAAA" adalah[1, 1, 1, 1]
dan "XXAYAN" berada[4, 4, 1, -1, 1, 3]
.[{'A': 1, 'B': 0, 'X': 4, 'N': 3, 'Y': -1}[c] for c in s]
akan mengonversi string ke format input yang diperlukan.Anda dapat mencobanya secara online! (Terima kasih kepada Jonathan Frech untuk sarannya)
sumber
(i, i-1)[i>0]
harus sama dengani-(i>0)
.if
mungkin bisa menjadix[i]+=(v>3)*n+abs(n-1)*(v<0)
. Anda kemudian dapat menghemat lekukan dengan memindahkan pernyataan yang sekarang non-majemuk (menggunakan;
) pada baris yang sama denganfor
.Perl 5, 54 byte
Cobalah online!
Penggunaan
A
untukA
,B
untukB
,N
untukN
,\0
untukX
dan\3
untuk Y (dua terakhir menjadi karakter kontrol literal). Caranya adalahA
bitwise-xor\3
sama denganB
, dan sebaliknya.sumber
Javascript (ES6) - 133 byte
Mengambil string dengan format yang diberikan dalam OP dan mengembalikan 1 jika kandidat 1 menang dan 2 sebaliknya (saya akui, saya bias).
sumber
Python 2 ,
9573 byteCobalah online!
Perbaikan bug diperlukan yang menambahkan byte tambahan, tetapi mengonversikannya ke lambda berkat @Stephen menguranginya kembali menjadi 95
sumber