Keep Talking and Nobody Explodes adalah gim multipemain lokal di mana satu pemain memiliki kendali atas "bom" virtual, dan harus dipandu oleh pemain lain, "pakar", yang memiliki akses ke manual defusal bom. Salah satu modul yang akan dilucuti dalam gim ini adalah modul keypad, yang akan kita hadapi dalam tantangan ini.
Tugas
Input akan mulai dengan satu baris karakter ASCII yang dapat dicetak kecuali spasi (0x21 hingga 0x7E). Ini mewakili tombol keypad yang terlihat oleh Anda.
Beberapa baris berikutnya akan mewakili "kunci" - hanya satu baris yang akan berisi semua karakter dari baris pertama, tidak harus berurutan. Tugas Anda adalah untuk mengeluarkan karakter keypad, sesuai urutan garis kunci yang cocok.
Misalnya, jika inputnya adalah
5~Fy
HrD7K!#}
Ui%^fHnF
)Tf;y~I5
~Fi(&5gy
,'Xd#5fZ
maka tombol keypad yang 5
, ~
, F
dan y
. Hanya baris kunci ke-4 yang ~Fi(&5gy
berisi semua karakter ini, jadi kami mengeluarkan karakter tombol sesuai urutan kemunculannya, yaitu ~F5y
.
Aturan dan klarifikasi
- Input harus berupa string multiline tunggal, dengan tombol keypad dan garis tombol pada garis yang terpisah.
- Hanya akan ada satu baris kunci yang berisi semua karakter keypad.
- Setiap garis, yaitu garis keypad awal dan garis tombol berikut, tidak akan memiliki karakter duplikat.
- Berbeda dengan gim, Anda tidak boleh berasumsi tentang jumlah karakter papan tombol, panjang setiap garis tombol atau jumlah garis tombol. Namun, semua jalur utama dijamin memiliki panjang yang sama.
- Output mungkin berisi satu baris tambahan opsional. Demikian pula, Anda dapat mengasumsikan cara lain tentang jalur tambahan opsional di input, tetapi harap tentukan dalam jawaban Anda jika Anda memerlukan asumsi.
- Walaupun ini sudah menjadi praktik umum , saya akan menyatakan secara eksplisit: mengakhiri dengan kesalahan tidak masalah untuk tantangan ini, selama output STDOUT benar (jika ini adalah bentuk output yang Anda pilih). Semoga ini akan membuat input penanganan lebih mudah.
Uji kasus
7
4?j01C3"ch
KP.OG>QB)[
z#)Kn"I2&.
]#,D|sBFy5
Qzj*+~7DLP
Output: 7
. Hanya baris terakhir yang berisi a 7
.
0b~
Ob+hy{M|?;>=dtszPAR5
*8rCfsw|3O9.7Yv^x>Hq
$ip.V@n}|La:TbIt^AOF
jZ[Ec4s0|%b*$id',~J6
z*#b}-x$Ua&!O2;['T+?
NVj_X8rlhxfnS\.z}];c
bykscf.w^dnWj+}-*2g_
VP`AJH|&j5Yqmw/"9IMc
Output : 0b~
. Baris kunci 4 sudah berisi karakter dalam urutan yang benar.
MTuz
bIAr>1ZUK`s9c[tyO]~W
oMGIi/H&V"BeNLua%El=
j*uYbplT:~);BM|_mPZt
Q}z5TC@=6pgr<[&uJnM%
YOA(F~_nH6T{%B7[\u#5
y&t"8zQn{wo5[Idu4g:?
[0tZG"-fm!]/|nqk,_2h
dA&C.+(byo6{7,?I}D@w
Output : zTuM
. Baris kunci adalah baris ke-4, meskipun baris kunci ke-3 nyaris gagal.
o@nj<G1
f]?-<I6h2vS*%l=:}c8>LK5rMdyeon,;sE[@m(73
ibhp+2Hq6yKzIf_Zo}EO3-[*0/e&Fvd]wQU=|%`C
;}>d'cg~CPtQG&%L\)MUl419bkTZ7@]:[*H"RyYj
L^<:zXJ#kj$EFlwN%B`Dd,Cs?]xRZ*K9-uQ.@&f+
i1v'7:90R-l}FMxj`,DTWK+(n32Z4Vs[p@%*eS!d
B|^Ti/ZG$}ufL9*wE[AVt]P7CrX-)2JpD<sYxd6O
ex.$4#KarS^j+'_!B"]H[\83:(DCXUgI*Lct?qAR
^GXQoy*KW&v}n']Em~\N9)fxP(qC=7#4sRdcD6%5
;inr[&$1j_!F~@pzo#blv]}<'|fRds6OW%tEg"G2
e;0T#gfo^+!:xHDN&4V=In?AwhEv$2Fd~ZLz_\81
Output : n1j@o<G
. Baris kunci adalah baris terakhir kedua.
Mencetak gol
Ini adalah kode-golf , sehingga kode dalam byte paling sedikit menang.
Jawaban:
CJam,
1312 byteUji di sini.
Penjelasan
sumber
Pyth, 10
Cobalah online
Penjelasan
sumber
Pyth, 9 byte
Demonstrasi
@Lz.z
: Saring semua garis untuk persimpangan dengan baris pertama.olN
: Diurutkan berdasarkan panjangnyae
: Ambil yang terpanjang.sumber
Haskell, 49 byte
Baris pertama mendefinisikan fungsi pembantu
g
, yang tidak disebutkan namanya pada baris kedua adalah jawaban saya.Penjelasan
Algoritme adalah yang paling jelas: membagi input menjadi garis, menemukan garis yang berisi semua karakter dari baris pertama, dan menyaring semua karakter lain pada baris itu.
sumber
Prolog,
204190 byteIni bisa menjadi tantangan yang bagus untuk Prolog jika bukan karena persyaratan gabungan input multiline dan karakter yang tidak terhapus 'dan "dalam input. Sebagian besar kode (p dan r) ada untuk membaca file sebagai karakter kode yang harus saya lakukan untuk mengambil input yang tidak terhapus pada beberapa baris.
Jika saja 'ada sebagai karakter yang tidak terhapus, saya bisa membaca input sebagai string.
Jika saja "ada sebagai karakter yang tidak dihilangkan, saya bisa membaca input sebagai atom.
Jika input bukan multiline, katakan dipisahkan dengan spasi sebagai gantinya, saya bisa membacanya sebagai satu baris ke kode.
Bagaimana fungsinya
Cara menjalankan
Program dijalankan dengan perintah:
p.
File yang dinamai t yang berisi input harus berada di direktori yang sama.
Sunting: Disimpan 14 byte dengan menyatukan 2 klausa q dengan OR.
sumber
MATLAB, 107 byte
Ini akhirnya menjadi sepotong kode yang sangat ceroboh ...
Saat dijalankan, dialog input dibuka di mana string multi-baris dapat disisipkan ke (baris baru dikonversi ke spasi dan output akan menjadi sel dengan 1 string yang sangat panjang). Saya memilih untuk mengubah sel yang dihasilkan menjadi char yang memungkinkan untuk dipisah di spasi (hasilnya adalah array sel) dan kemudian kembali dikonversi ke char untuk mengambil bentuk yang diinginkan. MATLAB built-in ismember fungsi melakukan pekerjaan yang baik di sini di membandingkan baris pertama kita ke jalur lainnya.
Setelah itu menjadi buruk ... Saya sudah mencoba banyak cara untuk mengecualikan baris pertama dari cek 'pertandingan terbaik' saya dan berakhir dengan ini. Kami mencari garis dan kemudian menggunakan informasi ini untuk mengambil indeks (dengan mengonversikan indeks kami output ismember menjadi logis) yang kami inginkan dari karakter output kami.
sumber
Bahasa Wolfram 106 byte
Input contoh:
Keluaran:
Penjelasan kode: Pertama dengan InputString kita mendapatkan string input penuh, lalu kita mendapatkan set huruf pertama dengan memisahkan string dengan baris baru, dan menyimpan semua karakter yang pertama dalam variabel o. Selanjutnya, kami memilih dari sisa baris input yang memiliki karakter baris pertama (disimpan sebagai variabel o) sebagai subset. Kemudian dengan garis yang dipilih, kami mengambil anggota dari garis yang ada di set asli.
Sunting: Terima kasih kepada Martin Büttner untuk tips tentang penggunaan notasi infiks dan variabel yang tidak perlu saya
sumber
c
dani
hanya sekali, jadi tidak ada manfaatnya menugaskan mereka ke variabel. Anda mungkin dapat menyimpan beberapa byte dari tip ini . Dengan tidak memberio
nama.s[[1]]
adalah#&@@s
(sama untuk penggunaan kedua Anda[[1]]
). Anda dapat menggunakanStringSplit
tanpa parameter kedua (karena itu terbagi pada spasi putih secara default).SubsetQ
danMemberQ
dapat menggunakan notasi infiks untuk menyimpan byte, misalnya#~SubsetQ~o
.i
danc
sekali, terima kasih atas tipnya! Juga, saya perlu memiliki parameter keduaStringSplit
, karena ada beberapa keanehan yang terjadi dengan beberapa karakter ditafsirkan sebagai spasi putih (yang tidak benar-benar spasi putih)\n
, untuk menyimpan satu byte, dan menggunakan notasi infiks untuk menyimpan yang lain.Python 2, 112 byte
Contoh dijalankan: Ideone
sumber
Javascript (ES6),
107104102 byteDemo cuplikan untuk mendukung browser.
Berkomentar:
sumber