Tantangan
Mengingat non-string kosong S dari panjang L yang terdiri sepenuhnya dari karakter ASCII yang dapat dicetak, string output lain dari panjang L yang seluruhnya terdiri dari karakter ASCII yang dapat dicetak, namun tidak sama untuk S .
Untuk keperluan tantangan ini, char ASCII yang dapat dicetak adalah di antara U + 0020 dan U + 007E, inklusif; yaitu, dari
(spasi) ke ~
(tilde). Baris dan tab baru tidak termasuk.
Sebagai contoh, diberikan "abcde"
, beberapa output yang valid dapat berupa:
"11111"
"abcdf"
"edcba"
Tetapi ini tidak valid:
"abcde"
"bcde"
"abcde0"
Uji kasus
"asdf"
"1111"
" "
"~~~~~"
"abcba"
"1"
" "
"~"
" ~"
"~ "
" 0"
"!@#$%^&*()ABCDEFGhijklmnop1234567890"
" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
Aturan
- Anda dapat berasumsi bahwa input seluruhnya terdiri dari karakter ASCII yang dapat dicetak.
- Anda mungkin tidak berasumsi bahwa input tersebut tidak mengandung semua 95 karakter yang dapat dicetak.
- Anda dapat menganggap input berisi setidaknya satu karakter dan panjangnya kurang dari 256 karakter.
- Output juga harus seluruhnya terdiri dari karakter ASCII yang dapat dicetak. Anda tidak dapat, misalnya, menampilkan byte \ x7F untuk input
"~"
. - Output harus berbeda dari input dengan probabilitas 1; yaitu, Anda dapat menghasilkan string acak hingga satu berbeda dari input, tetapi Anda tidak bisa hanya mengeluarkan karakter acak L dan berharap itu berbeda.
- Baris baru tidak diizinkan dalam output, tetapi Anda dapat menampilkan satu baris tambahan yang tidak dihitung ke arah string.
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek dalam byte di setiap bahasa menang.
Jawaban:
Python 2 , 21 byte
Cobalah online!
Mengambil representasi string dari string input dan memotongnya ke panjang string input. Untuk string tipikal, ini menempatkannya dalam
'
tanda kutip dan memotong akhirnya:Perhatikan bahwa string baru dimulai dengan
'
. Mari kita tunjukkan bahwa output selalu berbeda dari input.Jika input tidak
'
, maka output dimulai dengan'
dan input tidak.Jika input berisi
'
dan tetapi tidak"
, maka Python akan digunakan"
untuk tanda kutip luar, memberikan karakter pertama"
yang tidak ada dalam string input.Jika input memiliki keduanya
'
dan"
, maka tanda kutip luar adalah'
dan masing-masing'
diloloskan sebagai\'
. Di mana pun yang pertama"
muncul dalam input, itu bergeser ke kanan dengan inisial'
dalam output dan dengan kemungkinan melarikan diri. Ini berarti tidak dapat cocok dengan"
posisi yang sesuai di output.Akhirnya, perhatikan bahwa mengutip input dan mungkin melarikan diri karakter selalu meningkatkan jumlah karakter, sehingga memotong output membuatnya sama dengan input.
Perhatikan bahwa penting bagi Python untuk beralih secara adaptif
"
dalam kasus kedua. Jika tidak melakukannya, maka akan gagal pada input tiga karakter'\'
. Atau, awalan yang lebih panjang dari string tampilkan perbaikan menggunakan'
. Jadi, metode ini tidak akan berfungsi untuk sebagian besar bahasa.sumber
len(s)
bukan-2
?'
dan"
, lebih dari 2 karakter akan ditambahkan karena tanda kutip perlu diloloskan.[2:]
bukannya[:len(s)]
untuk turun ke 16 karakter.05AB1E , 3 byte
Cobalah online!
sumber
JavaScript (ES6),
3733362926182119 byteCobalah online!
-4 byte berkat ETHProductions
-7 + -5 + -2 bytes berkat CalculatorFeline
-3 byte terima kasih kepada Rick Hitchcock
Memindahkan karakter pertama ke akhir dan menetapkannya ke 0 jika itu numerik dan bukan nol, dan 1 sebaliknya.
Penjelasan
Bukti
Karena char kedua menjadi yang pertama, char ketiga menjadi yang kedua, dll. Semua karakter harus identik. Sisa karakter terakhir hanya bisa menjadi 0 atau 1, jadi karakter yang diulang harus 0 atau 1. Tetapi string 0s mana pun menghasilkan 1 di akhir, dan sebaliknya; oleh karena itu, tidak mungkin untuk membuat input yang sama dengan outputnya. -Produk ETET
Lihat hasil edit untuk versi dan penjelasan sebelumnya.
sumber
Jelly , 3 byte
Output adalah string karakter digit, koma dan hypen-minus, yang karakter pertamanya akan berbeda dari karakter pertama dari string input.
Cobalah online!
Bagaimana itu bekerja
sumber
Haskell , 20 byte
Cobalah online!
Konversi ke string
F
danT
. Yang penting adalah bahwa karakterF
danT
mengkonversi satu sama lain. Ini dilakukan dengan memeriksa apakah karakternya kurang dariM
untuk mendapatkanTrue
atauFalse
, kemudian mengambil karakter pertama dari representasi string.Haskell , 23 byte
Cobalah online
Mengganti setiap karakter dengan
~
, kecuali~
menjadi spasi.sumber
q '~'
? Mengapa itu tidak bisa dihapus?'
sebagai karakter dalam pengidentifikasi, sehinggaq'~'=' '
akan diuraikan sebagaiq' ~ '=' '
(melaporkan kesalahan leksikal karena yang terakhir'
tidak tertandingi.)Ruang putih, 59 byte
Representasi yang terlihat
Apa fungsinya:
Untuk setiap karakter yang dibaca itu mencetak spasi, kecuali jika spasi, lalu mencetak @.
Membongkar:
sumber
SSSTSSSSSN (push 32)
toSSSTSSTN (push 9)
dan theTSSS (add)
toTSSN (multiply)
. Ini akan mencetak tab untuk setiap karakter dengan nilai unicode di atas 9, dan aQ
(9 * 9 = 81) untuk setiap karakter dengan nilai unicode dari0..9
. Cobalah online 57 byte mentah , atau Coba online dengan highlight dan penjelasan tambahanMATL ,
65 byteCobalah online!
Penjelasan
sumber
l'0f=
(jika itu sesuai dengan apa yang saya pikirkan)Haskell , 19 byte
Fungsi anonim yang mengambil dan mengembalikan a
String
. Gunakan sebagai(map$(!!1).show.succ) "1111"
.Cobalah online! (Menggunakan harness pengujian @ xnor.)
'
kutipan awal .&
dan~
, yang justru memberi\
, karena penerusnya'
dan\DEL
lolos dalam literal karakter.sumber
head
dapat digunakan sebagai pengganti(!!1)
byte tambahanhead
ini(!!0)
, tidak(!!1)
. Itu akan gagal pada karakter'
.05AB1E , 5 byte
Cobalah online!
Penjelasan
Mengganti setiap char dengan char ascii yang dapat dicetak berikutnya, membungkus dari tilde ke angkasa.
sumber
V , 7 byte
Cobalah online! atau Verifikasi semua kasus uji!
Bagaimana cara kerjanya?
Pertimbangkan semua string yang terdiri dari ASCII yang dapat dicetak. Setiap string harus 1) Berisi karakter alfabet, atau 2) Tidak mengandung karakter alfabet.
Jadi cara program ini bekerja adalah dengan terlebih dahulu mengubah satu karakter non-alfabet menjadi
'a'
, dan kemudian melakukan ROT13 pada string input.sumber
9
sendiri, di mana penambahan itu menambahkan karakter lain ke stringC (gcc) , 22 byte
Mengambil penunjuk string dan memoderasi karakter pertama di tempatnya.
Cobalah online!
sumber
*s=159-*s
. Selalu mengubah bit terakhir, oleh karena itu tidak pernah memberikan karakter yang sama. Perhatikan bahwa159 = ' ' + '~'
~
salah.C (gcc) , 20 byte
Melihat jawaban Dennis, memikirkan perbaikan penting 2 byte.
Cobalah online! (Footer oleh Dennis.)
Seperti aslinya, memodifikasi karakter pertama dari string di tempat, tetapi xors dengan nilainya dibagi dengan 3 (angka terkecil yang berfungsi. 2 gagal pada karakter tunggal
'U'
yang memberikan 127, tidak dapat dicetak.)sumber
Python 2 , 25 byte
Cobalah online!
Anders Kaseorg menyimpan byte dengan mengekstraksi karakter pertama dari
True
atauFalse
.sumber
'?'
ke 2 digit kode sandi, tetapi Python bukan salah satu dari bahasa di mana Anda bisa melakukan itu :(lambda s:`+(s<'1')`+s[1:]
ataulambda s:`s<'T'`[0]+s[1:]
Haskell,
3026 byteCobalah online!
Mengganti setiap char dengan pendahulunya dan space dengan tilde.
sumber
Oktaf ,
1918 byteCobalah online!
Penjelasan:
sumber
CJam , 5 byte
Cobalah online!
Mengkonversi karakter terakhir ke titik kode dan mengambil modulo 10. Ini jelas berbeda untuk karakter non-digit di posisi terakhir. Tetapi digit dimulai pada titik kode 48, jadi mengambil mod 10 akan menggeser mereka secara siklis dan karenanya karakter terakhir selalu berubah.
sumber
Retina ,
106 byte4 byte golf berkat @Neil
Cobalah online!
Ini mentransliterasikan
ke
~
,!
ke,
"
ke!
, ...,~
ke}
.sumber
Japt , 4 byte
Cobalah online!
Penjelasan:
sumber
Cubix , 10 byte
Cobalah online! atau Tonton saja!
Untuk setiap karakter, cetak
1
jika karakter tersebut memiliki titik kode genap,2
jika tidak;1
memiliki titik kode ganjil dan2
genap, sehingga output tidak akan pernah sama dengan input.Penjelasan
Kode ini sesuai dengan jaring kubus berikut:
IP (penunjuk instruksi) dimulai di sudut kiri atas wajah paling kiri, menuju ke timur. Ini mengikuti serangkaian instruksi ini:
sumber
Alice , 9 byte
Cobalah online!
Penjelasan
Ide itu diambil dari pengajuan CJam Martin Ender. Karakter pertama diambil sebagai titik kode, dikurangi mod 10, dan dipindahkan ke akhir output. Karena tepat satu karakter diubah, permutasi karakter tidak dapat menghasilkan string yang sama kembali.
sumber
t
untuk mod 10 benar-benar pintar, bagus. :)Pushy , 1 byte
Cobalah online!
Ini mengubah string yang diberikan ke daftar kode karakter ASCII, mengindeksnya (pengindeksan modular) ke dalam alfabet huruf besar, kemudian mencetak hasilnya. Pada dasarnya, setiap karakter
n
dipetakan kechr(ord(n) % 26 + 65)
. Anda dapat menggunakan program ini untuk melihat cara kerja pemetaan.Hasil:
n
sehinggachr(ord(n) % 26 + 65) == n
, seperti untuk ini benar harus ada bilangan bulatx
sehingga26x = 65
, yang tidak ada solusi.1 byte
Cobalah online!
Jawaban ini persis sama, kecuali bahwa ia memetakan ke huruf kecil daripada karakter huruf besar . Ini masih berlaku karena tidak ada kemungkinan karakter masukan
n
sehinggachr(ord(n) % 26 + 97) == n
.sumber
Brain-Flak , 53 byte
Termasuk +1 untuk
-c
Ini akan mengurangi karakter pertama kecuali jika itu adalah spasi, dalam hal itu akan menambah karakter pertama.
Cobalah online!
sumber
Jelly , 4 byte
Menghasilkan string digit. Karakter output tidak akan sama dengan karakter input yang sesuai.
Cobalah online!
Bagaimana itu bekerja
sumber
Bash + coreutils, 13
Menerjemahkan karakter
ke
~
(0x20 - 0x7e) dengan~
, kemudianke
}
(0x7e, 0x20 - 0x7d).Cobalah online .
sumber
PHP,
3027Mengubah setiap arang sama dengan arang pertama dengan arang yang memiliki bit paling signifikan terbalik.
sumber
~
berfungsi, menghasilkan1
.!$a
atau~$a
bekerja?!$a
berubah"12"
menjadi"12"
karenafalse
dikonversi ke string kosong sehingga tidak ada yang diganti dan~$a
mengubah semuanya menjadi tidak dapat dicetak karena~"12"
tidak mengkonversi ke int terlebih dahulu tetapi secara harfiah membalik semua bit dalam string.Ruby , 20 + 1 = 21 byte
Menggunakan
-p
bendera.Cobalah online!
Mengganti karakter pertama dalam input dengan a
0
jika itu1
, atau1
sebaliknya.sumber
Brachylog , 9 byte
Cobalah online!
Penjelasan
Ini menggantikan semua karakter dengan spasi, kecuali spasi yang digantikannya
"0"
.sumber
PHP <7.1, 31 Bytes
Cobalah online!
sumber
A non-numeric value encountered
. Dan Anda bisa menggunakannya~
sebagai gantinyaa&
.Golfscript, 3 byte
Cobalah online!
Ambil nilai ASCII nilai modulo 5 karakter terakhir, dan ganti karakter terakhir dengan hasilnya. Ini jelas bekerja untuk karakter non-digit, tetapi jika karakter terakhir adalah digit, itu juga berubah ("0" mod 5 = 3, "1" mod 5 = 4, dll).
Ini juga akan bekerja dengan 7 atau 9 sambil tetap memiliki panjang yang sama.
Juga, yay! Saya punya solusi Golfscript dan solusi terbaik di sini!
sumber
Funky ,
2622 byteMenghitung
~a
yang bukan digit akan mengembalikan NaN. Kemudian1&
batasi untuk 0 atau 1, untuk digit 0, ini akan menjadi1
, dan untuk1
ini akan menjadi0
. Jadi string ini selalu unik.Cobalah online!
sumber