Cuboid tipini belirleme


17

Giriş:

Ben kıvrımlı bir bulmaca koleksiyoncuyum. Burada şu anki ± 300 bulmaca koleksiyonumu görebilirsiniz.

Bence herkes bir NxNxN Küp olan normal Rubik Küpünü (3x3x3 Küp) biliyor . Ayrıca SuperAntionioVivaldi tarafından daha iyi açıklanabilen , farklı şekillerde gelen Cuboids (blok şeklinde bulmacalar) vardır :

  • Normal Domino küp (gibi 2x2x3 , 2x3x3 , 3x3x4 , vs.) - Bunlar şeklinde gelip NxNx (N + O) veya Nx (N + O) x (N + O) iki tek boyutları ve bir ya da var çift, hatta iki çift ve tek.
  • Shapeshifter Cuboids ( 2x2x4 ; 3x3x5; 3x3x9 ; 4x4x6 ; vb.) - Adından da anlaşılacağı gibi, şekil değiştirmeleri (her yöne) NxNx (N + P) formunda gelirler . Her üç boyut da tek veya çifttir.
  • Floppy Cuboids ( 1x3x3 ; 2x4x4 ; vb. Gibi) - Shapeshifters ile hemen hemen aynı olan ancak Floppy Pariteleri olan Nx (N + P) x (N + P) formunda gelirler.
  • Tuğla Cuboids ( 2x3x4 ; 3x4x5 ; 2x3x5; vb. Gibi) - Nx (N + O) x (N + P) şeklinde gelirler, tıpkı Normal Domino Cuboids'in iki tek boyuta ve hatta veya iki çift ve tek; ancak aynı boyutlardan hiçbirine sahip değilsiniz.
  • Ultimate Shapeshifters ( 2x4x6 ; 3x5x7; 2x4x10; vb. Gibi) - Nx (N + O) x (N + R) şeklinde ve herhangi bir yönde şekil değiştirme yaparlar. Her üç boyut da tek veya çifttir; ancak aynı boyutlardan hiçbirine sahip değilsiniz.

Meydan okuma:

Giriş:

Aşağıdaki kısıtlamaya sahip pozitif bir n tamsayısı : 8 <= n <= 125.
n , her biri 2 ile 5 arasında olan üç değerin (boyutlar) ürünü olarak benzersiz bir şekilde kodu çözülebilir.

Bunu 2-5 ile sınırlamamın nedeni, yinelenen girişleri ( 1x2x4 = 82x2x2 = 8 , daha düşük / yüksek sıralı Cuboids olsa da, ve ) önlemektir . Bu aynı zamanda Ultimate Shapeshifters için test durumu olmadığı anlamına gelir.

Çıktı / Test senaryoları:

Bunlar, olası her üç boyutlu konfigürasyonda kenar uzunlukları 2 ila 5 arasında değişen programınızın / fonksiyonunuzun desteklemesi gereken durumlardır:

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

Zorluk kuralları:

  • 8-125 aralığında Küp olmayan / Cuboid olmayan girdiler çıktı olarak 'none' ile sonuçlanmalıdır.
  • Çıktı formatı sizin seçiminizdir. Bence en makul tamsayılar, 0= 'none' gibi; 1= Küp; 2= Düzenli Domino Cuboid; 3= Shapeshifter Cuboid; 4= Disket Cuboid; 5= Tuğla Cuboid. Hangisini kullandığınızı belirttiğiniz sürece, diğer tüm çıktı biçimleri de uygundur.

Genel kurallar:

  • Bu , bayt en kısa cevap kazanır.
    Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. 'Herhangi bir' programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyon / yöntemi uygun parametrelerle, tam programları kullanmanıza izin verilir. Çağrınız.
  • Varsayılan Loopholes yasaktır. ( NOT: Giriş-çıkış dönüştürme için akıllı bir formül olup olmadığını bilmediğimden, girişe göre cevapları sabit kodlamaya izin verilir. )
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, gerekirse bir açıklama ekleyin.


1
Koleksiyonunuzda helikopter küpü yok mu?
GB

@GB Hayır. Bir Curvy Copter, Curvy Copter Plus, Curvy Copter III, Curvy Chop Cube, Helikopter Dodecahedron ve ısmarlama Süper Kesilmiş Curvy Copter III var, ancak Helikopter Küpü yok. :) Curvy Copter'a biraz fazla benziyor, ama bir gün alabilirim.
Kevin Cruijssen

Girdi sıralanıyor mu? ya da elle sıralama yapmak zorunda mıyız?
Matthew Roh

@MatthewRoh Giriş tek bir tamsayı (yani 24), bu yüzden ne hakkında sıralamak istediğinizi bilmiyorum?
Kevin Cruijssen

Yanıtlar:


6

05AB1E , 26 21 bayt

None: 0 Cube: 1 Regular Domino Cuboid: 2 Shapeshifter Cuboid: 3 Brick Cuboid: 4 Floppy Cuboid: 5

•S3X@I¨%÷'•5L¦3ãPÙIkè

Çevrimiçi deneyin! veya Test takımı olarak

açıklama

•S3X@I¨%÷'•            # push base-214 compression of the number 123224454212324512210
           5L¦         # push the list [2,3,4,5]
              3ã       # cartesian product with repetion of size 3
                P      # product of each sublist
                 Ù     # remove duplicates
                  Ik   # get the index of input in that list (-1 if non-existant)
                    è  # get the element at this index in the above number

