Singkatan restoran

8

Tujuan

Terkadang menu makan malam bisa memiliki nama panjang lebar. Ini jauh lebih mudah bagi pelayan untuk menulis singkatan yang jelas mengidentifikasi hidangan.

Misalnya, diberikan daftar ini:

beef burger
chicken burger
chicken nuggets

Singkatan c ncocok chicken nuggets.
Singkatan burcocok beef burgerdan chicken burger.

Tulis program fungsi yang mengidentifikasi satu atau lebih item yang cocok dengan singkatan.

Memasukkan

  1. String yang disingkat untuk ditemukan.
  2. Daftar item untuk dicari.

Anda dapat mengubah pesanan ini dan menggunakan tipe data yang cocok.

Keluaran

  • Jika singkatan tidak cocok dengan item apa pun: Not found
  • Jika singkatannya jelas cocok dengan item: output item yang tidak disatukan.
  • Jika singkatan secara ambigu cocok dengan beberapa item: tampilkan daftar kata-kata yang dipisahkan koma yang akan membuat pemilihan menjadi tidak ambigu, diikuti oleh tanda tanya. Urutannya tidak penting. Ruang ekstra diizinkan.

Aturan yang cocok

Setiap kata dalam singkatan dan item dianggap secara terpisah. Jika kata yang disingkat cocok dengan awal kata item, item tersebut kemungkinan cocok. Jika tidak ada kata-kata item yang dimulai dengan kata-kata disingkat, item itu tidak cocok.

Kata-kata yang disingkat bisa dalam urutan apa pun.

Kata yang disingkat tidak dapat digunakan untuk mencocokkan beberapa kata item dan sebaliknya.

Singkatan hanya cocok dengan awal kata-kata.

Asumsikan tidak ada item yang akan mengandung semua kata-kata item lain. Misalnya, Anda tidak akan pernah beef burgerdan beef cheese burger.

Uji Kasus

Diberikan daftar ini:

beef burger
crispy chicken burger
grilled chicken burger
chicken nuggets
chocolate cone
strawberry cone
vanilla cone

Singkatan ini memberikan output yang ditentukan:

fish           Not found
cones          Not found
chicken cone   Not found
nilla          Not found
v              vanilla cone
be             beef burger
c n            chicken nuggets
b b            beef burger
c b c          crispy chicken burger
c b            crispy,grilled?
bu             beef,crispy,grilled?
            or beef,crispy chicken,grilled chicken?
ch             crispy,grilled,nuggets,cone?
            or crispy chicken,grilled chicken,nuggets,cone?

Mencetak gol

Ini golf kode. Jawaban terpendek dalam byte dalam 12 hari memenangkan penerimaan. (Aku akan membuatnya satu minggu, tapi aku tidak akan ada untuk itu.)

Makanan Tangan
sumber
Saya tidak yakin mengapa kata yang disingkat tidak dapat digunakan untuk mencocokkan beberapa kata item akan menjadi penting jika vcocok vanilla cone.
Dennis
Terkait
Alex A.
1
@ Dennis, jika kata yang disingkat cocok dengan beberapa kata item, c bakan cocok crispy chicken burgerbukan ambigu. Ketika saya mengatakan "kata" yang saya maksud adalah serangkaian karakter yang dibatasi oleh spasi, demikian g c bjuga tiga kata.
Hand-E-Food
Jika singkatan secara ambigu cocok dengan beberapa item: tampilkan daftar kata-kata yang dipisahkan koma yang akan membuat pemilihan tidak ambigu. Apakah itu merujuk pada kata yang, dengan sendirinya, akan memungkinkan untuk memilih dari opsi yang cocok, atau di samping singkatan? Dengan interpretasi pertama, crispy,grilled,nuggets,chocolateapakah valid untuk chtest case? Dengan interpretasi kedua, chicken,grilledharus valid untuk c btest case. Apa yang saya lewatkan?
Dennis
Input yang diberikan b b beef burger battered baconapa yang akan menjadi output yang dapat diterima?
Peter Taylor

Jawaban:

1

Python 2 - 181 byte

Itu mengubah string yang disingkat menjadi regex dan mencoba untuk mencocokkan grup dari daftar pencarian.

Operasi ternary ifdan elses adalah 14 byte. Saya sudah mencoba memotongnya menjadi daftar dan kemudian mengakses salah satu item berdasarkan keadaan r, tetapi belum ada yang lebih pendek dari ini.

import re
def s(a,l):
 r=[m.group(1)for e in l for m in[re.compile('^('+a.replace(' ','\w+ ')+'\w+)$').search(e)]if m]
 print','.join(r)+'?'if len(r)>1 else r[0]if r else'Not found'

Panggilan dengan s(str, list):

s('c n', ['chicken burger', 'chicken nuggets', 'cheeseburger'])
>>> chicken nuggets
s('c n', ['chicken burger', 'chicken nuggets', 'cheeseburger', 'chicken nuggets with sauce', 'foobar'])
>>> chicken nuggets
s('c n', ['chicken burger', 'chicken nuggets', 'cheeseburger', 'chicken nuggets with sauce', 'foobar', 'cfoo nbar'])
>>> chicken nuggets,cfoo nbar?
Celeo
sumber