Susunan Ulang Kode Bowling


14

Tantangan Code-Bowling

Tulis program atau fungsi yang menghasilkan output yang sama, tidak peduli bagaimana Anda mengatur ulang kode sumber. (Output tidak bisa menjadi kesalahan)


Skor Pangram

  • Skor Anda adalah jumlah karakter unik dalam kode sumber Anda.

    Suatu program dengan kode sumber AJBakan memiliki skor 3
    Suatu program dengan kode sumber AAJakan memiliki skor dari 2
    Suatu program dengan kode sumber 111akan memiliki skor1

  • Ini adalah varian . Program dengan skor tertinggi menang!

(Untuk kenyamanan Anda, alat penilaian otomatis telah dibuat di sini )


Aturan Tantangan

  1. Input
    Program / fungsi dapat mengambil input, itu sepenuhnya opsional.

  2. Output Output
    ini dapat berupa apa saja yang Anda inginkan, tetapi harus non-nil, non-null, non-kosong, dan non-kesalahan. (Untuk itu output harus minimal 1 byte)

  3. Pengaturan Ulang
    Tidak peduli bagaimana kode sumber diatur ulang, hasilnya harus sama.

    Contoh:
       Program: ABJoutput hello world, seperti halnya program: [ AJB, JAB, JBA, dll]

Ini adalah varian . Program dengan jumlah karakter terbanyak akan menang!


1
Tanpa tugas khusus untuk dicapai, tantangan ini terlalu luas menurut saya.
Dennis

2
Apa yang dimaksud dengan non-nil?
Dennis

2
Meskipun penilaian pangram Anda merupakan upaya untuk membuat kode bowling bekerja, saya tidak yakin tantangan ini harus benar-benar ditandai dengan kode bowling . Mekanisme penilaian sangat berbeda dari apa kode bowling seharusnya, jadi saya akan mengatakan baik menggunakan tantangan kode atau membuat tag baru.
Martin Ender

1
Saya harus setuju dengan Martin. Misalnya, tantangan ini bukan golf kode. Segera setelah Anda skor dengan apa pun selain jumlah total karakter (atau byte), itu bukan lagi tantangan bowling kode
Nathan Merrill

3
Apakah program / fungsi harus berakhir? (mis. bisakah saya mencetak 0selamanya?)
MildlyMilquetoast

Jawaban:


18

Bahasa, 1.112.064 poin jika UTF-8

Program saya terdiri dari setiap karakter UTF-8 yang memungkinkan. Mencetak "Hello world", dan menggunakan ruang 1,75 * 1076 yottabytes.

(Untuk menghasilkan program, Anda hanya perlu membuat file dengan 17498005810995570277424757300680353162371620393379153004301136096632219477184361459647073663110750484 karakter, memastikan bahwa setiap karakter UTF-8 yang mungkin ada dalam file)


2
Anda, tuan, adalah seorang jenius. Dan tunggu, mengapa komputer saya mogok? : 'P
HyperNeutrino

Saya pikir Unicode memiliki 1114112 karakter?
MilkyWay90

14

Banyak bahasa, 2 poin

0.

Menghasilkan 0.0sebagai 0.atau .0. Membutuhkan parsing angka liberal yang OK dengan titik desimal di awal atau akhir, dengan asumsi 0 untuk bagian integral atau desimal yang hilang. 0000000.akan memberikan skor yang sama.

Ini juga berfungsi dalam bahasa berikut (dalam beberapa kasus dengan output yang berbeda, seperti yang ditunjukkan):

  • Python REPL
  • Javascript REPL
  • MATLAB (menghasilkan ans = 0)
  • Oktaf (menghasilkan ans = 0)
  • MATL (menghasilkan 0)
  • CJam
  • Retina (menghasilkan 0)
  • Ditumpuk (menghasilkan 0)

