Hantu apa yang hilang?

25

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.

Lemon dirusak
sumber
Jika tidak ada hantu, apakah inputnya berupa string kosong, atau [null]?
Zizouz212
1
itu adalah string kosong.
Lemon Destructible
5
Apakah format input dan output benar-benar tipe string, atau bisakah kita menggunakan daftar? Spesifikasi mengatakan itu adalah string, tetapi kemudian mereka disebut sebagai daftar.
atlasologist
6
Konsensus umum adalah bahwa format input dan output yang rumit / ketat harus dihindari . Memisahkan dan menggabungkan kata-kata hanya membuat kode lebih lama dan itu tidak benar-benar menambah apapun pada tantangan inti.
Dennis
1
Apakah tidak salah output dengan Pac-Man? bisakah kamu mengklarifikasi? Terima kasih
Hastur

Jawaban:

3

Jelly , 25 22 byte

Ff”-ȯ⁸“JLKqḤṢ&F⁻ı»ṣ⁶¤ḟ

Ini adalah fungsi monadik. I / O dalam bentuk daftar. Cobalah online!

Bagaimana itu bekerja

Ff”-ȯ⁸“JLKqḤṢ&F⁻ı»ṣ⁶¤ḟ  Monadic link. Argument: A (list of strings)

F                       Flatten A.
 f”-                    Filter it with the string "-" to detect "Pac-Man".
    ȯ⁸                  Flat logical OR with A. This yields A if there is no '-'
                        in the input, the string "-" otherwise.
                    ¤   Combine the three links to the left into a niladic chain.
      “JLKqḤṢ&F⁻ı»        Yield "Blinky Inky Pinky Clyde", using Jelly's built-in
                          English dictionary.
                  ṣ⁶      Split at spaces to yield
                          ["Blinky", "Inky", "Pinky", "Clyde"].
                     ḟ  Filter-false; removing all elements from that list that
                        appear in A or "-". This is a noop if A contains "Pac-Man".
Dennis
sumber
Kamus mana yang Anda gunakan yang memiliki "Pinky" dll.? XD
Conor O'Brien
1
Yang default yang datang dengan OS saya. Pinky berarti jari kelingking, jadi harus ada di sebagian besar kamus. Saya harus membangun Blinky sebagai B + linky sekalipun. Tidak yakin apa kaitannya ...
Dennis
15

Retina , 45 byte

A`-
$
,;BliNClyde,INPiN
N
nky,
D`\w+,
.*;|,$

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

A`-

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 berisi Pac-Man.

Tahap 2: Pergantian

$
,;BliNClyde,INPiN

Ini cukup menambahkan string tetap ,;BliNClyde,INPiN. Ini akan menjadi daftar hantu di output setelah beberapa pembersihan.

Tahap 3: Substitusi

N
nky,

Perhatikan bahwa kami telah menulis tiga *nkyhantu dengan Ndi 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

D`\w+,

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.

Martin Ender
sumber
Bagaimana dengan kasus Pac-Man?
Nilai Tinta
2
@ KevinLau-notKenny Lihat penjelasan tahap pertama.
Martin Ender
7

Python 3, 75 byte

lambda s:[x for x in['Blinky','Inky','Pinky','Clyde']if(x in s)<1or'-'in s]

Input adalah string yang dipisahkan koma, dan output akan menjadi daftar.

ahli atlasologi
sumber
4
Bagian if(x in s)<1itu pintar! +1
Daniel
6

JavaScript ES6, 85 78 byte

Sebagai fungsi anonim

a=>["Blinky","Inky","Pinky","Clyde"].filter(c=>!a.includes(c)|a.some(v=>v[6]))

Hari ini saya belajar tentang filterfungsi ini . Menyenangkan!

15 byte disimpan berkat Neil.

Pemakaian:

