Dalam tantangan ini, mengingat daftar hantu dari Pac-Man, Anda harus mengeluarkan hantu mana yang hilang. Anda harus melakukannya dalam beberapa byte yang Anda bisa
Memasukkan
Input akan terdiri dari string atau daftar, yang akan mencakup sejumlah hantu, yang dapat mencakup;
- Blinky
- Bertinta
- Pinky
- Clyde
Namun, input juga dapat mencakup Pac-Man (dengan tanda baca itu). Jadi, jumlah maksimum item dalam daftar adalah lima, dalam urutan apa pun. Dapat diasumsikan bahwa tidak ada item yang tidak valid akan ada dalam daftar
Keluaran
Output akan terdiri dari string, atau daftar. Ini akan mencakup semua hantu yang tidak ada dalam input, dalam urutan apa pun. Namun, jika Pac-Man ada di input, semua hantu akan dianggap hilang (karena dia memakannya).
Uji kasus
input: Clyde
output: Blinky, Inky, Pinky
alternate output: Inky, Pinky, Blinky
or one of the other 4 permutations
input: Clyde, Blinky # or however you delimit it
output: Inky, Pinky
alt: Pinky, Inky
input: Pac-Man, Clyde
Output: Blinky, Inky, Pinky, Clyde
or you could output one of the other 23 permutations
input:[null]
Output: Blinky, Inky, Pinky, Clyde
or you could output one of the other 23 permutations
Ini codegolf, jadi semakin rendah bytecount, semakin baik.
[null]
?Jawaban:
Jelly ,
2522 byteIni adalah fungsi monadik. I / O dalam bentuk daftar. Cobalah online!
Bagaimana itu bekerja
sumber
Retina , 45 byte
Linefeed tambahan sangat penting. Input dan output dipisahkan dengan koma.
Cobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)
Penjelasan
Saya tidak berharap dapat memamerkan penambahan terbaru Retina (tahap deduplikasi) begitu cepat, tetapi itu sangat membantu untuk tantangan ini. :)
Tahap 1: Anti-Grep
Tahap anti-grep membuang semua baris yang cocok dengan regex yang diberikan. Regex itu adil
-
dan inputnya selalu satu baris, jadi ini membuang semua hantu jika inputnya berisiPac-Man
.Tahap 2: Pergantian
Ini cukup menambahkan string tetap
,;BliNClyde,INPiN
. Ini akan menjadi daftar hantu di output setelah beberapa pembersihan.Tahap 3: Substitusi
Perhatikan bahwa kami telah menulis tiga
*nky
hantu denganN
di tahap sebelumnya (dan menghilangkan koma setelah mereka), dan kami sekarang memperluas steno ini, yang menghemat beberapa byte. Sekarang ada koma setelah setiap hantu, dan kami mendapat input hantu dan daftar semua hantu yang dipisahkan oleh tanda titik koma.Tahap 3: Deduplikasi
Ini bagian baru. Tahap deduplikasi menemukan semua instance dari regex yang diberikan dan membuang semua substring yang cocok yang sama dengan substring yang cocok sebelumnya. Regex hanya cocok dengan semua hantu, baik dalam input maupun dalam daftar output potensial. Jika input berisi hantu, maka hantu yang sama akan dicocokkan lagi di daftar kedua dan dibuang. Kalau tidak, hantu itu cocok untuk pertama kalinya dalam daftar kedua dan disimpan. Jadi setelah ini, daftar setelah titik koma adalah output yang kita inginkan. Yang tersisa hanyalah sedikit pembersihan:
Tahap 5: Substitusi
Kami cukup mencocokkan semuanya hingga titik koma serta koma di akhir string dan menghapusnya.
sumber
Python 3, 75 byte
Input adalah string yang dipisahkan koma, dan output akan menjadi daftar.
sumber
if(x in s)<1
itu pintar! +1JavaScript ES6,
8578 byteSebagai fungsi anonim
Hari ini saya belajar tentang
filter
fungsi ini . Menyenangkan!15 byte disimpan berkat Neil.
Pemakaian:
sumber
Pac-Man
luar filter, saya pikir Anda dapat menambahkannya sepertia.includes("Pac-Main")||!a.includes(c)
pada filter, pada titik mana Anda hanya memiliki satu penggunaang
dan karena itu dapat inline dan mengubah blok Anda menjadi ekspresi sehingga menghindarireturn
pernyataan.return
dan{}
dan menyimpan banyak byte, terima kasih!a.includes
dengana[z="includes"]
(pertama) dana[z]
(kedua). Juga, saya pikir Anda dapat menyimpan byte lain dengan menggunakan bitwise OR (|
) pada hasil boolean Anda alih-alih logis OR (||
).Pac-Man
merupakan masukan terpanjang mungkin (dan input tidak valid tidak mungkin), kita dapat menguji keberadaan karakter ketujuh untuk tes untukPac-Man
:c=>!a.includes(c)||a.some(v=>v[6])
. Menggunakannya dengan bitwise ATAU membawa skor menjadi 78.Ruby,
5549 byteCobalah online!
-6 byte dari @MartinEnder
Array Ruby dapat mengalami pengurangan set, sehingga sangat mudah untuk menghapus hantu yang sesuai.
sumber
a*''
dan regex-membandingkannya dengan-
sekarang dalam namaPac-Man
. Jika ada, itu tidak mengurangi apa pun dari daftar hantu, dan jika tidak, itu mengurangi daftar input (sehingga setiap elemen dalam daftar input dihapus dari daftar hantu)Perl, 51 byte
50 byte kode +1 untuk
-n
Pemakaian
Aku bisa mengubah output jika perlu, menambahkan spasi setelah setiap hantu, untuk + 3 byte mengganti
print$@
denganprint"$@ "
.-6 byte terima kasih kepada @MartinEnder !
Perl, 53 byte
51 byte kode + 2 untuk
-na
Solusi alternatif, menggunakan operator smartmatch:
Pemakaian
Membutuhkan daftar input yang dipisahkan ruang:
sumber
Pyth -
45 3835 Bytes-1 byte lebih banyak berkat Leaky Nun!
Input harus dibatasi ruang, semua huruf kecil; mengeluarkan hantu yang hilang di jalur terpisah kecuali pac-man di input.
sumber
}\az
juga menguji apakahz
berisi surat itua
. 1 byte lebih pendek.C, 171 byte
Lewati serangkaian string yang diakhiri NULL
f()
, dan itu akan mencetak nama yang hilang.Cobalah di ideone.
sumber
PowerShell v4 +, 107 byte
Agak kikuk dibandingkan dengan yang lain, karena PowerShell tidak memiliki operator ternary atau
map
operator gaya. Akibatnya, kami membangun sendiri.Mengambil input
$n
sebagai array string yang eksplisit (misalnya.\which-ghosts-are-missing.ps1 @('Clyde','Blinky')
,. Sisanya dari program adalah satu pseudo-ternary yang terdiri dari array yang kami indekskan melalui beberapa logika[...]
. Logikanya adalah apakah-
karakter ada di mana saja dalam array input yang-join
disatukan bersama-sama ke dalam string tunggal dan kemudian dilemparkan kembali sebagaichar
array, untuk menggunakan-in
operator. Jadi, jikaPac-Man
dalam array input, ini akan menjadi$TRUE
dan elemen kedua dari array pseudo-ternary akan dipilih, jika tidak maka yang pertama akan dipilih.Jika case
Pac-Man
tidak ada dalam array, bagian pertama dari array pseudo-ternary adalah output. Itu adalah kombinasi dari array input yang$n
disatukan dengan array dari semua hantu (disimpan ke dalam$x
). Kami pipa yang array baru ke dalamGroup-Object
yang akan kelompok seperti item bersama-sama, kemudian pilih menggunakanWhere-Object
(alias melalui|?{...}
hanya item mana mereka.count
adalah-eq
ual untuk1
. Itu semua dikemas dalam parens, dan kami pilih.Name
properti. Sinilah kebutuhan v4 masuk, seperti di bawah v4 Anda dapat mereferensikan label hashtable seperti ini daripada menggunakan sesuatu seperti|Select Name
, yang menyimpan beberapa byte.Kalau tidak, karena
Pac-Man
ada dalam array input, kita perlu menampilkan semua hantu. Untungnya kami sudah menyimpannya$x
, jadi itulah pilihan dalam kasus ini. Either way, pipeline sekarang berisi array string hantu, dan outputnya tersirat.Contohnya
sumber
Python 2,
666196 byteInput harus berupa daftar, output berupa serangkaian nama yang dipisahkan oleh a
,
.Versi 61 byte yang tidak menangani Pac-Man:
sumber
set[...]
. Cukup gunakan satu{...}
set literal.Haskell, 91 byte
Input adalah daftar string. Ia memutuskan apakah akan menggunakan daftar apa adanya atau melakukan perbedaan daftar berdasarkan keberadaan "Pac-Man".
Untuk kesenangan ekstra, ini bukan Pac-Man:
Akan meningkatkan jawaban ini segera, apakah itu sangat larut malam.
sumber
Python 3, 77 byte
Berikut adalah jawaban lain pada 89 byte yang saya mainkan tetapi tidak berhasil :(
Dan inilah yang asli pada 85 byte:
Ini semua mengambil string tunggal dari nama-nama yang dipisahkan oleh spasi / koma.
sumber
05AB1E,
4744 bytePenjelasan
Cobalah online
sumber
Python 2, 151 byte
Karena sudah ada jawaban Python menggunakan set dan string, saya memutuskan untuk membatasi diri untuk bekerja dengan daftar, yang ternyata cukup panjang dan tidak kompetitif. Namun, karena pendekatan yang diambil berbeda dengan yang biasa digunakan, ini dia:
di mana input yang diharapkan adalah daftar string.
Pendekatannya adalah untuk memaksa semua kombinasi yang mungkin (tanpa memperhitungkan) 0,1,2,3 dan 4 elemen. Ini dilakukan oleh
yang kembali
dan temukan satu yang, di samping daftar input menghasilkan daftar lengkap hantu.
Kemudian diperiksa apakah string
'Pac-Man'
adalah bagian dari input dan, jika itu adalah, seluruh daftar hantu dikembalikan. Jika tidak, hanya yang bukan bagian dari input yang dikembalikan.Perhatikan bahwa daftar yang berisi semua nama hantu (
o
) diurutkan secara alfabet dan hal yang sama berlaku untuk daftar yang dibuat sebagai (sorted(l+x)
). Hal ini disebabkan oleh fakta bahwa dalam Python,['a','b']==['b','a']
dievaluasi sebagaiFalse
sedangkan['a','b']==['a','b']
dievaluasi sebagaiTrue
.3 byte dapat disimpan jika diizinkan untuk mengembalikan jawaban sebagai daftar daftar (dengan menghapus
[0]
pada akhir pemahaman daftar pertama). Tetapi karena saya tidak yakin itu adalah output yang valid saya menghitungnya.sumber
Objek Pascal,
204200 byteDua loop, menggunakan biner untuk menemukan hantu + pacman yang ada. Mengambil argumen dari commandline. Terima kasih kepada @manatwork untuk menghemat lebih banyak byte!
Tidak Disatukan:
Versi lama menggunakan satu set,
227209 byteDua loop, menggunakan satu set untuk menemukan hantu + pacman yang hadir. Mengambil argumen dari commandline.
Tidak Disatukan:
sumber
integer
→byte
; hapus deklarasig
dan gunakan nilainya secara langsung,ParamCount
→5
(karena saya mengerti tugasnya, toh tidak akan ada item input yang digandakan atau tidak valid). Setidaknya dalam literal angka FreePascal dapat menyentuh kata kunci, sepertii:=1to 5do
atau5in s
. Lihat apakah Anda mendukungnya juga.set
akan bermanfaat: pastebin.com/r2nB5wY3ParamCount
, karena perilaku tidak terdefinisi untuk angka yang lebih besar daripada param input aktual (setidaknya tidak ada apa-apa tentang hal itu di dokumen), meskipun itu berfungsi.Program PHP, 84 byte
contoh:
Fungsi PHP, 90 byte
mengambil dan mengembalikan array, gunakan array kosong untuk input kosong, tidak ada nilai palsu lainnya!
pemikiran lebih lanjut
in_array(...)
denganstrstr(join($argv),'-')
untuk mendeteksi-
alih-alihPac-Man
(-2)ereg('-',join($argv))
saja (lain -2)register_globals
on<?print_r(
dengan<?=join(',',
(+2). Anda mungkin ingin menambah;echo""
panggilan untuk jeda barissumber
jq, 69 karakter
Input adalah JSON, output adalah JSON, sintaksis bersyarat adalah nyeri.
Contoh dijalankan:
Tes online:
sumber
TSQL (sqlserver 2016), 114 byte
Golf:
Tidak Disatukan:
Biola
sumber
Lotus Notes @Formula language,
85847574 karakter-1 karakter dengan membalikkan penugasan @Jika
-9 Mengubah @Contains (i; "-") menjadi @Suka (i; "% -%") dan menghapus @Trim (tidak diperlukan jika ditampilkan menggunakan ruang sebagai pemisah)
-1 dengan menghapus baris baru
Buat formulir dengan dua bidang: i (Teks, Editable, Multi-nilai) dan o (Teks, Dihitung, Multi-nilai). Masukkan formula berikut di o:
Dari klien Notes, buat dokumen baru menggunakan formulir, masukkan nama di bidang i dan tekan F9 untuk menyegarkan dokumen. Jawaban ditampilkan di bidang o.
Ini memanfaatkan fakta bahwa @Like dan @Replace dapat digunakan baik pada string atau pada daftar string.
sumber
C #
135 byte126 byte(di mana saya adalah array string yang berisi input)
Setelah melihat contoh-contoh lain, saya melihat bahwa C # lebih merupakan bahasa yang bertele-tele :)
sumber
Pyke,
4539383732 byteCoba di sini!
sumber
Batch, 141 byte
(Kurangi 6 byte karena
:~1,-1
jika memimpin dan mengeklik spasi putih dapat diterima.) Membutuhkan Pac-Man dalam judul kasus tetapi hantu adalah case-insensitive.sumber
Japt , 38 byte (Tidak bersaing)
Mengambil input sebagai array string, menghasilkan array string
Cobalah online
sumber