The karakter ASCII printable (kode hex 20 untuk 7E) secara berurutan adalah:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(Perhatikan bahwa ada ruang di sana.)
String ini jelas berisi semua karakter ASCII yang dapat dicetak, setidaknya satu kali dalam urutan yang meningkat ketika dibaca dari kiri ke kanan, tetapi tidak dalam urutan menurun.
String
REVERSED:~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! NORMAL: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
berisi semua karakter ASCII yang dapat dicetak setidaknya sekali dalam urutan meningkat dan menurun. Dengan kata lain, ketika karakter dinilai dengan kode numeriknya, penambahan paling lama dan penurunan terpanjang memiliki panjang 95 (jumlah karakter ASCII yang dapat dicetak).
Tantangan
Pilih himpunan bagian yang berdekatan dari karakter ASCII yang dapat dicetak, seperti LMNOP
(N = 5). Tulis program yang hanya menggunakan karakter N tersebut yang outputnya mengandung semua 95 karakter ASCII dalam urutan meningkat dan menurun seperti contoh di atas.
Pemenangnya adalah pengajuan dengan N. terendah. Jika ada ikatan, kode terpendek dalam byte menang.
Catatan
- Subset yang berdekatan berarti satu set ASCII yang dapat dicetak yang semuanya muncul dalam garis yang tidak terputus, seperti
LMNOP
atau89:;<=>
. - Himpunan bagian Anda yang berdekatan mungkin "berputar-putar" dari
~
ke angkasa, tetapi ini menimbulkan penalti +3 pada N. Jadi{|}~
memiliki N = 4, tetapi{|}~ !
memiliki N = 6 + 3 = 9. - Program Anda hanya dapat berisi karakter ASCII yang dapat dicetak dari sub-bagian yang berdekatan yang telah Anda pilih. Mereka tidak semua harus muncul dan dapat muncul beberapa kali dalam urutan apa pun. (Semua ASCII yang tidak dapat dicetak dan semua yang bukan ASCII tidak diperbolehkan. Ini berarti tab dan baris baru tidak diperbolehkan.)
- Output Anda mungkin hanya berisi karakter ASCII yang dapat dicetak dan panjangnya harus kurang dari 10.000 karakter.
- Output Anda meningkat dan menurun terpanjang harus memiliki panjang 95 (seperti yang dijelaskan di atas).
- Output ke stdout. Tidak ada input.
- N adalah bilangan bulat positif kurang dari 96.
sumber
Jawaban:
Unary, N = 1
14680262330376163203871465704220787333741951071 byte
Hanya menggunakan byte '0' (ASCII 49).
Bermain golf sekitar 4,13253e + 60 byte dari solusi @ Comintern. Penghargaan masih untuknya :)
Dalam Brainfuck asli:
sumber
Unary , N = 1
4132527913354820031118363262102424570092493175835499123283719 (4.1325279e + 60) byte
Kode sumber di unary jelas terlalu besar untuk dikirim di sini. Itu dapat dengan mudah direproduksi dengan mengetik (atau menghasilkan) file yang diisi dengan "0" dengan panjang yang sama dengan jumlah byte di atas.
Berikut ini adalah representasi biner:
Dan kode Brainf ** k yang setara (linebreak untuk kejelasan):
Keluaran:
EDIT: Golf 9.097887e + 87 karakter yang tidak perlu.
sumber
Brainfuck, N = 2
24.383 byte. Hanya menggunakan - dan. (ASCII 45 dan 46). Cobalah di sini: http://esoteric.sange.fi/brainfuck/impl/interp/i.html . Mungkin dapat diuraikan sebagai kode Morse dengan spasi yang tepat.
Membutuhkan penerjemah yang mengikuti definisi tradisional Brainfuck, yang menggunakan array (setidaknya) 30.000 byte sel, semuanya diinisialisasi ke nol.
sumber
-
, maka bagian turun.-.-.etc
kemudian bagian naik (kelompok 255-
diikuti oleh a.
) Sejauh yang saya tahu semuanya ada di sana. Lihat juga edit pada jawaban saya untuk penjelasan.-
dengan hanya satu.
di akhir :). Salahku.CJam - N = 3; 7659 byte
Cobalah di http://cjam.aditsu.net/
sumber
Brainf ** k, N = 4
Program brainfuck pertama saya. Menggunakan 3 karakter di luar blok
+,-.
(Ascii 43 hingga 46.)410 byte (satu
.
dapat dihapus dari program jika ganda~~
dapat dikurangi menjadi satu~
.)Berikut daftar perintah di area tabel ASCII (saya tidak perlu perintah input):
Untungnya perintah yang tersisa
<>[]
(memindahkan data pointer dan melakukan lompatan bersyarat) tidak diperlukan!Dibagi menjadi 3 baris untuk kejelasan: 1: Peningkatan hingga data mencapai 32. 2: Output dan peningkatan hingga data mencapai 126. 3: Output dan penurunan hingga data mencapai 32.
Keluaran
Edit N = 2
Per jawaban nneonneo, adalah mungkin untuk mengganti masing
+
- masing dengan 255-
tanda untuk N = 2. beberapa penataan ulang kode dan output (menampilkan ke bawah lalu ke atas) berarti baris pertama dapat dikurangi menjadi 256-126 = 130-
tanda. Ini terjadi pada saya setelah saya pergi tidur, dan nneoneo mengalahkan saya untuk itu. https://codegolf.stackexchange.com/a/35801/15599sumber
~
sebagai ganti~~
karena kalimat naik dan turun masih ada.C; N = 43 = 40 + 3
Di sini saya menghindari karakter umum seperti
+
-
*
/
, digit0-9
, koma,,
dan titik koma;
.Jadi saya terpaksa mengungkapkan berbagai angka hanya dengan menggunakan operasi
&
%
~
.Golf lebih lanjut dimungkinkan (menemukan representasi terkecil untuk nomor 63 dan 95 adalah latihan untuk pembaca).
Subset ascii adalah 32 ... 41 dan 97 ... 126.
Saya tidak yakin apakah karakter baris baru diizinkan dalam kode; jika tidak, hapus saja.
sumber
Berputar , N = 2, 6486 byte
Hanya menggunakan 2 karakter
01
,.Keluaran:
Saya pikir saya bisa bermain golf lebih banyak menggunakan loop, tetapi pengkodean dengan 0s dan 1s itu mengerikan, jadi saya tidak akan melakukannya.
Berkomentar
Perhatikan bahwa ada
O
danl
sebagai0
dan1
.sumber
Python 2.7 N = 45 = 42 + 3
Ini menggunakan
string.printable
, memilah dan meludahkannyastdout
. Saya menyimpan beberapa karakter dengan memasukkan.
instdout.write
dengan menggunakaneval
dan memformat string menggunakanord
nilai karakter yang bisa saya gunakan.Keluar dengan yang lama - N = 49 = 46 + 3
Sayangnya, sementara python memasukkanstring.printable
daftar, ini tidak dalam urutan ascii, dan tidak ada cara untuk menggunakannya tanpa a*
atau a.
, jadi dibutuhkan lebih sedikit karakter untuk melakukannya secara manual.Menggunakan rentang karakter:
Versi yang jelas: N = 63 = 60 + 3
Ini adalah versi yang jelas menggunakan rentang karakter:
sumber
len('x')
menyelamatkan saya 2 karakter lagi.import
solusi Anda hanya akan berfungsi jika ada;
, yang menambahkan sejumlah besar karakter.C; N = 61 = 58 + 3
Untuk mengimbangi penggunaan subset sebesar itu, saya memasukkan kode saya.
Subset ASCII adalah 32 ... 59 dan 97 ... 126.
Itu adalah tantangan yang menyenangkan untuk menghindari
=
karakter!sumber
;
. Anda mungkin dapat menggunakannya untuk memperluas jawaban Anda, tanpa itu menjadi salinan dari yang lain.Python 2,7 N = 28 + 12 + 3 = 43
Menggunakan karakter
cdefghijklmnopqrstuvwxyz{|}~
dan kemudian membungkus untuk!"#$%&'()*+
Untuk menghindari penggunaan,
,.-
saya harus menggunakan beberapa trik. Saya menggunakanexec
sehingga saya bisa membuat kode menjadi string yang memungkinkan saya gunakanchr(ord('+') + len('xxx'))
untuk.
danchr(ord('+') + len('x'))
untuk,
. Setiap tempat saya butuh -1, saya menggunakan ~ 0 dalam bentuk~len('')
. Untuk menghindaria
, saya menggunakanchr(ord('c') + ~len('x'))
(99 - 2).String yang dikomposisikan memiliki N = 48, menggunakan karakter
abcdefghijklmnopqrstuvwxyz{|}~
dan kemudian membungkusnya!"#$%&'()*+,-.
Perhatikan bahwa baris baru dan komentar hanya untuk dibaca.
sumber
Ruby - N = 48
Biarkan Ruby menjadi Ruby dan merangkul penalti bungkus-sekitar.
N = 48 <- 15 ('' - '.') + 30 ('a' - '~') + 3
atau
Lama:
N = 72 {skor garis lurus} <- 72 ('.'-' u ') + baris baru tidak valid
Ada beberapa menggapai-gapai di sini untuk menghindari 'v' dalam "terbalik". Saya meninggalkannya karena saya menyukai hack paket ("C *").
sumber
x86_64 Kode Mesin, format Mach-O
N = 2, 32768 karakter (terlalu besar untuk memenuhi batas pesan)
Sunting: Pastebin tidak ada, sehingga Anda dapat menemukan teks lengkapnya di: http://www.ionoclast.com/random/golf.bin.txt
sumber
#include <unistd.h> int main() { char const s[] = "~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#\"! !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; write( 1, s, sizeof s ); }
Majelis harus melakukan jauh lebih baik.Ruby, N = 27
Digunakan
$
melalui>
.sumber
Scala, N = 69
Menggunakan karakter
01246789\bdefu
(unicode escapes) sebagai cara penulisan yang mewah(' 'to'~')++('~'to' ')map print
.sumber