Untuk Python, saya pikir ini adalah satu-satunya cara untuk mendapatkan skor di atas 1, karena kemungkinan bisa habis.

  • Setiap operator biner atau unary akan gagal sebagai karakter terakhir
  • Salah satu dari [](){}membutuhkan pertandingan dan akan gagal jika yang pertama datang
  • Tab atau spasi tidak dapat memulai garis. Baris baru tidak dapat digunakan dalam REPL.
  • A , tidak bisa menjadi karakter pertama
  • Yang #pertama ditempatkan akan berkomentar semuanya dan menghasilkan bukan output
  • Awal \adalah kelanjutan garis yang tidak valid
  • Backticks (Python 2) harus dipasangkan, dan mereka yang mengelilingi tidak ada kesalahan
  • $, !, ?, Dan @tidak dapat digunakan tanpa karakter tidak dapat digunakan lainnya

Ini daun huruf, angka, _, ., dan kutipan.

  • Dengan kutipan, sembarang non-string di luarnya memberikan kesalahan.
  • Surat dengan kemungkinan digit dan _membuat nama variabel, yang beberapa permutasi selalu tidak ada.

Digit daun dan .. Membubuhkan digit yang berbeda memberikan angka yang berbeda kecuali semua digit itu 0. Jadi, saya pikir nol dan .satu-satunya cara untuk mendapatkan skor di atas 1. Tapi, saya tidak mengenal Python lexer dengan baik, jadi saya bisa melewatkan sesuatu.


11

CJam , skor 15

T U
V	LMOQR[]0q

Cobalah online!

Selalu dicetak 0000:

  • 0 hanya menekan nol.
  • T, U, VAdalah variabel yang pra-dijalankan ke nol.
  • L, M, O, Q, RAdalah variabel yang pra-dijalankan ke daftar kosong, sehingga mereka tidak muncul dalam output.
  • [dan ]mungkin atau mungkin tidak membungkus hal-hal dalam daftar, tetapi mereka tidak harus dicocokkan dengan benar dan hasilnya rata untuk dicetak.
  • q membaca input yang kosong dan karenanya tidak muncul di output juga.
  • linefeed, spasi, dan tab diabaikan oleh pengurai.

Ini adalah jawaban yang bagus untuk bahasa seperti CJam! Bagus
Albert Renshaw

Bisakah huruf kecil rditambahkan untuk mencapai sesuatu yang mirip dengan huruf kecil q?
Albert Renshaw

1
@AlbertRenshaw Anda tidak dapat memiliki keduanya, karena akan ada kesalahan pada EOF.
Martin Ender

9

MATL , 3 5 6 poin

Gagasan untuk menambah spasi diambil dari jawaban Bijan .

lv
 T1

Kode, atau permutasi apa pun darinya, mengeluarkan tiga yang dipisahkan oleh baris baru.

Cobalah online!

Penjelasan

  • Fungsi lsecara default mendorong nomor satu ke tumpukan.
  • Literal 1melakukan hal yang sama.
  • Literal Tdorongan true, yang ditampilkan sebagai nomor satu.
  • Ruang dan baris baru adalah pemisah, dan di sini tidak melakukan apa pun.
  • vmenggabungkan seluruh tumpukan sejauh ini menjadi vektor kolom. Jadi misalnya vsetelah Takan menggabungkan dua angka pertama menjadi kolom (dan kemudian nomor berikutnya akan didorong). Inisial vakan menghasilkan array kosong.

Di akhir kode, tumpukan ditampilkan secara implisit, dengan aturan berikut:

  • Setiap elemen atau array dalam tumpukan ditampilkan pada garis yang berbeda.
  • Vektor kolom ditampilkan dengan setiap elemen pada garis yang berbeda.
  • Array kosong tidak menghasilkan keluaran.

Jadi permutasi karakter input menghasilkan 1tiga kali dalam baris yang berbeda.


Penjelasan? Saya ingin tahu tentang cara kerjanya.
Kamerad SparklePony

@Parkle Menambahkan penjelasan
Luis Mendo

