Can sıkıcı bir hata ile temel sıralama


28

Girişiniz mutlaka benzersiz değil bir liste / dizi / vektör / 5-255 pozitif tamsayı dizisidir. Hangi girdi formatının en uygun olduğunu ve her bir tamsayı (ve tamsayıların miktarının) 5-255 aralığından rasgele seçildiği varsayılabilir.

Amaç, aynı listeyi aynı (veya eşdeğer) biçimde, ancak artan (azalan) düzende sıralamaktır. Dil öğrenmede yaygın bir erken alıştırma. Eklenecek gönderiler:

  1. Doğru çalışan ve hedefe ulaşan bir cevap; ve

  2. Can sıkıcı bir hata içeren ikinci bir cevap. Zamanın% 1 ila% 10'u arasında, çıktının doğru formatta ve doğru elemanları içeren, ancak yanlış sırada (doğru şekilde sıralananlar hariç herhangi bir sıra) bir liste olması gerekir . Zamanın geri kalanı, programın düzgün çalışması ve amacına ulaşması gerekir.

İki cevap Levenshtein mesafesine bir olmalıdır ; yani, bir bayt'ı silerek, bir bayt ekleyerek veya bir bayt değiştirerek birini diğerinden alabiliriz.

Her zaman olduğu gibi kod golfünde puanlama (iki cevabınızın kısaltmasına dayanarak), her zamanki boşluklar yasaklanmıştır.

