Pengantar:
Saya seorang kolektor teka-teki berkelok-kelok. Di sini Anda dapat melihat koleksi saya saat ini ± 300 teka-teki.
Saya pikir semua orang tahu Rubik's Cube biasa (3x3x3 Cube), yang merupakan NxNxN Cube. Ada juga Cuboids (puzzle berbentuk balok), yang datang dalam berbagai bentuk, mungkin lebih baik dijelaskan oleh SuperAntionioVivaldi di sini :
- Domino Cuboids biasa (seperti 2x2x3 ; 2x3x3 ; 3x3x4 ; dll.) - Mereka berbentuk NxNx (N + O) atau Nx (N + O) x (N + O) , yang memiliki dua dimensi ganjil dan sebuah bahkan, atau dua bahkan dan yang aneh.
- Shapeshifter Cuboids (seperti 2x2x4 ; 3x3x5; 3x3x9 ; 4x4x6 ; dll.) - Mereka berbentuk NxNx (N + P) , yang seperti namanya, shapeshifts (di semua arah). Ketiga dimensi itu aneh atau genap.
- Floppy Cuboids (seperti 1x3x3 ; 2x4x4 ; dll.) - Mereka datang dalam bentuk Nx (N + P) x (N + P) , yang hampir sama dengan Shapeshifters, tetapi dengan apa yang disebut Floppy Parities.
- Brick Cuboids (seperti 2x3x4 ; 3x4x5 ; 2x3x5; dll.) - Mereka datang dalam bentuk Nx (N + O) x (N + P), yang sama seperti Regular Domino Cuboids memiliki dua dimensi ganjil dan genap, atau dua genap dan ganjil; tetapi tidak memiliki dimensi yang sama.
- Ultimate Shapeshifters (seperti 2x4x6 ; 3x5x7; 2x4x10; dll.) - Mereka datang dalam bentuk Nx (N + O) x (N + R) , dan perubahan bentuk ke segala arah. Ketiga dimensi itu ganjil atau genap; tetapi tidak memiliki dimensi yang sama.
Tantangan:
Memasukkan:
Integer positif n dengan batasan berikut: 8 <= n <= 125.
n dapat secara unik diterjemahkan sebagai produk dari tiga nilai (dimensi), yang masing-masing antara 2 dan 5 inklusif.
Alasan saya membatasi ini menjadi 2-5 adalah untuk mencegah input yang digandakan (seperti 1x2x4 = 8
dan 2x2x2 = 8
), meskipun ada banyak Cuboids dengan urutan lebih rendah / lebih tinggi di luar sana. Ini juga berarti tidak ada kasus uji untuk Ultimate Shapeshifters.
Output / Uji kasus:
Inilah semua kasus yang harus didukung oleh program / fungsi Anda, mulai dari panjang tepi 2 hingga 5 di setiap konfigurasi tiga dimensi yang mungkin:
Input Cuboid/Cube Type/Output
8 2x2x2 Cube
12 2x2x3 Regular Domino Cuboid
16 2x2x4 Shapeshifter Cuboid
20 2x2x5 Regular Domino Cuboid
18 2x3x3 Regular Domino Cuboid
24 2x3x4 Brick Cuboid
30 2x3x5 Brick Cuboid
32 2x4x4 Floppy Cuboid
40 2x4x5 Brick Cuboid
50 2x5x5 Regular Domino Cuboid
27 3x3x3 Cube
36 3x3x4 Regular Domino Cuboid
45 3x3x5 Shapeshifter Cuboid
48 3x4x4 Regular Domino Cuboid
60 3x4x5 Brick Cuboid
75 3x5x5 Floppy Cuboid
64 4x4x4 Cube
80 4x4x5 Regular Domino Cuboid
100 4x5x5 Regular Domino Cuboid
125 5x5x5 Cube
Aturan tantangan:
- Input non-Cube / non-Cuboid dalam rentang 8-125 akan menghasilkan 'tidak ada' sebagai output.
- Format output adalah pilihan Anda sendiri. Saya pikir yang paling masuk akal adalah bilangan bulat, seperti
0
= 'tidak ada';1
= Kubus;2
= Domino Biasa berbentuk kubus;3
= Shapeshifter berbentuk kubus;4
= Floppy Cuboid;5
= Brick Cuboid. Format output lain juga baik-baik saja, selama Anda menentukan yang mana yang Anda gunakan.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan. ( CATATAN: Karena saya tidak tahu apakah ada rumus pintar untuk konversi input-ke-output, itu diizinkan untuk membuat hardcode jawaban berdasarkan input. )
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
sumber
24
), jadi saya tidak tahu apa yang ingin Anda urutkan tentang itu?Jawaban:
05AB1E ,
2621 byteNone: 0 Cube: 1 Regular Domino Cuboid: 2 Shapeshifter Cuboid: 3 Brick Cuboid: 4 Floppy Cuboid: 5
Cobalah online! atau sebagai Test suite
Penjelasan
Satu-satunya tempat saya melihat bahwa kita dapat menyimpan byte di sini adalah menemukan cara yang lebih baik untuk menghasilkan angka 123224454212324512210 .
Hanya 1-off dari prime, jadi satu kemungkinan save adalah menemukan indeks prime itu dan menghasilkan indeks dalam waktu kurang dari 9 byte.
Saya tidak tahu seberapa baik fungsi pi bekerja untuk bilangan prima 21-digit tapi itu bisa menjadi kemungkinan.
sumber
k
ada? !! ??!?!?!?!JavaScript (ES6),
979286 byteFungsi ini pertama-tama memeriksa validitas input, lalu mengambil nilai yang benar dari tabel pencarian.
Anehnya, bagian terpanjang adalah pemeriksaan validitas (apakah n dalam bentuk x * y * z dengan x , y dan z dalam [2,3,4,5] ?). Pasti ada cara yang lebih singkat untuk melakukannya, tetapi saya tidak bisa mengetahuinya sejauh ini.
Mengembalikan karakter:
Uji
Tampilkan cuplikan kode
sumber
Ruby,
106 9896 byteKarena, mengapa tidak, hardcoding.
Seperti yang ditentukan, 0 = 'tidak ada'; 1 = Kubus; 2 = Domino Cuboid Biasa; 3 = Shapeshifter Cuboid; 4 = Floppy Cuboid; 5 = Brick Cuboid
sumber
Perl 6 ,
6958 byteMenggunakan format output integer yang disarankan dalam deskripsi tugas, kecuali bahwa ia mengembalikan nilai yang tidak diinisialisasi
(Any)
daripada0
dalam kasus input yang tidak membentuk kubus / kuboid yang valid.Bagaimana itu bekerja
Buat daftar
8 12 16 20 18 24 30 32 40 50 27 36 45 48 60 75 64 80 100 125
.Menghasilkan daftar
1 2 3 2 2 5 5 4 5 2 1 2 3 2 5 4 1 2 2 1
(dari basis-32 literal).Menghasilkan hash (peta asosiatif) dengan daftar pertama sebagai kunci, dan daftar kedua sebagai nilai.
Mengindeks Hash dengan nomor input ..
sumber
Batch, 163 byte
Menggunakan format output yang disarankan. Penjelasan: Ide dasarnya adalah untuk mengulang daftar kubus seperti yang didefinisikan dalam pertanyaan. Untuk setiap kubus, kami menghitung untuk melihat apakah volumenya adalah bilangan bulat input, dan jika demikian, hitung jenis kubus dari tabel pencarian.
Tabel pencarian asli adalah string huruf, tetapi melakukan manipulasi string dalam satu
for
lingkaran itu rumit, jadi saya beralih ke digit yang dapat diekstraksi secara aritmetika. Sayangnya Batch terbatas pada bilangan bulat 32-bit jadi saya tidak bisa memasukkan semua digit ke dalam variabel tunggal (bahkan di basis 5 Anda hanya bisa mendapatkan 13 digit) jadi alih-alih saya membagi variabel menjadi dua bagian, dikodekan dalam basis 6 untuk kenyamanan.29948521
ada2545522321
di basis 6 yang mengkodekan 10 kuboid terkecil dalam urutan terbalik; ketika kehabisan digit kami tambahkan14081593
yang ada1221452321
di basis 6 pengkodean 10 cuboids terbesar.sumber