Masalah lain dari golf internal kita ... yang ini sekitar liburan tahun lalu.
MASALAH
Andy, Barb, Carl, Didi, Earl, dan Fran saling membeli hadiah. Gambarlah nama untuk pertukaran hadiah.
- Setiap orang membeli satu hadiah dan menerima satu hadiah.
- Tidak ada yang membeli hadiah mereka sendiri.
- Menjalankan solusi beberapa kali akan menghasilkan hasil yang berbeda (pasangan pemberi-penerima tidak dapat diprediksi atau identik dari lari ke lari).
MEMASUKKAN
Tidak ada
KELUARAN
Diformat seperti dalam contoh ini:
Andy membeli untuk Barb
Barb membeli untuk Carl
Carl membeli untuk Didi
Didi membeli untuk Earl
Earl membeli untuk Fran
Fran membeli untuk Andy
Jawaban:
J, 57
misalnya
sumber
c99 - 252 karakter
Perbaikan sedikit dengan mengambil keuntungan dari sifat melingkar permutasi. Versi ini selalu membangun strategi pembelian seperti loop, jadi ini kurang acak daripada versi (271 karakter) sebelumnya, tapi saya percaya masih memenuhi spesifikasi.
Membutuhkan platform yang berfungsi
/dev/random
. Saya seharusnya bisa mengetuk sekitar 8 dengan menghilangkan huruf\0
s dalam string besar, tetapi libc saya tampaknya tidak berurusan dengan%4s
penspesifikasi cetak seperti yang dikatakan halaman manual.Acak itu buruk, tetapi melakukannya dengan cara mencegah saya dari harus memeriksa kondisi "Foo membeli untuk Foo" .
Dapat dibaca:
sumber
Windows PowerShell, 83
Sejarah:
$i
akan dibuat ulang setiap saat.$_
ke dalam string untuk menyimpan+
.sumber
Haskell,
241189 karakterOutput sepenuhnya acak (yang masih memenuhi spesifikasi).
Ini menghasilkan semua permutasi daftar nama, mengambil satu secara acak (saya pikir ini adalah cara terpendek di Haskell untuk mengacak daftar - jika ada yang memiliki sesuatu yang lebih kecil, saya akan menghargai itu), dan kemudian setiap orang kemudian membeli sebuah hadir untuk orang berikutnya dalam daftar.
sumber
permutations$words"Andy Barb Carl Didi Earl Fran"
dan beberapa trik lain yang saya coba dalam versi saya yang ditingkatkan. Saya lupa, itupermutations
tidak termasuk dalam 98List
, jadi Anda harus menggunakan nama panjang juga. Lihat itu.r=tail.cycle
. dan dari inline itu.main=randomRIO(0,719)>>=mapM_ putStrLn.f
Golfscript:
72 6457 karakterTes
"AndyBarbCarlDidiEarlFran"4/
, diperbarui dan mendapat 7 karakter lebih sedikit;9rand
ini lebih acak daripada saya6rand*
sumber
"AndyBarbCarlDidiEarlFran"4/
6rand*
-0=rand
atau mungkin;9rand
lebih disukai. Untuk loop,{.n+\' buys for '}%(
lebih pendek ..6rand*
karena saya pikir itu akan secara acak mengacak 6 item array (saya pikir saya salah, karena;9rand
terlihat sangat acak daripada milik saya)Japt -R, 41 byte
-2 byte terima kasih kepada @Oliver!
Cobalah!
Ini adalah pendekatan yang saya ambil di level tinggi:
Saya memiliki sedikit sejarah dengan masalah ini karena saya membuat program "santa rahasia" untuk pekerjaan saya bertahun-tahun yang lalu. Kami akhirnya meminta beberapa pelamar pekerjaan untuk menyelesaikannya juga :)
sumber
ã
tidak mengembalikan pasangan yang menautkan elemen pertama ke elemen terakhir. Saya sedang mencari cara agar ini berfungsi, tetapi saya pikir saya akan memberi tahu Anda. Terima kasih sekali lagi! ethproductions.github.io/japt/…"q"
di.ö("q")
lakukanPython - 118 karakter
Python - 120 karakter
sumber
R - 85 karakter
sumber
Python - 154 karakter
sumber
map
memanggilstr.__eq__
setiap pasangan nilai yang sesuai di L dan M, dan loop terus berjalan sampai tidak ada yang benar.D: 233 Karakter
Lebih Jelas:
sumber
Python (175)
sumber
Skema, 173
Memberikan salah satu dari dua solusi.
sumber
C #,
210183 karakterTumpukan boilerplate :(
Solusi ini tidak sepenuhnya acak - selalu ada satu atau lebih "loop" orang misalnya A-> C-> E-> A, dan offset selalu sama di loop. Namun, tidak mungkin untuk memprediksi output dari proses tertentu kecuali Anda memiliki bagian dari output itu.
sumber
var n="Andy Barb Carl Didi Earl Fran".Split()
? Menghemat 16 byte. Anda dapat mengabaikan argumenMain()
, yang menyimpan 9 byte lagi. Dan Anda dapat menggabungkan deklarasic
dani
:int c,i=...;for(c=0;...
yang menyimpan dua lagi.Ruby - 89 karakter
Keluaran:
sumber
map
bukaneach
.MathGolf , 41 byte
Cobalah online!
Penjelasan
Ini tidak dijamin untuk menghasilkan setiap kasus dengan probabilitas yang sama, tetapi menghasilkan hasil yang berbeda setiap kali. Satu byte bisa dihapus jika saya memiliki operator acak, tapi itu untuk hari lain.
sumber