Tulis seluruh holed dengan menggunakan unholed

55

The karakter ASCII dari kode desimal 33-126 adalah:

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

Perhatikan bahwa di sebagian besar font, 25 karakter ini memiliki "lubang" di dalamnya: ( genus lebih besar dari 0 yang mungkin Anda katakan)

#$%&04689@ABDOPQRabdegopq

68 karakter "tidak suci" lainnya adalah:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

Tugas Anda adalah untuk menulis program terpendek yang mungkin hanya menggunakan karakter yang tidak dikupas yang menghasilkan masing-masing karakter holed sekali dalam urutan apa pun.

Karena Spasi, Tab, dan baris baru (Umpan Lini dan / atau Pengembalian Kereta) adalah ruang kosong yang mungkin muncul di program Anda atau hasilnya. Mereka masih menghitung jumlah karakter. Karakter ASCII lainnya tidak boleh digunakan (dan tentunya bukan karakter non-ASCII).

Catatan

  • Anda tidak harus menggunakan semua karakter yang tidak suci atau hanya satu karakter saja.
  • Outputnya mungkin tidak mengandung karakter yang tidak dilapis.
  • Bahasa Whitespace dapat digunakan.
  • Output harus menuju stdout atau dapat pergi ke file. Seharusnya tidak ada input.

Bonus: Hanya untuk bersenang-senang, cobalah mencetak semua karakter yang tidak suci menggunakan karakter yang dikurung. Saya ragu bahwa itu bisa dilakukan dalam bahasa yang sudah ada.

Hobi Calvin
sumber
9
+1 untuk judul. Kami suka hal-hal seperti ini .
Yakub
1
Di mana solusi Perl ?!
Pierre Arlaud
4
Yah, tidak ada solusi di Haskell atau C; jika itu adalah program yang Anda inginkan, maka Anda perlu mengeja main.
Rhymoid
2
Bonus dapat dilakukan menggunakan spasi putih.
Joshua
1
Bagaimana tidak ada yang memperhatikan bahwa saya lupa ~??
Calvin Hobi

Jawaban:

18

Pyth , 43 35 karakter

tTFk"*+,-7;=?GHIKVWXYhiklnvwx"C-Ck7

Coba di sini .

Mencetak karakter dalam urutan kecuali bahwa 9 di awal, baris baru dipisahkan.

String berisi semua karakter 7 lebih besar dari yang dibutuhkan, kecuali bahwa 9 akan menjadi @, jadi itu adalah casing khusus. Algoritma terima kasih kepada @Howard.

Penjelasan:

tT                print(10-1)                T=10, t(x)=x-1 if x is an int.
Fk"<string>"      for k in "<string>":
C-Ck7             print(chr(ord(k)-7))       Note that C is overloaded as ord and chr.
isaacg
sumber
24

GolfScript, 37 36 karakter

[":=<?)-/! YX[]VIHKx{}|~vih"{25^}/]+

Coba kodenya di sini .

String berisi karakter terlarang xor'ed dengan 25. Untungnya semua karakter dipetakan ke karakter yang valid.

Howard
sumber
22

Brainfuck 119

--[------->++<]>-.+.+.+.++++++++++.++++.++.++.+.+++++++.+.+.++.+++++++++++.+.+.+.[------>+<]>--.+.++.+.++.++++++++.+.+.
Teun Pronk
sumber
eh, --di awal ... Apakah Anda bersepeda kembali ke 254 pada daftar awal di sana?
WallyWest
1
Yup :) Membuat loop menjadi 36 lebih pendek (untuk sampai ke 35)
Teun Pronk
Yah, itu pasti mengalahkan 275 saya ... dilakukan dengan baik ...
WallyWest
@Hobi Calvin Saya cukup yakin tidak ada input yang diizinkan, maaf OP mungkin ingin mengklarifikasi.
isaacg
@isaacg Saya tahu, itu sebabnya kode utama saya tidak menerima input dan contoh terakhir bukan yang serius :)
Teun Pronk
20

Bonus - dc, 179 karakter

Oh bagus, tantangan rangkaian karakter terbatas lainnya yang Pdiizinkan.

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

Karena dctampaknya cukup tidak jelas untuk membutuhkan penjelasan (aneh bagi saya mempertimbangkan hal-hal aneh di sekitar sini!) Di sini adalah ikhtisar:

Ini terutama kalkulator RPN dengan aritmatika presisi arbitrer. Tetapi untuk tantangan ini, saya menggunakan Pperintah, yang menginterpretasikan angka sebagai serangkaian karakter dalam basis 256 dan mencetaknya. Contoh: 65 Pcetakan A(kode ASCII 65). 16706 Pcetakan AB(16706 = 65 * 256 + 66).