Bagus! Juga hanya ingin mencatat bahwa saya memiliki teks ini dalam tantangan Removing any part of the source code however should cause that specific output to not be produced.pada saat Anda memposting, saya tidak bermaksud untuk menambahkannya dan telah dihapus. Mungkin itu akan membantu Anda meningkatkan skor sedikit mungkin
Albert Renshaw

1
@AlbertRenshaw Terima kasih atas dukungannya! Dua poin lagi
Luis Mendo

Saya menuduh Anda mencuri ide saya. Tapi itu tidak masalah.
Bijan

6

Jelly , skor 53 101

¶ ¤$¥&+ABDFHNPQSUVX^_aborv|®²×ȧȯḄḅḌḞḢḤḷṀṂṚṛṠṢṪẠạị«»()kquƁƇƊƑƘⱮƝƤƬƲȤɓɗƒɦƙɱɲƥʠɼʂƭʋȥẸẈẒẎŻẹḥḳṇọụṿẉỵẓḋėġṅẏ

Hanya menggunakan karakter yang merupakan bagian dari halaman kode Jelly .

Jelly memiliki input implisit dari 0, dan bagian pertama (hingga dan termasuk ạị«») dari string kode di atas sebagian besar terdiri dari atom monadik (huruf besar) dan dyadic (huruf kecil dan simbol) yang ketika diberi nol atau daftar yang hanya mengandung satu nol ( atau dua input tersebut dalam kasus angka dua) mengembalikan nol atau daftar yang hanya mengandung satu nol.

Pengecualiannya adalah:

  • Spasi: diabaikan (meskipun ada di halaman kode).

  • Pilcrow, memisahkan tautan (seperti halnya umpan baris - tetapi itu benar-benar byte yang sama), tetapi tidak ada byte lain yang akan mereferensikan kode sebelumnya.

  • scarab,, ¤menginstruksikan parser untuk memperlakukan semua yang tersisa mulai dari nilad (atau konstanta) sebagai konstanta (dan bekerja sebagai atom pertama).

  • Dolar,, $menginstruksikan parser untuk memperlakukan dua tautan ke kiri sebagai monad (dan, agak mengejutkan, berfungsi sebagai atom pertama)

  • Yen,, ¥juga menginstruksikan parser untuk memperlakukan dua tautan yang tersisa sebagai angka dua.

  • Direkomendasikan,, ®mengingat nilai registri, pada awalnya 0(itu adalah hak cipta pendamping ©,, rusak ketika digunakan sebagai atom pertama karena arity ditemukan dari arity tautan ke kiri, yang belum ditetapkan).

Kode dari tanda kurung, (dan )dan seterusnya, saat ini adalah titik kode yang tidak digunakan, semua ini dapat diuraikan dan masing-masing menyebabkan rantai baru (seperti baris baru, meskipun mereka tidak memiliki efek membuat tautan yang dapat dipanggil seperti baris baru, tetapi itu tidak masalah di sini karena tidak ada yang mencoba melakukannya).


1
Anda dapat menambahkan semua karakter di luar halaman kode secara gratis, karena penerjemah menjatuhkannya sebelum memproses kode. Saya masih tidak tahu apa artinya non-nil.
Dennis

1
Saya pikir semangat tantangan mungkin adalah bahwa karakter harus ada di halaman. Saya bertanya tentang non-nil dan jawabannya adalah menentukan output minimum 1-byte.
Jonathan Allan

@Dennis tahu tentang terminologi yang benar untuk apa yang terjadi dengan parsing di tanda kurung?
Jonathan Allan

Semua karakter yang tidak digunakan memulai tautan baru, seperti halnya baris baru.
Dennis

1
Sebut mereka perilaku yang tidak terdefinisi. : P
Dennis

4

