(Judul dengan terima kasih kepada @ChasBrown)
Latar belakang
Tantangan ini terinspirasi oleh pertanyaan yang baru-baru ini saya posting di Puzzling Stack Exchange . Silakan ikuti tautannya jika Anda tertarik dengan pertanyaan awal. Jika tidak maka saya tidak akan membuat Anda bosan dengan detailnya di sini.
Fakta
Setiap karakter ASCII standar yang dapat dicetak memiliki nilai desimal antara 32 dan 126 inklusif. Ini dapat dikonversi ke angka biner yang sesuai dalam kisaran 100000 hingga 1111110 inklusif. Saat Anda menjumlahkan bit angka biner ini, Anda akan selalu berakhir dengan integer antara 1 dan 6 inklusif.
Tantangan
Diberikan bilangan bulat antara 1 dan 6 inklusif sebagai input, tulis sebuah program atau fungsi yang akan menampilkan semua format ASCII yang dapat dicetak, semua karakter ASCII yang dapat dicetak dengan jumlah bit nilai binernya sama dengan integer input.
Contoh / Kasus Uji
1 -> ' @'
2 -> '!"$(0ABDHP`'
3 -> '#%&)*,1248CEFIJLQRTXabdhp'
4 -> ''+-.3569:<GKMNSUVYZ\cefijlqrtx'
5 -> '/7;=>OW[]^gkmnsuvyz|'
6 -> '?_ow{}~'
Implementasi referensi Python ungolfed tersedia di sini (TIO) .
Aturan
- Asumsikan input akan selalu berupa integer (atau representasi string integer) antara 1 dan 6 inklusif.
- Anda dapat menulis program untuk menampilkan hasil atau fungsi untuk mengembalikannya.
- Output mungkin dalam format yang masuk akal tetapi harus konsisten untuk semua input . Jika Anda memilih untuk mengeluarkan string yang dikutip maka jenis kutipan yang sama harus digunakan untuk semua input.
- Celah standar dilarang seperti biasa.
- Ini adalah kode golf sehingga kode terpendek di setiap bahasa menang.
63
Vs?
)?'
) untuk representasi string dari suatu string secara default, tetapi menggunakan tanda kutip ganda ("
) jika string berisi tanda kutip tunggal dan tidak ada tanda kutip ganda . Bukan berarti kasus spesifik ini akan sangat berarti, karena Anda mungkin lebih baik mengembalikan string yang sebenarnya daripada perwakilannya, dan Anda masih dapat menggunakan tanda kutip tunggal dalam string tersebut untuk input, tapi saya merasa layak untuk disebutkan di sini.« »
)? : DJawaban:
Perakitan 8088, IBM PC DOS,
353029 byteKode mesin:
Daftar:
Standableone PC DOS program yang dapat dieksekusi, memasukkan angka dari baris perintah. Output ditampilkan ke jendela konsol.
Unduh dan uji ABCT.COM (AsciiBitCounT).
sumber
Perakitan CP-1610 ( Intellivision ), 20 DECLEs 1 = 25 byte
MembawaN di R0 dan pointer ke buffer output di R4 . Menulis semua karakter yang cocok di buffer dan menandai hasil akhir dengan NUL .
Output untuk N = 2
NB: Tanda kurung pembuka sangat mirip dengan tanda kurung siku pada font Intellivision. Namun kedua karakter itu berbeda.
tangkapan layar dari jzIntv
1. Sebuah opcode CP-1610 dikodekan dengan nilai 10-bit, yang dikenal sebagai 'DECLE'. Rutin ini sepanjang 20 DECLEs, mulai dari $ 4819 dan berakhir pada $ 482C (termasuk).
sumber
Python 2 , 62 byte
Cobalah online!
sumber
sum(map(int,bin(i)[2:]))==n
dapat menjadibin(i).count('1')==n
menghemat 7 byte.05AB1E , 8 byte
Cobalah online!
Penjelasan
sumber
Perl 6 ,
4134 byteCobalah online!
Blok kode anonim yang mengambil nomor dan mengembalikan serangkaian karakter yang valid.
Penjelasan:
Kita dapat menggunakan ini untuk mendapatkan digit angka biner kita dengan menguraikannya sebagai angka desimal dan moduloing dengan angka 9, yang valid karena rentang angka yang kita gunakan dijamin memiliki kurang dari 9 bit. Ini dibantu oleh casting otomatis Perl 6 dari string biner ke angka desimal ketika digunakan dalam konteks numerik.
sumber
Jelly , 8 byte
Cobalah online!
sumber
JavaScript (Node.js) , 60 byte
Menggunakan trik modulo Jo King
Cobalah online!
JavaScript (Node.js) ,
7069 byteCobalah online!
Berkomentar
sumber
Brachylog , 7 byte
Cobalah online!
Predikat yang berfungsi sebagai generator , mengambil input melalui variabel outputnya, dan menghasilkan setiap karakter melalui variabel inputnya. Karena Brachylog.
sumber
Japt , 9 byte
Cobalah atau uji semua input
sumber
Excel (2016 atau lebih baru), 76 byte
Mengambil input dari A1, menghasilkan dalam sel apa pun yang Anda masukkan rumus ini. Ini adalah rumus array, jadi Anda perlu menekan Ctrl+ Shift+ Enteruntuk memasukkannya. "2016 atau yang lebih baru" adalah karena membutuhkan
CONCAT
fungsi (yang usangCONCATENATE
tidak akan menggunakan array sebagai argumen).sumber
C (perpustakaan standar),
7467 byteHanya menggunakan fungsi perpustakaan standar. Terima kasih kepada @gastropner untuk peningkatan dari 74 hingga 67 byte.
Cobalah online!
sumber
f(1)
kasing (karena++i
dilewati).R ,
7768 bytePendekatan menggunakan for loop
-9 byte terima kasih kepada Giuseppe
Cobalah online!
Sebelumnya:
R ,
78 6966 byte-12 byte terima kasih kepada Giuseppe
Mengubah angka 32 hingga 126 menjadi matriks bit kemudian menjumlahkan seluruh baris untuk menemukan yang cocok dengan nomor input.
Cobalah online!
sumber
intToBits(x)>0
daripadaas.single
|0
dan mendapatkan kesalahan dan hanya menganggap operator logika tidak akan berfungsi.sapply
alih - alihmatrix
Java 10,
9897947067 byte-24 byte terima kasih kepada NahuelFouilleul .
Cobalah online.
Penjelasan:
Berisi karakter yang tidak patut dicetak dengan nilai unicode
127
.sumber
n.bitCount
. :)Java 8,
13171 byte-60 byte terima kasih kepada semua orang di komentar.
Mengembalikan a
java.util.stream.IntStream
dari codepointCobalah online!
Menggunakan HashSet, 135 byte. Menghasilkan
Set<Object>
:Cobalah online!
sumber
Long.toBinaryString(i)
bisaLong.toString(i,2);
C # (Visual C # Interactive Compiler) , 86 byte
Terima kasih kepada @ExpiredData yang telah memberikan saya ide untuk digunakan
Sum()
! Ketika saya kembali ke PC saya, saya akan mengganti string"0123456"
dengan unsintables, menghemat tiga byte.Cobalah online!
sumber
Sum()
!APL Dyalog Extended,
2422 byteCobalah online!
-2 byte terima kasih kepada ngn
Alternatif 22 byte dalam Dyalog APL reguler oleh ngn:
Cobalah online!
sumber
(
expr)∘=
->⎕=
expr⎕ucs 32+⍸⎕=32↓+/↑,⍳7⍴2
(⎕io ← 0)Python 2 , 69 byte
Cobalah online!
sumber
Gaia , 10 byte
Cobalah online!
sumber
J ,
3127 byte-4 byte terima kasih kepada Galen
Cobalah online!
Jawaban Asli
Cobalah online!
2#:@i.@^8:
menghasilkan angka biner 0 hingga 255 (2 ^ 8
256)1#.
jumlah masing-masing]=
menghasilkan topeng biner yang menunjukkan di mana jumlah sama dengan input aslia.#~ mask
menggunakan topeng biner itu untuk memfilter alfabet ascii penuh Ja.
&(95{.32}.])
tetapi sebelum melakukannya, ambil hanya elemen 32 ... 126 dari alfabet dan topengsumber
[:u:32+[:I.]=1#.32#:@+i.@95
untuk 27 bytei.@95
Perl 5
-a
,5043 byte@NahuelFouilleul menghemat 7 byte
Cobalah online!
sumber
"@F"
bukan$F[0]
%9
trik oleh @ JoKingK (ngn / k) , 20 byte
Larutan:
Cobalah online!
Penjelasan:
Dievaluasi dari kanan ke kiri:
sumber
6502 rakitan (NES), 22 byte
Kode mesin:
Majelis:
Program lengkap . Diuji dengan FCEUX 2.2.3, harus bekerja pada emulator NES standar apa pun.
Terinspirasi oleh jawaban Ryan Russell. Input diberikan pada alamat CPU $ 60. Output ke memori Picture Processing Unit konsol.
sumber
Bahasa Wolfram (Mathematica) , 70 byte
Cobalah online!
sumber
PowerShell , 83 byte
Cobalah online!
Mengambil input
$n
, menyusun rentang dari32
ke126
dan mengeluarkan angka-angka itu di mana|?{}
: angka,convert
edToString
di pangkalan2
;t
oCharArra yang dikonversiy
;group
ed menjadi0
s dan1
s; mengambil[1]
indeks pengelompokan itu; mengambilnya.count
, dan memeriksa apakah sudah masuk-eq
ke$n
jumlah input kami . Angka-angka itu kemudian dilemparkan sebagaichar
-array dan dibiarkan di atas pipa. Output tersirat, dengan baris baru antar elemen.sumber
Ruby , 48 byte
Cobalah online!
sumber
Arang , 10 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
PHP , 72 byte
Cobalah online!
sumber
count_chars(decbin($x),1)[49]
bisa sajadecbin($x)%9
Merah , 92 byte
Cobalah online!
sumber
Paket Oktaf dengan Komunikasi, 32 byte
Cobalah online!
sumber
Faktor , 94 byte
Cobalah online!
sumber