Can sıkıcı hata girdiden bağımsız ise% 10 bonus (puana düşme), yani aynı girişi tekrar kullanmak hatayı yeniden üretmez (zamanın% 1 ila% 10'u hariç).


9
PPCG'ye Hoşgeldiniz! Bonusu kaldırmayı öneriyorum, bu gerçekten iyi bir uygulama değil.
Bay Xcoder

2
Her olası giriş uzunluğunun olasılığı nedir belli değil.
user202729

12
Spec gerekir % 1 ve% 10 arasında bir zaman için yerine getirilmesi , her sadece giriş veya genel olası girişler kümesi için? Bazı girdiler [5,5,5]için yanlış sipariş vermek imkansız
Luis Mendo

4
Varsayılan IO formatlarımızla ilgili bir incelik var . Eğer kodumuz bir fonksiyon tanımlarsa, buggy olma şansı olan bir fonksiyonu tanımlamanın aksine, fonksiyonu sürekli olarak buggy olarak tanımlayabiliyor muyuz?
xnor

1
@VadimPonomarenko Bu sitede insanlar tam programların yanı sıra fonksiyonlar da sağlayabilirler. xnor , yaratıldığında zamanın% 1 ila% 10'unun her zaman bir hataya neden olacak bir hata ayıklama işlevi olan bir işleve sahip olup olmadığını soruyor. Sorunuzun mektubuna bakıldığında cevap muhtemelen hayır , ancak evet olsaydı daha eğlenceli olurdu .
wizzwizz4

Yanıtlar:


9

Python 3 , 36 bayt

Sorunsuz versiyon, 37 bayt

lambda l:sorted(l,reverse=l[-9:]==[])

Çevrimiçi deneyin!

Can sıkıcı sürüm, 36 bayt

lambda l:sorted(l,reverse=l[9:]==[])

Çevrimiçi deneyin!

Bu girişe bağlıdır ve bu nedenle bonus için uygun değildir.
Başarısızlık olasılığı% 2 civarındadır. Giriş uzunluğu 10'dan düşük olduğunda başarısız olur.

LyricLy'nin cevabı ile birleştirildiğinde, bu 34 bayt alır:

lambda l:sorted(l)[::l[9:]>[]or 1]
lambda l:sorted(l)[::l[9:]>[]or-1]

Sorunsuz versiyondaki alana ihtiyacınız olduğunu sanmıyorum.
wizzwizz4

Boşluksuz @ wizzwizz4, or1değişken bir ad olarak yorumlanır ve bir sözdizimi hatası oluşturur.
ovs

9

05AB1E , 5 * 0.9 = 4.5 bayt

Çalışma çözümü

{TLΩi

Çevrimiçi deneyin!

açıklama

{      # sort input
 TL    # push the range [1 ... 10]
   Ω   # pick a random number in the range
    i  # if true (equal to 1), do nothing

Hatayı içeren çözüm

Yanlış çözelti, zamanın% 10'unu verir (girişte bağımsız).

{TLΩiR

Çevrimiçi deneyin!

açıklama

Çalışılan çözümle aynıdır, ancak seçilen sayı doğru ise listeyi tersine çevirir.


Cidden ne hey. Çıktı doğru kardinalite bile değil.
Joshua

@Joshua Ne demek istiyorsun?
Outgolfer Erik,

Çevrimiçi deneyin, liste listesi çıktısını gösterir.
Joshua

4
@Joshua TiO bağlantısı , giriş üzerinde çağrılan fonksiyonun sonucunu birçok kez görmemize yardımcı olan bir başlık 100Fve altbilgi içerir },. Bu bize, çalışan çözümün hatalı çıktı verdiğini ve çalışma çözümünün daima doğru sonuçlar verdiğini gösteriyor.
Bay Xcoder

Lütfen birileri algoritmayı açıklayın. Yakında üst sıradaki başvuruları (veya üst sıradaki yayınlardan birini) kabul edeceğim. Anlayamadığım hiçbir çözümü kabul edemiyorum.
Vadim Ponomarenko

7

Jöle , 7 * (% 100 -% 10) = 6,3 bayt

Ṣ¹⁵X:¤¡

Çevrimiçi deneyin!

Buggy versiyonu:

ṢẊ⁵X:¤¡

Çevrimiçi deneyin!

Her iki bağlantıda da, kodu her defasında verdiğiniz listeyle birlikte her seferinde 100 kez çalıştıracak ve sonra sonuçları döndürecek bir test kablo demeti vardır.

Her giriş uzunluğunun olasılığı:

0.1 - 0.1/(length!)

Yani uzunluk 1 için% 0 olasılık, uzunluk 2% 5, uzunluk 3% 8.83 8., uzunluk 4% 9.583̅, vs.


Olmalı 0.1 - 0.1/(length!).
user202729

@ user202729 kesinlikle
Erik

Ṣ⁵X’¤¡ve Ṣ⁵X¤¡çok çalışması gerekir: buggy sürümü zamanın <% 10'u kadar sıralanmamış listeyi döndürür ve girişin eşit olarak rastgele seçilmesi durumunda, çalışması gerekir, 2 bayt tasarruf edin.
user202729

Eğer bu çözümü sevmiyorsanız, sadece ¹1 bayt kaydetmek için silebilirsiniz (bayt kural sayısı = kısa olan); ayrıca ikinci girişten sonra fazladan birleştirme üst çizgisi 6vardır 6.6̅%.
user202729

@ user202729 Maalesef artık girdilerden bağımsız olmayacak ve hayır "sadece" kaldıramam ¹çünkü o zamanın% 10'unda sıralama yapmaz.
Outgolfer Erik

6

Python 3, skor 58 57 -% 10 = 51.3

Ovs sayesinde bir bayt kaydedildi.

Sorunsuz versiyon, 57 bayt

lambda m:sorted(m)[::random()>.1or 1]
from random import*

Çevrimiçi deneyin!

Bugged sürümü, 57 bayt

lambda m:sorted(m)[::random()>.1or-1]
from random import*

Çevrimiçi deneyin!

Bonusu kullanan bir çözümü denemeye karar verdim. Diğer Python cevabını geçmedi, ama düşünerek eğlendim.


5

C, 71 * 0.9 = 63.9 bayt

Hata içermeyen:

c(int*a,int*b){return*a-*b;}f(a,n)int*a;{if(rand()%1<9)qsort(a,n,4,c);}

Çevrimiçi deneyin!

Buggy:

c(int*a,int*b){return*a-*b;}f(a,n)int*a;{if(rand()%10<9)qsort(a,n,4,c);}

Çevrimiçi deneyin!


% 1 için +1 (oh, 6 şaka daha yapmak için benimle dalga geçiyor olmalısın)
Joshua

4

Groovy , 31 bayt

Bugged çözüm:

{a->a.sort()[a[9]?0..-1:-1..0]}

Çalışma çözümü:

{a->a.sort()[a[0]?0..-1:-1..0]}

Groovy abone operatörü ( getAtyöntem), dizin boyutundan büyükse listeler için null değerini döndürür. Yani dokuzuncu bir öğe varsa, sıralanan listeyle aynı kalır, ancak değilse (% 1.99203187 şansı) tersine çevrilir. Bununla birlikte, her zaman bir birinci öğe olacaktır, çünkü listenin boyutu her zaman 5'ten büyük veya ona eşittir a[0].


1
Siteye hoş geldiniz ve ilk mesajınız güzel!
caird coinheringaahing


3

PHP, 70 bayt

Sorunsuz versiyon, 70 bayt

<?unset($argv[0]);((rand(1,9)?"":r).sort)($argv);echo join(" ",$argv);

Çevrimiçi deneyin!

Bugged sürüm, 70 bayt

<?unset($argv[0]);((rand(0,9)?"":r).sort)($argv);echo join(" ",$argv);

Çevrimiçi deneyin!

Hatalı sürüm, zamanın% 10'unu ters sırada sıralar (rastgele sayı üreticisine göre).


-r(-2 bayt) etiketine gerek yok . alt çizgi ile birleştir; eşdeğer olmalıdır (-2 bayt). kullanmak asortyerine sort(-1 byte).
Titus

... veya önek yerine tüm kelimeyi kullanın (ya da değil): unset($argv[0]);(rand(1,9)?sort:rsort)($argv);echo join(_,$argv);(ayrıca 65 bayt)
Titus

3

Python 2 , 26 bayt

Buggy:

lambda l:l[9:]and l.sort()

Çevrimiçi deneyin!

Giriş listesini değiştirerek çıktılar . Listeyi yalnızca uzunluğu en az 10 ise sıralar. Buggy olmayan sürüm 9, a ' 0yı her zaman sıralayacak şekilde değiştirir.

Çalışma:

lambda l:l[0:]and l.sort()

Çevrimiçi deneyin!

Listeyi, toplam 30 bayt olmak üzere 4 bayt pahasına döndürmek için işlevi değiştirebiliriz:

lambda l:l[9:]and l.sort()or l

Çevrimiçi deneyin!


Bazı kuralların genişletilmesiyle 25 bayt:

[list,sorted][id(0)%17>0]

Çevrimiçi deneyin!

id(0)Rastgele bir kaynak olarak kullanan, kimliği sıralayan ya da kılan bir fonksiyon değişkeni . Değişim >için >=düzeltme, ya 0hiç ~0.


3

Kabuğu , 6 bayt

Buggy versiyonu:

?OIV¦9

Çevrimiçi deneyin!

Doğru versiyonu:

?OIVK9

Çevrimiçi deneyin!

açıklama

Bu programlar tamamen belirleyicidir. Aslında, şu anda Husk'un rasgele sayılar için hiçbir desteği yoktur.

?  V    If any element
    ¦9  is divisible by 9 (in buggy version),
    K9  is truthy when replaced by 9 (in correct version),
 O      sort the list,
  I     otherwise return it unchanged.

Buggy programının çıktısının% 1 ile% 2 arasında bir olasılıkla sıralanmadığını iddia ediyorum. Tarafından Göstermek N = 251 elemanlarının mümkün olan değerler. L uzunluklarının rastgele bir listesinin 9 katları içermemesi olasılığı ((NK) / N) ^ L'dir , burada K , 9'a bölünebilen değerlerin sayısıdır ( K = 28 ). Toplam olasılık , bunun yaklaşık% 1.98 olduğu 5 ≤ L ≤ 255 için ortalamasıdır . Bu listelerin bazıları, zaten sıralandığından yanlış pozitif. Sıralama için L uzunluğunun rastgele bir listesinin olasılığı en fazladır ((N + N * (N-1) / 2) / N ^ 2) ^ ⌊L / 2⌋ : eğer listeyi uzunluk parçalarına bölersek 2, her biri⌊L / 2⌋ topakları sıralanmalıdır. Bir listenin sıralanmasının toplam olasılığı , yaklaşık% 0,30 olan 5 ≤ L ≤ 255 için yukarıdakilerin ortalaması ile sınırlıdır . Dolayısıyla, sıralanmamış bir liste döndüren işlevin olasılığı% 1.67 ile% 1.98 arasındadır.


9'a bölünebilir, yaklaşık% 11 başarısızlık şansı verir. ve sıralama değil, listenin sıralanmamış olduğunu garanti etmez.
Titus,

1
@Titus, analizde bunu ele alıyorum. Sıralama yapılmaması liste, yalnızca oluşur hiçbir bu olasılığı 1.98% hakkındadır 9 ile bölünebilir elementleri. Ve eğer liste zaten sıralıysa, hiçbir şey yapmamak da sıralı bir liste verecektir. Bununla birlikte, listenin zaten sıralanma olasılığı en fazla% 0,30'dur, bu da sıralanmamış bir liste çıktısının toplam olasılığının% 1'in üzerinde olmasını sağlayacak kadar düşüktür.
Zgarb

true ... ve sıralanan giriş hatayı değiştirmez.
Titus

Belki ↓9yerine kullanmak V¦9ve sadece 9doğru sürüm için kısaltabilir misiniz? Bu kısa girişlerde her zaman başarısız olmasına ve uzun girişlerde daima doğru çalışmasına neden olur, ancak giriş uzunluğu rastgele bir dağılım izlediğinden hala geçerli bir cevap olmalıdır
Leo

3

Bash , 26 bayt

Doğru versiyonu

s=n
sort -${s:RANDOM%20<0}

Çevrimiçi deneyin! veya olasılıkları kontrol et .

Bugged sürüm

s=n
sort -${s:RANDOM%20<1}

Çevrimiçi deneyin! veya olasılıkları kontrol et .

Girdiyi yeni satır ayrılmış sayılar olarak alır. Yerleşik değişkeni kullanır RANDOM, 32767 - her zaman aralığı 0 bir (sözde) rasgele sayı ile döner . Kullanılması %20(ilgili sorunların netleştirilmesi için teşekkürler @Titus% 5 başarısızlık oranı hakkında sonuçlar %10).

Bu rasgelelik, başarısızlık oranının girdiden bağımsız olduğu anlamına gelir, ancak bu, başarısızlık çıktısının sözlüksel olarak sıralandığından, giriş dizisinin birden fazla rakam içeren en az bir sayı içermesini gerektirir.

Alternatif sürüm, 27 bayt

((RANDOM+20))||cat&&sort -n

Bugged sürüm +, a ile değiştirilir %. Çevrimiçi deneyin ya da tıkalı deneyin .


penny toplama: %10dönme şansı daha yüksek olur 0üzere 7daha 8ya 9başarısızlığın şans% 10 üzerindedir, böylece;)
Titus

@Titus Teşekkürler, bu gerçeği unuttum. %20Cevabınız gibi kullanmak için güncellendi .
Justin Mariner

3

Pyth , puan 8 * 0,9 = 7,2

İlk pasaj (doğru olanı):

h.uSNT.S

Burada dene!

İkinci snippet (bir bugged):

O.uSNT.S

Burada dene!

İsaacg sayesinde iki bayt (ve 1.8 puan) kaydedildi !


10 yeni kopya yerine 9 iyi olacağını düşünüyorum. .SGirdiyi geri döndürmeme olasılığı, bu (nadir) durumlarda, yanlış cevap alma şansımızın% 10'dan% 0'a düşmesi anlamına gelir - yani ortalama olarak hala doğru aralıktadır. Tabii ki, 10 kopya da iyi.
Misha Lavrov

@MishaLavrov Şimdi açıklamamda açıklamada bir hata yaptım. .SAyrıca girişin kendisini de döndürebileceğini söyledim (ki bu bir problem olmazdı), ancak .Ssıralanan listeyi de döndürebileceğimi söyledim .
Bay Xcoder,

Doğru, ben de öyle demek istedim.
Misha Lavrov

Aynı fikir, ancak daha kısa:O.uSNT.S
isaacg

2

JavaScript (ES6), 24 bayt

Hatasız sürüm (en azından 0-2147483647 aralığındaki tamsayılar için verilen aralıktaki herhangi bir şey için):

a=>a.sort((a,b)=>a-b>>0)

Buggy versiyonu:

a=>a.sort((a,b)=>a-b>>1)

A) motorun sıralama algoritmasına bağlı olarak ve b) yanlış sırada iki değer içeren girdi listesi 1 ile değişir. (Eğer olasılığı çok düşükse o zaman o 1zaman artabilirsin. için 8kendisine sadece aralığında bir şey sıralamak olmaz 5-255.)



