Tugas Anda adalah untuk membangun program (hanya menggunakan karakter ASCII yang dapat dicetak dan / atau tab dan baris baru) yang mencetak persis karakter dalam ruang ASCII yang dapat dicetak ( 0x20
ke 0x7e
) yang tidak muncul dalam kode sumber program Anda (dalam urutan apa pun, namun berkali-kali kamu mau).
Kode terpendek untuk melakukan ini dalam bahasa apa pun menang.
code-golf
self-referential
Joe Z.
sumber
sumber
0x20
untuk0x7e
, yang didefinisikan sebagai "karakter ASCII dicetak". Secara teknis tab dan baris baru sebenarnya adalah karakter kontrol.Jawaban:
GolfScript,
1512 karakterBerdasarkan jawaban Jan Dvorak dengan beberapa putaran dan juga gaya Peter Taylor .
sumber
Polyglot, 95
tclsh
,bash
,sh
,ksh
, dll)main()
diperlukan. Berkat urogenTidak melakukan apa-apa.
sumber
#undef X;whatever junk you want
bekerja.#
untuk komentar seperti Ruby dan Perl)PHP 5.2, 4
Simpan sebagai file yang dipanggil
NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php
di suatu tempat di/home
.short_open_tag
perluOn
di Andaphp.ini
.Outputnya adalah:
sumber
:
di output.JavaScript - 88
mencetak "bcdfghijkmnpquvxyz"
sumber
"!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)
karena95*72
=6840
dan memindahkan karakter yang terbuang ke string memungkinkan Anda untuk menggunakan tanda kutip alih-alih membuangnya. Selain itu, menyembunyikan karakter dalam komentar terasa murahan.Spasi,
6157 karakterIni bukan yang terpendek tetapi mungkin memiliki logika paling sederhana (itu hanya satu lingkaran).
Ini sepenuhnya dikomentari, di mana S adalah ruang, T adalah tab, L adalah umpan baris:
Berkat @res untuk koreksi di atas (diperlukan duplikat tambahan untuk instruksi cabang) dan untuk angka yang lebih kecil untuk mendorong tumpukan.
sumber
SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLL
.LSSSL
menjadiLSSL
danLTTSL
menjadiLTTL
) dan menghapus pintu keluar di akhir (ketiganyaLLL
). Cobalah online 52 byte mentah atau di sini dengan sorotan dan penjelasan .C,
837469 karakterSaya benar-benar mencoba menurunkannya di bawah 80 karakter, tetapi saya belum bisa melakukannya. Saya akhirnya memutuskan untuk memposting apa yang saya miliki, dengan asumsi bahwa saya (atau orang lain) akan mencari solusi 79-karakter sepuluh menit setelah memposting ini.Oke, itu bukan sepuluh menit, tapi itu pada prinsipnya berhasil.Saya benar-benar ingin memposting versi yang tidak harus memiliki ruang serampangan dalam kode sumber, tetapi yang mendarat di orbit-penarik aneh, memantul di antara beberapa solusi. Setelah beberapa menit mencoba untuk mendorong salah satu dari mereka menjadi solusi yang stabil, saya menyerah dan menambahkan ruang.
sumber
Skrip golf,
2624 karakterMengambil skrip pembuatan generasi, menduplikasinya, mengeksekusinya, mengambilnya dari hasilnya, kemudian mengurangi kode pengurangan hasil dan karakter kutipan lainnya.
sumber
''+
, program melarikan diri sebelum pengurangan, masukkan noop.;
(tidak menemukan cara yang lebih baik untuk menutupi titik), gunakan blok kode alih-alih string ->{126,33>`-.;}.~
yang 16 karakterIkan - 80
Ketika kesalahan ikan itu mencetak "sesuatu berbau amis ...". Karena z adalah instruksi yang salah, ia langsung salah
sumber
Saya tahu itu tidak memenangkan kontes. Saya hanya ingin mencobanya dalam bahasa yang biasanya tidak digunakan, hanya untuk iseng.
Java -
209195152140 karakterDengan jeda baris dan tab
Waspadalah jika Anda menjalankan: program tidak berakhir. Ha ha
Penjelasan
for(char c=0;;c++)
: Karena achar
dapat diperlakukan sebagaiint
, saya menggunakannya untuk keuntungan saya di sini untuk meningkatkan semua nilai yang mungkin daric
. Saya menghilangkan kondisi terminating dalam loop (yang akan pergi antara dua titik koma) untuk menghemat karakter, karena tidak ditentukan bahwa program harus diakhiri. :)"publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:""
: Sedihnya, bukan pendekatan yang sangat elegan, tapi itu menyelesaikan pekerjaan. Secara manual daftarkan setiap karakter yang ada dalam kode sumber sebagaiString
literal, lalu periksa apakah aruschar c
terjadi di dalamnyaindexOf()
. JikaindexOf()
panggilan kembali-1
, itu tidak ada, dan karena itu kita harus mencetaknya. Sisanya hanya menggunakan operator ternary untuk menghemat karakter dan ruang.sumber
Perl, 49 karakter
Ini adalah tantangan yang menarik - ini semacam anti-quine, dan saya telah berhasil mempersingkat program beberapa kali dengan meningkatkan rentang karakter yang muncul di dalamnya.
sumber
Ruby,
817868666257Cukup periksa sendiri. Duplikat karakter yang dihapus secara manual.
Terima kasih kepada Josh untuk menyimpan 4 karakter, dan minitech untuk menyimpan 5 karakter!
sumber
(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join
55 byte menggunakan pendekatan yang berbeda.Befunge (48)
Output: {zyxwvutsrqponmlkjihgfedcba` _ ^] [ZYXWVUTSRQPONMLKJIHGFEDCBA240
sumber
Tidak terlalu serius, tetapi saya harus mencobanya:
JSFuck (138152)
(sumber kompilasi di sini)
Sumber asli:
Mencetak semua karakter kecuali () + []!
sumber
(x)
<=>[x][+[]]
, menambah ukuran kode tetapi membuat alfabet yang dibutuhkan lebih kecil.Astaga, Anda menyulitkan APL (Apakah itu delibarate?)
Jadi saya memutuskan untuk Abaikan Semua Aturan !!!
APL (Dyalog),
310Mencetak vektor atom (yang mencakup semua karakter ASCII yang bisa diperbaiki)
Ternyata saya benar-benar lupa tentang bagian "tanpa" ...
Tapi itu perbaikan yang mudah
~'AV'''
berarti mengecualikan (~
) karakter A, V dan kutipan tunggal (lolos sebagai tanda kutip tunggal berlipat ganda)Mengenai pencetakan non-ASCII, well, Saya Mengabaikan Semua Aturan.
sumber
0x20
ke0x7e
) yang tidak muncul dalam kode sumber program Anda" Saya yakin hasilnya mungkin tidak mengandung karakter di luar ruang ASCII yang dapat dicetak ("persis" menjadi kata kunci) , dan program Anda mengandung 'A' dan 'V' sehingga tidak boleh dicetak.~
ke set karakter yang dikecualikan. ;-) Btw, solusi J yang serupa adalaha.-.'a.-'''
GolfScript (
1816 karakter)Demo online dengan garis tambahan yang melakukan pengecekan kebenaran dan menampilkan jumlah karakter yang salah.
(Saya memiliki berbagai alternatif yang setara.
@`^
Dapat diganti dengan\\`
;#
Dapat diganti dengan`
atau]
. Kombinasi yang tepat dapat digunakan dengan trik Howard untuk menyamakan skornya 15 karena backslash tidak perlu melarikan diri dalam blok seperti yang mereka lakukan dalam string literal:{),\`^32>].~}.~
Tapi Howard layak mendapatkan pujian untuk trik itu).sumber
}~
- bahkan lebih baik untuk blok kode, lihat jawaban baru saya ;-)Brainfuck, 173
Cukup lama, saya mungkin akan mencoba lagi nanti.
sumber
J (
5240)Sunting: Duh, lupakan
e.
Versi lama:
Varian lain (panjang yang sama tetapi keluaran lebih sedikit):
sumber
Python 3 -
6861... terima kasih kepada @WolframH untuk perbaikannya.
exec(x)
dalam garis baru dan menyimpan;
dix
. Juga, dalam Python 3, Anda bisa menggunakanx=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)
untuk 61 karakter (mencetak beberapa spasi, yang diizinkan).PowerShell: 96
Harus disimpan dan dijalankan sebagai skrip.
diff
adalah alias bawaan untukCompare-Object
.gc
adalah alias bawaan untukGet-Content
.$MyInvocation.InvocationName
mendapatkan path lengkap ke skrip yang dieksekusi.32..126
adalah ekivalen desimal untuk0x20..0x7e
, dan karenanya menciptakan larik kode ASCII desimal yang kami cari.[char[]]
mengambil konten objek berikutnya dan menempatkannya ke dalam array, memecahnya dan mengubahnya menjadi karakter ASCII. Jadi, kami sekarang memiliki dua larik karakter ASCII - satu ditarik dari skrip ini, yang lain ditentukan oleh kriteria tantangan.-Pa
mengaturCompare-Object
ke format "Passthru", jadi hanya item yang ditemukan berbeda antara input yang dikeluarkan pada konsol - indikator item mana yang inputnya masih disimpan dalam data objek, tetapi tidak ditampilkan.|?{$_.SideIndicator-eq'=>'}
Compare-Object
keluaran pipa keWhere-Object
, yang memfilternya hanya ke item yang eksklusif untuk input kedua.sumber
PHP - 92
Keluaran:
tidak ada
OP meminta untuk mencetak semua karakter yang tidak digunakan, well, saya hanya menggunakan semuanya
sumber
<?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'
?!;>Xn
Javascript, 92
sumber
sumber
Java - 126 karakter
diminimalkan:
tidak dikurangi:
Ini adalah masalah yang menarik, karena token individual mungkin mendapat manfaat dari bentuknya yang lebih lama karena menggunakan kembali karakter. Sebagai contoh, biasanya
String[]
akan lebih pendek, tetapiString...
menghilangkan kebutuhan untuk tanda kurung dalam string bersyarat.Saya menemukan triknya adalah dengan mencoba dan menggunakan karakter di awal dan akhir rentang sehingga Anda dapat mengecualikan mereka dari output hanya dengan mengubah awal dan akhir loop Anda.
Untuk Java, karakter kunci yang dikecualikan adalah
"
, karena memiliki itu di dalam string memerlukannya, yang menambah\
program Anda, yang perlu masuk dalam string, yang menambahkan\\
. Dengan menghapus"
dari string kondisional Anda, Anda menghapus 4 karakter. Ini dapat dicapai dengan memastikan Anda menggunakandan
!
dan memulai putaran Anda dari#
.Semua huruf kecil muncul di dekat akhir dari jangkauan, dengan hanya
{
,|
,}
dan~
datang setelah mereka. Karena verbositas Java, sebagian besar huruf kecil digunakan hanya untuk boilerplate. Demikian juga,{
dan}
sepele untuk program Java, karena boilerplate membutuhkannya.|
dapat digunakan jika Anda memiliki atau kondisi, tetapi saya tidak bisa menemukan cara untuk mengambil keuntungan dari yang mengarah ke program yang lebih pendek daripada hanya menggunakan|
sebagai operator bitwise. Itu|0
membuat saya merasa sedikit kotor, karena itu satu-satunya bagian yang nop hanya untuk mendapatkan karakter di sana.~0
hasil-1
, yang berguna karena itulah yang perlu kita periksaindexOf
. Menggabungkan ini dengan menggunakan!=
kondisional loop menghilangkan<
karakter sama sekali, yang berarti tidak perlu masuk ke dalam string kondisional.sumber
sh (47)
Menggunakan pendekatan referensial diri. Asumsi
/dev/urandom
pada akhirnya akan menghasilkan setiap oktet setidaknya sekali. Tidak berakhir.Jika kita menganggap itu
man
sudah diinstal, kita bisa menggunakan halamanascii(7)
manual (dan dengan demikian memiliki program terminating) ( 44 karakter, terima kasih @fennec).sumber
man
danzsh
diinstal,man zshall
tampaknya sesuai dengan kriteria. Saya bisa menambahkan itu sebagai variasi.man ascii
bisa menyelamatkanmu surat lagi, kurasa.tr
kamu gunakan GNUtr
memperlakukan-
in "cat $0
" sebagai operator jangkauan, yang memecah output.ascii
program diinstal, Anda bisa menggunakannya sebagai gantinyaman ascii
.BitShift , 1038 byte
BitShift adalah bahasa yang hanya mendukung
0
dan1
sebagai sintaksis. Saya pikir itu akan mudah untuk mencetak semua karakter lain, tetapi karena itu tidak benar-benar mendukung perulangan masih berakhir dengan 1038 byte besar.Namun, saya percaya itu tidak benar-benar mungkin lebih kecil dari ini ..
Cetakan
Coba di sini
sumber
Jelas merupakan solusi terpanjang di sini, tetapi pengkodean di Lino selalu menyenangkan:
L.in.oleum -
655523 karakterTidak ada komentar, baca saja sumber yang dikompilasi menjadi biner. Simpan sebagai
a.txt
atau tidak akan dikompilasi!sumber
Brainfuck,
133123114110 byteSedikit lebih mengutak-atik solusi sebelumnya (sebelum saya menyadari di bawah ini lebih kecil - meskipun ini sebelum saya melakukan optimasi berat). Ini bekerja dengan menyimpan 4 set nomor ascii dan mencetaknya dengan beberapa perulangan rumit, dan kemudian memberikan karakter yang hilang sesudahnya (yaitu yang berada di antara nomor ascii yang tidak valid).
Pengiriman asli
Ini melakukan hal berikut:
sumber
Haskell (70)
Solusi duplikat-karakter-dalam-program-dalam-string, kurangi-dari-universal-membosankan. Jauh dari pemenang codegolf, meskipun mengejutkan terbaca panjangnya.
(Sekarang dengan pengurangan daftar bukan
filter
/notWith
.)sumber
import Data.List
keimport List
runhaskell
: "Tidak dapat menemukan modul 'Daftar'". Saya perhatikan saya salah menghitung jumlah karakter, jadi saya memperbaikinya.J - 21
tulis ini ke file yang disebut
5
di direktori saat ini. Kemudian muat jalankan skrip dengan0!:1<'5'
Atau 25 tanpa trik file:
sumber
'
, yang tidak dihapus dari output.Clojure (
142, 106, 103)diformat:
Pikir ini yang melakukannya, mungkin perlu beberapa penyesuaian. keluaran:
menjalankan string, yang merupakan kode clojure yang dapat dievaluasi, dengan sendirinya. String memiliki beberapa komentar di bagian akhir untuk mendapatkan karakter yang digunakan di luar string (metode utama, dll)
sumber
Python 2, 69
Saya menggunakan urutan chars terus menerus terpanjang (yang saya dapat temukan) yang dapat saya cetak dan tambahkan yang lain sebagai komentar setelah kode.
sumber