Tantangan saya sebelumnya, Mencetak teks tak terlihat cukup populer, kemungkinan karena sepele itu.
Namun mereka yang lebih jeli dari Anda mungkin telah memperhatikan bahwa Anda tidak benar-benar mencetak teks yang tidak terlihat, karena tidak mungkin untuk membaca apa yang diinput hanya diberikan output.
Jadi saya pikir bagaimana dengan nyata tantangan teks yang tak terlihat.
Diberikan string yang hanya terdiri dari karakter ASCII yang dapat dicetak ( 0x20-0x7E
), konversi setiap karakter menjadi karakter Unicode yang berbeda (dalam pengkodean UTF-8) yang bukan salah satu dari 95 karakter ASCII yang dapat dicetak (setiap karakter UTF-8 di luar 0x20-0x7E
kisaran)
Memasukkan
String karakter ASCII yang dapat dicetak, baik sebagai string atau array karakter / daftar
Keluaran
String input dengan setiap karakter diganti dengan karakter yang tidak dapat dicetak yang berbeda. Setiap karakter yang diberikan harus memiliki karakter yang tidak dapat dicetak yang sesuai yang tidak digunakan sebagai pengganti karakter lain.
Jika Anda tidak dapat mencetak karakter yang tidak dapat dicetak, Anda dapat menampilkan nilai karakter sebagai gantinya.
Sebagai contoh jika kode Anda menggantikan semua huruf kecil a
's dengan 0x01
, Anda tidak dapat menggunakan 0x01
sebagai substitusi untuk setiap karakter lain.
Kode Anda juga harus deterministik . Ini berarti bahwa jika, mengingat string Hello
, semua huruf kecil l
diganti dengan 0x03
, kode Anda juga harus mengganti semua huruf kecil l
dengan 0x03
string lainnya.
Testcases
Agak sulit untuk menulis testcases untuk tantangan ini, jadi saya hanya akan menunjukkan output sebagai daftar hexcodes
input -> output
"Hello" -> [0x01, 0x02, 0x03, 0x03, 0x04]
"Hi!" -> [0x01, 0x05, 0x06]
"" -> []
" H " -> [0x07, 0x07, 0x07, 0x01, 0x07, 0x07, 0x07]
"yo! " -> [0x08, 0x04, 0x06, 0x07]
Jawaban:
Jelly , 3 byte
Cobalah online!
Kuadratkan setiap codepoint.
sumber
Spasi ,
3936 byteCobalah online!
Penjelasan
Awalnya saya ingin mengalikan dengan -0 atau -1 karena mereka akan menjadi angka terpendek yang mungkin untuk dinyatakan di Whitespace. TIO tidak membedakan antara -0 dan +0 jadi itu keluar. Sayangnya sementara tutorial / spec ambigu tentang bagaimana menafsirkan nilai negatif sebagai char TIO (benar) melempar kesalahan tentang argumen yang tidak valid sehingga juga bukan pilihan.
Konstanta kerja terpendek berikutnya adalah 4 sehingga kami akhirnya melakukan pendekatan dasar yang sama dengan solusi Powershell / Pyth.
Whitespace ,
5653 byte - memetakan untuk menandai karakterCobalah online!
Penjelasan
Secara efektif pendekatan yang sama dengan versi sebelumnya kecuali ini menggunakan 0xE0000 sebagai konstanta dan menambahkan bukan mengalikan. Ini memetakan karakter ASCII yang terlihat ke Unicode Tag Character yang sesuai (kisaran U + E0000-U + E007F). Penggunaan yang dimaksudkan untuk rentang ini adalah untuk menunjukkan bahasa teks dalam file plaintext namun penggunaannya tidak disarankan. Kode ini akan menampilkan label yang valid jika Anda awalan string dengan karakter 0x01.
The Unicode Standard mengatakan bahwa karakter dalam rentang tidak memiliki render terlihat sehingga saya merasa ini memenuhi semangat tantangan yang lebih baik dibandingkan dengan pendekatan sebelumnya.
sumber
Japt ,
52 byteCobalah online
Penjelasan
sumber
126 ** 3 == 2000376
, yang tidak dalam kisaran [0..1114111]. Anda masih bisa mengimbangi :) Itu karena UTF-8 berakhir di sana, sementara UTF-16 berlanjut.Brain-Flak , 33 byte
Termasuk +1 untuk
-c
Cobalah online!
sumber
Braingolf v0.6, 17 byte
Kuadratkan masing-masing nilai char lalu cetak.
-1 byte berkat solusi kuadrat Erik the Outgolfer
Braingolf v0.7, 6 byte [tidak bersaing]
Juga kuadrat setiap nilai lalu cetak, tetapi v0.7 memiliki
{}
loop "foreach"sumber
Mathematica, 48 byte
Penjelasan:
Menariknya dari dua opsi modulus kurang dari 1000 yang mengubah 96 karakter menjadi 96 nilai unik dengan modulus 978 dua nilai terendah adalah 7 kemudian 33. Untungnya kali oleh 4 mengubahnya menjadi 28 dan 132 yang keduanya hanya berada di luar rentang yang terlihat. Jika saya menggunakan modulus lain dari 784 maka saya perlu mengalikannya dengan 18 untuk memindahkan angka di luar rentang.
Kasus cobaan.
Catatan: backslash tambahan di sana sebagai karakter pelarian untuk
"
dan\
. Juga karakter 0x7E tampaknya tidak ingin menempel dengan benar.Keluaran:
Penggunaan
Hash
muncul karenaToCharacterCode
sangat lama. Namun hashing itu hampir sama mahal. Cara matematika mudah untuk melakukan ini adalah 49 byte:sumber
CJam ,
85 byteCobalah online!
Tambahkan 95 ke setiap codepoint.
sumber
Pyth, 6 byte
Coba di sini.
Lipat gandakan setiap codepoint dengan 4.
sumber
PowerShell,
3231 Bytes-1 Berkat neil,
99+
untuk4*
mengalikan 9 dengan masing-masing kode karakter dan mencetaknya kembali.
sumber
05AB1E , 4 byte
Cobalah online!
Kuadratkan setiap codepoint.
sumber
CJam , 4 byte
XOR masing-masing titik kode dengan -1 . Karakter CJam adalah 16 bit, jadi ini memetakan kode titik n ke titik kode 65535 - n .
Cobalah online!
sumber
Desimal , 37 byte
Penjelasan:
Cobalah online!
sumber
90D
) berakhir?Google Sheets, 68 byte
Saya ingin memposting ini untuk menunjukkan betapa canggungnya melakukan beberapa fungsi dasar di Sheets. Apakah Anda ingin melakukan operasi untuk setiap karakter di dalam sel dan mengeluarkan hasil gabungan? Anda berada di 42 byte bahkan sebelum Anda bertindak pada karakter tersebut.
Jika tidak, ini sama dengan solusi lain: kuadratkan titik kode masing-masing karakter.
sumber
Python 3,
4038 byteCobalah secara Online!
sumber
C, 42 byte
Diasumsikan lokal UTF-8. Input dikuadratkan.
Cobalah online!
sumber
Bersih , 25 byte
Fungsi parsial literal.
Cobalah online!
Secara realistis:
Pemahaman array tanpa kotak di atas array tanpa kotak dengan tipe yang sama (
{#Char} -> {#Char}
). Clean akan dapat menentukan bahwa keunikan dapat ditransfer (!u:{#Char} -> u:{#Char}
), dan ukurannya sama dengan ukuran input. Ini berarti bahwa jika Anda melewatkan a*String
, setiap karakter akan diperbarui secara destruktif dengan yang sesuai dalam output, yang berarti tidak ada alokasi memori atau gerakan yang dilakukan dan simpul grafik digunakan kembali sepenuhnya.Cobalah online!
sumber