2

Saldırgan , 9 bayt -% 10 = 8,1

Bugged Çözüm:

g0TUn?};_

Çevrimiçi deneyin!

Çalışma çözümü:

g1TUn?};_

Çevrimiçi deneyin!

Kodlanmış kod aşağıdakileri yapar:

g0TUn?};_

g          \ Sort the stack correctly
 0TU       \ Generate random(0, 10)
    n? ;   \ If this is zero:
      }    \    Cyclically shift the stack right once
        _  \ Print the result

Sabit kod basitçe değiştirir 0için 1. As random(1, 10)asla 0ifadesi çalıştırıldı asla eğer.


2

MATL , 7 * 0.9 = 6.3 6 * 0.9 = 5.4 bayt

Buggy versiyonu:

Gr.9<?S

Çevrimiçi deneyin!

Açıklama:

G        % Grab input
 r       % Push a random number between 0 and 1
  .9     % Push 0.9
    <    % Check if the random number is smaller than 0.9
     ?   % If true
      S  % Sort input
         % Implicit output

Sorunsuz versiyon:

Gr9<?S

Çevrimiçi deneyin!

Açıklama:

G       % Grab input
 r      % Push a random number between 0 and 1
  9     % Push 9
   <    % Check if the random number is smaller than 9 (always true)
    ?   % If true
     S  % Sort the input
        % Implicit output     

