Tulis program atau fungsi yang, ketika diberi string, memfilter sebanyak mungkin byte berbeda dan mengembalikan string yang telah dibersihkan. Namun, karena program Anda membencinya, tidak ada byte ini yang dapat ditampilkan dalam kode Anda sendiri.
Skor Anda akan menjadi jumlah byte berbeda yang disaring oleh program Anda dari input, dengan semakin tinggi semakin baik. Ini adalah skor maksimal 255 (karena program Anda harus minimal satu byte). Tiebreaker adalah panjang kode Anda, dengan lebih rendah lebih baik.
Misalnya, jika program Anda memfilter byte 0123456789
, ia menerima skor 10, tetapi program Anda sendiri tidak dapat mengandung byte ini.
Aturan
- Bytes berarti oktet.
- Anda juga memiliki opsi untuk mengambil input sebagai daftar bilangan bulat, dengan nilai mulai dari 0 hingga 255. Ini sesuai dengan byte yang setara.
- Output Anda harus dalam bentuk yang sama dengan input Anda
- Tidak membaca kode sumber Anda
- Kode Anda harus tidak kosong
- Ya, saya tahu akan ada jawaban Bahasa / Unary. Tapi setidaknya golf tolong?
;)
Edit Aturan:
- Anda dapat memilih untuk mengabaikan byte, misalnya jika byte tersebut tidak dapat dibedakan dari byte yang diakhiri untuk string atau untuk EOF. Namun, ini berarti Anda tidak dapat menggunakannya dalam kiriman Anda, juga tidak menghitung skor Anda. Jika Anda memilih untuk melakukannya, skor maksimal Anda adalah 254, tetapi Anda tidak harus menangani byte tersebut di input Anda.
Jawaban:
Japt
-P
, skor: 255 (2 byte)f => filter, second f => everything but 'f'
Cobalah online!
Japt , skor: 255 (2 byte)
Dari @Shaggy
o => remove everything but, second o => 'o'
Cobalah online!
sumber
oo
juga akan bekerja, tanpa-P
bendera.Python 2 , skor 249, 1732 byte
Cobalah online!
Menghapus semuanya kecuali
exc%="
baris baru. Pembuatan kode adalah milik xsot . Saya ragu ini dioptimalkan, jadi ada banyak byte untuk disimpan di sini!sumber
Haskell, skor
249250,1088335 byteMenentukan fungsi
!:
yang mengambil daftar bilangan bulat dan memfilter semua kecuali10,33,40,41,58,61
, kode ASCII dari\n ! ( ) : =
.Cobalah online!
Cara kerjanya: Pertama mari kita ganti nama fungsi dan parameter menjadi nama waras:
Gagasan utamanya adalah memiliki daftar dua fungsi yang berbeda (
listOfFunctions
), satu untuk menyimpan elemen (k
) dan satu untuk menjatuhkannya (d
). Daftar diindeks oleh elemen saat ini dari daftar input (x
) dan fungsi yang dipilihnya menentukan apakah akan menyimpan atau menjatuhkan elemen. Pada indeks 0 yang kami milikid
, karena kami ingin menjatuhkan 0s, yang pertamak
adalah pada indeks 10, karena kami ingin mempertahankan 10s (baris baru). Keduanyak
dand
mengambil dua parameter:x
dan hasil dari panggilan rekursif dengan sisa daftar (xs
).k
prependsx
ke panggilan recursice dand
hanya mengembalikan panggilan recursive.Daftar literal fungsi berakhir pada indeks 61 (char
=
, yang terakhirk
dalam daftar) dan diikuti oleh jumlah tak terbatasd
. Ini tidak hanya menyimpan banyak eksplisitd
, tetapi juga mencegah kita dari harus mengakhiri daftar yang terbatas dengan[]
yang memerlukan karakter tambahan.Sunting: terima kasih kepada @ Ørjan Johansen untuk skor +1 dan -753 byte.
sumber
|
untuk skor 250, 335 byte . Juga mendefinisikan sinonim untukrepeat (!)
mempersingkat daftar (secara drastis, karena|
jauh lebih besar dari karakter yang dikecualikan terbesar kedua.(!):
sekuens panjang itu mungkin juga akan membantu.!():=
. Mengekstrak[]
dari daftar yang ada, misalnya daftar input, tidak akan berfungsi karena memiliki tipe[Int]
, tetapi kita perlu[a->[a]->[a]]
.!
adalahcurry snd
, dan=!
merupakan daftar yang tak terbatas dari ini, tetapi hanya itu yang bisa saya mengerti dari ini.(=!)
, sesuatu seperti(!=)(=:)=(!):(!):(!):(!):(!):(=:)
atau (lebih tinggi tingkat, dapat dilalui((!):)
atau bagian dari dirinya sendiri)(!)!=(=:)=(!)((!)((!)((!)(=:))))
. Banyak opsi untuk mengubah. Jumlah pengulangan, argumen apa yang kedua (atau bahkan ketiga) jika ada, dan bahkan jika itu lebih optimal untuk kompresi untuk menggunakan\n
atau;
(panjang blok10 22 6 16 2
vs.33 6 16 1
).JavaScript (ES6), skor: 242 (142 byte)
Pendekatan yang agak naif menggunakan array byte untuk I / O.
Cobalah online!
Bagaimana?
14 karakter yang tidak difilter adalah
'().=>[]efilrt
. Mereka ditandai dengane
dalam string pencarian. Untuk karakter di atast
(ASCII kode 116) yang tidak didefinisikan dalam string ini,'f'>undefined
adalah palsu .sumber
t=>t.filter(t=>'f'>'fffffffffffffffffffffffffffffffffffffffeeeffffeffffffffffffffeeffffffffffffffffffffffffffffefefffffffeeffeffefffffefe'[t])
. Inilah pernyataan tes TIO:console.log(f([...Array(256).keys()]).map(c => String.fromCharCode(c)))
APL (Dyalog Unicode) , skor: 253, tiebreaker: 8 byte SBCS
Fungsi awalan diam-diam anonim
Cobalah online!
∩
persimpangan argumen∘
dan'∩∘'''
tiga karakter dalam kode (∩∘'
)sumber
Shell POSIX , skor 249, 18 byte
Cobalah online!
tr
Perintah sederhana yang menghapus semua karakter kecuali-\cdrt
dan spasi. Diperlukan empat backslash karena shell dantr
perintah menggunakan backslash lolos. Garis miring terbalik kelima lolos dari karakter spasi berikut.Jika
tr -cd
dianggap sebagai bahasa pemrograman, seseorang dapat menulis progam byte tunggal dengan skor 255.sumber
tr
memiliki kelas karakter seperti yang digunakan dalam ekspresi reguler, tetapi tidak ada ekspresi reguler penuh itu sendiri.tr -cd \ cdrt\\-\
Coba online!C (gcc) , skor
232235239241242,260407352249243249 byteCobalah online!
Sebuah fungsi yang mengambil pointer ke awal dan akhir array int (di mana akhir adalah karakter pertama yang tidak termasuk), pointer ke buffer dan pointer ke pointer int lainnya. Ini menulis hasilnya ke buffer dan pointer akhir hasilnya ke pointer terakhir.
sumber
Regex, Nilai: 255, 2 byte
Cocok dengan karakter
\
.Cobalah online!
sumber
Jelly , skor 254 (4 byte)
Cobalah online!
⁾xy
adalah singkatan untuk“xy”
(string dua karakter).Kami
f
ilter string input ke hanya karakter yang terjadi di“f⁾”
.sumber
f⁾⁾f
tetapi memutuskan untuk mengajukan pertanyaan tentang mengambil string Unicode sebelum memposting.Ruby -p, skor 248 (8 byte unik / 483 byte)
Cobalah online!
sumber
Python 2 , Skor
244245246,133901575 byteMengambil daftar bilangan bulat
Cobalah online!
Ini mengevaluasi ke baris kode berikut:
Python 2 Skor 248, byte∼ 252
Jawaban ini jelas merupakan jawaban teoretis. Strukturnya adalah
Secara teori ini akan mengeksekusi sama dengan:
Python 3 , Skor
240241, 54 byte+1 terima kasih kepada Jonathan Allan .
Cobalah online!
sumber
\
dalam versi Py 3 Anda dengan menggunakan tanda kutip tigab''' ':[]abdfilmnor'''
. Dalam Python 2 Anda bisa melakukan program lengkap dalam nada yang sama untuk 242:,print(''.join(p for p in input() if p in ''' '().fijnoprtu'''))
meskipun tidak sebagusexec
.Bersihkan , skor 247,
234213208 byte-5 byte berkat Ørjan Johansen
Cobalah online!
Menggunakan fungsi rekursif pencocokan pola untuk menghapus karakter. Bahkan tidak perlu
StdEnv
.sumber
=\
sebagai gantinya===
.t
dantt
di baris terakhir kedua.==
ket
tapi tetap==
sebagai sinonim untuk itu.Perl 5
-p
, skor 251, 13 byteCobalah online!
sumber
05AB1E , skor:
252253 (43 byte berbeda digunakan; total 8 byte )Cobalah online.
Penjelasan:
Perhatikan bahwa urutan
ÃJ
dan„J
dalam string 2-char penting, karena„
juga digunakan untuk kata-kata kamus , di mana setiap dua karakter adalah kata kamus (kecuali untuk beberapa karakter tertentu seperti huruf, angka-
, dan semacamnya). Jadi„JÃ
akan menjadi 'kata'J
, serta kata kamusÃ
+ karakter berikutnya (dalam hal ini„
), yang ternyata adalah kata"causing"
.sumber
Perl 5, skor 251 (5 byte berbeda, total 8.058 byte)
Cobalah online!
Menggunakan
<>^es
subset Turing-complete dari Perl . Kode di atas diperoleh dengan menjalankanprint<>=~y<<>^es><>cdr
melalui konverter saya .sumber
Brachylog , skor 249, 16 byte
Cobalah online!
Tidak sepenuhnya yakin bagaimana ini bekerja dengan aturan, apa dengan Brachylog memiliki halaman kode khusus dan semuanya, tapi saya masih bisa menjelaskan cara kerjanya:
sumber
Oktaf , Skor
248249 (50 byte)Ada harus menjadi cara yang lebih baik ... dan ada!
Cobalah online!
Saring semuanya kecuali
@al()'=
. Theall
Fungsi unggul lebihany
, karena hanya menggunakan dua byte yang berbeda. Perhatikan bahwaany(...)
sama dengannot(all(not(...)))
. Jadi, kita mulai dengan programnyaAlih-alih
~
(not
) kita juga bisa menulis0==
. Tentu saja, itu berarti kita harus menyaring0
juga. Sebagai gantinya, perhatikan bahwa ungkapan berikut ini juga salah (nol)Jika kompatibilitas MATLAB tidak menjadi masalah, saya dapat mencapai 47 byte
sumber
Bahasa (dengan
stty +brkint -ignbrk
), skor 255, 3890951 byteProgram ini terdiri dari 3890951 NUL byte (menjadikan ini salah satu program Bahasa terpendek yang pernah ada; 3890951 byte mudah cukup kecil untuk muat di disk saya, jadi saya benar-benar menjalankan ini dalam juru bahasa Bahasa). OP ingin solusi Bahasa / Unary untuk golf, jadi di sini kita pergi. (Perhatikan bahwa Unary akan lebih lama karena membutuhkan penggunaan
0
daripada mengizinkan penggunaan NUL.)Perhatikan bahwa Bahasa tidak, terlepas dari apa yang tersirat dalam dokumentasinya, bertindak seperti yang dilakukan brainfuck; I / O bekerja sepenuhnya berbeda (sesuatu yang saya perhatikan ketika menguji program ini). Secara khusus, Bahasa menolak untuk mengambil input dari apa pun selain dari terminal, sehingga byte yang sedang disaring adalah byte mentah yang dikirim melalui koneksi terminal (perhatikan juga bahwa karena menyaring byte mentah, Anda tidak akan melihat Anda mengetik sama sekali). Dalam praktiknya, ini berarti bahwa program akan menyerap segala jenis input yang dikirim kepadanya kecuali untuk byte NUL (biasanya diketik sebagai Ctrl- @), yang akan digaungkan secara harfiah (pada saat itu, sebagian besar terminal akan mengabaikannya, karena byte NUL adalah terminal yang setara dengan instruksi NOP). Untuk memverifikasi bahwa program itu berfungsi, itu
Apa yang terjadi di EOF? Nah, jika terminal mengirim serangkaian byte, tidak ada cara untuk mengirim EOF; semua 256 byte yang mungkin diinterpretasikan secara harfiah, dan tidak ada lagi yang dapat Anda masukkan ke dalam aliran terminal. Namun, jika Anda kebetulan menggunakan terminal serial kuno, Anda dapat menekan tombol "break" pada terminal Anda untuk mengirim data yang salah kode dengan sengaja, memungkinkan kode yang mungkin ke-257; "break" ini adalah satu-satunya padanan EOF yang masuk akal, karena dikirim keluar dari band dan menunjukkan sesuatu selain data yang valid. Jika konfigurasi terminal Anda memiliki set flag "interrupt-on-break" (dan penerjemah Bahasa, sejauh yang saya tahu, tidak dapat mengubah pengaturan itu), mengirimkan sinyal istirahat akan menyebabkan penerjemah Bahasa akan crash, yang dengan mudah bertindak sebagai cara untuk menerapkan perilaku EOF yang diinginkan. Saya tidak yakin apakah ini pengaturan default (karena tidak ada yang benar-benar menggunakan terminal serial saat ini, pada dasarnya tidak pernah muncul), jadi saya menyebutkannya di header sebagai bagian dari spesifikasi penerjemah bahasa yang digunakan.
Penjelasan
Loop dalam hanya akan keluar ketika NUL diketik di terminal; setelah ini, kami segera menggaungkan karakter yang diketik (yaitu NUL). Menambahkan 1 pada titik ini akan memastikan bahwa elemen pita 0 bukan nol lagi, sehingga loop luar tidak dapat keluar sama sekali (sampai input break crash interpreter), dan kami akan jatuh kembali ke loop dalam.
Golfiest menggunakan pengurangan untuk memasuki lingkaran luar, tetapi tambahan untuk terus mengulanginya; Selain itu memiliki penyandian yang lebih pendek, tetapi tidak dapat muncul pada awal program (karena penyandian akan terlihat seperti memimpin nol dan dengan demikian diabaikan).
sumber
truncate
tidak membuat file jarang bagi saya (mungkin filesystem tidak mendukungnya?). Namun, sejauh yang saya tahu, penerjemah Bahasa referensi membaca file input satu per satu (!), Jadi jika program tidak mengandung karakter baris baru, program yang cukup panjang akan berakhir kehabisan memori yang tersedia. Tentu saja, ini bisa diperbaiki dengan juru bahasa baru.C # (Visual C # Interactive Compiler) , Skor 245, 111 byte
Cobalah online!
C # (Visual C # Interactive Compiler) , Skor 243, 33 byte
Solusi naif menggunakan
Intersect
Cobalah online!
sumber
Retina 0.8.2 , 12 byte, skor: 250
Cobalah online! Menyaring semua karakter kecuali untuk baris baru,
[
,\
,]
,^
dann
. Meskipun karakternya[\]^
berurutan, menggunakan rentang sebenarnya akan menghabiskan satu byte dan juga mengurangi skor saya.sumber
Japt , skor 249, 20 byte
Cobalah online!
sumber
oQ+"+oQ"Q
atau hanyaoo
tetapi itu hanya variasi pada solusi Luis.PHP, skor 234,
5862 byteJalankan sebagai pipa dengan
-nF
atau coba online .sumber
Ruby
-paF[^$_=F*']
, skor 250, 8 byteSaya tidak yakin sama sekali ini legal di bawah aturan situs saat ini untuk flag-command-line, karena "flag" di sini adalah semacam kode yang meneruskan yang menyertakan byte terlarang. The
F
bendera mendefinisikan regex pemisah masukan yang terdiri dari semua karakter tidak dalam kode yang tepat. Kode yang tepat mengatur output ke gabungan semua catatan input.sumber
MATL , Skor 252
Cobalah online!
Penjelasan (untuk masukan
input
)sumber
Pyth , skor 249, 16 byte
Menyaring setiap karakter kecuali
f
,s
,T
,z
,"
,/
, dan\
Cobalah online!
sumber
K, skor 246, 23 byte
{x@&~x in"\"~ in@&{x}"}
{..} adalah lambda dengan arg x
dibaca sebagai 'mengembalikan x di tempat bukan x dalam string'
String berisi \ "~ di @ & {x} (sepuluh byte yang digunakan dalam program)
sumber
sfk , skor 239, 133 byte
Cobalah online!
Melakukan penggantian pada input (ditulis sebagai
[delim][from][delim][to][delim]
) mengubah semua karakter yang digunakan dalam program untuk diri mereka sendiri, yang menghilangkan posisi karakter dari pertimbangan untuk input ke penggantian akhirx[byte]xx
yang memetakan semua byte ke string kosong.sumber
JavaScript, skor 250,
9557359273 byteSolusi JS golf ringan yang kemudian dijalankan melalui algoritma JSFuck . Banyak byte, tetapi nilainya bagus.
Asli:
Render JSFuck adalah 59273 karakter:
sumber
s=>s.replace(/[^![\]+()]/g,'')
harus bekerjabrainfuck , Nilai: 248, 162 byte
Cobalah online!
Biasanya saya tidak menjawab pertanyaan saya sendiri, tetapi orang-orang tampaknya telah membaca halaman profil saya, terutama di mana katanya
If someone comments on a question "I wish there was a brainfuck solution", I feel obliged to provide one.
-<>[],.
Byte yang difilter adalah dan mengabaikan byte NUL, karena tidak dapat dibedakan dari EOF. Ini sedikit lebih lama dari biasanya, karena saya sengaja menghindari menggunakan+
untuk mendapatkan skor yang sedikit lebih baik. Meski begitu, saya mungkin bisa bermain golf bagian generasi nomor untuk menghemat beberapa byte.sumber
Spasi , skor: 253 (3 byte berbeda digunakan, total 97 byte)
Huruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Cobalah online (dengan spasi, tab, dan hanya baris baru). Bonus yang bagus adalah saya bisa menggunakan kode ini untuk mengubah kode yang disorot di atas ke program Whitespace mentah (yang saya lakukan dalam TIO ini sebagai contoh), yang biasanya saya gunakan Notepad ++. :)
Penjelasan:
Cukup lurus ke depan. Di sini pseudo-code:
sumber