Apa baris paling jelek dari kode R yang masih diuraikan?


19

Tujuannya adalah untuk menghasilkan satu baris kode R yang:

  1. Lakukan sesedikit mungkin
  2. Sebanyak mungkin karakter (maks. 100 karakter)
  3. Dan seburuk mungkin (di mana "jelek" dapat diartikan sebagai strategi komputasi yang tidak efisien, karakter asing seperti titik koma penghentian, dan sebagainya).

Lakukan yang terburuk, kaum lemah lembut!

Kriteria obyektif untuk menang

Jawaban yang menang akan dinilai berdasarkan skala poin berikut (jawaban dengan poin terbanyak menang):

  • Buat urutan dari 0 hingga 10 ( 100 poin)
  • Sebanyak mungkin karakter (N)
    • 0 poin jika N = 100
    • N-100 poin jika N <100 (mis. Kehilangan poin untuk setiap karakter di bawah 100)
    • 2 (100-N) poin jika N> 100 (yaitu kehilangan dua poin untuk setiap karakter lebih dari 100)
  • Menggunakan banyak contoh negatif dari R Inferno mungkin
    • 6 poin per contoh yang dikutip
    • Setiap contoh hanya dihitung satu kali. Ini karena "sesat yang dipenjara di [a] makam yang menyala-nyala" hanya bisa dipenjara sekali saja. Dengan demikian dua penugasan global dalam baris kode Anda hanya memberi Anda 6 poin.

Bukan kriteria kemenangan yang objektif. Lihat FAQ.
dmckee

4
FAQ Anda @dmckee :) kriterianya cukup objektif
Tomas

Saya telah mencoba membuat kriteria lebih eksplisit. Jika kriteria 3 masih belum cukup objektif, saya bisa menghilangkannya, meskipun saya lebih suka.
Ari B. Friedman

Saya tidak mengerti sistem penilaian yang baru sama sekali. Sasaran 2 adalah selama mungkin (tunduk pada maksimal 100 karakter), dan Anda memberikan poin lebih sedikit karena mendekati 100 (dan menentukan poin untuk program yang lebih lama dari 100 ??!); tujuan 3 adalah menjadi seburuk mungkin, dan Anda memberikan lebih banyak poin untuk program yang lebih buruk. Jadi, apakah poin seharusnya baik atau buruk?
Peter Taylor

@PeterTaylor Diedit untuk menunjukkan bahwa kedua rumus Objective # 2 menghasilkan poin negatif. Poin bagus: "Jawaban dengan poin terbanyak menang".
Ari B. Friedman

Jawaban:


25

72 96 karakter.

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

Kejelekan:

  • Menggunakan kembali nama fungsi standar
  • Menggunakan simbol sebagai nama variabel
  • Penugasan global
  • Penugasan yang tepat
  • Mendefinisikan ulang fungsi sendiri
  • Tanda titik koma yang tidak perlu
  • Nomor sub-skrip yang tidak perlu
  • Mengutip nama variabel yang tidak perlu
  • Meninggalkan ruang kerja dalam keadaan yang hampir pasti akan memecah setiap menjalankan kode berikutnya

Hasilkan urutan 0-10 (terima kasih kepada Andrie untuk ide untuk melakukan itu).

keluaran:

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

4
Itu benar-benar gila. Ini adalah pertama kalinya saya menggunakan kata itu sebagai pujian. Di sisi lain, itu adalah pekerjaan yang sangat baik bagi seseorang untuk mengaburkan dan belajar dari kritik yang cermat. Kerja bagus.
Iterator

Cemerlang. Di luar kepala saya, angka-angka buruk 3,4,5,8,9 berada di Inferno. Jadi itu 96 + 6 * 5 = 126 poin dengan kriteria penilaian.
Ari B. Friedman

Solusi brilian. Menambahkan satu lagi kejelekan + 100 char. Ganti semua "dengan tanda kutip tunggal. Memiliki masalah embedding."<-"("c",function(...){list(...)[[-1]];}->>"c");"["=0;"]"=10;c(c,c)(c,c)(c,invisible)("["[]:"]"[])[]
Vlo

7

Buat urutan dari 0 hingga 10.

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: Buat urutan dari 1 hingga 10.

Perhatikan bahwa angka 2-10 TIDAK dalam kode ... - Poin bonus? :-)

Perhatikan juga bahwa ini digunakan lapplyuntuk kinerja maksimum :)

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]]))

Tidak yakin apakah lapplypada strsplitadalah contoh negatif tetapi pasti harus.

Kembali sebagai karakter:

 [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))

seharusnya memiliki sedikit kurang dari 100 karakter dan entah bagaimana menghasilkan 0:10


1
Saya menghitung 98 via nchar, menghitung spasi. Meskipun pada sistem saya replicatetidak dapat mengambil vektor karakter sebagai argumen panjang.
Ari B. Friedman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.