(a=>["Blinky","Inky","Pinky","Clyde"].filter(c=>!a.includes(c)||a.includes("Pac-Man")))(["Pac-Man"])
> ["Blinky","Inky","Pinky","Clyde"]
(a=>["Blinky","Inky","Pinky","Clyde"].filter(c=>!a.includes(c)||a.includes("Pac-Man")))(["Pinky"])
> ["Blinky","Inky","Clyde"]
(a=>["Blinky","Inky","Pinky","Clyde"].filter(c=>!a.includes(c)||a.includes("Pac-Man")))([])
> ["Blinky","Inky","Pinky","Clyde"]
charredgrass
sumber
1
Daripada casing khusus di Pac-Manluar filter, saya pikir Anda dapat menambahkannya seperti a.includes("Pac-Main")||!a.includes(c)pada filter, pada titik mana Anda hanya memiliki satu penggunaan gdan karena itu dapat inline dan mengubah blok Anda menjadi ekspresi sehingga menghindari returnpernyataan.
Neil
@Neil Ide bagus. Saya dapat memotong returndan {}dan menyimpan banyak byte, terima kasih!
charredgrass
Anda juga dapat menyimpan satu byte dengan mengganti panggilan Anda a.includesdengan a[z="includes"](pertama) dan a[z](kedua). Juga, saya pikir Anda dapat menyimpan byte lain dengan menggunakan bitwise OR ( |) pada hasil boolean Anda alih-alih logis OR ( ||).
apsillers
2
Sebenarnya, sejak Pac-Manmerupakan masukan terpanjang mungkin (dan input tidak valid tidak mungkin), kita dapat menguji keberadaan karakter ketujuh untuk tes untuk Pac-Man: c=>!a.includes(c)||a.some(v=>v[6]). Menggunakannya dengan bitwise ATAU membawa skor menjadi 78.
apsillers
@apsillers Ooh, itu hebat, tidak akan pernah berpikir untuk memeriksa panjang. Saya berubah menjadi bitwise atau dan menambahkannya, terima kasih!
charredgrass
3

Ruby, 55 49 byte

Cobalah online!

-6 byte dari @MartinEnder

->a{%w"Blinky Inky Pinky Clyde"-(a*''=~/-/?[]:a)}

Array Ruby dapat mengalami pengurangan set, sehingga sangat mudah untuk menghapus hantu yang sesuai.

Nilai Tinta
sumber
Bagaimana ini berurusan dengan Pac-Man?
Neil
@Neil itu bergabung dengan array bersama-sama menggunakan a*''dan regex-membandingkannya dengan -sekarang dalam nama Pac-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)
Value Ink
3

Perl, 51 byte

50 byte kode +1 untuk -n

for$@(Blinky,Inky,Pinky,Clyde){print$@if/-/|!/$@/}g}

Pemakaian

perl -ne 'for$@(Blinky,Inky,Pinky,Clyde){print$@if/-/|!/$@/}' <<< 'Pac-Man, Clyde'
BlinkyInkyPinkyClyde

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:

print grep/-/~~@F|!($_~~@F),Blinky,Inky,Pinky,Clyde

Pemakaian

Membutuhkan daftar input yang dipisahkan ruang:

perl -nae 'print grep/-/~~@F|!($_~~@F),Blinky,Inky,Pinky,Clyde' <<< 'Clyde Pinky Inky'
Blinky
perl -nae 'print grep/-/~~@F|!($_~~@F),Blinky,Inky,Pinky,Clyde' <<< 'Clyde Pinky Inky Pac-Man'
BlinkyInkyPinkyClyde'
Dom Hastings
sumber
3

Pyth - 45 38 35 Bytes

=GwI!:G"a")j-["inky""pinky""blinky""clyde")cG

I!:=Gw"a")j-c:" p bl clyde"d"inky "dcG

j-c:" p bl clyde"d"inky "d?:z\aZYcz

-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.

Kacamata Korea
sumber
Anda lupa "Pac-Man"
Jacques Marais
@ JacquesMarais Tidak, ini berfungsi. The: z \ a mendeteksi jika ada "a" di input, dan akan ada "a" di input iff pac-man di input
KoreanwGlasses
Saya mengklik tautan Pyth dan itu tidak berfungsi ketika saya memasukkan "Pac-Man". Ketika "Pac-Man" dimasukkan, itu harus menunjukkan semua nama, bukan dari mereka.
Jacques Marais
@ JacquesMarais Kesalahan saya. Tetap.
KoreanwGlasses
}\azjuga menguji apakah zberisi surat itu a. 1 byte lebih pendek.
Jakube
3

C, 171 byte

Lewati serangkaian string yang diakhiri NULL f(), dan itu akan mencetak nama yang hilang.

*a[]={"Blinky","Inky","Pinky","Clyde",0},**s,**r,n;f(int**p){for(r=p;*p;)r=strcmp(*p++,"Pac-Man")?r:a+4;for(s=a;*s;++s){for(p=r,n=1;n&&*p;)n=strcmp(*s,*p++);n&&puts(*s);}}

