Asal Haritaların Haritası


19

Son zamanlarda, bir bijective haritalama bulduk f sonlu olumlu tamsayılar, iç içe dizilerinden. Bu zorluğun amacı, onu seçtiğiniz dilde uygulamaktır.

Haritalama

Nerede faktörleri olan bir sayı n düşünün . Sonra:

Örneğin:

kurallar

  • Bu görevi yerine getirmek için tam bir program veya işlev yazabilirsiniz.
  • Çıktı, sekans olarak tanınabilir herhangi bir formatta olabilir.
  • Asal çarpanlara ayırma, öncelik testi vb. İçin yerleşiklere izin verilir . İçin .
  • Standart boşluklara izin verilmez.
  • Programınızın son test vakasını makinemde 10 dakikadan kısa sürede tamamlaması gerekir.
  • Bu kod golf, bu yüzden en kısa kod kazanır!

Test Durumları

  • 10: {{},{{}},{}}
  • 21: {{{}},{},{{}}}
  • 42: {{{}},{},{{}},{}}
  • 30030: {{{}},{{}},{{}},{{}},{{}},{}}
  • 44100: {{{{}}},{{{}}},{{{}}},{},{}}
  • 16777215: {{{{}}},{{}},{{}},{},{{}},{{}},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{{}}}
  • 16777213: macun

Virgülsüz aynı çıktı yine de bir dizi olarak tanınabilir mi?
Dennis

@Dennis Evet, parantez ile söyleyebilirsiniz.
LegionMammal978

1 numaraya ne dersin
Akangka

Ooh, bu {}.
Akangka

1
Misiniz bu kabul edilebilir bir çıkış biçimi olabilir mi? CJam, boş listeler ve boş dizeler arasında ayrım yapmaz, bu nedenle iç içe bir diziyi temsil etmenin doğal yolu budur.
Dennis

Yanıtlar:


1

Pyth, 29 bayt

L+'MhMtbmYhbL&JPby/LJf}TPTSeJ

gösteri

Bu ', istenen eşlemeyi gerçekleştiren bir işlevi tanımlar .

Yardımcı fonksiyon, ybirincil ayrıştırma verildiğinde eşlemeyi tekrar tekrar gerçekleştirir. Taban kasası ve ana ayrışma '.


5

CJam, 51 48 44 42 41 39 34 33 31 bayt

{mf_W=)1|{mp},\fe=(0a*+{)J}%}:J

CJam yorumlayıcısında çevrimiçi deneyin .

@ BayBüttner'e 3 bayt golf oynadıkları için teşekkürler!

@PeterTaylor'a 3 bayt golf oynadığı ve 1 daha yol kat ettiği için teşekkürler!

En azından bilgisayarımda, dosyayı indirmek programı çalıştırmaktan daha uzun sürüyor ...

I / O

Bu, STDIN'den gelen ve tamsayı olan ve karşılığında bir dizi iten adlandırılmış bir işlevdir.

CJam, boş diziler ve boş dizeler arasında ayrım yapmadığından - dize yalnızca karakter içeren bir listedir - dize temsili aşağıdaki gibi görünür:

[[""] "" [""] ""]

aşağıdaki iç içe diziye atıfta bulunarak

[[[]] [] [[]] []]

Doğrulama

$ wget -q pastebin.com/raw.php?i=28MmezyT -O test.ver
$ cat prime-mapping.cjam
ri
  {mf_W=)1|{mp},\fe=(0a*+{)J}%}:J
~`
$ time cjam prime-mapping.cjam <<< 16777213 > test.out

real    0m25.116s
user    0m23.217s
sys     0m4.922s
$ diff -s <(sed 's/ //g;s/""/{}/g;y/[]/{}/' < test.out) <(tr -d , < test.ver)
Files /dev/fd/63 and /dev/fd/62 are identical

Nasıl çalışır

{                           }:J  Define a function (named block) J.
 mf                              Push the array of prime factors, with repeats.
   _W=                           Push a copy and extract the last, highest prime.
      )1|                        Increment and OR with 1.
         {mp},                   Push the array of primes below that integer.

                                 If 1 is the highest prime factor, this pushes
                                 [2], since (1 + 1) | 1 = 2 | 1 = 3.
                                 If 2 is the highest prime factor, this pushes
                                 [2], since (2 + 1) | 1 = 3 | 1 = 3.
                                 If p > 2 is the highest prime factor, it pushes
                                 [2 ... p], since (p + 1) | 1 = p + 2, where p + 1
                                 is even and, therefor, not a prime.

              \fe=               Count the number of occurrences of each prime
                                 in the factorization.

                                 This pushes [0] for input 1.

                  (              Shift out the first count.
                   0a*           Push a array of that many 0's.
                      +          Append it to the exponents.

                                 This pushes [] for input 1.

                       {  }%     Map; for each element in the resulting array:
                                   Increment and call J.

Suçlama Macunu: P
LegionMammal978 23:15

mf e=soru kum havuzundayken bir akıl sağlığı testine başladığımda bulduğumdan çok daha iyi, ama kullanmadığınız bir gelişme, ikişer ikişer eşleme yapmak (0a*+- yani ri{}sa2*{mf_W=){mp},\fe=(0a*+0j\{)j}%*}j. Ve size çok daha büyük bir gelişme var, bu da size birkaç saatlik bir başlangıç ​​yapacağım ...
Peter Taylor

@PeterTaylor Golf ve ipucu için teşekkürler.
Dennis

Evet, çıktı gösterimini değiştirmek gerçekten daha büyük bir gelişmeydi. Daha önce bulduğum temel davayı ele almanın daha iyi bir yolu var, ancak çözümünüzü yenmek için iki {mf_W=)1|{mp},\fe=(0a*+{)J}%}:J
Peter Taylor

@PeterTaylor Bu büyülü 1|. Tekrar teşekkürler!
Dennis

2

Mathematica, 88 bayt

f@1={};f@n_:=f/@Join[1+{##2},1&~Array~#]&@@SparseArray[PrimePi@#->#2&@@@FactorInteger@n]

Belgelenmemiş iç büyü ...
LegionMammal978
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.