Hala ayrışan en çirkin R kodu satırı nedir?


19

Amaç tek bir R kodu satırı üretmektir:

  1. Mümkün olduğunca az yapar
  2. Mümkün olduğunca çok karakterde (en fazla 100 karakter)
  3. Ve mümkün olduğunca çirkin (burada "çirkin" verimsiz hesaplama stratejileri, sona eren noktalı virgül gibi yabancı karakterler anlamına gelebilir).

Elinden geleni yap, nazik halk!

Kazanmak için objektif kriterler

Kazanan cevap aşağıdaki puan ölçeğine göre değerlendirilecektir (en çok puan alan cevap kazanır):

  • 0 ile 10 arasında bir dizi oluşturun ( 100 puan)
  • Mümkün olduğu kadar çok karakterde (N)
    • N = 100 ise 0 puan
    • N <100 ise N-100 puan (yani 100'ün altındaki her karakter için bir puan kaybetmek)
    • N> 100 ise 2 (100-N) puan (100'den fazla her karakter için iki puan kaybetmek)
  • R Inferno'dan mümkün olduğunca çok negatif örnek kullanmak
    • Alıntılanan örnek başına 6 puan
    • Her örnek yalnızca bir kez sayılır. Bu böyledir çünkü “alevli mezarda hapsedilen heretik” yalnızca bir kez hapsedilebilir. Böylece kod satırınızdaki iki global atama size sadece 6 puan kazandırır.

Nesnel bir kazanma kriteri değil. SSS bölümüne bakın.
dmckee

4
SSS @dmckee :) kriterler oldukça objektif
Tomas

Kriterleri daha da açık hale getirmeye çalıştım. Kriter 3 hala yeterince objektif değilse, bunu sevmeme rağmen ortadan kaldırabilirim.
Ari B. Friedman

Yeni puanlama sistemini hiç anlamıyorum. Hedef 2 olabildiğince uzun olmalıdır (en fazla 100 karaktere bağlıdır) ve 100'e daha yakın olduğu için daha az puan verirsiniz (ve 100'den uzun programlar için puan belirtirsiniz ??!); Hedef 3 mümkün olduğunca çirkin olmak ve daha çirkin programlar için daha fazla puan vermek. Peki puanlar iyi mi kötü mü ?!
Peter Taylor

@PeterTaylor Her iki Hedef # 2 formülünün de negatif puan ürettiğine işaret etmek için düzenlendi. Puanlar iyidir: "En çok puan alan cevap kazanır".
Ari B. Friedman

Yanıtlar:


25

72 96 karakter.

`c`<-function(...){list(...)[[-1]];}->>`c`;`[`=0;`]`=10;c(c,c)(c,c)(c,invisible)(`[`[]:`]`[])[];

Çirkinlik:

  • Standart işlev adını yeniden kullanma
  • Sembolleri değişken ismi olarak kullanma
  • Global atama
  • Doğru atama
  • Fonksiyonun kendi kendini yeniden tanımlaması
  • Gereksiz sondaki noktalı virgül (ler)
  • Gereksiz alt komut dosyası numaraları
  • Değişken adının gereksiz alıntıları
  • Çalışma alanını, sonraki kod çalıştırmalarını neredeyse kesinlikle kıracak bir durumda bırakır

0-10 dizisini oluşturur (bunu yapma fikri için Andrie'ye teşekkürler).

çıktı:

 [1]  0  1  2  3  4  5  6  7  8  9 10

4
Bu gerçekten çılgınca. Bu kelimeyi ilk defa iltifat olarak kullandım. Öte yandan, birisinin dikkatini dağıtması ve dikkatli bir eleştiriden öğrenmesi için mükemmel bir çalışmadır. İyi iş.
Iterator

Parlak. Başımın üstünde, 3,4,5,8,9 numaralı çirkinlikler Inferno'da. Sınıflandırma ölçütlerine göre 96 + 6 * 5 = 126 puan.
Ari B. Friedman

Mükemmel çözüm. Bir çirkinlik + 100 karakter daha eklendi. Tüm " "<-"("c",function(...){list(...)[[-1]];}->>"c");"["=0;"]"=10;c(c,c)(c,c)(c,invisible)("["[]:"]"[])[]
ifadelerini

7

0 ile 10 arasında bir dizi oluşturun.

100 karakter

{.=0;for(`~1` in c(1,2,3,4,5,6,7,8,9,10)){.=c(., `~1`,recursive=F)};print(unname(.[drop=T]));rm(.)}
 [1]  0  1  2  3  4  5  6  7  8  9 10

5

100 karakter: 1'den 10'a kadar bir sıra oluşturur.

2-10 sayıları kodda DEĞİLDİR ... - Bonus puan? :-)

Ayrıca lapplymaksimum performans için kullandığını unutmayın :)

unlist(lapply(LETTERS[-(11:26)],function(x) as.integer(charToRaw(x))-as.integer(charToRaw('A'))+1L))
#[1]  1  2  3  4  5  6  7  8  9 10 

2

100 karakter

assign("a",1:10);b<<-paste(c(a),collapse=";");unlist(lapply(strsplit(b,";")[[1]],function(c)c[[1]]))

Olmadığından emin değil misiniz lapplyüzerinde strsplitolumsuz bir örnektir ama emin olmalıdır.

Karakter olarak döner:

 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"

1
I(cumsum(Reduce("sum", replicate(paste0(as.integer(T),as.integer(T)), T), accumulate=1-F) - T >0))

100 karakterden biraz daha az olmalı ve bir şekilde 0:10 üretmelidir


1
98 ncharsayma boşlukları sayıyorum. Her ne kadar benim sistemimde replicatebir uzunluk vektörü olarak bir karakter vektörü alamaz.
Ari B. Friedman
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.