Cobalah di ideone.

owacoder
sumber
2

PowerShell v4 +, 107 byte

param($n)((($n+($x='Pinky','Inky','Blinky','Clyde')|group|?{$_.count-eq1}).Name),$x)['-'-in[char[]]-join$n]

Agak kikuk dibandingkan dengan yang lain, karena PowerShell tidak memiliki operator ternary atau mapoperator gaya. Akibatnya, kami membangun sendiri.

Mengambil input $nsebagai 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 -joindisatukan bersama-sama ke dalam string tunggal dan kemudian dilemparkan kembali sebagai chararray, untuk menggunakan -inoperator. Jadi, jika Pac-Mandalam 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-Mantidak ada dalam array, bagian pertama dari array pseudo-ternary adalah output. Itu adalah kombinasi dari array input yang $ndisatukan dengan array dari semua hantu (disimpan ke dalam $x). Kami pipa yang array baru ke dalam Group-Objectyang akan kelompok seperti item bersama-sama, kemudian pilih menggunakan Where-Object(alias melalui |?{...}hanya item mana mereka .countadalah -equal untuk 1. Itu semua dikemas dalam parens, dan kami pilih .Nameproperti. 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-Manada 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

PS C:\Tools\Scripts\golfing> .\which-ghosts-are-missing.ps1 @('Clyde')
Pinky
Inky
Blinky

PS C:\Tools\Scripts\golfing> .\which-ghosts-are-missing.ps1 @('Pac-Man','Clyde')
Pinky
Inky
Blinky
Clyde

PS C:\Tools\Scripts\golfing> .\which-ghosts-are-missing.ps1 @()
Pinky
Inky
Blinky
Clyde

PS C:\Tools\Scripts\golfing> .\which-ghosts-are-missing.ps1 @('Clyde','Blinky')
Pinky
Inky
AdmBorkBork
sumber
2

Python 2, 66 61 96 byte

g={"Blinky","Inky","Pinky","Clyde"};i=set(input());print",".join(g-i if not"Pac-Man"in i else g)

Input harus berupa daftar, output berupa serangkaian nama yang dipisahkan oleh a ,.

Versi 61 byte yang tidak menangani Pac-Man:

print",".join({"Blinky","Inky","Pinky","Clyde"}-set(input()))
akrolit
sumber
8
Pac-Man tidak ditangani dalam entri ini.
Destructible Lemon
Anda tidak perlu set[...]. Cukup gunakan satu {...}set literal.
Dennis
Saya benar-benar tidak memperhatikan hal Pac-Man bahkan setelah membaca tantangan 3 kali ... Saya akan memperbaiki kode saya.
akrolit
2

Haskell, 91 byte

import Data.List
p l=(if elem"Pac-Man"l then id else(\\l))["Blinky","Inky","Pinky","Clyde"]

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:

import Data.List
(["Blinky","Inky","Pinky","Clyde"]\\)

Akan meningkatkan jawaban ini segera, apakah itu sangat larut malam.

Lazersmoke
sumber
2

Python 3, 77 byte

lambda i:[g for g in"Blinky Inky Pinky Clyde".split()if g not in i or"-"in i]

Berikut adalah jawaban lain pada 89 byte yang saya mainkan tetapi tidak berhasil :(

lambda i:[g for g in[s+"nky"for s in"Bli I Pi".split()]+["Clyde"]if g not in i or"-"in i]

Dan inilah yang asli pada 85 byte:

lambda i,n="Blinky Inky Pinky Clyde":([g for g in n.split()if g not in i],n)["-"in i]

Ini semua mengambil string tunggal dari nama-nama yang dipisahkan oleh spasi / koma.

Daniel
sumber
2

05AB1E, 47 44 byte

•1g!Z~÷kÅ]°%Ï0›K/•35B0¡™svy'-åi,q}}v¹ykÌiy)˜

Penjelasan

•1g!Z~÷kÅ]°%Ï0›K/•35B0¡™                      # push list of the 4 ghosts
                        svy'-åi,q}}           # if Pac-Man is in input, quit and output list of all 4 ghosts
                                  v¹ykÌiy)˜   # otherwise, generate the list of ghosts missing from input

Cobalah online

Emigna
sumber
2

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:

o=['Blinky','Clyde','Inky','Pinky']
p=lambda x:[l for l in reduce(lambda z,x:z+[y+[x]for y in z],o,[[]])if sorted(l+x)==o][0]if'Pac-Man'not in x else o

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