1

Jq 1.5 , 42 bayt

böcekli

sort|if length%13<=0then reverse else. end

Çalışıyor (= silmek)

sort|if length%13<0then reverse else. end

Satır uzunluklarının eşit olduğu varsayılarak [5,255] yaklaşık% 7 hataya neden olur

Çevrimiçi deneyin!



1

R , 30 * .9 = 27 bayt

(Arabası)

function(l)sort(l,runif(1)<.1)

Çevrimiçi deneyin!

(adamcağız değil)

function(l)sort(l,runif(1)<.0)

Buggy versiyonu decreasing=Tzamanın% 10'unu sıralar ve tek tip (0,1) dağılımdan örnekleme yapar. Un-buggy versiyonu her zamandecreasing=F


1

Röda , 42 bayt -% 10 = 37.8

Hata içermeyen:

{sort key={|i|currentTime|[_%20//19*0+i]}}

Buggy:

{sort key={|i|currentTime|[_%20//19*i+i]}}

Çevrimiçi deneyin!

Bu, currentTimerastgele sayılar oluşturmak için işlevi kullanır . Dağıtımlarının makineler arasında biraz farklı olduğu görülüyor. Oran 20//19, herhangi bir bayt cezası için farklı sonuçlar elde etmek için ayarlanabilir (daha küçük değilse 99//98).



1

Java 8, 45 34,2 ( 50 38 - 10%) bayt

Normal sürüm:

a->{if(Math.random()>0.)a.sort(null);}

Açıklama:

Burada dene.

a->{                    // Method with ArrayList<Integer> parameter and no return-type
  if(Math.random()>0.)  //  If the random 0-1 double is larger than 0:
    a.sort(null);       //   Sort the input-List
}                       // End of method

Bugged sürüm ( 51 39 bayt):

a->{if(Math.random()>0.1)a.sort(null);}

1 / LD: 1 eklendi.

Açıklama:

Burada dene.

a->{                     // Method with ArrayList<Integer> parameter and no return-type
  if(Math.random()>0.1)  //  If the random 0-1 double is larger than 0.1:
    a.sort(null);        //   Sort the input-List
}                        // End of method

0

JavaScript, 25 * 0.9 = 22,5

new Date%25?x:x.sort()

giriş x

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.