Codegolf Rainbow: Renkleri Yansımayla Sıralama


9

Giriş:

Gökkuşağı ile ilgili iki zorluk yayınladıktan sonra: Codegolf Rainbow: Integer-Arrays 1 ve Codegolf Rainbow ile Eğlence : Siyah-Beyaz 2'de çiz , aşağıdaki yorum ASCII'de @ChrisM tarafından yapıldı ( Siyah- Beyaz'da çiz ) meydan okuma :

Belki bunu biliyorsunuz ve tasarım gereği (gökkuşağıların eşkenar dörtgenler veya ascii olmadığını ve daha yüksek siparişlerin pozisyonlarının daha karmaşık hale geldiğini biliyorum), ancak 2. gökkuşağında renkler tersine çevrilmemiş mi?

Ve gerçekten haklı. Çift gökkuşağı gördüğünüzde, ikincisi aslında birincinin yansımasıdır, bu yüzden renkler tersine çevrilir. Üç gökkuşağı ile, gerçek bir çift gökkuşağı, üçüncüsü diğer ikisinden birinin yansımasıdır. Ve dört ile, iki gökkuşağı ve bunların iki yansıması var.
resim açıklamasını buraya girin

Şimdi bu gerçeği kullanarak üçüncü bir sorunla karşılaşalım.

Meydan okuma:

Girişler: Pozitif bir tam sayı nolduğu >=2ve büyüklükte sayının bir liste >= n+1.
Çıktı: Aynı liste aşağıdaki gibi sıralanmıştır:

  1. İlk olarak giriş listelerini boyut alt listelerine bölün n(arkadaki alt listenin aralıktaki herhangi bir boyutta olabileceği yerlerde [1,n]).
  2. Ardından, alt liste miktarına göre aşağıdakileri yaparız m:
    • İlk m - m//2alt liste miktarını en yüksekten en düşüğe doğru sıralayın ( //tamsayı-bölün). (Yani 6 alt liste ile ilk üç en düşükten en yükseğe doğru sıralanır; 5 alt liste ile ilk üç en düşükten en yükseğe doğru sıralanır.)
    • m//2Alt listelerin son miktarını en yüksekten en düşüğe doğru sıralayın ( //tamsayı-bölün). (Yani 6 alt listeyle son üç en yüksekten en düşüğe doğru sıralanır; 5 alt listeyle son iki en yüksekten en düşüğe doğru sıralanır.)
  3. Tek bir liste oluşturmak için tüm alt listeleri bir araya getirin

Örnekler:

Girişler: n=7ve [3,2,1,-4,5,6,17,2,0,3,5,4,66,-7,7,6,-5,2,10]
Adım 1: [[3,2,1,-4,5,6,17],[2,0,3,5,4,66,-7],[7,6,-5,2,10]]
Adım 2: [[-4,1,2,3,5,6,17],[-7,0,2,3,4,5,66],[10,7,6,2,-5]]
Adım 3 / Çıkış:[-4,1,2,3,5,6,17,-7,0,2,3,4,5,66,10,7,6,2,-5]

Girişler: n=4ve [7,4,-8,9,3,19,0,-23,-13,13]
Adım 1: [[7,4,-8,9],[3,19,0,-23],[-13,13]]
Adım 2: [[-8,4,7,9],[-23,0,3,19],[13,-13]]
Adım 3 / Çıkış:[-8,4,7,9,-23,0,3,19,13,-13]

Zorluk kuralları:

  • Tamsayı girişinin 1'den nbüyük olması garanti edilir.
  • Tamsayı listesinin boyutunun büyük olması garanti edilir n.
  • Sondaki alt listeden daha küçük olabilir n(örneklerde ve test senaryolarında görüldüğü gibi).
  • G / Ç formatı makul herhangi bir formatta esnektir. Tamsayılar veya ondalık sayılar listesi, virgül / boşluk / satırsonu ile ayrılmış bir dize, tamsayılar akışı, vb. Olabilir. (Çıktı, 2. adım gibi listelerin 2B bir listesi olmayabilir. bu meydan okuma için gereklidir.)

Genel kurallar:

  • Bu , bayt cinsinden çok kısa cevap kazanır.
    Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. 'Herhangi bir' programlama dili için olabildiğince kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyon / yöntemi uygun parametreler ve dönüş tipi, tam programlar ile kullanmanıza izin verilir. Çağrınız.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, cevabınız için bir açıklama eklemeniz şiddetle tavsiye edilir.

Test senaryoları:

Inputs: n=7 and [3,2,1,-4,5,6,17,2,0,3,5,4,66,-7,7,6,-5,2,10]
Output: [-4,1,2,3,5,6,17,-7,0,2,3,4,5,66,10,7,6,2,-5]

Inputs: n=4 and [7,4,-8,9,3,19,0,-23,-13,13]
Output: [-8,4,7,9,-23,0,3,19,13,-13]

Inputs: n=2 and [7,-3,1]
Output: [-3,7,1]

Inputs: n=3 and [1,6,99,4,2]
Output: [1,6,99,4,2]

Inputs: n=2 and [5,2,9,3,-5,-5,11,-5,4,12,9,-2,0,4,1,10,11]
Output: [2,5,3,9,-5,-5,-5,11,4,12,9,-2,4,0,10,1,11]

Inputs: n=3 and [5,2,9,3,-5,-5,11,-5,4,12,9,-2,0,4,1,10,11]
Output: [2,5,9,-5,-5,3,-5,4,11,12,9,-2,4,1,0,11,10]

Yanıtlar:


5

Brachylog , 18 17 16 bayt

ġ₎↔ḍ↔{izo₎ᵐ↔}ᶠcc

Çevrimiçi deneyin!

@Sundar sayesinde -1 bayt

Girişi bekler [<integer list>, n]. Negatif tamsayıların _Brachylog'un "düşük eksi" ile temsil edildiğine dikkat edin. Çıktı değişkeni R.

Brachylog'u ilk kez denediğimde, baytlarda azaltmak için en uygun ve olgun olduğunu hayal ediyorum.

açıklama

Bölümleme, çatallanma, dizine göre sıralama (0: artan, 1: açıklama), düzleştir.

ġ₎               | split head of input into groups of length n (last of list)
  ↔              | reverse so that...
   ḍ             | dichotomize splits in two, attaching any additional element to the second list
    ↔            | reverse so first half of partitions corresponds to the 0 index
     {      }    | apply
      i          | : append index
       z         | : zip each sublist with the index of its parent
        o₎ᵐ      | : map over sublists, ordering by the zipped index
           ↔     | : undo earlier reverse
             ᶠ   | find all outputs
              cc | flatten two levels

17 bayt almak için ikinci çözümünüzde küçük bir değişiklik yapın: Çevrimiçi deneyin!
sundar - Monica'yı eski

@ sundar Sinsi bir şüphem vardı, çok fazla harita çiziyordum, teşekkürler!
fazlalık

Bu dil ne için?
Sam Orozco

@SamOrozco Kısa bildirimli mantık programlama. Dil adını tıklamayı deneyin!
Adám




2

05AB1E (eski) , 9 bayt

ô€{2ä`í«˜

Çevrimiçi deneyin!

Çevrimiçi deneyin! içinde 05AB1E (İksir yeniden yazma) -, girdi yığınına, varsayılan bir I / O yöntemi ile bekler.

Kevin, 10'a ulaştığım 11 baytını buldu. Sonra 9 bayt için başka bir şey buldum.


Güzel bir. İşte 11 baytlık alternatif olarak benim ilk çözüm oldu: ô€{2äRć€R)˜.
Kevin Cruijssen

1
@KevinCruijssen Yaklaşımınızı kullanarak 10'a ulaştınız haha. DÜZENLE : 9 şimdi!
Bay Xcoder

Ah, güzel. Tamamen unutmuşum í. Ve güzel ek golf.
Kevin Cruijssen

2

JavaScript (ES6), 82 81 bayt

@Redundancy sayesinde 1 bayt kaydedildi

Girişi alır (list)(n).

a=>n=>(g=z=>a+a?[...a.splice(0,n).sort((x,y)=>1/z?x-y:y-x),...g(a[i+=n])]:a)(i=0)

Çevrimiçi deneyin!


Yana atek boyutludur, seni yerine inanıyoruz a>[]ile a+aboş olmayan vaka kontrol etmek ve 1 byte tasarrufu. Bölümleme ve sıralamayı ne zaman tersine çevirmek için gerçekten akıllı bir yineleme stratejisi!
fazlalık

@redundancy Bu gerçekten güvenli olmalı. Teşekkürler!
Arnauld
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.