reduce(lambda z,x:z+[y+[x]for y in z],o,[[]])

yang kembali

[[], ['Clyde'], ['Pinky'], ['Clyde', 'Pinky'], ['Inky'], ['Clyde', 'Inky'],
['Pinky', 'Inky'], ['Clyde', 'Pinky', 'Inky'], ['Blinky'], ['Clyde', 'Blinky'],
['Pinky', 'Blinky'], ['Clyde', 'Pinky', 'Blinky'], ['Inky', 'Blinky'],
['Clyde', 'Inky', 'Blinky'], ['Pinky', 'Inky', 'Blinky'], 
['Clyde', 'Pinky', 'Inky', 'Blinky']]

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 sebagai Falsesedangkan ['a','b']==['a','b']dievaluasi sebagai True.

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.

Ioannes
sumber
2

Objek Pascal, 204 200 byte

Dua loop, menggunakan biner untuk menemukan hantu + pacman yang ada. Mengambil argumen dari commandline. Terima kasih kepada @manatwork untuk menghemat lebih banyak byte!

var a:array[1..4]of string=('Blinky','Inky','Pinky','Clyde');i,s:Byte;begin for i:=1to ParamCount do s:=1<<Pos(ParamStr(i)[4],'nykd-')or s;for i:=1to 4do if(1<<i and s=0)or(s>31)then WriteLn(a[i])end.

Tidak Disatukan:

var
  a: array[1..4] of string = ('Blinky', 'Inky', 'Pinky', 'Clyde');
  i, s: byte;
begin
  for i:=1 to ParamCount do
    s := 1 << pos(ParamStr(i)[4], 'nykd-') or s; // fill bits by shifting, check for unique 4th char of names, '-' in 'pac-man', could also use the 3rd char
  for i:=1 to 4 do
    if (1 << i and s=0) or (s>31) then    // check if bits are on
      writeln(a[i]);
end.

Versi lama menggunakan satu set, 227 209 byte

Dua loop, menggunakan satu set untuk menemukan hantu + pacman yang hadir. Mengambil argumen dari commandline.

var a:array[1..4]of string=('Blinky','Inky','Pinky','Clyde');i:byte;s:set of 1..5;begin for i:=1to ParamCount do s:=s+[pos(ParamStr(i)[4],'nykd-')];for i:=1to 4do if not(i in s)or(5in s)then writeln(a[i]);end.

Tidak Disatukan:

var
  a: array[1..4] of string = ('Blinky', 'Inky', 'Pinky', 'Clyde');
  i: byte;
  s: set of 1..5;
begin
  for i:=1 to ParamCount do
    s := s + [pos(ParamStr(i)[4], 'nykd-')]; // fill set with indxs
  for i:=1 to 4 do
    if not(i in s) or (5 in s) then    // check indx not in set or pac-man is
      writeln(a[i]);
end.
hdrz
sumber
Bagus. Beberapa cara untuk memperpendeknya: integerbyte; hapus deklarasi gdan gunakan nilainya secara langsung, ParamCount5(karena saya mengerti tugasnya, toh tidak akan ada item input yang digandakan atau tidak valid). Setidaknya dalam literal angka FreePascal dapat menyentuh kata kunci, seperti i:=1to 5doatau 5in s. Lihat apakah Anda mendukungnya juga.
manatwork
Saya pikir menggunakan bit bukannya setakan bermanfaat: pastebin.com/r2nB5wY3
manatwork
@manatwork Wow, setiap kali saya belajar sesuatu yang baru .. Saya menggunakan saran Anda kecuali untuk ParamCount, 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.
hdrz
1

Program PHP, 84 byte

<?print_r(array_diff([Blinky,Inky,Pinky,Clyde],in_array('Pac-Man',$argv)?[]:$argv));
  • mengambil argumen dari baris perintah, mencetak hasil sebagai array.
  • nama file tidak boleh berupa hantu atau 'Pac-Man'!
  • uraian singkat: hapus (jika 'Pac-Man' ada dalam argumen: tidak ada, semua argumen) dari semua hantu; hasil cetak secara rekursif

contoh:

>php -d error_reporting=0 ghosts.php Clyde
Array
(
    [0] => Blinky
    [1] => Inky
    [2] => Pinky
)
>php -d error_reporting=0 ghosts.php Clyde Blinky
Array
(
    [0] => Inky
    [1] => Pinky
)
>php -d error_reporting=0 ghosts.php Pac-Man Clyde
Array
(
    [0] => Blinky
    [1] => Inky
    [2] => Pinky
    [3] => Clyde
)

