Tulis program atau fungsi yang akan mengambil nilai dadu kiri dan kanan sebagai bilangan bulat (1-6) dan mengembalikan nilai di atas.
Tata letak dadu:
+---+
| 1 |
+---+---+---+---+
| 2 | 3 | 5 | 4 |
+---+---+---+---+
| 6 |
+---+
,^.
<´ 5 `> <-- Top value
|`._,´|
.6 | 4, <-- Side values
`.|,´
Jadi memasukkan 6 4
akan kembali 5
.
Urutan itu penting:
2 3 -> 1
3 2 -> 6
Program tidak harus bekerja dengan nilai input yang tidak valid.
Untuk mencegah pendekatan yang jelas (menggunakan tabel dengan semua kombinasi), menggunakan pengkodean teks bawaan apa pun atau de / kompresi rutin atau pengkodean basis atau hal lain yang mirip dengan mengurangi ukuran tidak diperbolehkan. Perhatikan bahwa menggunakan tabel masih diperbolehkan dan menggulirkan dekompresi Anda sendiri juga diizinkan, asalkan itu tidak dilakukan menggunakan beberapa fungsi perpustakaan siap.
Untuk tujuan referensi, inilah tabel semua kombinasi (yaitu semua input dan output yang mungkin):
23, 35, 42, 54 -> 1
14, 31, 46, 63 -> 2
12, 26, 51, 65 -> 3
15, 21, 56, 62 -> 4
13, 36, 41, 64 -> 5
24, 32, 45, 53 -> 6
Kode terpendek menang, dan celah standar berlaku.
Jawaban:
Python, 30
Tidak ada pencarian, hanya sedikit bashing.
Wajah-wajah yang berlawanan datang berpasangan yang saling melengkapi tiga-bit, yang berarti bahwa mereka XOR ke 7.
Diberi dua wajah dari satu set, kami ingin mendapatkan wajah dari set lainnya. Untuk
(1,2,3)
, kita bisa melakukan ini dengan XOR (^
). Jadi,^
berikan jawaban yang tepat hingga komplemen tiga bit, artinyax^7
. Kami dapat melengkapi denganx^7*_
.Untuk memutuskan apakah akan mengambil pelengkap (XOR dengan 7), kami memeriksa apakah triplet melanggar aturan tangan kanan. Itu berarti, itu
a,b
berjalan dalam urutan siklik terbalikmemperlakukan setiap baris sebagai salah satu dari tiga kategori. Karena elemen di setiap baris adalah negatif mod 7, kita dapat "hash" dengan melakukan
x*x%7
.Setiap baris diperoleh dari siklis sebelumnya dengan mengalikannya dengan 4 modulo 7, sehingga kita dapat memeriksa apakah hubungan ini berlaku untuk
(b,a)
untuk memutuskan apakah untuk:a*a%7==b*b*4%7
.Ini sama dengan memeriksa apakah, modulo 7,
a**2 * b**(-2)
sama dengan4
. Karenab**6
sama dengan1
modulo 6, ini setara dengana**2 * b**4
. Karena nilai lain yang mungkin adalah 2 (dengan memeriksa kasus), kami dapat memeriksa apakah 4 dengan membandingkan dengan 3.sumber
ri:Ari:B^7A7A-e<B7B-e<)=*^
min(a,7-a)
dengan melakukana^7*(a>3)
, tetapi saya merasa harus ada cara yang lebih singkat. Ada ide?a/4*7^a
...Ada modulo 7 ekspresi polinomial yang bagus untuk sisi ketiga diberikan dua sisi a dan b .
atau diperhitungkan
Modulo 7 memetakan sisanya di {0,1,2,3,4,5,6}.
Saya menjelaskan mengapa ini bekerja dalam jawaban Math SE ini , meskipun saya pikir mungkin ada argumen yang lebih bersih yang saya lewatkan. Satu-satunya polinomial dua-istilah lain yang berfungsi adalah
yang awalnya saya temukan dengan mengubah bit-bashing saya menjadi operasi aritmatika, kemudian melakukan pencarian dengan kekerasan melalui polinomial dari bentuk ini untuk menemukan yang lebih bagus.
Silakan menambahkan port ini ke dalam bahasa favorit Anda; ini adalah posting CW.
J, 9 oleh Synthetica
Lihat posting saya
Dyalog APL, 9 oleh ngn (salah ketik diperbaiki oleh Adám)
Dicuri dari jawaban J terang-terangan.
TI-Basic, 14 oleh Timtech
Pyth, 16 oleh FryAmTheEggman
Menentukan fungsi
g
dua nilai.Golfscript, 18 oleh Peter Taylor (polinomial lama)
CJam, 18 oleh Martin Büttner (porting dari Peter's GolfScript) (polinomial lama)
Mathematica, 20 oleh Martin Büttner
Ya, itu plus unary, dan tidak, tidak ada cara yang lebih pendek yang tidak menggunakan plus unary.
dc, 21 oleh Toby Speight
Saya harus menambahkan 7 untuk
a
memastikan perbedaan selalu positif (dc memiliki%
operator yang ditandatangani ).Julia,
2423 oleh Martin BüttnerCoffeeScript,
2826 oleh rink.attendant.6JavaScript (ES6),
2826 oleh rink.attendant.6Intinya sama dengan CoffeeScript.
Python 28, oleh xnor
Bash, 31
Tidak ada yang spesial:
atau sebagai alternatif:
Pendekatan lain (lebih lama tapi mungkin menarik) .
Nim, 36 oleh Sillesta
Java 7,
4644 oleh rink.attendant.6Java 8,
2523 oleh Kevin CruijssenPHP,
4947 oleh rink.attendant.6Batch, 52 tidak terdaftar
CMD tidak mendukung modulus true secara asli (jadi tidak dapat menangani angka negatif) - karenanya
%%7+7)%%7
.KURANG (sebagai campuran parametrik ),
6260 oleh rink.attendant.6Lihat posting saya di bawah ini .
05AB1E,
108 oleh Emigna (-2 bytes oleh Kevin Cruijssen)Cobalah online.
Haskell,
312725 oleh Generic Display NameCobalah online!
Excel, 27 oleh Wernisch
Excel VBA, 25 oleh Taylor Scott
Keempat (gforth) 41 oleh reffu
Cobalah online!
C #, 23 oleh Kevin Cruijssen
sumber
(ab)**5 % 7 == (ab)**-1 % 7 == a^b^7
untuk semuaa
,b
di1..6
sehinggaa != b
dana+b != 7
.**5
sebagai proxy untuk membalikkan modulo 7.7|3×××+×-
, diucapkan: 7-sisa dari 3 kali produk dikalikan jumlah kali perbedaan (antara dua angka).CJam,
4328 byteTidak tahu apakah pendekatan berbasis tabel penuh akan lebih pendek, tapi begini:
Masukan seperti
Keluaran:
Ini adalah campuran dari algoritma saya sebelumnya untuk menentukan wajah yang benar dari 2 wajah dan pendekatan xnor tentang xors.
Cobalah online di sini
sumber
KURANG, 62 byte
Gunakan algoritme di pos ini :
Bisa jadi lebih pendek jika nilai integer digunakan, tetapi untuk menampilkannya saya perlu menggunakan
content
properti CSS yang membutuhkan interpolasi variabel .Meskipun demikian, tidak jarang bahasa preprocessor CSS digunakan untuk kode golf!
Untuk digunakan dengan beberapa HTML, Anda akan melakukan ini:
sumber
Pyth, 30 byte
Membutuhkan dua digit sebagai input, tanpa spasi di antaranya (mis.
23
Tidak2 3
).Penjelasan:
Setiap dua digit urutan yang terletak di dalam
23542
mewakili dua sisi yang ada1
di atas. Demikian juga,31463
untuk 2, dll. Membalikkan string ini memberikan urutan untuk4
melalui6
.Kode ini hanya melakukan pencarian dalam string
"23542 31463 12651 15621 36413 24532"
, membagi indeks dengan 6, dan kenaikan untuk menentukan apa yang harus sisi atas.Tes online di sini.
Terima kasih kepada @FryAmTheEggman untuk tips tentang bermain golf ini.
sumber
J"23542 31463 12651 "h/x+J_Jscz)6
Ping saya jika beberapa di antaranya membingungkan. Lebih sukaK
danJ
untuk menetapkan nilai,h
adalah unary+1
,s
pada daftar string adalahjk
. (Juga, jika diizinkan, hanya menggunakan string seperti23
sebagai input akan menjadi yang terbaik)Mengambil pendekatan yang mirip dengan es1024 dengan string pencarian yang berbeda:
JavaScript (ES6),
737261 byteJavaScript (ES5),
888777 byteCoffeeScript,
7162 byteDan hanya untuk bersenang-senang, kode 1 byte lebih pendek dalam CoffeeScript sebagai ES6 karena penghilangan tanda kurung yang diizinkanKarena penggunaan
-~
trik, ini ternyata menjadi jumlah karakter yang sama dengan ES6.sumber
''+l+r
=>[l]+r
1+Math.floor
=>-~
. Juga, cari bukan indexOf.search
tetapi itu hanya untuk ES6.String.prototype.search
telah menjadi bagian dari JavaScript sejak ECMAScript 3rd Edition, sehingga Anda dapat mengubah jawaban Anda. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…J (9)
Menggunakan algoritma dari pos ini .
Bagan pohon fungsi (dapat menghapus beberapa hal):
Demonstrasi:
sumber
PHP, 81 byte
Sama seperti solusi JavaScript saya:
sumber
Lua 118
Harus memulihkan versi terakhir karena bug yang tidak dapat saya temukan, juga tidak punya waktu untuk mencarinya.
Masih mengerjakan ini.
sumber
4
dengan2 3
.JavaScript (ES6), 79 byte
Bukan yang terpendek tapi saya mencoba pendekatan yang berbeda dari jawaban saat ini.
sumber
Lua, 89 byte
Port langsung dari solusi Python xnor.
sumber
Bash, 85
Ini tidak bersaing golf-bijaksana dengan polinomial sihir @ xnor. Tapi saya pikir ini adalah cara lain yang menarik untuk menghitung jawabannya:
Secara khusus kita tahu yang berikut tentang dadu:
Menggabungkan semua hal di atas secara rekursif (menggunakan {1,2,3} hardcoded sebagai titik awal), kita dapat menghasilkan seluruh pemetaan {l, r} -> t untuk semua nilai yang mungkin. Jawaban ini mendefinisikan fungsi rekursif g () yang mengisi array penuh sehingga d [lr] = t. Fungsi rekursif awalnya disebut dengan {1,2,3} dan berulang di seluruh kubus sampai tidak ada lagi elemen array yang belum ditetapkan. Fungsi berulang ke dalam dirinya sendiri dalam dua cara:
Kemudian melakukan pencarian array sederhana dari nilai-nilai yang diperlukan.
sumber
Dyalog APL , 9 byte
Substitusi karakter terang-terangan dari solusi J ɐɔıʇǝɥʇu's J :
Sunting: Saya kemudian memperhatikan bahwa solusi yang tepat ini disarankan oleh ngn pada 17 Jan, 15.
TryAPL online!
sumber
Julia, 26 byte
atau
atau
sumber
Gangguan Umum, 45 byte
Cobalah online!
Port solusi xnor.
sumber
C # (Visual C # Interactive Compiler) , 49 byte
Cobalah online!
-1 byte terima kasih kepada @GB!
Input adalah string 2 karakter yang berisi digit kiri dan kanan yang terlihat.
Di bawah ini adalah solusi yang saya buat sendiri. Memanfaatkan string lookup dari jawaban JavaScript rink.attendant.6 , saya dapat mencukur 5 byte (tapi sekarang jawaban kami sangat mirip;)
C # (Visual C # Interactive Compiler) , 55 byte
Cobalah online!
sumber