Menguraikan Katak Neurotik
Sekarang, Puzzling.SE akhirnya telah memecahkan sandi saya yang terobsesi dengan amfibi , mari kita menulis sebuah program atau fungsi untuk mendekripsi!
(Jika Anda ingin melihat puzzle sebelum merusaknya, klik tautan di atas sekarang.)
Cara kerja sandi
Dalam neurotik Katak O ught Untuk Rel sebuah x di M ud Baths ( "neurotik Katak" untuk pendek), setiap huruf dienkripsi sebagai satu atau dua kata:
- Panjang kata yang tidak dicetak miring mewakili huruf.
neurotic
=> 8 huruf =>H
frogs
=> 5 huruf =>E
perpendicular
=> 13 huruf =M
- Kata yang berisi huruf miring mengubah kata berikut, menambahkan 10 jika kata yang dicetak miring itu ganjil atau 20 jika kata yang dicetak miring itu panjangnya bahkan. Setiap atau semua kata mungkin dicetak miring. Kata yang dicetak miring selalu diikuti oleh kata yang tidak dicetak miring.
*o*ught to
=> aneh, 2 => 12 =>L
lo*u*nging calms
=> datar, 5 => 25 =>Y
Setiap kata plaintext sesuai dengan kalimat ciphertext, dan setiap kalimat plaintext sesuai dengan paragraf ciphertext.
Masukkan format
Program atau fungsi Anda harus memasukkan pesan dalam Neurotic Frogs, yang diformat dalam Markdown. Input hanya akan terdiri dari ASCII yang dapat dicetak dan baris baru.
- Kata - kata adalah kumpulan karakter yang cocok dengan regex
[A-Za-z0-9']
.- Angka dan huruf sama-sama diperhitungkan dalam panjang kata.
QB64
mewakiliD
. - CATATAN: Apostrof tidak dihitung terhadap panjang kata.
Isn't
mewakiliD
, bukanE
.
- Angka dan huruf sama-sama diperhitungkan dalam panjang kata.
- Huruf yang dicetak miring dibungkus dengan sepasang tanda bintang (
*letters*
).- Satu atau lebih huruf berurutan dapat dicetak miring, hingga seluruh kata (
masseus*es*
,*all*
); beberapa huruf yang tidak berurutan dalam sebuah kata juga dapat dicetak miring (g*e*n*e*rates
). - Miring tidak pernah mencakup banyak kata, tidak pernah menyertakan tanda baca, dan tidak pernah menyertakan tanda kutip.
- Tanda bintang yang tidak berpasangan dan beberapa tanda bintang yang berdekatan tidak akan pernah terjadi.
- Satu atau lebih huruf berurutan dapat dicetak miring, hingga seluruh kata (
- Tanda baca adalah salah satu karakter berikut:
.,?!:;-()"
.- Kata-kata dalam kalimat dipisahkan oleh satu atau lebih karakter tanda baca dan / atau satu spasi. Contoh:
*all* welcomed
,toad*s*, newts
,Ever*y*one--frogs
,cap... bliss
,they're (I
- Kalimat diakhiri dengan satu atau lebih karakter tanda baca dan dipisahkan oleh spasi ganda:
Th*e* Montgomery A*m*phibian Salon! Come luxuriate today!
- Paragraf dipisahkan oleh satu baris baru. (Kalimat terakhir paragraf masih memiliki satu atau lebih karakter tanda baca di akhir.)
- Kata-kata dalam kalimat dipisahkan oleh satu atau lebih karakter tanda baca dan / atau satu spasi. Contoh:
Karakter lain tidak akan muncul dalam input dan tidak perlu ditangani.
Kode Anda mungkin, atas kebijakan Anda, mengharapkan input memiliki satu baris tambahan.
Format output
Hasil mendekripsi input akan menjadi satu atau lebih kalimat. Letters of plaintext dapat berupa kombinasi huruf besar dan kecil. Kata-kata dalam kalimat harus dipisahkan oleh spasi tunggal. Kalimat harus diakhiri dengan titik ( .
) dan dipisahkan oleh satu spasi. Anda dapat menampilkan spasi tambahan setelah kalimat terakhir. Output Anda semua akan berada di satu baris, tetapi Anda dapat menampilkan baris tambahan.
Detail lain-lain
Kode Anda dapat menggunakan metode input dan output standar apa saja. Itu harus menerima input sebagai string multiline, bukan daftar atau struktur data lainnya, dan itu harus menampilkan string.
Kode terpendek dalam byte menang!
Uji kasus
-->
Neurotic Frogs *O*ught To Rel*a*x In *M*ud Baths!
<--
HELLO.
-->
Business standards all*o*w only *adult* amphibians.
<--
HINT.
-->
Rejoice, *a*ll frogs an*d* toads also! Montgomery Sal*o*n opens up! Ha*pp*y throng fill*s* street ecstatically!
<--
GOOD JOB PPL.
-->
I like 3.1415926535897.
IM*O*, it's a *b*la*st*, yeah!
<--
ADAM. MAN.
-->
*I*, happily, *th*anks 2 u *e*ditin*g* specific wor*ding*--clarifying a *bit*--betterment :D!
<--
QUARTATA.
-->
Perpendicular l*ou*nging calms. *A* frog, a m*u*d cap... bliss! Wallowing g*e*n*e*rates happiness. Amphibian sp*a* isn't expensive--seventy d*o*llars--cheap! That'*s* not *a* large e*x*pens*e* from an*y* discerning fr*o*g's money, unlik*e* Super 8.
Ever*y*one--frogs, toad*s*, newts, *a*nd salamanders! G*e*t a wonderful shiat*s*u, or recei*v*e an other kind. Masseus*es* are her*e* today! Invite a fianc*e*e, supervisor, roommate, niece: *all* welcomed!
Y*o*u simply ne*v*er believed these p*o*ssibilitie*s*; they're (I *swear*) absolute truth! Th*e* Montgomery A*m*phibian Salon! Come luxuriate today!
<--
MY NAME IS INIGO MONTOYA. YOU KILLED MY FATHER. PREPARE TO DIE.
sumber
Jawaban:
Perl, 72 byte
Menghitung shebang sebagai satu, input diambil dari stdin.
Contoh Penggunaan
sumber
JavaScript (ES6),
172169157150 byteDisimpan 10 byte berkat @Neil
Mungkin bisa lebih ditingkatkan. Output di semua huruf kecil.
sumber
i=0
ketoString
.x=>x.replace(/([\w*']+)[^\w\n*' ]* ?( ?)/g,(_,y,z)=>/\*/.test(y,l=y.replace(/'/g ,"").length)?(i=l%2||2,""):l+i*10+9).toString(36,i=0)+z,i=0).replace(/\n|$/g,". ")
.replace
dan hanya menggunakan.match
disimpan 12 byte lagi.Python 2,
238221218214207205 byteMenggunakan banyak regex untuk melakukan pemrosesan. Kami mengubah ruang ganda menjadi
~
dan menggunakannya untuk memprosesnya.~
dan\n
ditangani secara khusus.Keuntungan karakter terbesar berasal dari preprocessing input di
for
baris; ini pasti bisa bermain golf lebih lanjut.Ide itu! (semua kasus uji)
Disimpan 7 byte berkat DLosc!
sumber
Pip ,
6564 byteSkornya adalah 62 byte kode + 2 untuk
-rs
bendera.Cobalah online!
Penjelasan
The
-r
bendera membaca semua lini stdin dan toko daftar mereka dalamg
. Itu-s
bendera menetapkan format output dari daftar ruang yang dipisahkan.Cara termudah untuk membaca kode ini adalah dari luar di:
sumber
Python 2.7,
390342341339335 byte:Mengambil input dalam format:
F('''Multi or Single-lined String''')
Dapat bermain golf lebih banyak, yang akan saya lakukan setiap kali saya mendapat kesempatan.
Repl.it dengan Semua Kasing Uji!
Penjelasan:
Menggunakan kekuatan luar biasa dari ekspresi reguler Python bawaan untuk menguraikan input. Ini adalah proses mendasar yang dilalui fungsi untuk setiap input:
Pertama, semua
--
diganti dengan satu ruang, dan setiap tanda kutip dihapus. Kemudian, semua kata yang mengandung komponen yang dicetak miring dan kata yang melanjutkannya dicocokkan dalam satu string dan diganti dengan10 + len(second word)
jumlah berturut-turuta
jika panjang kata pertamaodd
, dan20 + len(second word)
berturut - turuta
sebaliknya. Ini menggunakan ekspresi reguler berikut:[^\w\s*]*\w*\*\w+\*.*?(?=\s) \w+
Misalnya, jika kita memiliki kalimat
Perpendicular l*ou*nging calms.
,l*ou*nging calms
akan diganti denganaaaaaaaaaaaaaaaaaaaaaaaaa
, atau 25a
detik, karenal*ou*nging
memiliki jumlah karakter genap dancalms
520+5=25
..Sekarang, input yang baru dimodifikasi dibagi pada setiap tanda baca diikuti oleh baris baru (
\n
) untuk mendapatkan paragraf, maka setiap paragraf dibagi pada setiap tanda baca diikuti oleh 2 spasi untuk mendapatkan kalimat, dan akhirnya, setiap kalimat dibagi menjadi kata bersama tanda baca apa pun termasuk spasi. Kemudian, untuk setiap kata (termasuk proses berturut-turuta
), kami menambahkan ke stringW
huruf yang sesuai dengan titik kode unicode64
(titik kode unicode karakter sebelumnyaA
, yaitu@
) ditambahlen(word)
. Kami kemudian menambahkan satu spasi untukW
sekali semua kata dari kalimat telah habis, dan ketika semua kalimat dalam paragraf habis, kami menambahkan.
diikuti oleh satu ruang.Akhirnya, setelah seluruh input telah melalui,
W
adalah outputstdout
sebagai pesan yang diuraikan.sumber
re
, gunakansub
alih-alihstr.replace
. Saran bermain golf yang lebih umum: mungkin lebih efisien untuk memperlakukan semua yang bukan kata atau*
tanda baca. Menghemat kelas karakter besar besar.PHP, 196 Bytes
Jika saya dapat berasumsi bahwa hanya ada satu Apostrof di tengah kata 194 Bytes
sumber
%0A
sebagai fungsirawurlencode("\n")
. Saya lebih suka dalam hal ini formulir dengan textarea untuk input dan situs html saya membuatnya secara otomatis untuk menyandikan string<?
. Satu kesalahan termasuk$_GET[s]
berfungsi tetapi yang benar adalah$_GET["s"]
dan lebih baik untuk mendeklarasikan dan menginisialisasi variabel$p=0;
sebelum loop. Sekarang pertanyaan saya pada Anda adalah: Dapatkah saya menganggap bahwa dalam satu kata hanya satu tanda kutip di tengah kata?<?php
bekerja.<?
dalam kenyataan. Saya menggunakan tag pendek hanya di posting saya di sini. Sekarang saya tahu bahwa itu bisa ulang di halaman kosong.PHP,
231226228 bytesebagai permulaan
Simpan ke file, rund
php <scriptpath> <text>
. Kabur baris baru dalam teks untuk membuatnya bekerja dalam shell.sumber
$argv[1]
, tetapi saya tidak tahu bagaimana pendekatan itu akan bekerja ketika input berisi baris baru. Saya mencoba"Neurotic Frogs *O*ught To Re*a*x In *M*ud Baths!"
sebagai argumen baris perintah dan mendapatkanIFHCHCFF.
untuk keluaran (sertaUndefined variable: d
peringatan).<?
, menyimpannya ke file dan memanggilnya denganphp <filename> <string>
. Saya mungkin harus menambahkan 2 ke jumlah byte.<?
, Anda juga dapat mengakhiri dengan?>.
, untuk keuntungan bersih untuk 1. FWIW, saya dapatkanIFHCMFF.
untuk test case pertama (menggunakan PHP 5.5.21 64-bit, VC14). Menggunakan$argn
dengan-F
juga bisa menjadi pilihan.php <filename> <string>
mungkin ketika<string>
bisa berisi baris baru.