Dua angka acak A dan B telah dihasilkan menjadi 1, 2, atau 3
tugas Anda adalah memilih secara acak angka ketiga C yang juga bisa 1,2 atau 3. Tapi, C tidak bisa sama dengan A atau B.
- Dan Ya, A bisa sama dengan B.
- Jika A = B, maka C hanya memiliki dua angka yang tersisa.
- Jika A tidak sama dengan B, C hanya memiliki satu angka.
- Anggap A dan B sudah dipilih untuk Anda
Ini adalah bagaimana A dan B akan dibuat dengan Python
A = random.randrange(1,4)
B = random.randrange(1,4)
Anggap ini sudah ada dalam kode Anda.
Ini adalah yang terpendek yang saya buat dengan Python
while True:
C = random.randrange(1,4)
if C != A and C != B:
break
Inilah yang dapat disamakan dengan A, B, dan C.
- 1,2,3
- 1,1,2
- 2,3,1
- 3,3,2
Inilah yang tidak dapat disamakan dengan A, B, dan C
- 1,2,1
- 2,3,3
- 1,1,1
- 3,2,3
C = (A!=B ? 6-A-B : (!(A-1) ? 2 : 1))
berfungsi? Solusi Anda juga sangat tidak efisien karena membuang-buang waktu dan mungkin membutuhkan waktu yang tidak terbatas untuk berjalan. Juga,import random
dihitung dalam ukuran byte ...Jawaban:
Ruby, 22 karakter
Masih tidak yakin apakah saya memahami pertanyaan dengan benar ...
sumber
C, 26
Jika saya memahami pertanyaan dengan benar:
Jika
a
danb
berbeda, tidak ada yang acak. jawabannya harus menjadi satu-satunya dari 1,2,3 yang tidak terpakai:6-a-b
.JIKA
a
danb
sama ada 2 pilihan:sumber
Befunge (
156)898574)Oke, ini mengerikan, saya tahu. Tapi ini adalah upaya Befunge pertamaku, jadi aku masih cukup senang bahwa itu berhasil. Saya yakin ada solusi yang jauh lebih baik.
sumber
GolfScript, 13 karakter
Ini adalah program GolfScript lengkap yang membaca dua angka yang dipisahkan spasi (masing-masing diasumsikan 1, 2, atau 3) dari input standar, dan menghasilkan angka acak dari set {1, 2, 3} yang tidak sama dengan dari nomor input.
Cobalah online.(Catatan: tautannya ke versi sebelumnya; Saya menggunakan perangkat seluler dan tidak dapat memperbaikinya.)
Berikut versi program yang dikomentari:
Jika Anda lebih suka fungsi bernama yang mengambil dua angka sebagai argumen di stack, itu membutuhkan beberapa karakter lagi:
Tubuh sebenarnya dari fungsi ini hanya satu karakter lebih panjang dari kode yang berdiri sendiri (karena kita membutuhkannya
[
memastikan bahwa kita hanya mengkonsumsi dua argumen), tetapi biaya overhead untuk membungkus kode dalam sebuah blok dan menugaskannya ke simbol membutuhkan waktu lima lebih banyak karakter, dengan total 19.Atau, jika Anda benar-benar memiliki dua angka yang ditugaskan ke dalam variabel
A
danB
, dan ingin nomor ketiga ditugaskanC
, itu juga dapat dilakukan dalam 19 karakter:(Jika meninggalkan nomor ketiga di tumpukan sebaliknya dapat diterima, Anda dapat meninggalkan
:C;
yang terakhir.)Ps. Terima kasih atas sarannya untuk digunakan
^
, Howard.sumber
\-
bisa Anda gunakan^
.Python - 35
Asumsikan acak diimpor, yang tampaknya ditentukan dalam pertanyaan.
PYG - 25
sumber
Python, 14 karakter
Saya mencobanya untuk setiap 9 kasus yang mungkin dan tampaknya berfungsi dengan baik!
(edit): Seperti yang ditunjukkan edc65, ini tidak valid karena ini tidak acak ... Saya melewatkan bagian pertanyaan itu dan saya merasa bodoh sekarang.
sumber
Befunge - 99 byte
Tidak terlalu mengesankan.
sumber
PowerShell, 21
Sangat mudah. Menyalahgunakan fakta bahwa operator pembanding bertindak berbeda dengan array sebagai operan kiri mereka.
sumber
Mathematica, 37 byte
Pada dasarnya sama dengan jawaban Ruby, tetapi jauh lebih lama berkat nama fungsi Mathematica. Saya menggunakan variabel huruf kecil, karena nama huruf besar mungkin berbenturan dengan built-in (tidak, dalam kasus ini, tetapi Anda tidak melakukannya di Mathematica).
sumber
R, 42 karakter
Vektor
x
adalah vektor bobot probabilitas untuk memperoleh elemen-elemen vektor yang disampel. Ini diatur ke 1 untuk masing-masing pada awalnya, kemudian elemen yang sesuai dengan A dan B diatur ke 0, sehingga mereka tidak memiliki peluang untuk dipilih.sumber
Rebol - 40 karakter
sumber
CJam - 12
Ini mengasumsikan variabel A dan B telah ditetapkan, sesuai dengan pertanyaan.
Anda dapat mencobanya di http://cjam.aditsu.net/
Untuk mengujinya dengan angka acak, gunakan:
Untuk mengujinya dengan nilai tertentu, gunakan (misalnya):
Penjelasan:
4,
menciptakan array [0 1 2 3][AB0]-
menghilangkan angka A, B dan 0 dari arraymr
mengocok array yang tersisa0=
mengambil elemen pertamaDalam versi CJam masa depan, program ini akan lebih pendek 2 byte :)
sumber
C 67
sumber
JS, 35
terinspirasi oleh jawaban Brandon Anzaldi
sumber
Julia, 32 atau 56 tergantung pada aturan
32 jika saya tidak perlu membuat a dan b.
sumber
JS, 43
sumber
A
danB
terlebih dahulu.TI-BASIC, 23
sumber
Java -
1261238385 (menggunakan pintarc=6-a-b
)Versi lengkap:
sumber
6-a-b
saat tidak ada pilihan lain, keduanya diambil. Ini adalah cara cerdas memilih jumlah yang tidak dipilih dari 1, 2, 3.6-1-2 = 3
,6-1-3=2
,6-2-3=1
sehingga untuk setiap non-sama a, b6-a-b
mengambil yang ketiga. Pintar ya? Satu-satunya waktu Anda dapat menggunakan secara acak adalah kapana==b
.R, 24 karakter
Inisialisasi dengan
Kemudian
Atau baru saja
n=1:3;n[!n%in%c(a,b)]
Anda mengembalikan kedua angka.sumber
R, 31 karakter
Jika Anda melakukannya
sample(x)
dalam R, maka itu ditafsirkan sebagai sampel acak dari1:x
. Mengulang vektor(1:3)[-c(A,B)]
dua kali adalah salah satu cara untuk menghentikan hal ini terjadi.sumber
Javascript - 76
sumber
y+New Date(z-y)
SyntaxErrory+new Date(z-y)
di sisi lain melaporkannew Date()
string dengany
ditambahkan.C - 38
sumber
Java, 264 byte
Kode ini menghasilkan
n
angka acak berbeda dari 0 hinggak
.sumber
J (
2119: terlalu lama untuk seleraku)Apakah ada penyihir J di sekitar untuk membantu menghapus tugas variabel itu?Ini hanya 2 karakter lebih pendek ...Atau, jika tidak harus acak, Anda bisa melakukannya dengan ini:
12 karakter.
sumber
Golfscript, 13 Karakter
sumber
JavaScript -
41 (hingga 46) 37 35 3430Diperbarui:
Berhasil menurunkannya menjadi 30 karakter dengan memodifikasinya, terinspirasi oleh jawaban stevevarrill dalam C.
C=A-B?6-A-B:1+(A+new Date%2)%3
Terima kasih nyuszika7h untuk membuat saya turun ke 34 ~:
C=A;while(C==A|C==B)C=1+new Date%3
Meminjam dari jawaban xem untuk setidaknya jatuh setara dengannya:
C=A;while(C==A||C==B)C=1+new Date%3
Terima kasih telah mengingatkan saya akan hal itu
1+new Date%3 === (new Date%3)+1
!Solusi Sebelumnya:
C=A;while(C==A||C==B)C=(new Date%3)+1
Pastikan kondisi
while()
puas, dan lewati sampai tidak.Solusi lain:
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Ini mengasumsikan bahwa
C
telah dinyatakan ATAU bahwa penerjemah JavaScript dapat menangani variabel yang tidak dideklarasikan.Namun, jika interpreter JS dapat menangani EOL tanpa tanda titik koma, itu dapat dikurangi menjadi 41.
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1
Jika
C
belum dideklarasikan, dan tidak ada koreksi kesalahan untuk itu, itu akan membawa penghitungan hingga 46 karakter.var C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Program Tes:
sumber
|
bukan||
.for(C=A;C==A|C==B;)C=1+new Date%3
Befunge-98 (57 byte)
Kode ini mengasumsikan angkanya akan diinput pada stdin. Ini akan memilih nomor acak jika kedua angka pertama sama sampai berbeda, jika tidak maka akan memilih nomor terakhir yang tersedia.
sumber
Python,
5441 karakterJawaban yang cukup panjang dengan Python tapi saya suka daftar pemahaman, jadi saya memutuskan untuk memposting ini di sini
// [0] berarti itu adalah elemen pertama dari
sumber