pengantar
Saat belajar, saya mencoba menemukan beberapa cara untuk menipu tes pilihan ganda. Ini pada dasarnya adalah versi terkompresi dari jawaban pilihan ganda. Metode ini sebagai berikut:
Jawaban tes:
BCAABABA
Ini dapat dikonversi menjadi 3 array yang berbeda, yang menunjukkan benar atau salah jika huruf saat ini adalah jawabannya:
B C A A B A B A
A: [0, 0, 1, 1, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 1, 0]
C: [0, 1, 0, 0, 0, 0, 0, 0]
Menafsirkan angka-angka ini sebagai biner akan banyak mengompres ini. Tapi ini sebenarnya bisa dikompres lebih sedikit. Jika Anda mengetahui posisi A dan B, Anda tidak perlu posisi untuk C. Hal ini dapat dilakukan dengan operator BUKAN bitwise:
A: [0, 0, 1, 1, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 1, 0]
A+B: [1, 0, 1, 1, 1, 1, 1, 1]
C: [0, 1, 0, 0, 0, 0, 0, 0]
Mengubah array A dan B ke angka biner akan menghasilkan:
A: 00110101
B: 10001010
Itu berarti 8 jawaban pilihan ganda dapat dikompres menjadi dua byte!
Tugas
Diberikan dua angka dalam biner, atau dua array yang hanya terdiri dari 0 dan 1 dengan panjang yang sama, menampilkan jawaban pilihan berganda
Aturan
- Input dapat dalam bentuk apa pun yang Anda suka, suka
[1, 0, 0, 1]
atau1001
. - Anda dapat menyediakan program atau fungsi.
- Anda dapat mengasumsikan bahwa input selalu valid.
- Anda juga dapat menampilkan sebagai daftar, dipisahkan dengan spasi, dll.
- Jawaban pilihan ganda hanya terdiri dari A, B dan C. Namun Anda dapat menggunakan huruf kecil sebagai gantinya.
- Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
Uji kasus
Input: [1, 0, 0, 1, 0, 0, 1] [0, 1, 0, 0, 1, 0, 0]
Output: ABCABCA
Input: [0, 0, 0, 0, 1, 0, 1, 1] [1, 0, 1, 0, 0, 0, 0, 0]
Output: BCBCACAA
Input: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Output: CCCCCCCCCC
Papan peringkat
var QUESTION_ID=69770,OVERRIDE_USER=34388;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important;font-family:Arial}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Study.
. Enam byte. Kalahkan itu.Jawaban:
Jelly,
76 byteMengetik di ponsel. Akan menambah deskripsi.(1,0)
pergi keA
,(0,1)
keB
, dan(0,0)
keC
. Array dalam Jelly berbasis 1, dan fungsi pengindeksanị
bekerja secara siklis. Karena itu, kita bisa melipatgandakan pengurangan atas input.Coba di sini .
sumber
Retina , 44 byte
Linefeed tambahan sangat penting. Inputnya seperti
Cobalah online!
Penjelasan
Mulailah dengan mengubah
0
menjadiB
dan1
menjadiA
. Yang membuat babak pertama benar, kecuali bahwa itu daftarB
ketika harus berisiC
. Kami dapat mengidentifikasi mereka yang salahB
dengan memeriksa apakah adaB
di posisi yang sama dari string kedua:The lookahead adalah teknik penghitungan grup penyeimbang klasik untuk menyesuaikan posisi keduanya
B
. The(.)*
jumlah akhiran setelah yang pertamaB
dengan mendorong satu capture ke kelompok1
untuk masing-masing karakter. Kemudian(?<-1>.)*
muncul dari grup itu lagi. The$
memastikan bahwa kita dapat mencapai akhir dari string seperti itu, dan(?(1)!)
memastikan bahwa kita sudah benar-benar habis seluruh kelompok.Akhirnya, kita menyingkirkan ruang pemisah dan string kedua:
sumber
J, 8 byte
Pemakaian:
Cobalah online di sini.
sumber
JavaScript ES6, 36 byte
Sangat sederhana, dan mungkin cukup jelas untuk dipahami: Memetakan setiap item dan mengindeks
a
ke char at position (x*2
+ item at indexy
inb
) di"CBA"
.sumber
CBA
melakukan itu. Juga, dia tidak bisa, karenado
kata kunci yang dipesan, jadi itu sintaks yang tidak valid.MATL ,
149 byteMenggunakan versi saat ini (10.1.0)
Cobalah online!
Penjelasan
Ringkasan apa yang dikerjakan kode
Penjelasan terperinci tentang cara kerjanya
sumber
Java, 81 byte
Tidak ada reputasi untuk mengomentari solusi Java yang sudah ada, jadi begini:
sumber
brainfuck, 52 byte
Membutuhkan juru bahasa yang memungkinkan Anda belok kiri dari sel 0 dan memiliki sel pembungkus 8-bit. Tidak seperti kebanyakan jawaban saya, perilaku EOF tidak masalah.
Mengambil input byte, dengan
0xFF
sebagai pembatas. Aliran byte yang mewakili input pertama di bawah "Kasus uji" akan terlihat seperti ini:Saya bisa menyimpan beberapa byte dengan memiliki
0x00
sebagai pembatas dan menggunakan0x01
dan0x02
sebagai 0 dan 1 masing-masing, tapi rasanya seperti curang: PSetelah saya menemukan strategi saya, menulis program ini sangat mudah. Untuk menemukan huruf ke-n untuk keluaran, mulailah dengan
0x43
( huruf kapital C dalam ASCII) dan kurangi ((elemen ke-1 dari urutan pertama) * 2 + elemen ke-ke-urutan ke-2 dari urutan ke-2Untuk apa nilainya, inilah program 52 byte yang dibagi menjadi 3 baris dan dengan beberapa kata di sampingnya:
sumber
Haskell, 29 byte
Fungsi anonim. Gunakan seperti:
Saya mencoba membuat fungsi point-free tetapi mendapat kekacauan total.
sumber
zipWith((!!).(["CB","AC"]!!))
Pyth,
181610 byte3 rd mencoba: 10 bytes
Terima kasih FryAmTheEggman untuk mengingatkan saya tentang keberadaan
G
!Input berupa [[0,0,1,1,0,1,0,1], [1,0,0,0,1,0,1,0]], yang pada dasarnya adalah sebuah matriks: baris untuk pilihan dan kolom untuk nomor pertanyaan.
Kode pseudocode yang disusun dengan tangan:
2 nd upaya: 16 bytes
Input berupa [[0,0,1,1,0,1,0,1], [1,0,0,0,1,0,1,0]], yang pada dasarnya adalah sebuah matriks: baris untuk pilihan dan kolom untuk nomor pertanyaan.
Ini mengkompilasi ke
Ok, saya tahu itu terlihat berantakan, jadi mari kita tangan-kompilasi ke pseudocode pythonic
1 st upaya: 18 bytes
Dengan input formulir [0,0,1,1,0,1,0,1,1,0,0,0,0,1,0,1,0], pada dasarnya gabungan dari dua daftar. Ini mengkompilasi ke
Sekali lagi, kompilasi dengan tangan
Dan inilah codegolf pertama dalam hidup saya !!! Saya baru belajar Pyth kemarin, dan ini adalah pertama kalinya saya berpartisipasi dalam golf kode.
sumber
.)
untuk menjadie
, dan saya pikir itu bisa golfed cukup sedikit lebih. Pertimbangkan variabelG
yang berisi huruf kecil, saya yakin Anda bisa menggunakan sekitar 10 byte, senang bermain golf! :)Python 3, 39 byte.
Disimpan 1 byte berkat FryAmTheEggman.
Disimpan 2 byte berkat histokrat.
Belum dapat menyelesaikan dengan satu liner dalam beberapa saat!
Ini kasus pengujian saya. Ini juga menunjukkan cara saya mengasumsikan fungsi ini disebut.
Ini digunakan
zip
untuk beralih melalui array berpasangan, dan kemudian indeks menjadi string untuk memilih huruf yang benar. Ini semua terjadi dalam pemahaman daftar, sehingga secara otomatis menjadi daftar. Inti dari solusi ini adalah bahwa kombinasi hanya mungkin daria
danb
yang[0, 1], [1, 0], [0, 0]
. Jadi jika kita mengurangi mereka, kita mendapatkan salah satu-1, 0, 1
yang membuat kita elemen terakhir, pertama, tengah masing-masing.sumber
Mathematica,
30242219 byte3 byte disimpan karena @alephalpha .
Cukup sederhana.
sumber
{A,B,C}[[3-2#-#2]]&
Ruby, 35 byte
Pemakaian:
Mengambil (xy) karakter nol-diindeks "CAB" (1-0) memberi 1, dan dengan demikian A. (0-0) memberi 0, dan dengan demikian C. (0-1) memberi -1, yang membungkus ke B.
Alternatif solusi lebih pendek dengan output lebih aneh:
Keluaran dikutip string yang dipisahkan oleh baris baru, yang tampaknya jembatan terlalu jauh.
sumber
Japt, 13 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Oktaf, 19 byte
Uji:
Saya akan menambahkan penjelasan nanti ketika saya memiliki komputer di depan saya. Ini ditulis dan diuji pada oktaf-online di sel saya.
sumber
TI-BASIC,
5957503736 byteMengambil satu daftar dari
Ans
, dan yang lainnya dariPrompt L₁
. Disimpan 13 byte berkat saran Thomas Kwa untuk beralih dari percabangan kesub(
.Saya harus mencari apa yang dikatakan Thomas Kwa yang dia temukan di komentar besok. ¯ \ _ (ツ) _ / ¯
sumber
Prompt L₁
denganPrompt X
danL₁
dengan∟X
. Masih ada lagi, tetapi saya akan membiarkan Anda menemukannya.Rust, 79
Disimpan 8 byte berkat Shepmaster.
Disimpan 23 byte berkat ker.
Saya yakin ini bisa bermain golf banyak, tapi ini pertama kalinya saya menulis program Rust penuh.
Berikut adalah kode yang tidak disatukan dan uji kasus jika ada yang ingin mencoba mengecilkannya.
Pendekatannya sangat mirip dengan jawaban Python saya. Perbedaan utama adalah bahwa saya tidak dapat secara langsung mengindeks string, jadi saya tidak dapat melakukan
c-d
triknya.sumber
a[0]
dana[1]
sebagai dua argumen terpisah.64-y-2*x
trik dari solusi Octave menghemat beberapa byte karena dapat menggunakanu8
alih-alihusize
: is.gd/GNPK76Vitsy, 40 byte
desah Bayi saya tidak dibuat untuk melakukan manipulasi array.
Mengharapkan masukan melalui STDIN (sesuatu yang tidak pernah saya lakukan) dengan pemimpin
"
.Penjelasan dalam mode verbose (segera tersedia):
Ini akan segera bermain golf dengan lebih baik, kawan. Saya minta maaf untuk panjangnya saat ini.
Pada dasarnya, saya memperlakukan input sebagai string, dan kemudian memanipulasi dari sana.
Cobalah online!
sumber
W
!W
teknis cepat)CJam, 10 byte
Masukan sebagai daftar dua daftar, mis
Uji di sini.
Penjelasan
Memperlakukan pasangan sebagai bit dari nomor basis-2, kita dapatkan
2
untukA
,1
untukB
dan0
untukC
.sumber
Python 3,
4845 byteSaya pikir saya punya solusi yang elegan, lalu saya melihat jawaban @Morgan Thrapp ...
sunting: Disimpan tiga byte berkat yang disebutkan di atas.
lambda *x:[a*'A'or b*'B'or'C'for a,b in zip(*x)]
sumber
lamba*x:
. Saya selalu berpikir itu kompak seperti yang bisa saya diberitahu / menemukan lebih banyak trik. Saya sangat suka solusi Anda btw, sangat bagus.Java,
13112211090 byteEDIT: Terima kasih kepada Bifz / FlagAsSpam untuk bantuan dan inspirasi
Pengajuan pertama, solusi Java naif. Hampir bisa dipastikan ditingkatkan :)sumber
==1
bisa>0
; akan lebih baik bagi Anda untuk mengembalikan o daripada mencetak.void x(int[]a,int[]b){for(int i=0;i<a.length;i++)System.out.print(a[i]>0?"A":b[i]>0?"B":"C");}
(94 byte)? Anda tidak perlu deklarasi statis pada fungsi.R
2916 bytemenghapus deklarasi fungsi karena saya melihat itu biasa di kontes lain.
sumber
PowerShell, 40 Bytes
Mengambil input sebagai dua array eksplisit, mis.
PS C:\Tools\Scripts\golfing> .\cheating-a-multiple-choice-test.ps1 @(1,0,0,1,0,0,1) @(0,1,0,0,1,0,0)
, dan menyimpannya di$a
dan$b
. Selanjutnya, lewati$a
dengan$a|{...}
. Setiap loop, kami menampilkan karakter yang diindeks ke dalam string"CBA"
, dengan indeks diputuskan oleh dua kali nilai saat ini$_
, ditambah nilai$b
diindeks oleh variabel pembantu kami yang telah ditambahkan sebelumnya kemudian dikurangi.Sebagai contoh, untuk test case pertama,
$a = @(1,0,0,1,0,0,1)
dan$b = @(0,1,0,0,1,0,0)
. Iterasi loop pertama telah$_ = 1
,$d = $null
(karena$d
sebelumnya belum dideklarasikan). Kami menambahkan sebelumnya$d
jadi sekarang$_ = 1
dan$d = 1
(di PowerShell,$null + 1 = 1
), artinya$b[1-1] = $b[0] = 0
. Lalu2 * 1 + 0 = 2
, jadi kami indeks"CBA"[2]
, atauA
.sumber
𝔼𝕊𝕄𝕚𝕟, 12 karakter / 22 byte
Try it here (Firefox only).
Penjelasan
Diterjemahkan ke Javascript ES6 sebagai
sumber
R
3634 byteDua byte yang disimpan menghapus kawat gigi yang tidak perlu
sumber
Perl 5 - 47
Sudah 30 jawaban dan tidak ada perl? Berikut ini adalah upaya pertama yang naif :-) Hanya fungsinya:
Pemakaian:
Saya cukup yakin bahwa sesuatu yang lebih baik dapat dilakukan dengan regex, tetapi saya tidak dapat menemukan caranya.
sumber
JavaScript ES6, 75 byte
Saya berusaha lebih keras untuk menerima argumen integer alih-alih argumen array.
Penjelasan:
Kredit ke @ETHproduksi untuk logika pengindeksan string.
Tes di Sini
Pssst
Untuk 3 byte tambahan, dapat menampilkan representasi hingga 30 jawaban:
sumber
Retina, 46 byte
Menggabungkan dua string dan memilih huruf sesuai dengan pasangan digit.
Cobalah online di sini.
sumber
Lua, 87 Bytes
Cukup menguji nilai-nilai dalam array, dan menggabungkan
A
,B
atauC
.sumber
F #, 33 byte
Itu fungsi yang diterapkan sebagian yang mengambil dua urutan int - dua array berfungsi dengan baik - dan mengembalikan urutan karakter baru yang mewakili jawaban yang benar. =)
sumber
Serius, 14 byte
Cobalah secara Online
Mungkin karena bug dalam versi safe mode dari juru bahasa, Anda harus menambahkan
X
agar dapat berfungsi dengan benar di versi online. Unduh versi lokal untuk menjalankan program di atas dengan benar apa adanya.Terlalu pendek untuk menjamin penjelasan lengkap, jadi saya akan mengatakan: menggunakan algoritma yang sama dengan jawaban Jelly.
sumber