Permainan Sevens dimainkan sebagai berikut: n
pemain duduk melingkar, dan mulai menghitung mulai dari 1, melewati ke kiri (atau dari pemain A
ke pemain B
).
Ketika angka p
yang memiliki 7
ATAU dapat dibagi dengan 7
tercapai, maka pemain yang berbicara nomor p-1
, setelah pemain berikutnya mengatakan p
, harus mengatakan p+1
dan urutan orang yang berbicara terbalik. Misalnya, jika pemain B
berbicara 6
, pemain C
mengatakan 7
, B
mengatakan 8
, dan pemain A
mengatakan 9
.
Catatan: Bagi mereka yang ingin bermain dalam kehidupan nyata, jika seseorang lupa nomor (atau dalam versi sevens
yang tidak disebutkan, secara tidak sengaja mengatakan a seven
), mereka dihilangkan dari lingkaran, tetapi kami akan menghilangkan detail ini dari tantangan ini.
Tantangannya sendiri adalah mencetak angka yang harus diucapkan oleh setiap pemain dalam permainan Sevens yang sempurna hingga input m
untuk n
pemain input .
Sebagai contoh, di mana lima orang, A
, B
, C
, D
, dan E
, yang bermain sampai mereka mencapai 30
. Mereka bermain dengan cara ini
A: 1 6 8 13 15 19 23 30
B: 2 7* 12 16 18 24
C: 3 11 17* 25
D: 4 10 21* 26 28*
E: 5 9 14* 20 22 27*29
dimana sevens
ditandai dengan *
. Perhatikan bahwa pada 27
dan 28
, kami membalik dua kali, dan permainan berlanjut "seperti biasa" dari D
ke E
.
Harap dicatat bahwa output tidak harus dalam format di atas. Saya hanya mencetaknya seperti itu untuk kejelasan.
Aturan
Input adalah dua bilangan bulat dalam urutan apa pun,
m
mewakili angka terakhir untuk diucapkan,n
mewakili jumlah pemain.Output dapat berupa beberapa array atau beberapa string, satu untuk setiap pemain. Jika Anda menggunakan string, Anda tidak harus menggunakan pemisah (meskipun, jika Anda bisa menambahkan beberapa dalam tes kode Anda, kami sangat menghargai keterbacaan). Jika Anda benar-benar dapat mencetaknya dalam lingkaran, itu juga dapat diterima, dan itu akan sangat keren juga.
Output tidak harus menentukan pemain mana yang (cukup jelas bahwa pemain pertama adalah yang mengatakan
1
), meskipun jika output tidak diurutkan untuk alasan apa pun, Anda harus memperjelas pemain mana yang berbicara set angka yang mana . Menghilangkan pemain yang tidak mengatakan apa-apa juga diperbolehkan jika Anda memperjelas pemain mana yang berbicara. Saya akan menambahkan beberapa contoh lagi kemungkinan keluaran di bawah ini.Ini adalah kode golf, sehingga jumlah byte terkecil menang.
Seperti biasa, jika masalahnya tidak jelas, beri tahu saya. Semoga berhasil dan bermain golf dengan baik!
Contohnya
>>> sevens_string(30, 5, " ")
'1 6 8 13 15 19 23 30'
'2 7 12 16 18 24'
'3 11 17 25'
'4 10 21 26 28'
'5 9 14 20 22 27 29'
>>> sevens_string(42, 5)
'16813151923303539'
'27121618243140'
'31117253241'
'410212628333742'
'591420222729343638'
>>> sevens_array(20, 3)
[1, 4, 7, 10, 13, 15, 19]
[2, 5, 9, 12, 16, 18]
[3, 6, 8, 11, 14, 17, 20]
>>> sevens_array(18, 10)
[1, 13, 15]
[2, 12, 16, 18]
[3, 11, 17]
[4, 10]
[5, 9]
[6, 8]
[7]
[]
[]
[14]
1 2 3 4 1 2 3 2 1 4 3 2 1 4 1
). Saya tidak mengatakan itu lebih baik atau lebih buruk dalam hal dia menantang: hanya saja itu akan lebih berguna di dunia nyata.Jawaban:
Pyth, 38 byte
Cobalah online. Suite uji.
Pada dasarnya port jawaban Python saya; mungkin ada cara yang lebih baik. Dibawa sebagai input jumlah untuk menghitung hingga
n
dan jumlah pemainp
pada baris terpisah, output hasilnya sebagai array dua dimensi.sumber
Haskell, 151 byte
sumber
mod n 7<1
bukannyamod n 7==0
dans<$>[1..]
bukannyamap s[1..]
? Juga, mengapa tidakprint[]
bukanmapM_ print[]
?Python 3, 155 byte
Menggunakan grafis kura-kura untuk mencetak dalam lingkaran sehingga angka yang diucapkan oleh pemain yang sama berada pada radius yang sama. Jari-jari lingkaran meningkat ketika arahnya terbalik, atau ketika urutan membungkus lingkaran, sehingga angka-angka sebelumnya tidak ditimpa.
Output sampel untuk
f(22,6)
sumber
Python 2,
103102101 byteMenentukan fungsi
S(n,p)
yang mengambil jumlah untuk dihitungn
dan jumlah pemainp
dan mencetak hasilnya sebagai array string.sumber
Python 2,
919087 byteMencetak daftar tupel. Uji di Ideone .
sumber
Jelly ,
2725 byte (tidak bersaing)Cobalah online! atau verifikasi semua kasus uji .
sumber
Dyalog APL,
504735 byteIni menampilkan angka yang dikatakan setiap pemain sebagai sebuah tabel, di mana kolom pertama menyebutkan para pemain. Baris diisi dengan 0 s dengan panjang yang sama, dan baris tanpa angka dihilangkan.
Verifikasi
Perhatikan bahwa, dalam contoh terakhir, 7 dan 8 dihilangkan karena para pemain belum mengatakan apa pun.
sumber
Ruby, 81
Implementasi yang cukup mudah. Mengembalikan string glommed jelek (Anda dapat menambahkan ruang untuk membuatnya
"#{k+=1} "
untuk ... well, string spasi). Saya ingin tahu apakah ada lebih banyak algoritma matematika di luar sana.sumber
Faktor 172
Saya berhasil melakukannya lebih lama dari Haskell, dan dapat dibaca sebagai APL! Apakah saya mendapat cookie?
Ini adalah kutipan (fungsi anonim) yang menghasilkan urutan vektor lingkaran. Setiap vektor dimulai dengan jumlah pemain, dan kemudian angka yang sesuai dengan pemain itu.
Saya mulai dengan ini:
yang bukan kode faktor yang baik, tetapi jauh lebih jelas (ya, saya menggunakan angka sebagai nama variabel di sana, jangan lihat saya seperti itu!).
sumber
SYMBOL:
jauh lebih baik: satu nama huruf, dan menyingkirkanset
danget
!JavaScript (ES6) 100
Mengembalikan hasil sebagai array string, tanpa pemisah
Atau lebih mudah dibaca, selama 3 byte lebih, mengembalikan hasil sebagai array array
Uji Menggunakan fitur konsol baru dan indah dari Stack Snippets
sumber
J,
6360595856 byteVerifikasi
sumber