Memasukkan
String berkode non-kosong yang terdiri dari karakter ASCII yang dapat dicetak (dalam kisaran 32-126), di mana beberapa huruf yang hilang telah diganti _
.
Keluaran
String yang diterjemahkan dengan panjang yang sama dengan semua huruf dalam huruf kecil, termasuk yang hilang.
Bagaimana?
Sunting: Seperti yang disebutkan oleh @Deusovi dalam komentar, ini adalah varian dari cipher Bacon .
- Kumpulkan semua huruf dalam string asli dan kelompokkan dengan 5. Huruf-huruf tambahan yang tidak cocok dengan kelompok penuh 5 diabaikan.
- Ubah setiap grup menjadi biner: huruf kecil = 0 , huruf besar = 1 . Ini mengarah ke daftar bilangan bulat.
- Gunakan setiap nilai N dalam daftar ini untuk menggantikan masing-masing
_
dalam string asli dengan huruf ke- N dari alfabet (0-diindeks), sesuai urutan penampilan.
Contoh: prOGraMMIng PuZZleS & cOde ____
prOGr --> 00110 --> 6 --> 7th letter = 'g'
aMMIn --> 01110 --> 14 --> 15th letter = 'o'
gPuZZ --> 01011 --> 11 --> 12th letter = 'l'
leScO --> 00101 --> 5 --> 6th letter = 'f'
Dengan mengganti huruf-huruf yang hilang dan mengubah semuanya kembali menjadi huruf kecil, string aslinya dibuka:
programming puzzles & code golf
Ini adalah output yang diharapkan.
Klarifikasi dan aturan
- Huruf-huruf yang hilang dijamin akan muncul di akhir string. Secara lebih formal: tidak akan pernah ada huruf setelah huruf pertama
_
dalam string input. Namun, mungkin ada karakter ASCII yang dapat dicetak lainnya seperti spasi dan tanda baca. - Input dijamin tidak mengandung huruf kapital yang tidak berguna : semua huruf kapital adalah bit yang diatur ke 1 yang diperlukan untuk memecahkan kode huruf yang hilang. Yang lainnya ada dalam huruf kecil.
- String input dijamin valid. Terutama:
- Itu akan selalu berisi cukup grup penuh 5 huruf untuk memecahkan kode garis bawah.
- Bilangan bulat biner-encoded dijamin berada di kisaran [0-25] .
- Mungkin tidak ada
_
sama sekali dalam string input, dalam hal ini Anda hanya perlu mengembalikan input. - Ini kode-golf , jadi jawaban tersingkat dalam byte menang!
Uji kasus
Input : hello!
Output: hello!
Input : helLO, worl_!
Output: hello, world!
Input : i aM yoUr faTh__.
Output: i am your father.
Input : prOGraMMIng PuZZleS & cOde ____
Output: programming puzzles & code golf
Input : Can YOu gUesS tHE ENd oF This ____?
Output: can you guess the end of this text?
Input : THe qUICk brown FOx JUMps oVEr the la__ ___.
Output: the quick brown fox jumps over the lazy dog.
Input : RoadS? wHERe we're goinG WE doN't need _____.
Output: roads? where we're going we don't need roads.
Input : thE greatESt Trick thE DeVIl EVer PUllEd wAs CONvInciNg tHe WorLD h_ ____'_ _____.
Output: the greatest trick the devil ever pulled was convincing the world he didn't exist.
Beberapa test case tambahan:
Input : BInar_
Output: binary
Input : 12 MonKey_
Output: 12 monkeys
Input : hyPerbolIZ__
Output: hyperbolized
Input : {[One Last Test ca__]}
Output: {[one last test case]}
_
dalam string input adalah sedikit kasus khusus.The input is guaranteed not to contain any useless capital letter
, jika tidak ada garis bawah juga tidak akan ada huruf kapital.[32-126]
. Saya telah menambahkan test case lain.Jawaban:
05AB1E , 18 byte
Kode:
Menggunakan penyandian 05AB1E . Cobalah online!
Penjelasan:
sumber
Python 2 , 113 byte
Cobalah online!
sumber
Perl 5
-pF -MList::Util=sum
, 75 byteCobalah online!
Penjelasan:
-pF
membaca sebaris input ke dalam variabel$_
dan, dibagi menjadi karakter, ke dalam array@F
.@a=grep!/\W|\d/,@F
set array@a
sama dengan anggota@F
yang tidak memenuhi regex\W|\d
.\W
tidak lain adalah huruf, angka, dan_
;\d
adalah angka. Begitu\W|\d
juga dengan huruf dan_
, dan@a
memiliki semua huruf dan_
karakter. Kami akan berakhir tidak pernah memeriksa_
karakter dalam@a
. (Perhatikan bahwa ini hanya berfungsi karena input dijamin ASCII.)map{a gt shift@a&&16/2**$_}0..4
melakukan hal berikut untuk 0 hingga 4: Ini menggeser elemen berikutnya@a
, memendekkannya, dan mengevaluasi apakaha
secara asciibetik lebih besar dari elemen itu (yaitu apakah elemen itu huruf besar). Jika demikian,&&
bukan hubung singkat, jadi kami mendapatkan 16 dibagi 2 untuk mendapatkan kekuatan dari nilai input (0 hingga 4). Kalau tidak&&
hubung pendek dan kami mendapatkan 0.map
mengembalikan daftar lima angkasum
, yang menambahkan mereka.a..z
, dan itulah yang kita dapatkan(a..z)[…]
.s!_!…!eg
mengkonversi setiap_
di$_
, pada gilirannya, surat yang tepat.$_=lc
mengkonversi$_
ke versi huruf kecil itu sendiri, dan-p
mencetaknya.sumber
J ,
6261 byteCobalah online!
sumber
Jelly ,
28 2726 byte-1 terima kasih kepada Erik the Outgolfer & dylnan
Bukan tantangan yang sangat ramah Jelly!
Tautan monadik yang menerima dan mengembalikan daftar karakter.
Cobalah online!
Bagaimana?
sumber
Retina ,
9190 byteCobalah online! Penjelasan:
Terjemahkan huruf kecil ke
a
dan huruf besar keA
, menghapus yang lainnya.Bagi
Aa
s menjadi kelompok 5.Konversi dari biner ke unary, perlakukan
A
sebagai 1 dana
0. Karena ada 5Aa
s awalnya, ada 5a
s yang tersisa, ditambah beberapaA
s tergantung pada posisi yang diinginkan dalam alfabet.Tambahkan yang terakhir
a
sesuai dengan jumlahA
s berikut .Tambahkan input asli.
Ganti
_
s dengan huruf yang diterjemahkan berikutnya.Hapus semua surat yang diterjemahkan.
Huruf kecil semuanya.
Retina 0.8.2 , 117 byte
Cobalah online! Penjelasan:
Gandakan input.
Huruf kecil salinan pertama.
Terjemahkan huruf kecil ke
a
dalam salinan kedua.Terjemahkan huruf besar ke
A
. Ini harus ada dalam salinan kedua karena salinan pertama sudah lebih kecil.Hapus semua yang lain di salinan kedua.
Bagi salinan kedua (sekarang hanya
Aa
s) ke dalam kelompok-kelompok 5.Dekode huruf-hurufnya dan masukkan seperti sebelumnya.
sumber
APL (Dyalog Unicode) , 46 byte SBCS
Lambda Anonim, Asumsikan
⎕IO
(Indeks Asal) menjadi0
.Cobalah online!
{
...⋄
...}
fungsi dua pernyataan;⍵
adalah argumennya,⋄
pisahkan pernyataan⊢
argumen (fungsi no-op) di'_'=
mana sama dengan garis bawah (yaitu fungsi pemetaan Boolean)_←
menetapkan fungsi itu_
A[
...]@_⍵
menempatkan karakter berikutA
di posisi garis bawah dalam argumen⎕A
huruf besar A lphabetA←
menetapkan bahwa untukA
819⌶
huruf kecil itu ( 819 ≈ BIg , dengan tidak berarti argumen kiri tidak besar, yaitu huruf kecil)A,
tambahkan alfabet huruf besar; ini memberi kita semua surat⍵∩
persimpangan argumen dan itu; hanya huruf-huruf dari argumenA∊⍨
mana yang merupakan anggota dari huruf besar; huruf besar bit(
...)5⍴
r eshape bahwa untuk nomor berikut baris, dan lima kolom:_⍵
topeng garis bawah dalam argumen+/
jumlah itu; jumlah garis bawah⍉
transpos (untuk memperlakukan setiap baris sebagai angka daripada sebagai posisi bit)2⊥
dievaluasi sebagai basis-2819⌶
huruf kecil semuanyasumber
Scala , 189 byte
Cobalah online!
Penjelasan:
sumber
JavaScript (Node.js) ,
125124 byteCobalah online!
sumber
Jelly , 26 byte
Cobalah online!
Pendekatan yang berbeda dari Jonathan Allan's. EDIT: Jadi, saya, uh, rupanya memikirkan pengurangan byte yang sama dengan Jonathan Allan, jadi tidak ada salahnya menyebutkan namanya lagi.
sumber
CJam , 43 byte
Cobalah online!
sumber
Bersih ,
180... 150 byteCobalah online!
Menentukan fungsi
$ :: [Char] -> [Char]
dengan@ :: [Char] [Char] -> [Char]
sebagai penolong untuk mengganti garis bawah, dan? :: [Char] -> [Char]
sebagai penolong untuk menghasilkan karakter pengganti.sumber
i<-:""
kerjanya? Apakah karakter secara implisit dikonversi menjadi angka saat menjumlahkan atau menambahkannya?JavaScript (Node.js) , 100 byte
Cobalah online!
Berkat @Arnauld, menghemat 2 byte.
sumber
/[a-z]/gi
sekarang.R ,
153135113 byteCobalah online!
Mengeluarkan beberapa peringatan dengan penggunaan
matrix
tapi itu seharusnya tidak mempengaruhi hasilnya. Juga masalah peringatan sebagai[<-
tugas akan menghapus objek yang ditugaskan secara eksternal secara default.40 (!) Byte turun berkat perbaikan JayCe
sumber
,length(L)%/%5
[<-
akan membuang elemen melewati panjang indeks ...intToUtf8
C (gcc) ,
111109101100 byteSunting: Menambahkan huruf kecil per komentar FrownyFrog; terima kasih kepada Lynn, Christoph dan user5329483 untuk saran mereka!
Cobalah online!
sumber
i+=i+(*s<97)
.j
dengan memasukkan sedikit markeri
dan menulis ulang yang kedua sebagaifor(i=1;i<32;s++)
. Dan ganti 32 ekstra di luar. Sebagai seorang pemula di sini saya menghitung cadangan tujuh byte.for(i=3;i<96;s++)
membawa 65 ke angka satu digit, alias1
.Go,
219217192210209156 bytesDisimpan 25 byte berkat @Lynn! Disimpan 53 byte berkat @ovs!
Harus kehilangan 18 byte karena bug dengan string tanpa garis bawah :(
Cobalah online!
sumber
Stax , 22 byte
Jalankan dan debug itu
Pendekatan umum adalah penggantian ekspresi reguler
"_"
menggunakan fungsi callback yang mengiris huruf input untuk menghitung setiap karakter penggantian.Jalankan yang ini
sumber
Merah , 247 byte
Cobalah online!
Lebih mudah dibaca:
sumber
Java 10, 186 byte
Cobalah online.
Penjelasan:
sumber
Ruby ,
107106103 byteCobalah online!
sumber
Japt, 25 byte
Cobalah
Penjelasan
sumber
Pyth, 36 byte
Coba di sini
Penjelasan
sumber
Python 3.5 , 296 byte
Cobalah online
Golf kode pertama :)
(Saya tahu itu tidak kecil dalam byte, saya hanya bersenang-senang membuat kode 1 baris)
Berikut penjelasannya:
Input pengguna
Menemukan indeks _ pertama dalam string dan menyimpannya
strip string semua karakter non-alpha
Pisahkan string alpha ke dalam array dengan setiap elemen yang terdiri dari 5 karakter
Ex. ['THUQU', 'ICkbr', 'ownFO', 'xJUMp', 'soVEr', 'thela']
Kemudian, ubah karakter huruf kecil menjadi 0 dan karakter huruf besar menjadi 1
Ex. ['11001', '11000', '00011', '01110', '00110', '00000']
dan mengonversi string biner ke integer, menambahkan 65 dan mengubahnya menjadi karakter
Ex. ['z', 'y', 'd', 'o', 'g', 'a']
menemukan semua karakter setelah _ pertama dan mendorong mereka ke dalam array z di lokasi masing-masing (didefinisikan di atas)
Ex. ['z', 'y', '', 'd', 'o', 'g', '.', 'a']
pisahkan string kami menjadi daftar karakter
iris string kami dari _ pertama ke akhir daftar dan ganti dengan array z. Saya juga harus mengiris array z dengan panjang string split dari _ pertama sampai akhir karena saya mendapat karakter tambahan dalam contoh anjing malas ("a" di akhir contoh di atas)
* cetak jawabannya *
sumber
o.islower()
danelse
, dan saya pikir'1'
danfor
. Juga, Anda dapat mengubahif d!="_"
keif"_"!=d
, tapi komentar di atas sudah melakukan itu.Haskell , 165 byte
Cobalah online! Contoh penggunaan:
g"" "BInar_"
hasil"binary"
.sumber
PowerShell , 121 byte
Cobalah online!
Kurang bermain golf:
sumber
Perl 5
-p
, 78 byteCobalah online!
sumber