Dalam bahasa pemrograman pilihan Anda, tulislah 95 program, yang masing-masing menampilkan yang berbeda dari 95 karakter ASCII yang dapat dicetak tanpa karakter tersebut muncul di mana pun dalam program .
Misalnya, jika bahasa Anda adalah Python , program Anda yang menghasilkan karakter P
mungkin
print(chr(80))
karena P
memiliki kode ASCII 80. Program ini valid karena P
tidak pernah muncul dalam kode sumber. Namun, untuk program yang menghasilkan huruf kecil p
, sesuatu seperti
print(chr(112))
akan menjadi tidak valid karena, ketika sedang mencetak p
, p
ada dalam kode. Program yang valid bisa saja
exec(chr(112)+'rint(chr(112))')
yang mencetak p
tetapi tidak mengandung p
.
Tujuan Anda adalah membuat masing-masing dari 95 program Anda sesingkat mungkin. Skor Anda adalah jumlah panjang karakter semua program Anda.
Jika karena alasan apa pun Anda tidak dapat menulis program yang valid untuk beberapa karakter, Anda dapat menandai karakter tersebut sebagai "Tidak Memprogram" atau DNP , dan mengabaikan program untuk mereka sepenuhnya. Dengan cara ini, bahasa yang ketat secara sintaksis akan dapat bersaing.
Jawaban yang menang adalah jawaban yang memiliki skor terendah dari serangkaian jawaban yang memiliki DNP paling sedikit.
Aturan
Kode sumber semua program Anda hanya dapat berisi tab ASCII plus yang dapat dicetak dan baris baru, yang semuanya dihitung sebagai satu karakter. (Karena dalam penyandian yang berbeda akan mudah untuk menghilangkan karakter yang tidak ada!)
- Catatan: Aturan ini tampaknya perlu tetapi ada banyak bahasa dengan penyandian berbeda dan saya yakin itu akan keren untuk melihat jawabannya. Karena itu Anda dapat melanggar aturan ini , Anda dapat menggunakan karakter apa pun yang Anda inginkan, tetapi kemudian jawaban Anda menjadi tidak kompetitif , itu tidak dapat menang.
Program-program tersebut harus merupakan program penuh dan aktual , sesuai dengan konvensi standar bahasa Anda. Fungsi dan cuplikan REPL tidak diizinkan.
Setiap output program harus menuju stdout atau alternatif bahasa Anda yang diterima.
Program tidak boleh meminta atau membutuhkan input. (Jika meminta input sudah melekat pada bahasa Anda, tidak apa-apa.)
Program harus bersifat deterministik, terbatas dalam jangka waktu, dan independen. mis. seharusnya tidak masalah jika seseorang dijalankan dalam folder yang terpisah dari program lain.
Keluaran suatu program harus berupa karakter ASCII yang dapat dicetak yang sesuai dengannya, secara opsional diikuti oleh satu baris baru, tidak lebih, tidak kurang.
Pastikan untuk memasukkan informasi tentang semua 95 program (idealnya) dalam jawaban Anda, serta skor Anda dan DNP apa pun. Anda tidak harus daftar semua program yang mengikuti pola sederhana seperti " , ..." tapi pastikan Anda yakin semuanya akan bekerja dan bahwa skor Anda ditambahkan dengan benar.print(chr(80))
print(chr(81))
print(chr(82))
Untuk referensi, berikut adalah 95 ASCII yang dapat dicetak yang harus dihasilkan oleh program Anda:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
sumber
0
Jawaban:
Python 2,
10751065104310401039 byteSetiap program memiliki formulir
print'\<octal char code>'
, kecuali:'
→print"\47"
0
melalui8
→print~-<N+1>
9
→print-~8
\
→print'%c'%92
i
→exec'pr\151nt"\151"'
n
→exec'pri\156t"\156"'
p
→exec'\160rint"\160"'
r
→exec'p\162int"\162"'
t
→exec'prin\164"\164"'
Untuk referensi dan kemudahan pengujian, berikut adalah daftar lengkap program yang dipisahkan oleh baris baru.
Untuk menguji:
-1 byte, terima kasih kepada @ Sp3000!
sumber
print~-<N+1>
tidak bekerja untuk1
. Anda mengatakan itu bekerja untuk0
untuk8
.<angle brackets>
bukan kode literal. Pengganti<N+1>
dengan nilai literal dariN+1
; dalam hal ini, program untuk1
akanprint~-2
. Lihat daftar lengkap program.CJam, 269 byte
Masing-masing program dalam bentuk
'<char - 1>)
kecuali untuk:S
, 1 byte'
=>39c
, 3 byte)
=>'*(
, 3 byte0
=>T
, 1 byte1
=>X
, 1 byte2
=>Y
, 1 byte3
=>Z
, 1 byte4
-9
=><num-1>)
, 2 byteSkor adalah:
3 * 82 + 1 + 3 + 3 + 4 * 1 + 6 * 2 = 269
sumber
39c
untuk'
? Juga, Anda lupa bahwa angka tunggal bisa saja angka itu1)
untuk2
dll untuk menyimpan satu byte di sana1)
itulah yang saya maksudkan yaTXYZ
ASCII membatasi Kode Mesin x86 untuk DOS,
310431012913 byteYah ... Ini lebih pendek dari Jawa, kurasa ...
3230 byte untuk hampir semua karakter, untuk pengecualian lihat di bawah.Sebagian besar waktu hanya mengikuti pola:
xor
untuk mendapatkan pointer ke ujung.sub
dari 2 kata terakhir karena opcode untukint
tidak dalam ASCII.AH
dan karakter keDL
. Keduanyaxor
ed karena karakter itu sendiri tidak dapat muncul dalam program dan 2 bukan karakter ASCII yang dapat dicetak.int 21h
int 20h
Sebagian besar waktu, jika karakter tidak diizinkan, karakter dapat digantikan dengan memutar-mutar data sedikit atau beralih ke register yang berbeda.
Menjadi sedikit lebih menarik ketika Anda tiba-tiba mendapati diri Anda tidak dapat mengurangi atau tidak dapat mendorong atau memunculkan satu-satunya daftar yang dapat digunakan untuk perhitungan ...
sumber
Brainfuck,
1770171017031686 byte60 byte disimpan oleh Dennis
17 byte disimpan oleh Sp3000
DNP: 46 (
.
)Semua kecuali 43, 45, 60, 62, 91 dan 93 dicuri dari Esolangs.org tanpa malu-malu
sumber
--[>-<---]>[<->--]<[->-<]>.
bekerja untuk keluaran+
.-----[[----<]>>-]<.
+[+[+>]<<++++]>.
MATL,
305, 302, 300297 byteSetiap program terlihat seperti ini:
Kecuali untuk
Digit. Berikut adalah program untuk 0-9:
'c'. Program ini adalah
ruang. Ini adalah
Sejak hari ini saya belajar, bahwa MATL memperlakukan karakter 0 sebagai spasi. Terima kasih @LuisMendo!
Anda dapat menggunakan matl.tio untuk memverifikasi salah satunya.
Untuk referensi, ini semuanya:
sumber
Java 8,
679865826577 bytemendesah
Ini pada dasarnya adalah port jawaban Python 2 saya , tetapi dengan semua boilerplate yang datang dengan menulis program lengkap di Jawa.
Sekarang tanpa DNP sama sekali! Terima kasih, Kevin Cruijssen!
Sebagian besar program memiliki formulir
interface A{static void main(String[]a){System.out.print("\<octal char code>");}}
, kecuali:interface\tA{static\tvoid\tmain(String[]a){System.out.print("\40");}}
(tetapi dengan\t
huruf s diganti dengan tab mentah)"
→interface A{static void main(String[]a){System.out.print('\42');}}
(
→interface A{static void main\u0028String[]a){System.out.print\u0028"\50");}}
)
→interface A{static void main(String[]a\u0029{System.out.print("\51"\u0029;}}
.
→interface A{static void main(String[]a){System\u002Eout\u002Eprint("\56");}}
0
→interface A{static void main(String[]a){System.out.print(1-1);}}
1
→interface A{static void main(String[]a){System.out.print(3-2);}}
2
→interface A{static void main(String[]a){System.out.print(3-1);}}
3
→interface A{static void main(String[]a){System.out.print(4-1);}}
4
→interface A{static void main(String[]a){System.out.print(5-1);}}
5
→interface A{static void main(String[]a){System.out.print(6-1);}}
6
→interface A{static void main(String[]a){System.out.print(7-1);}}
7
→interface A{static void main(String[]a){System.out.print(8-1);}}
8
→interface A{static void main(String[]a){System.out.print(9-1);}}
9
→interface A{static void main(String[]a){System.out.print(8+1);}}
;
→interface A{static void main(String[]a){System.out.print("\73")\u003B}}
A
→interface B{static void main(String[]a){System.out.print("\101");}}
S
→interface A{static void main(\u0053tring[]a){\u0053ystem.out.print("\123");}}
[
→interface A{static void main(String...a){System.out.print("\133");}}
\
→interface A{static void main(String[]a){System.out.print((char)92);}}
]
→interface A{static void main(String...a){System.out.print("\135");}}
a
→interf\u0061ce A{st\u0061tic void m\u0061in(String[]b){System.out.print("\141");}}
c
→interfa\u0063e A{stati\u0063 void main(String[]a){System.out.print("\143");}}
d
→interface A{static voi\u0064 main(String[]a){System.out.print("\144");}}
e
→class A{public static void main(String[]a){Syst\u0065m.out.print("\145");}}
f
→class A{public static void main(String[]a){System.out.print("\146");}}
g
→interface A{static void main(Strin\u0067[]a){System.out.print("\147");}}// \u0067
i
→\u0069nterface A{stat\u0069c vo\u0069d ma\u0069n(Str\u0069ng[]a){System.out.pr\u0069nt("\151");}}
m
→interface A{static void \u006Dain(String[]a){Syste\u006D.out.print("\155");}}
n
→class A{public static void mai\u006E(Stri\u006Eg[]a){System.out.pri\u006Et("\156");}}
o
→interface A{static v\u006Fid main(String[]a){System.\u006Fut.print("\157");}}
p
→interface A{static void main(String[]a){System.out.\u0070rint("\160");}}
r
→class A{public static void main(St\u0072ing[]a){System.out.p\u0072int("\162");}}
s
→interface A{\u0073tatic void main(String[]a){Sy\u0073tem.out.print("\163");}}
t
→class A{public s\u0074a\u0074ic void main(S\u0074ring[]a){Sys\u0074em.ou\u0074.prin\u0074("\164");}}
u
→interface A{static void main(String[]a){System.console().printf("%c",117);}}
v
→interface A{static \u0076oid main(String[]a){System.out.print("\166");}}
y
→interface A{static void main(String[]a){S\u0079stem.out.print("\171");}}
{
→interface A\u007Bstatic void main(String[]a)\u007BSystem.out.print("\173");}}
}
→interface A{static void main(String[]a){System.out.print("\175");\u007D\u007D
Fiuh
Compiler Java memproses Unicode lolos seperti
\u007B
sebelum melakukan pemrosesan lain, yang memungkinkan untuk menulis kode yang menggunakan unicode lolos dalam pengidentifikasi dan bahkan kata kunci. Jadi, untuk menulis program yang tidak menggunakan karakter yang ada di boilerplate, kita cukup menggantinya dengan itu unicode escape.Untuk referensi dan kemudahan pengujian, berikut adalah daftar lengkap program, dipisahkan oleh baris baru dan dengan tab mentah diganti dengan empat spasi:
Perhatikan bahwa program untuk
u
menggunakanSystem.console()
, yang akan mengembalikan nol (dan dengan demikian menyebabkan kode untuk membuang aNullPointerException
) jika Anda memanggilnya dari apa pun selain terminal asli OS Anda (cmd
pada Windows, dan, saya berasumsi,bash
di Linux / OSX) .Untuk mengujinya, buat direktori baru dan letakkan kode di atas dalam file yang bernama
printables
di direktori itu. Kemudian, jalankan skrip Bash berikut:Script di atas akan menempatkan setiap baris
printables
ke dalam direktori sendiri, beri nama semuanyaA.java
(kecuali untuk file yang dicetakA
, yang diubah namanya menjadiB.java
), kompilasi setiap file, jalankan, kemudian hapus buktinya. Diperlukan waktu sekitar sepuluh detik untuk karakter ASCII yang dapat dicetak untuk mulai muncul di shell Anda.Jika Anda menggunakan Windows, alih-alih jalankan file Batch berikut:
File batch ini mengambil pendekatan yang sedikit berbeda; alih-alih memisahkan baris, ia memproses file baris demi baris dan mengkompilasi dan menjalankan setiap program secara bergantian. Sekali lagi, itu menghapus bukti setelah selesai.
Disimpan byte yang tak terhitung jumlahnya + 1 DNP berkat Kevin Cruijssen!
sumber
class B
untuk dicetakA
interface
bukan kelas sehingga Anda dapat menghapuspublic
) dan jika OS Anda memiliki konsol bawaan, sehingga Anda tidak harus menggunakanSystem.out.print
:interface A{static void main(String[]a){System.console().printf("%1",(char)117);}}
Eclipse, IntelliJ dan kompiler online tidak memiliki Konsol ini, sehingga menghasilkan aNullPointerException
.print
> <> ,
443437 byteTIO interpreter link . Ada banyak pola di sini:
[num][num]*o;
: Mengalikan dua angka, lalu menampilkan hasilnya sebagai char witho
dan stop with;
. > <> digit naik hingga 15, yaitu0123456789abcdef
.[num][num]-n;
, yang mengambil perbedaan dari dua angka dan keluaran sebagai angkan
.'-o[invalid char]
: > <> adalah toroidal, jadi ketika penunjuk instruksi mencapai ujung garis, ia bergerak kembali ke awal. Dalam hal ini, ini menyebabkan kode dieksekusi dua kali, yaitu'-o[char]'-o[char]
. Bagian pertama'-o[char]'
mendorong tiga karakter ke stack,-
menghitung'o' - [char]
laluo
mengeluarkan hasilnya sebagai karakter. > <> kemudian kesalahan keluar ketika mencapai[char]
, baik karena perintah yang tidak dikenal atau dari muncul tumpukan kosong.'-n[invalid char]
, yang ditampilkan sebagai angka.'[num][op]o[invalid char]
yang berlaku[op]
dengan[num]
on[char]
, erroring on char. Misalnya,'2+oJ
outputL
, yang dua lebih dariJ
.'
Kodenya adalah"-oH
, gunakan"
saja.-
Kodenya adalah'%oB
, gunakan%
saja.ln;
: Dorong panjang tumpukan, output sebagai num lalu berhenti, memberi0
. Demikian pulalln;
untuk1
dan'ln;
untuk3
.4|n+
: Tekan 4, pantulkan|
dan tekan 4 lainnya, tambahkan, lalu8
hasilkan sebagai num. Bangkit|
lagi, dan galat saat mencoba menjalankann
lagi di tumpukan kosong.3|n*
untuk9
.[num]|o*
untuk@Qdy
.'1-:00p
: Yang paling menarik, untuko
kasus ini. Untuk menghindari penggunaano
dalam kode kita, kita perlu menggunakanp
untuk menempatkan sebuah kotako
kode, lalu jalankan. Inisial'1-:00p'
mengatur stack untuk memilikip
di atas, dan1-
menguranginya menjadio
.:
menduplikasi inio
, dan00p
menempatkan satuo
di (0, 0), mengubah kotak kode menjadio1-:00p
. Penunjuk instruksi membungkus lagi, mengeluarkan yang laino
. Karakter (0, 0) kemudian diganti beberapa kali sebelum akhirnya program keluar.sumber
Dyalog APL ,
527522 byte(tidak bersaing karena APL tidak dapat benar-benar ditulis menggunakan ASCII saja)
Sebagian besar dalam format
nn⊃⎕AV
ataunnn⊃⎕AV
, pengecualiannya adalah:Berikut daftar lengkapnya:
sumber
⍨
adalah smiley favorit baru sayaRuby, 869 byte
Untuk 63 karakter
@
melalui~
, kami memiliki solusi 10-byte:Untuk sebagian besar (21) karakter dari
space
through?
, kami memiliki solusi 9-byte:Ada sebelas kasus khusus yang tersisa:
Secara total, skornya 10 × 63 + 9 × 21 + 10 + 3 + 8 × 4 + 5 = 869.
sumber
?\xxx
alih-alih"\xxx"
untuk masing-masing 1 bytep 1+8
dan tidakp-~8
?-
, atau sesuatu. :(putc 65
=>A
WolframAlpha , 368 byte
Format umum:
Pengecualian:
Berikut daftar lengkapnya:
sumber
PHP (
891680674 bytes,20 DNP)Sunting: menyimpan 203 byte berkat jimmy23013 dan menerapkan 2 DNP berkat Mego
Jawaban ini sangat menyalahgunakan sifat murah hati PHP. Sebagian besar kasus menggunakan salah satu dari formulir ini (masing-masing 7 byte):
PHP mengubah huruf-huruf di kedua sisi operator menjadi string, kemudian melakukan operasi bitwise yang sesuai dengan mengubah setiap string ke nilai karakter ASCII-nya, dan akhirnya mengubah hasilnya kembali ke karakter.
Pada contoh pertama di atas,
Y^x
menjadi89^78
. Hasil dari ini adalah33
, yang kemudian dikirim ke STDOUT sebagai karakter!
.Sebuah skrip ditulis untuk memaksa semua kombinasi yang mungkin: hasilnya dapat ditemukan di sini .
Pengecualian:
;
is<?=Z^a?>
(8 bytes)|
is<?='9'^E;
(9 bytes)<
dan?
biasanya DNP karena tag awal yang diperlukan, tetapi dengan menggunakan-r
flag, kode dapat dieksekusi tanpa mereka:<
isecho Z^f;
(9 bytes)?
isecho Z^e;
(9 bytes)=
isecho Z^g;
(9 bytes)Skor:
(7 * 90) + 8 + 9 + 9 + 9 + 9 = 674 byte
sumber
&
|
^
antara dua huruf untuk menghasilkan semua karakter ascii yang dapat dicetak kecuali<?=|;
.~
bukannya XOR, DAN atau ATAU. PHP dapat menggunakan lebih banyak karakter yang dapat dicetak sebagai konstanta, bukan hanya huruf.Brachylog ,
546477 byteKredit untuk Melegalkan kode untuk
@
.Dalam daftar di bawah ini, karakter pertama adalah karakter yang akan dicetak (untuk referensi mudah).
Mereka semua adalah predikat, jadi
Z
perlu argumen untuk menerima output: Coba online!Penjelasan
@P
adalah string ini:yang berisi setiap ASCII yang dapat dicetak.
sumber
"@"
cara ini> <> , 531 byte
Program-program tersebut mengambil dua bentuk utama:
Yang pertama adalah untuk karakter dengan kode karakter dengan dua faktor keduanya kurang dari 16, yang lainnya adalah untuk kasus lainnya. Sebagian besar angka yang saya gunakan bentuk kedua untuk memiliki banyak solusi panjang yang sama, tetapi saya memilih yang untuk dibaca.
Pengecualian:
Daftar lengkap:
sumber
;
menggunakan;
. Juga, saya cukup yakin sebagian besar dari ini dapat bermain golf dengan melakukan kesalahan, dano
itu pasti mungkin.o
danO
, saya tidak mengerti bagaimanao
mungkin. Dan bagaimana cara mengakhiri kesalahan menjadi lebih pendek?o
dapat dilakukan dengan memanfaatkanp
. Saya mungkin memposting secara terpisah untuk kesalahan, karena mungkin akan ada banyak pola yang berbeda yang terlibat.;
program ini. Terima kasih telah menunjukkan itu!Hexagony ,
376373 byte, 1 DNPTerima kasih kepada FryAmTheEggman karena telah menghemat 3 byte.
Hampir semua program memiliki bentuk yang sama:
Ada beberapa pengecualian:
;
tanpa menggunakan;
, karenanya 1 DNP.@
, kita tidak dapat menggunakan@
untuk menghentikan program. Sebaliknya, kami menggunakan salah satuS2;:
atauS3;%
. Ini diakhiri dengan kesalahan pembagian-oleh-nol, tetapi kesalahan itu tidak terlihat pada STDOUT. Jadi ini masih empat byte.U
yang membutuhkanU3;@
. Ada beberapa cara untuk memperbaikinya, termasuk beralih ke huruf kecil, yaitun9;@
, atau menggunakan kenaikan atau penurunan, yaituT);@
atauV(;@
. Bagaimanapun itu masih empat byte.0
, dan!
mencetak nilai integer, sehingga kita bisa mendapatkan0
dan1
bersama!@
dan)!@
masing-masing tabungan 3 byte.Adapun cara
<letter><digit>;@
kerja program: tata letak heksagonal dari program bentuk1234
selaluKarena tidak ada program yang berisi perintah yang mengarahkan aliran kontrol, ini hanyalah program linier yang dijalankan secara berurutan.
Dalam setiap kasus, huruf di awal kode menetapkan batas memori saat ini ke kode karakternya. Misalnya dalam program
P1;@
,P
set nilainya80
. Kemudian digit mengalikan nilai ini dengan 10 dan menambahkan sendiri (yaitu digit ditambahkan ke nilai saat ini). Itu memberi801
dalam contoh di atas. Akhirnya,;
cetak nilai ini dengan mengambilnya modulo 256 dan menggunakannya sebagai nilai byte. Dalam hal ini801 % 256 = 33
dan!
dicetak.sumber
Spasi , 1643 byte, 1 DNP
17 byte untuk karakter [33-63] dan 18 byte untuk karakter [64-126]
Di Whitespace ini sangat mudah, karena karakter yang dapat dicetak (kecuali spasi) tidak memiliki arti:
Program di atas mencetak '!' (100001b). Ubah
[TAB][SPACE][SPACE][SPACE][SPACE][TAB]
baris pertama ke karakter mana saja yang Anda suka. Tidak mungkin untuk mencetak spasi tanpa menggunakan spasi, karena mencetak apa pun selalu dimulai dengan[TAB][LF][SPACE]
sumber
Retina , 712 byte, 2 DNP
Ini adalah upaya kolaborasi dengan FryAmTheEggman.
Ada beberapa kelas solusi. Untuk sebagian besar karakter dari luar angkasa hingga
^
, kami menggunakan program dengan bentuk berikut:Karakter pada baris kedua beralih melalui rentang
_0-9A-Za-z
sementara sisanya tetap tidak berubah. Ini mengubah input kosong menjadi karakter itu dan kemudian menggantinya dengan karakter ASCII yang dapat dicetak (diwakili olehp
) pada posisi yang sesuai. Masing-masing program ini berukuran 8 byte.Dalam kisaran ini, hanya ada beberapa pengecualian. Yang paling penting digit dapat dipersingkat:
x
(menghitung jumlahx
s pada input kosong)(weehoo, program kosong; menghitung jumlah kecocokan kosong dalam input kosong)
2: sekarang kita mengubah input menjadi satu karakter, sebelum menghitung string kosong:
3: hal yang sama tetapi kami mengubah input menjadi dua karakter:
4: Anda mendapatkan ide ...
5 - 9: plot twist ... kami menggunakan pengulangan karakter untuk menghindari baris kedua menjadi lebih lama:
...
Pengecualian lainnya adalah
T
DNP: kami pikir tidak mungkin untuk menghasilkan karakter non-digit tanpa muncul dalam kode sumber jika tahap transliterasi tidak dapat digunakan.Aktif ke karakter yang tersisa. Untuk mencetak
_
kami menggunakan program serupa dengan solusi umum di atas:Memanfaatkan fakta yang
w
dimulai dengan_
.Berikutnya,
`
adalah DNP kedua, karena tahap transliterasi juga membutuhkannya.Maka sebagian besar huruf kecil dicetak dengan sesuatu seperti ini (yang dicetak
a
):Sekali lagi, karakter pada baris kedua bertambah
_0-9A-O
. Di sini, kita hanya perlu diwaspadail
danw
, yang masing-masing dapat kita cetak dengan program-program berikut:Akhirnya, hanya
{|}~
tersisa, yang masing-masing memerlukan 9 byte. Di sini, kami menggunakan tahap transliterasi untuk meningkatkan karakter yang mendahuluinya. Misalnya~
dapat dicetak dengan:sumber
Pyke,
364362355 byteSemua dalam bentuk
w<chr(charcode+32)>.C
(4 byte) kecuali untuk:->
d
1 byte0
->Z
1 byte1
->~W
2 bytea
->Gh
2 bytez
->Ge
2 bytea
) dalam bentukG<number>@
(3 byte)k
->GT@
3 byte>
->~Bh
3 byte]
->~Be
3 byteZ
->~le
3 byte9
->~ue
3 bytew
->G22@
4 byte.
->~B4@
4 byteC
->~K38@
5 bytePenerjemah Pyke online
sumber
JavaScript (ES6),
10831068 byteBentuk umum:
Pengecualian:
Sunting: Disimpan 15 byte berkat @ GOTO0.
sumber
alert(atob`XA`)
untuk "\" untuk menyimpan beberapa byte.x
.\u
pelolosan dalam kode sumber? Keren05AB1E , 417 byte
Penjelasan
Kebanyakan 5 byte panjang dalam bentuk:
convert nr to base nr+1
.>
membutuhkan byte tambahan karena kita tidak dapat menggunakan increment untuk itu.a,b,x,y,z,Y,Z
diekstraksi dariA
yang berisi alfabet dalam huruf kecil.A,B,C,D,E,F
adalah angka yang dikonversi menjadi hex.0-9
adalah kenaikan / penurunan sederhana serta variabel yang telah ditentukan sebelumnya.sumber
Marbelous, 220 byte
Untuk karakter yang bukan digit, itu hanya dua digit heks huruf besar dari kode karakter. Sebagai contoh, output program berikut
A
:Untuk digit yang tidak
3
, ganti2F
kode berikut dengan digit hex huruf besar dari kode karakter - 1:Untuk
3
:Total skor: 2 * 85 + 5 * 10 = 220.
Penerjemah.
Percobaan pertama saya adalah Bubblegum dan tidak berhasil untuk karakter sebelum
?
...sumber
Perl 6: 921 byte
Terjemahan dari solusi Python.
Setiap program memiliki formulir
say "\x<hex escape code>"
, kecuali:s
→put "\x73"
a
→put "\x61"
y
→put "\x79"
→
"\x20".say
"
→say chr 34
\
→say chr 92
x
→say chr 120
0
→say 1-1
1
→say 3-2
2
ke9
→say <n minus one>+1
Untuk referensi dan kemudahan pengujian, berikut adalah daftar lengkap program yang dipisahkan oleh baris baru.
Inilah kode yang saya gunakan untuk menguji daftar di atas, dan hitung skornya:
sumber
say
diperlukan dan urutan escape oktal ditulis sebagai\o77
. Jangan ragu untuk mengirim solusi Perl 5 terpisah ... :)Haskell,
1874 1864 1856 1855 1795 17911589 byte, 7 DNPsSebagian besar program berada
main=putChar '\xx'
atau dimain=putChar '\xxx'
manaxx
/xxx
adalah kode ascii dari char yang akan dicetak. Ini berfungsi untuk semua kecuali 14 karakter:Namun, untuk digit
1 74 byte dapat disimpan (terima kasih kepada Christian Sievers!):52 program hingga
c
(kode 99) mengambil 18 byte, sisanya 19 masing-masing mengambil 19 byte.Skor sebagian:
10*14 + 52*18 + 19*19 = 1437
Untuk 7 dari karakter yang tersisa, program berikut berfungsi:
Skor sebagian:
18 + 22 + 18 + 21 + 19 + 27 + 27 = 152
Ini menyisakan 7 DNP:
=aimnrt
Setiap program Haskell perlu mendefinisikan main (
main=
), jadi itu 5 DNP. Untuk mencetak ke stdout,putChar
,putStr
atauinteract
dapat digunakan, menghasilkant
danr
sebagai DNPs lebih lanjut. (Ada jugaprint
, bagaimanapunprint 'a'
mencetak'a'
dan tidaka
- dan juga mengandungt
danr
tetap.) Haskell juga memilikichr
fungsi yang mengembalikan arang yang sesuai diberi nomor, namun untuk menggunakannyaimport Data.Char
diperlukan.Total skor
1437 + 152 = 1589
:, 7 DNPsumber
main=print$1-1
dll.succ
)BBC Basic,
422413 byteUnduh juru bahasa gratis di http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
9 byte disimpan berkat Leaky Nun.
Bentuk umum
32..99 tidak termasuk 12 kasus khusus: 56x4 = 224 byte
100..126 : 27x5 = 135 byte
12 kasus khusus: 54 byte
Sebagian besar angka mengikuti bentuk umum, tetapi saya memasukkan semuanya di sini untuk menunjukkan di mana masalahnya.
Karakter pertama adalah karakter yang akan dicetak.
sumber
V.48
untuk0
?V.
danP.
perintahnya selalu ada di sana?.
akan berkembang menjadi kata kunci. Tantangan ini sangat ketat tentang penggunaan ASCII yang tidak dapat dicetak tetapi bisa dibilang dengan tantangan lain Anda bisa mengatakan kata kunci yang terpatok (ASCI 127-255) adalah satu byte. Yang mengatakan saya belum pernah mencoba argumen itu, dan biasanya memberikan skor kedua.Minkolang 0,15 , 604 byte
Untuk sebagian besar karakter,
"<char-1>"1+O.
akan menjadi program yang valid, mungkin salah satu yang terpendek. Namun, karena fakta bahwa karakter disimpan sebagai titik kode pada tumpukan berarti banyak dari mereka dapat diproduksi dengan perkalian dan penambahan, dalam lima byte atau kurang. Juga, perhatikan bahwal, $1, $2, $3, $4, $5, $6, $l
yang10, 11, 12, 13, 14, 15, 16, 100
masing masing.Format:
<character>: <program>
Disebutkan secara khusus:
(Cobalah.) Minkolang memiliki kemampuan untuk memodifikasi karakter dalam kotak kode, jadi yang dilakukan oleh program ini adalah mengganti
-
di akhir dengan.
, yang diperlukan untuk menghentikan program."N"1+d90pN.
untukO
bekerja dengan cara yang sama.(Cobalah.)
lZ
Mendorong huruf besar dan kecil ke tumpukan, danI
mendorong panjang tumpukan, yaitu 52, tepatnya titik kode "4". Bagian yang terbaik adalah saya awalnya mempertimbangkan solusi4$3*O.
, yang mengalikan 4 dan 13 untuk mendapatkan 52, tetapi tidak bisa karena ada 4 di dalamnya, jadi akhirnya saya menemukan solusi golf!(Cobalah.)
d
Menggandakan bagian atas tumpukan, jadi yang dilakukan oleh bagian kode ini adalah mendorong11
, menggandakannya, dan kemudian mengalikannya. Cara alternatif untuk menulis ini adalah$12;O.
, yang memiliki jumlah byte yang sama.(Cobalah.)
;
Adalah eksponensial, jadi ini artinya 5 ^ 3 untuk mendapatkan 125.sumber
Groovy, 1019 byte
Saya memiliki solusi Groovy berbeda yang ditulis (lihat di bawah), tetapi setelah saya kirimkan, saya melakukan sedikit lebih banyak penggalian karakter, berharap menemukan cara untuk memperpendek program lebih banyak, dan menemukan bahwa Groovy memiliki karakter oktan yang lolos. tidak tahu. Ini secara signifikan menyederhanakan kode, ke titik yang sayangnya menghilangkan kebutuhan untuk hampir semua solusi unik yang saya buat.
Itu juga terlihat hampir identik dengan solusi Copper's Python 2 , ke titik di mana pada dasarnya terlihat seperti saya menjiplak pekerjaan mereka. Ugh.
Setiap program memiliki formulir
print'\<octal value>'
, kecuali:p
,r
,i
,n
,t
→'print''\<octal value>'
(tapi dengan huruf pencocokan "cetak" juga diganti dengan nilai oktal)0
-9
→print~-<next int>
Berikut adalah daftar lengkap program berdasarkan karakter.
Groovy, 1130 byte
Program saya sebelumnya, sebelum saya menemukan bahwa pelarian oktal ada. Jauh lebih menarik, IMO.
Setiap program memiliki formulir
print(--'<next char>')
, kecuali:-
,[
,~
→print(++'<previous char>')
&
→print(--"'")
p
,r
,i
,n
→System.out<<--'<next char>'
t
→'prin\u0074'(--'u')
(
→print'\u0028'
)
→print'\u0029'
0
-9
→print~-<next int>
Berikut adalah daftar lengkap program untuk setiap karakter:
sumber
Sebenarnya ,
383382381 byte1 byte berkat Mego.
Untuk referensi yang mudah, kolom pertama adalah kode karakter, kolom kedua adalah karakter, dan kolom ketiga adalah kode.
Kode untuk
0
adalah ruang tunggal.Cobalah online!
Saran bermain golf dipersilakan.
sumber
:
dalam 5:9P2*c
Fourier, 306 byte, 1 DNP
Hampir semua program mengikuti pola di
na
mana n adalah kode karakter masing-masing karakter. Sebagai contoh:Cobalah online!
Jadi saya hanya akan membuat daftar pengecualian:
0 (Nol)
Karena akumulator diatur ke nol, kita dapat menampilkan ini menggunakan satu karakter:
Cobalah online!
1
Mirip dengan nol, ini menambah akumulator untuk mendapatkan 1.
Cobalah online!
5
Kode ASCII untuk 5 adalah 53, jadi saya harus mengatasi ini:
Cobalah online!
Sebuah
Karena
a
menjadi fungsi keluaran karakter, tidak ada cara lain untuk menghasilkan karakter a, jadi ini satu-satunya DID BUKAN PROGRAM .Lihat semua program di sini
sumber
Matlab,
12381224 byte, 2 DNPPola utamanya adalah:
Untuk digit itu sedikit lebih pendek:
Untuk karakter
[]'
:Karakter
ds
daridisp
ditampilkan menggunakanfprintf
( terima kasih @Stewie Griffin );ip
Namun milik juga di sana, jadi saya menggeser string dan menggunakaneval
:Namun kedua karakter
()
tersebut diperlukan untukdisp
ataueval
, jadi mereka adalah DNP.Untuk referensi seluruh daftar:
sumber
[100 105 115 112]
(kode char) berfungsi untukdisp
?disp([100 105 115 112])
tidak akan menghasilkan string,eval([100 105 115 112])
juga.fprintf
untuk d ans s:fprintf([115,''])
. Menghemat 2x7 byte =) Tidak akan membuatnya menjadi pemenang, tapi hei: 14 byte adalah 14 byte ,,,disp([0 ''])
berisi spasi.disp([0,''])
tidak.fprintf
.Jelly (tidak kompetitif), 406 byte
Ini mencetak semua karakter dari 32 - 126. Hitungan byte dihitung dengan https://mothereff.in/byte-counter .
Cobalah online!
sumber
In a programming language of your choice, write 95 programs, each of which outputs a different one of the 95 printable ASCII characters without that character occurring anywhere in the program.
Befunge-93, 530 byte
Cara termudah untuk mengeluarkan karakter, tanpa benar-benar menggunakan karakter itu, adalah menghitung nilai ASCII dan menggunakan perintah
,
(keluaran karakter) untuk membuatnya. Misalnya,49*,@
menampilkan karakter dolar (ASCII 36, 4 * 9). Ini jarang yang paling optimal, karena sebagian besar nilai membutuhkan lebih dari 3 byte untuk dihitung.Cara lain untuk menghasilkan angka dalam 3 byte adalah dengan memanfaatkan fakta bahwa perintah
g
(get) di sel pertama playfield akan menghasilkan nilai ASCII dari g (tumpukan kosong diasumsikan diisi dengan nol, jadi itu adalah membaca nilai playfield pada 0,0). Dengan demikiang1+,@
membuat Anda h , dang1-,@
membuat Anda f . Ini jelas bekerja untuk berbagai offset, dan operasi selain+
dan-
juga dimungkinkan. Jadi misalnyag3/,@
memberi Anda penawaran ganda.Variasi dari ini, adalah untuk mengawali
g
dengan perintah lain yang meninggalkan semua nol pada stack. Jadi Anda masih membaca nilai dari playfield pada 0,0, tetapi karakter yang sedang dibaca sekarang berbeda. Ini membutuhkan satu byte lagi, tetapi memberi Anda akses ke banyak nilai lainnya. Misalnya,0g1-,@
memberi Anda garis miring dan:g1+,@
membuat titik koma. Awalan yang layak lainnya termasuk*
,+
,-
,>
,\
dan_
. Dan lagi perhatikan bahwa operasi lain dimungkinkan:>g2*,@
buatkan Anda bilah vertikal.Variasi lebih lanjut adalah dengan mendahului
g
dengan a1
, jadi Anda sekarang tidak lagi membaca dari 0,0, tetapi dari sel kosong di 0,1. Di Befunge, sel kosong diinisialisasi dengan spasi secara default, jadi1g,@
memberi Anda spasi, dan1g1+,@
memberi Anda tanda seru.Untuk karakter digit, ada trik lebih meragukan yang bisa kita gunakan. Alih-alih mencoba menampilkannya sebagai karakter, kami mengeluarkannya sebagai angka (sejumlah kecil lebih mudah untuk menghasilkan daripada yang setara ASCII). Jadi misalnya,
11+.@
memberi Anda 2 , dan khususnya catatan kasus khusus:.@
untuk 0 , dan!.@
untuk 1 . Bagian yang meragukan dari ini adalah bahwa output numerik di Befunge termasuk spasi setelah angka, jadi itu bukan output karakter murni.Trik meragukan lain yang dapat kita gunakan adalah variasi dari
g
teknik di atas. Alih-alih membatasi diri pada perintah Befunge untuk awalan, kita juga bisa secara teknis menggunakan karakter apa pun yang bukan perintah Befunge. Pada kebanyakan penerjemah, perintah yang tidak dikenal akan diabaikan, sehinggag
akhirnya akan membaca nilai ASCII dari karakter sebelumnya. Ini memungkinkan kami untuk menghasilkan sebagian besar nilai ASCII lain yang tidak bisa dihitung dalam 3 byte. Sebagai satu contoh:Qg1+,@
memberi Anda R .Akhirnya, ada tiga kasus khusus. Sebuah g tidak dapat dihasilkan dalam waktu kurang dari 5 byte, jadi kami harus resor untuk
"f"1+,@
. Sebuah koma adalah yang paling rumit, memerlukan modifikasi dinamis playfield:0g4-:80p @
. Kita dapat menggunakan teknik serupa untuk menghindari karakter at, tetapi peretasan yang lebih efisien adalah dengan menggunakan perintah%
(modulo) sebagai terminator, yaitu88*,%
. Ketika%
tercapai, tidak ada apa-apa di stack, sehingga perhitungan modulo menghasilkan pembagian dengan nol, dan pada interpreter referensi ini akan menghentikan program.Di bawah ini adalah daftar lengkap program, satu per baris.
sumber