Eratosthenes Karıştır


9

Meydan okuma

Bir girdi satırını kabul eden, karakterleri üzerinde çok belirgin ve tuhaf bir şekilde karışık çalma gerçekleştiren ve sonucu çıktılayan bir işlev veya program yazın.

Gerekli karıştırma aşağıdaki algoritma kullanılarak açıklanabilir:

  1. Girişteki her karakteri 1 tabanlı bir dizinle etiketleyin.
  2. Karakter numarasını 1 çıktı olarak yazın.
  3. 2 numaralı karakterden başlayarak, 2 karakterinin kendisi hariç olmak üzere diğer tüm karakterleri sırayla yazın . Başka bir deyişle, çıktı olarak 4, 6, 8, 10, vb. Karakterleri yazın.
  4. Henüz çıktı olarak yazılmayan bir sonraki karakter numarası n'den başlayarak, n'in karakterini ve çıktıya önceden yazmış olabileceğiniz diğer karakterleri (sayısal etikete göre) hariç tutarak her nth karakteri çıktıya yazın.
  5. Çıktıya yeni karakterler eklemeye devam ettiği sürece 4. adımı tekrarlayın.
  6. Çıktı için kalan karakterleri sırayla yazın.

Misal

  1. Karakterleri etiketleyin.
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
  OLDDOCYAK 'SBEAUTYCORNER

2. Çıktı yapılacak ilk karakteri yazın:

 1   2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
  O   LDDOCYAK 'SBEAUTYCORNER
O

3. 2 ile başlayan, 2 hariç diğer tüm karakterleri yazın.

 1   2 3 4   5 6   7 8   9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
 O   LD    D O   C    Y A   K '   S    B E   A U   T Y     C   O R   N E   R
Ey OA 'EUYCRE

4. Henüz yazılmayan bir sonraki karakter 3 numaralı karakterdir; 3 ile başlayan, ancak 3 karakterini ve önceden yazılmış herhangi bir karakteri hariç tutarak her 3 karakteri yazın.

 1   2 3 4   5 6   7 8   9  10 11 12 13 14  15  16 17 18 19 20  21  22 23 24 25 26  27
  O   LD    D O   C Y A   K '   S B E   A U   T Y C   O R   N E R 
OOA 'EUYCRE YB R             

5. Bir sonraki karakteri, karakter 5'i kullanarak 4. adımı tekrarlayın.

4. Henüz yazılmayan bir sonraki karakter 5 numaralı karakterdir; 5 ile başlayan ancak 5. karakterin kendisini ve önceden yazılmış herhangi bir karakteri hariç tutarak her 5. karakteri yazın. (Bu sadece 25 karakterdir).

 1   2 3 4   5 6   7 8  9  10 11 12 13 14  15  16 17 18 19 20  21  22 23 24  25  26  27
  O   LD    D O   C Y A   K '   S B E   A U           T Y  C   O R N E R 
OOA 'EUYCREYB R N      

5. Bir sonraki karakter 7'dir; ancak 14, 21 zaten yazılmıştır, bu nedenle 4. adımı tekrarlarsak daha fazla karakter çıkmazdı. Böylece 5 ile bitirdik.

6. Kalan karakterleri sırayla yazın.

 1   2 3 4   5 6   7 8  9  10 11 12 13 14  15  16 17 18 19 20  21  22 23 24  25  26  27
  O   LD   D O   C Y A   K '   S B E   A U   T Y C   O R N E R 
OOA 'EUYCREYB RN LDDCKSATO                  

kurallar

Giriş ve çıkış standart giriş / standart çıkış, karakter dizileri veya karakter dizileri yoluyla olabilir.

Standart girdi olarak okuyorsanız, size uygun bir satırsonu olduğunu veya tüm girdinin satırı içerdiğini varsayabilirsiniz. Yeni satır karakterleri karıştırmaya katılmaz.

Aynı şekilde, size kolaylık olması açısından, çıktınızın sonunda bir satırsonu olabilir veya olmayabilir.

Standart boşluklara izin verilmez.

Bu bir kod golf yarışması. Bayt cinsinden en küçük kod kazanır.

Test Durumları

123456789ABCDEF -> 1468ACE9F2357BD

OLD DOC YAK'S BEAUTY CORNER -> O O A' EUYCREYB RNLDDCKSATO

Blue boxes use a 2600hz tone to convince telephone switches that use in-band signalling that the caller is actually a telephone operator.
->
Bebxsuea20h oet ovnetlpoesice htuei-adsgaln httecle satal  eehn prtre 0ncce ha nng aiuapootnt ihyon atallu o s 6z oi ehwstsnbilt lr clee.

Şimdi neden bu kadar garip bir şekilde tanıdık olduğunu görüyorum ... Bu bir ana elek ...
busukxuan

1
Gerçekten kod blokları 4 şaşırmıştı. Çapraz 4 hala düzenli 4 ...
Mama Fun Roll

@MamaFunRoll Evet, ancak sayısal etiketleri göstermek için her şey biraz aralıklı. Bundan faydalanarak grevleri uzattım. Şimdi 4 aslında çaprazlanmış görünüyor ... daha iyi?
H Walters

1
Evet, kısmen eski bir PPCG meme idi: P Teşekkürler, netliği takdir edin!
Mama Fun Roll

Yanıtlar:


4

Jöle , 10 bayt

JÆfṂ$ÞÆPÞị

TryItOnline

Nasıl?

JÆfṂ$ÞÆPÞị - Main link: theString
J          - range(length), the 1-based indexes of theString
     Þ     - sort these by
    $      -     last two links as a monad
 Æf        -         prime factorization array (e.g. 20 -> [2,2,5])
   Ṃ       -         minimum
        Þ  - sort these by
      ÆP   - isPrime, i.e. move all the primes to the right
         ị - index into theString

5

Mathematica, 61 bayt

#[[SortBy[Range@Length@#,FactorInteger[#][[1,1]]PrimeQ@#&]]]&

Adsız işlev, karakter listesini girdi olarak alan ve karakter listesini döndüren.

FactorInteger[#][[1,1]]en küçük asal çarpanı verir #(ve döner 1eğer #eşittir 1). Bu nedenle FactorInteger[#][[1,1]]PrimeQ@#[: garip ifade verir #'küçük ana faktör s] Falseise #asal değildir ve # Trueeğer #asal (bu bir sayı ve boolean unevaluated ürünlerdir).

Range@Length@#giriş uzunluğuna kadar sayıların bir listesini verir. Sonra SortBybu sayıları yukarıda açıklanan komik işlevle sıralar. Mathematica birçok yönden gerçekten tipe duyarlıdır, ancak onları başka şekillerde neşeyle karıştırır: [sayı] Falseformunun ifadeleri, [sayı] formunun ifadelerinden önce alfabetik olarak sıralanırken True, bağlar sayıları sayısal olarak sıralayarak kırılır. Bu tam olarak burada istediğimiz permütasyonu üretir ve #[[...]]buna göre girdinin karakterlerine izin verir.


2

C, 164 bayt

Bu, girişi ilk komut parametresi olarak alır ve stdout'a geri yazdırır. Her karakteri işlerken, son geçişe izin vererek onu temizleriz.

#define p putchar
main(c,s,i,j,t)char**s,*t;{c=strlen(t=s[1]);p(*t);for(;j++<c;)if(t[j])for(i=2*j+1;i<=c;i+=j+1)!t[i]?:p(t[i]),t[i]=0;for(j=0;j++<c;)!*++t?:p(*t);}
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.