Burada bayt tasarruf edebildiğim tek yer 123224454212324512210 sayısını üretmenin daha iyi bir yolunu bulmak .

Bir asaldan sadece 1-off, bu nedenle bir olası tasarruf, bu asalın dizinini bulmak ve dizini 9 bayttan daha az bir sürede oluşturmak olacaktır.
Pi fonksiyonunun 21 basamaklı primerlerde ne kadar iyi çalıştığını bilmiyorum ama bu bir olasılık olabilir.


Güzel, Küp / Cuboid'i belirlemek için hangi formülü / tuhaflığı / deseni kullandığınızı görmek için bu açıklamayı merak ediyorum. +1
Kevin Cruijssen

1
@KevinCruijssen: Bir ya da iki bayt kaydedebilirim. Bunu denedikten sonra açıklamayı ekleyeceğim. Ben sipariş bulmak istiyorum bir asal var (ama bana bu konuda yardımcı olacak bir şey bulamadım ve iş
başındayım

@Emigna jeebus ürkütücü, ne zamandır kvar? !! ??!?!?!?!
Sihirli Ahtapot Urn

@carusocomputing 30 Aralık 2015 tarihinden beri.
Adnan

3

JavaScript (ES6), 97 92 86 bayt

Bu işlev önce girişin geçerliliğini kontrol eder, ardından bir arama tablosundan doğru değeri alır.

Şaşırtıcı bir şekilde, uzun kısmı geçerlilik kontrolü (olduğu , n formu X * Y * Z ile x , y ve z içinde [2,3,4,5] ?). Bunu yapmanın daha kısa bir yolu olmalı, ama şimdiye kadar çözemedim.

n=>'NBBF..CRCC.BRR..SFRRRRR.B..C'[[34707324,0x80000800,4240,262208][n&3]>>n/4&1&&n%29]

Bir karakter döndürür:

  • N : Yok
  • C : Küp
  • R : Düzenli Domino Cuboid
  • S : Shapeshifter Cuboid
  • B : Tuğla Cuboid
  • F : Disket Cuboid

Ölçek


1

Yakut, 106 98 96 bayt

->n{[[x=25,2421],[15,53],[9,21],[4,1232504350200510002]].any?{|a,b|n%a<1&&x="00#{b}"[n/a]}?x:?0}

Çünkü neden olmasın, kodlama.

Belirtildiği gibi, 0 = 'hiçbiri'; 1 = Küp; 2 = Düzenli Domino Cuboid; 3 = Shapeshifter Cuboid; 4 = Disket Cuboid; 5 = Tuğla Cuboid


1

Perl 6 , 69 58 bayt

{%(unique([X*] (2..5)xx 3)Z=>:32<AM0K21IHN61H5>.comb){$_}}

Geçerli bir küp / cuboid oluşturmayan girişler (Any)yerine başlatılmamış değeri döndürmesi dışında, görev açıklamasında önerilen tamsayı çıktı biçimini kullanır 0.

Nasıl çalışır

  1. unique([X*] (2..5)xx 3)

    Listeyi oluşturur 8 12 16 20 18 24 30 32 40 50 27 36 45 48 60 75 64 80 100 125.

  2. :32<AM0K21IHN61H5>.comb

    Listeyi oluşturur 1 2 3 2 2 5 5 4 5 2 1 2 3 2 5 4 1 2 2 1(32 tabanından).

  3. %(   Z=>   )

    İlk liste anahtar olarak ve ikinci liste değer olarak bir Karma (ilişkilendirilebilir harita) oluşturur.

  4.    {$_}

    Hash'i girdi numarasıyla endeksler.


Heh, şimdi @ Emigna'nın 05AB1E cevabı ile aynı yaklaşımı kullandığımı görüyorum. Ama ben bağımsız olarak, dürüst geldim! :)
smls

1

Toplu işlem, 163 bayt

@set/as=0,c=29948521
@for /l %%i in (2,1,5)do @for /l %%j in (%%i,1,5)do @for /l %%k in (%%j,1,5)do @set/as+=c%%6*!(%%i*%%j*%%k-%1),c/=6,c+=14081593*!c
@echo %s%

Önerilen çıktı biçimini kullanır. Açıklama: Temel fikir, soruda tanımlandığı gibi küpler listesi üzerinde döngü yapmaktır. Her küp için, hacminin giriş tamsayı olup olmadığını hesaplıyoruz ve eğer öyleyse, arama tablosundan küp türünü hesaplıyoruz.

Orijinal arama tablosu bir harf dizisiydi, ancak bir fordöngüde dize manipülasyonu yapmak zor, bu yüzden aritmetik olarak çıkarılabilen rakamlara geçtim. Ne yazık ki Batch 32 bit tamsayılarla sınırlıdır, bu yüzden tüm basamakları tek bir değişkene sığdıramadım (taban 5'te bile sadece 13 basamak alabilirsiniz), bunun yerine değişkeni taban 6'da kodlanmış iki parçaya böldüm kolaylık sağlamak için. 29948521bir 2545522321taban ters sırayla 10 küçük kesme tas seklinde biçimlendirilmis kodlayan 6'da; o basamak bittiğinde biz eklemek 14081593hangi 122145232110 büyük kesme tas seklinde biçimlendirilmis kodlayan baz 6'da.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.