TI-Basic (83 series), 93 poin (99 on a TI-84 Plus)

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZθnπeiAnsrandgetKeyZXsclZYsclXsclYsclXminXmaxYminYmaxTminTmaxθminθmaxZXminZXmaxZYminZYmaxZθminZθmaxZTminZTmaxTblStartPlotStartZPlotStartnMaxZnMaxnMinZnMinΔTblTstepθstepZTstepZθstepΔXΔYXFactYFactTblInputNI%PVPMTFVP/YC/YPlotStepZPlotStepXresZXresTraceStep

Semua digit, semua variabel satu byte (termasuk θ dan n , variabel independen untuk grafik polar dan berurutan), konstanta π, e , dan saya , beberapa tidak-cukup-variabel ( Ans, rand, dan getKey), dan 59 yang berbeda variabel jendela (semua yang dijamin akan didefinisikan).

Penggandaan tersirat menjamin bahwa hasilnya akan 0 ketika kami menerima ini dalam urutan apa pun. Jika ini berjalan pada kalkulator baru, semua variabel akan menjadi 0; bahkan jika tidak, getKeyakan menjadi 0 karena tidak ada waktu untuk menekan tombol sebelum program mengembalikan nilai.

Pada TI-84 Plus atau lebih tinggi, kita bisa mendapatkan 6 poin lebih dengan menambahkan token getDate, getTime,startTmr , getDtFmt, getTmFmt, isClockOn. Hasilnya sekarang akan selalu {0 0 0}karena getDatedan getTimemengembalikan daftar panjang 3 dan multiplikasi tersirat mendistribusikan elemen.

Saya pikir ini semua token yang mungkin untuk digunakan: setiap perintah aktual adalah awalan, infiks, atau postfix (artinya mereka tidak akan bekerja di awal atau akhir program) dan variabel lain mungkin tidak terdefinisi (dan menyebabkan kesalahan saat bekas).


Ini pintar. Tidak terlalu mengesankan haha, tapi memang pintar! +1
Albert Renshaw

3

(non-bersaing) Brainf-ck, 63 byte

Yah, saya tidak tahu apakah ini dianggap curang, tapi ...

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Titik mencetak karakter saat ini (0x00) dan karakter lainnya tidak melakukan apa pun. Secara teknis ini dapat diperluas tanpa batas, jadi tolong beri tahu saya jika ini dianggap curang.


Saya akan mempertimbangkan bahwa output nol
Albert Renshaw

Oh, haruskah saya menghapus jawaban saya atau menandainya sebagai tidak bersaing?
brianush1

1
Ada 97 karakter yang dapat diketik, 7 di antaranya tidak dapat Anda gunakan (8-1), jadi menurut saya 90.
Bijan

@ brianush1 Anda dapat membiarkannya sebagai tidak bersaing sehingga orang lain dapat melihatnya. Saya akan mengedit pertanyaan sedikit lebih jauh untuk menjelaskan output minimal harus 1 byte
Albert Renshaw

15
@AlbertRenshaw (maaf untuk semua komentar ini) Jika output harus 1 byte, maka karakter NULL harus dihitung, karena ini adalah byte, meskipun satu dengan nilai 0.
brianush1

3

Haskell, 3 poin

+ 1

Tidak peduli bagaimana disusun ulang kode ini selalu mengembalikan fungsi yang menambah input. Contoh penggunaan dalam balasan:

>(+ 1) 1
2
>(1+ ) 1  
2
>( +1) 1
2

2

√ å ı ¥ ® Ï Ø ¿ , 128.234 (?) Poin

Saya tiba di 128.234 dengan bantuan dari @DestructibleLemon. Program ini menggunakan semua karakter Unicode (128.237) kecuali o, Odan ł. Anehnya, dua di antaranya adalah perintah keluaran.

Tentunya, tidak ada bahasa yang bisa menggunakan semua karakter itu, kan? Nah bahasa ini mengabaikan perintah yang tidak dikenali. Masalah terpecahkan.

Bahasa ini akan, secara default, menampilkan yang berikut:

===== OUTPUT =====



==================

yang tidak nol, tidak nol, tidak kosong dan tidak salah.