Selain itu, satu-satunya fitur menarik lainnya adalah bahwa ia mengenali semua digit heksadesimal 0-9A-Fbahkan ketika mereka tidak terkandung dalam angka heksadesimal. Input desimal adalah default, sehingga token input 999berarti 9 hundreds + 9 tens + 9dan ABCberarti 10 hundreds + 11 tens + 12membuatnya setara dengan 1122.

Kemampuan untuk menggunakan angka ABDdalam desimal sebagian menggantikan ketidakmampuan untuk digunakan 12357, dan pilihan pemesanan dan pengelompokan melakukan sisanya. (Jika saya perlu beberapa nomor x, y, zdan mereka tidak representable dengan diperbolehkan digit, maka saya mencoba mewakili x*256*256+y*256+zsebagai gantinya.)

Program ini mungkin dapat dibuat sedikit lebih pendek dengan menggunakan grup yang lebih besar. Saya tidak melewati 3 byte per angka.


sumber
1
@DigitalTrauma sebaliknya adalah Bonus di akhir pernyataan masalah.
Ha! Saya melewatkan itu! Luar biasa! +1
Trauma Digital
Bisakah Anda menjelaskan ini? Dan adakah tempat kita bisa menjalankan ini?
Hobi Calvin
4
Tempat Anda bisa menjalankannya? dc bukan bahasa konyol yang dirancang untuk membuat program yang sulit dibaca, ini adalah kalkulator serius. Jalankan di mesin unix apa pun (atau cygwin). en.wikipedia.org/wiki/Dc_(computer_program)
@ Calvin'sHobbies Jika Anda memiliki akses ke sembarang Linux atau mesin Unix (termasuk OSX), cukup simpan sebagai file teks misalnya bonus.dc, kemudian jalankan dc bonus.dc. dc adalah salah satu bahasa tertua di luar sana dan telah menjadi perlengkapan tetap di * nix selama beberapa dekade. Ini tidak terkenal, mungkin karena sintaksis RPN yang misterius dan tidak terlalu mudah dibaca. Bagus untuk beberapa tantangan kode-golf ;-)
Digital Trauma
12

Bash + coreutils, 56 byte

tr \(-y \!-r<<<'*+,-7;=?GHIKVWXYhiklnvwx'
tr C-F 7-:<<<E

Seperti keberuntungan, menambahkan 7 pada nilai ascii dari karakter yang dikurung menghasilkan semua karakter yang tidak dikupas (dengan pengecualian "9"). Jadi kami hanya melakukan transformasi ini secara terbalik, kemudian transformasi serupa (kurangi 12 dari "E") untuk mendapatkan "9".

Keluaran:

#$%&0468@ABDOPQRabdegopq
9
Trauma Digital
sumber
7
Saya suka bagaimana baris pertama mengurangkan 7 dari banyak karakter, dan itu berisi yang -7ditampilkan secara mencolok antara karakter tanda baca, dan 2 fakta itu tidak ada hubungannya dengan satu sama lain.
@ WumpusQ.Wumbley Aku bahkan tidak menyadarinya :)
Digital Trauma
6

Perl - 49 Bytes

symlink".",':=<?)-/! YX[]VIHKx{}|~vih'^chr(25)x25

Ini adalah versi Perl dari solusi Howard. XOR dengan string dengan 25. Outputnya adalah file dengan nama #$%&04689@ABDOPQRabdegopq. Saya mendapat ide untuk menggunakan symlinkdan nama file sebagai format output karena semuanya dilarang.

Inilah solusi Perl lain yang saya buat. Ini mungkin dapat ditingkatkan banyak dan cukup lama, jadi saya akan pergi dalam format yang dapat dibaca untuk saat ini.