Fungsi PHP, 90 byte

function p($a){return array_diff([Blinky,Inky,Pinky,Clyde],in_array('Pac-Man',$a)?[]:$a);}

mengambil dan mengembalikan array, gunakan array kosong untuk input kosong, tidak ada nilai palsu lainnya!

pemikiran lebih lanjut

  • ganti in_array(...)dengan strstr(join($argv),'-')untuk mendeteksi -alih-alih Pac-Man(-2)
  • gunakan ereg('-',join($argv))saja (lain -2)
  • program bisa kehilangan 6 byte lagi di PHP <5.4 dengan register_globalson
  • untuk membuat program mencetak daftar yang dipisahkan koma: ganti <?print_r(dengan <?=join(',',(+2). Anda mungkin ingin menambah ;echo""panggilan untuk jeda baris
Titus
sumber
1

jq, 69 karakter

("Blinky Inky Pinky Clyde"/" ")as $a|if inside($a)then$a-. else$a end

Input adalah JSON, output adalah JSON, sintaksis bersyarat adalah nyeri.

Contoh dijalankan:

bash-4.3$ jq '("Blinky Inky Pinky Clyde"/" ")as $a|if inside($a)then$a-. else$a end' <<< '["Clyde"]'
[
  "Blinky",
  "Inky",
  "Pinky"
]

bash-4.3$ jq '("Blinky Inky Pinky Clyde"/" ")as $a|if inside($a)then$a-. else$a end' <<< '["Pac-Man","Clyde"]'
[
  "Blinky",
  "Inky",
  "Pinky",
  "Clyde"
]

Tes online:

manatwork
sumber
1

TSQL (sqlserver 2016), 114 byte

Golf:

DECLARE @ VARCHAR(99) = 'Blinky,Inky,Pinky,Clyde'

SELECT*FROM STRING_SPLIT('Blinky,Inky,Pinky,Clyde',',')EXCEPT SELECT*FROM STRING_SPLIT(@,','WHERE @ NOT LIKE'%-%'

Tidak Disatukan:

DECLARE @ VARCHAR(99) = 'Blinky,Inky,Pinky,Clyde'

SELECT * FROM STRING_SPLIT('Blinky,Inky,Pinky,Clyde',',')
EXCEPT
SELECT * FROM STRING_SPLIT(@,',')
WHERE @ NOT LIKE'%-%'

Biola

t-clausen.dk
sumber
1

Lotus Notes @Formula language, 85 84 75 74 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:

l:="Inky":"Pinky":"Blinky":"Clyde";@If(@Like(i;"%-%");l;@Replace(l;i;""))

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.

ElPedro
sumber
1

C # 135 byte 126 byte

string[] g{"Blinky","Inky","Pinky","Clyde"};Console.WriteLine(String.Join(",",i.Contains("Pac-Man")?g:g.Except(i).ToArray()));

(di mana saya adalah array string yang berisi input)

Setelah melihat contoh-contoh lain, saya melihat bahwa C # lebih merupakan bahasa yang bertele-tele :)

supermeerkat
sumber
1
Anda bisa mendapatkan 126 byte dengan menghapus spasi dan baris baru.
acrolith
1

Pyke, 45 39 38 37 32 byte

.d𖭺𐎪膎㧫l4dc].^D`\-R{!*

Coba di sini!

.d𖭺𐎪膎㧫l4dc - dictionary_lookup('blinky inky pinky clyde').title().split()
].^ - xor(^, input)
D`\-R{!* - ^*("-" not in input)
Biru
sumber
1

Batch, 141 byte

@set g= Blinky Inky Pinky Clyde
@for %%a in (%*)do @if %%a==Pac-Man goto l
@for %%a in (%*)do call set g=%%g: %%a=%%
@l
@echo(%g:~1,-1%

(Kurangi 6 byte karena :~1,-1jika memimpin dan mengeklik spasi putih dapat diterima.) Membutuhkan Pac-Man dalam judul kasus tetapi hantu adalah case-insensitive.

Neil
sumber
0

Japt , 38 byte (Tidak bersaing)

Mengambil input sebagai array string, menghasilkan array string

`B¦nky Inky Pky CÒè`¸kUø`Pac-M` ?N:U

Cobalah online

Shaggy
sumber