Catatan: jika ini melanggar beberapa aturan tidak tertulis, beri tahu saya di komentar dan saya akan mengubahnya. Jika Anda tahu skor saya (dengan asumsi ini diizinkan), juga kirim dalam komentar.


Kumpulan karakter apa yang digunakannya? utf 8? utf-16? Apakah ini menggunakan semua unicode?
Destructible Lemon

@DestructibleLemon Melihat pada halaman github, sepertinya menggunakan "CP-1252" untuk pengkodean.
brianush1

@DestructibleLemon Perintah-perintah ini semuanya ada di CP-1252 (Windows-1252) tetapi akan menerima karakter Unicode sebagai sintaks yang valid
caird coinheringaahing

Rupanya, ada 128.237 karakter unicode, jadi, Anda akan memiliki 128.234? en.wikipedia.org/wiki/Unicode#cite_note-24
Destructible Lemon

Menurut jawaban lain ternyata ada 1.112.064 unicode, jadi saya tidak benar-benar yakin lagi
Destructible Lemon

1

J, 3 byte

 1

Karakter 1, spasi, dan baris baru akan selalu mencetak 1.



1

Dots , 1.114.111 karakter (jika menggunakan unicode).

<87 dots here> Every Unicode character except NUL and . here

Penjelasan:

1                                           leading binary number
1010                                        010 increments the value under the pointer
1010111                                     111 prints out chr(1)

Jadi string biner yang dihasilkan adalah 1010111, yang dikonversi menjadi desimal adalah 87, jadi kita perlu 87 titik.

Setiap karakter lain adalah komentar, jadi kami menggunakan setiap karakter kecuali NUL, karena Python3 berhenti membaca file, dan sebuah titik, karena titik-titik bukan komentar.


0

Pendahuluan , skor 1.112.051

(Ketika hanya mempertimbangkan ASCII yang dapat dicetak [\t\n -~], skornya adalah 84. Jika kita mempertimbangkan semua poin kode Unicode , skornya adalah 1.112.051 .)

!
" #$    %&'+,-./0:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

(lalu tambahkan semua karakter [\u{7f}-\u{10ffff}]setelahnya.)

Selalu cetak 0.


Prelude adalah bahasa berbasis tumpukan paralel, di mana tumpukan diisi sebelumnya dengan angka 0s yang tak terbatas.

  • +: Pop dua nilai (selalu 0), tambahkan (0), dan dorong untuk menumpuk.
  • -: Pop dua nilai (selalu 0), kurangi (0), dan tekan untuk menumpuk.
  • #: Pop nilai dan buang.
  • !: Pop nilai dan output sebagai angka (selalu 0) (spec mengatakan "karakter" tetapi penerjemah mengatakan "angka"; kedua kasus, byte dicetak)
  • 0: Menekan 0.
  • ^, v,V : Dorong nilai atas / program sebelumnya berikutnya paralel ( "suara"), tetapi tumpukan semua "suara" yang diisi dengan 0, sehingga mereka selalu mendorong 0.
  • karakter lain: no-op.

Jadi hanya ada 13 karakter yang perlu kita hindari:

  • (, ) : Tanda kurung yang tidak berpasangan akan menyebabkan kesalahan
  • 1-9 : Kami hanya ingin menghasilkan 0.
  • ?: Kami tidak ingin memasukkan apa pun.
  • *: Menyebabkan konsistensi yang sangat rumit, periksa kode sebelum dan sesudah satu baris yang terdiri dari satu-satunya *. Jadi kita harus menghapus baris baru atau menghapus *. Implementasi referensi menggunakan Python 2 .readline()yang artinya "baris baru" \ratau \n. Jadi lebih baik menghapus saja *.

0

Deadfish , skor 86

o.ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghjklmnpqrtuvwxyz?!|[]_-();'"*&^$#@!1234567890+=<>,/\:

Jika itu ilegal, maka ada juga

o

(skor 1)

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.