until(y/1/1/>32){s//1/}
until(y/1/1/>125+1){
    if(chr(y/1/1/)!~/[!"'()*+,-.\/12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\\\]^_`cfhijklmnrstuvwxyz{|}~]/) {
        symlink".",chr y/1/1/;
    }
    s/^/1/
}

Ini menghasilkan banyak file, nama masing-masing adalah salah satu karakter. Saya tidak tahu cara menambahkan string tanpa menggunakan karakter terlarang.

for, while, map, say, print, eval, s///e, Dan setiap nama variabel tidak dapat digunakan (variabel mulai dengan @atau $di Perl) yang membuat ini sulit.

Mudah-mudahan nama file tidak apa-apa sebagai format output karena saya cukup yakin setiap cara lain untuk menampilkan informasi menggunakan salah satu karakter yang dilarang.

hmatt1
sumber
Saya akan memberi Anda +1 untuk kreativitas! Penggunaan kode yang sangat pintar!
WallyWest
Saya tahu ini cukup lama, tetapi mungkin untuk mencetak output ke layar dan menyimpan beberapa byte menggunakan -pflag dan *_=\(... ): Cobalah online!
Dom Hastings
@HomHastings keren! Saya pikir -pbendera akan dilarang karena pmemiliki lubang.
hmatt1
5

MATLAB, 36 byte

SO CLOSE .... Hanya 1 byte lebih banyak dari pemenang saat ini (isaacg)! Yang, pada pemeriksaan lebih lanjut, sudah melakukan apa yang ingin saya lakukan juga. Nah, tidak ada salahnya menciptakan kembali roda ...

Saya tahu ini adalah tantangan lama, tetapi saya baru sadar setelah saya tertarik.

['*+,-7;=?GHIKVWXYhiklnvwx'-7,57,'']

Kalau saja saya bisa mendapatkan MATLAB untuk memahami bahwa saya ingin string tanpa ''saran ... terpisah , siapa pun?

Sanchises
sumber
4

Brainfuck 303 275

++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>+++.--->----.+.+.++>.>----.++.++.+.->.+.+.-->----.++++>-.+.+.+.-->>+.+.-->----.+.++.+>-.+.+.

Brainfuck, bahasa esoterik utama yang tidak suci (selain dari Whitespace);)

WallyWest
sumber
1
Harap hapus fragmen lama, jangan serang.
isaacg
2
Saya melihat Anda menggunakan tanda kutip (tidak tahu nama asli) untuk cuplikan kode Anda. Mungkin lebih mudah untuk memilih kode Anda dan tekan Ctrl+ K:)
Teun Pronk
@isaacg Selesai. TeunPronk, selesai!
WallyWest
6
Atau cukup tekan spasi 4 kali jika hanya satu atau dua baris. @TeunPronk Ini? `Itu backtick. (Juga disebut aksen kubur, meskipun " kutipan halies " adalah yang baru bagi saya: P)
Gagang Pintu
1
@Doorknob Kemudian kami berdua belajar sesuatu hari ini walaupun apa yang Anda pelajari salah, P
Teun Pronk
4

JS - 196 - coba

h=(c=!1+[])[1];i=c[2*2];j=(f=[]+{})[1];this[i+'v'+h+'l'](h+'l'+i+'rt('+h+'t'+j+f[2]+'("Iy\x51lJj\\x'+2*2+'1\\x3'+~-1+'Nj\\x'+2*3+'75\x51EFC\x52E\\x3'+3*3+'\x51UVJhYm\x52lZ2\\x3'+3*3+'wc\x51=="))')
bebe
sumber
1
Astaga, ini gila. Tampaknya Js adalah salah satu dari bahasa yang paling dapat dilecehkan =)
flawr
Ya bisa disalahgunakan, tapi ini hanya setitik dibandingkan dengan entri saya ... Maaf @bebe tapi saya sudah-JS'd Anda kali ini ...
WallyWest
1
@WallyWest saya menyatakan perang.
bebe
1
217 : h=1-1;j=3+3;k='\\x';m=!i+k;c=m[1];f=m[i=2+2];l=k+3;n=k+j;r=k+i;this[f+'v'+c+'l'](c+'l'+f+'rt("\\x23\\x2'+i+k+25+k+2+j+l+h+l+i+l+j+l+2*i+l+3*3+r+h+r+1+r+2+r+i+r+'f\\x5'+h+k+51+k+52+c+n+2+n+i+f+n+7+n+'f\\x7'+h+k+'71")')- sebaris l, diperpendek m, dideklarasikan ipada penggunaan pertama, menciptakan beberapa vars tambahan untuk pola berulang (Anda mungkin bisa memperbaiki ini dengan mengubah urutan karakter yang dihasilkan, tapi itu di luar kesabaran saya: P).
Alconja
2

GolfScript, 89 karakter

71 22+,{33+}/]''+'!"\'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}'-

Cukup buat larik semua karakter ASCII dan kurangi karakter yang tidak "disembunyikan" darinya.

71 22+,  # Builds array of 0..93
{33+}/]  # Converts to 33..126
''+      # Convert ASCII codes to string
'stuff'- # Subtracts "stuff" (the non-holed characters) from the string
Gagang pintu
sumber
2

Menembus 98 - 69 byte

"()+ijWI=*">:5j2 ,-5_"157:h">:5j2 ,-1_"=>?LMN^_lmn">:5j2 ,+3_"?"1+s <

Lakukan dalam 3 bagian. Satu di mana nilai karakter yang tidak suci berbeda dari karakter holed oleh 5. Kemudian orang-orang yang berbeda dengan 1, dan akhirnya daftar karakter tidak suci yang berbeda dengan 3 dari yang holed. Instruksi penghentian program di Befunge adalah "@" (nilai char 64), jadi pada akhirnya saya memuat "?" (nilai char 63) tambahkan 1 lalu masukkan ke dalam kode dengan instruksi 's'.

Saya mungkin bisa bermain golf lebih banyak dengan menggabungkan ketiganya

>:5j2 ,(differ value)_

bagian, tapi mungkin tidak banyak.

AndoDaan
sumber
2

JavaScript 240 228

Penyerahan awal:

z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;1[_="c\157nstruct\157r"][_](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()

Sekarang, ini adalah awal yang baik, inilah cara kerjanya ...

z=(!1+"")[1];        // assigns "a" to z, !1+"" === "false"
y=(!!1+"")[3];       // assigns "e" to y, !!1 === "true"
x={}+"";             // assigns "[object Object]" to x
w=x[1];v=x[2]        // assigns "o" to w, and "b" to v
u=z+"t"+w+v;         // creates the mystical "atob" command, yes, I'm gonna use it!
1[_="c\157nstruct\157r"][_] // sets up the primitive to a number object... this acts similar to the "window" primitive object so that I can play off functions...
z+'l'+y+'rt(         // starts creating an alert call
'+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
// Above line abuses atob command with a couple of nested instances of the command, also using hex and octal equivalents of characters

Dan kemudian saya berpikir ... "Pasti ada cara yang lebih sederhana ..." dan ada ...

Pengajuan yang direvisi: z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;this[y+"v"+z+"l"](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')

Melihat saya dapat menggunakan eval (oleh piecing bersama-sama, inspirasi dari @bebe; yang jauh lebih cepat daripada menggunakan constructordari constructordari number...) aku dibor ke bawah untuk 228 ... Aku tahu itu tidak mungkin menang Golf Challenge khusus ini , tapi ini hanya cara saya menunjukkan seberapa banyak Anda dapat menyalahgunakan JavaScript, dan masih mendapatkan hasil yang diinginkan ...

WallyWest
sumber
2

Utama - Insomnia , 50

FFy~~jF~y<={*n<<ztf>={.f=(tHL~k<yf={*n>Lj(FunLn<j~

Ini menghasilkan:

abdegopq04689@ABDOPQR#$%&

Bonus - Insomnia, 268

ogeeoddp@poe@ggep@oe@opge@gee@%d@p@gqeo@p@ge@e9de49ed9e4dppe@%e@geee@ge@p%ee@%e@dp@%ep@%ee@%d@%eeee@%e@%ee@%e@geee@%e@gee@ggopop@peo@ggep@p@ge@ggeep@ge@gee@%e@geee@ge@gee@ge@ppoep@%ee@%edep@gepe@ge@%ee@%e@geee@ge@%ee@%%eeoe@ge@pep@%gep@p@%e@%%eep@%e@gee@e%e@oe@%gep@p@

Ini menghasilkan:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

Saya pikir itu harus mungkin untuk mengurangi panjang program jika output disusun ulang, tetapi saya perlu memodifikasi program pencarian saya untuk melakukan ini.

Hanya untuk menunjukkan huruf bahasa lain yang mampu beroperasi dengan jumlah karakter terbatas. Ngomong-ngomong, ia bisa menulis sembarang keluaran dengan hanya 3 karakter unik di sumbernya.

Saat ini, ini adalah satu-satunya bahasa yang dapat melakukan tantangan utama dan juga bonus di antara semua jawaban yang ada.

Penerjemah Insomnia .

n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
sumber
1

Menembus 98 - 46 byte

Versi Befunge-ified dari entri Pyth isaacg:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <
AndoDaan
sumber
1

Japt , 33 byte

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

Cobalah online!

Algoritma yang sama dengan pengajuan Pyth isaacg , kebetulan lebih pendek di Japt.

Bagaimana itu bekerja

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

7+2           Obviously the number 9
    "..."c-7  Apply -7 on each char's charcode of this string
   +          String concatenation

Ya, ini JS, yang merupakan salah satu bahasa yang paling kasar , hanya lebih pendek (dan Anda tidak perlu alertatau di console.logsini).

Bubbler
sumber