어떤 유령이 없습니까?


25

이 문제에서는 Pac-Man의 유령 목록이 주어지면 누락 된 유령을 출력해야합니다. 가능한 한 적은 바이트로해야합니다.

입력

입력은 문자열 또는 목록으로 구성되며, 여기에는 다수의 유령이 포함됩니다.

  • 깜박임
  • 더러워진
  • 핑키
  • 클라이드

그러나 입력에 Pac-Man (해당 구두점 포함)이 포함될 수도 있습니다. 따라서 목록의 최대 항목 수는 순서에 관계없이 5 개입니다. 목록에 잘못된 항목이없는 것으로 가정 할 수 있습니다.

산출

출력은 문자열 또는 목록으로 구성됩니다. 여기에는 입력에없는 모든 유령이 순서대로 포함됩니다. 그러나 팩맨이 입력에 있다면, 모든 유령은 (먹기 때문에) 사라진 것으로 간주됩니다.

테스트 사례

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

이것은 codegolf이므로 바이트 수가 적을수록 좋습니다.


유령이없는 경우 입력에 빈 문자열이 [null]있습니까?
Zizouz212

1
빈 문자열입니다.
Destructible Lemon

5
입력 및 출력 형식이 엄격하게 문자열 유형입니까, 아니면 목록을 사용할 수 있습니까? 스펙은 문자열이라고하지만 목록이라고합니다.
atlasologist

6
일반적인 합의는 성가신 / 엄격한 입력 및 출력 형식을 피해야한다는 것 입니다. 단어를 나누고 결합하면 코드가 길어지고 핵심 과제에 실제로 아무것도 추가되지 않습니다.
Dennis

1
Pac-Man의 출력이 잘못되지 않습니까? 당신은 명확히 할 수 있습니까? 감사합니다
Hastur

답변:


3

젤리 , 25 22 바이트

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

이것은 모나 딕 기능입니다. I / O는 목록 형식입니다. 온라인으로 사용해보십시오!

작동 원리

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

"Pinky"등이 포함 된 사전을 사용하신 적이 있습니까? XD
코너 오브라이언

1
내 OS와 함께 제공되는 기본 설정입니다. 핑키는 작은 손가락 iirc를 의미하므로 대부분의 사전에 있어야합니다. 그래도 BlinkyB + linky 로 구성해야했습니다 . 연결이 무엇인지 잘 모르겠습니다 ...
Dennis

15

망막 , 45 바이트

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

후행 줄 바꿈이 중요합니다. 입력과 출력은 쉼표로 구분됩니다.

온라인으로 사용해보십시오! 첫 번째 줄은 줄 바꿈으로 구분 된 테스트 스위트를 활성화합니다.

설명

Retina의 최신 추가 기능 (중복 제거 단계)을 곧 선보일 수는 없었지만이 과제에 정말 도움이되었습니다. :)

1 단계 : 사기 방지

A`-

Anti-grep 스테이지는 주어진 정규식과 일치하는 모든 라인을 버립니다. 정규식은 단지- 이며 입력은 항상 한 줄이므로 입력에가 포함되어 있으면 모든 유령이 삭제됩니다 Pac-Man.

2 단계 : 교체

$
,;BliNClyde,INPiN

이것은 단순히 고정 문자열을 추가합니다 ,;BliNClyde,INPiN . 일부 정리 후 출력의 고스트 목록이됩니다.

3 단계 : 교체

N
nky,

우리는 세 가지를 작성했습니다 *nkyN 이전 단계에서 고스트를 뒤에 쉼표를 생략했으며 이제이 속기를 확장하여 몇 바이트를 절약합니다. 모든 고스트마다 쉼표가 생겼으며, 입력 고스트와 모든 고스트의 목록을 세미콜론으로 구분했습니다.

3 단계 : 중복 제거

D`\w+,

이것은 새로운 부분입니다. 중복 제거 단계는 주어진 정규 표현식의 모든 인스턴스를 찾고 이전에 일치하는 하위 문자열과 동일한 모든 일치하는 하위 문자열을 삭제합니다. 정규식은 입력과 잠재적 출력 목록 모두에서 모든 고스트를 단순히 일치시킵니다. 입력에 유령이 포함 된 경우 동일한 유령이 두 번째 목록에서 다시 일치하여 삭제됩니다. 그렇지 않으면 고스트가 두 번째 목록에서 처음으로 일치하여 유지됩니다. 따라서이 후에 세미콜론 뒤의 목록이 원하는 출력입니다. 남은 것은 약간의 정리입니다.

5 단계 : 교체

.*;|,$

우리는 단순히 문자열 끝에 쉼표뿐만 아니라 세미콜론까지 모든 것을 일치시키고 제거합니다.


팩맨 사건은 어떻습니까?
가치 잉크

2
@ KevinLau-notKenny 첫 단계의 설명을보십시오.
Martin Ender

7

파이썬 3, 75 바이트

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

입력은 쉼표로 구분 된 문자열이며 출력은 목록입니다.


4
if(x in s)<1부분은 영리하다! +1
Daniel

6

자바 스크립트 ES6, 85 78 바이트

익명의 기능으로

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

오늘 저는이 filter기능 에 대해 배웠습니다 . 장난!

Neil 덕분에 15 바이트가 절약되었습니다.

용법:

(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"]

1
Pac-Man필터 외부에 특수 케이스를 사용하는 대신 필터에서와 같이 추가 할 수 있다고 생각합니다 a.includes("Pac-Main")||!a.includes(c).이 시점에서 한 번만 사용할 g수 있으므로 인라인하여 블록을 표현식으로 변환하여 return명령문 을 피할 수 있습니다.
Neil

@ Neil 좋은 생각입니다. 나는 return과 를 잘라낼 수 있었고 {}많은 바이트를 절약했습니다. 감사합니다!
charredgrass

당신은 수도로 통화를 대체하여 한 바이트 저장 a.includesa[z="includes"](첫번째) 및 a[z](초). 또한 |논리 OR ( ||) 대신 부울 결과에 비트 OR ( )을 사용하여 다른 바이트를 저장할 수 있다고 생각합니다 .
apillers

2
사실, 이후로는 Pac-Man가장 긴 입력 (유효하지 않은 입력이 불가능하다), 우리는을위한 시험에 7 번째 문자의 존재 여부를 테스트 할 수 있습니다 Pac-Man: c=>!a.includes(c)||a.some(v=>v[6]).
이것을

@apsillers Ooh, 훌륭합니다. 길이를 확인하려고 생각하지 않았을 것입니다. 나는 비트 단위로 변경하거나 추가했습니다. 감사합니다!
charredgrass

3

루비, 55 49 바이트

온라인으로 사용해보십시오!

@MartinEnder에서 -6 바이트

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

루비 배열은 뺄셈을 겪을 수 있으며, 적절한 유령을 제거하기가 매우 쉽습니다.


이것은 팩맨을 어떻게 다루는가?
Neil

@Neil 배열을 사용하여 배열을 결합 하고 이름 a*''에서 -현재 와 배열을 비교합니다 Pac-Man. 존재하는 경우 유령 목록에서 아무것도 빼고, 그렇지 않은 경우 입력 목록을 빼십시오 (입력 목록의 각 요소가 유령 목록에서 제거됨)
Value Ink

3

펄, 51 바이트

50 바이트 코드 + 1 -n

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

용법

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

필요한 경우 출력을 수정할 수 있습니다. 각 고스트 뒤에 공백을 추가하여 + 3 바이트로 바꾸십시오 print$@.print"$@ " 있습니다.

@MartinEnder 덕분에 -6 바이트 !


펄, 53 바이트

51 바이트 코드 + 2 -na

smartmatch 연산자를 사용하는 대체 솔루션 :

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

용법

공백으로 구분 된 입력 목록이 필요합니다.

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'

3

Pyth - 45 38 35 바이트

=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

Leaky Nun 덕분에 -1 바이트 더!

입력은 공백으로 구분되어야하며 모두 소문자 여야합니다. pac-man이 입력되어 있지 않으면 별도의 행에 누락 된 고스트를 출력합니다.


"팩맨"을 잊어 버렸습니다
Jacques Marais

@JacquesMarais 아니요, 작동합니다. : z \ a는 입력에 "a"가 있는지 감지하고 입력에 "a"가있을 경우 pac-man이 입력에있을 경우
KoreanwGlasses

Pyth 링크를 클릭 했는데 "Pac-Man"을 입력해도 작동하지 않습니다. "Pac-Man"을 입력하면 이름이 아닌 모든 이름이 표시됩니다.
Jacques Marais

@JacquesMarais 내 실수. 결정된.
KoreanwGlasses

}\az또한 z문자 가 포함되어 있는지 테스트합니다 a. 1 바이트 더 짧습니다.
Jakube

3

C, 171 바이트

NULL로 끝나는 문자열 배열을에 전달 f()하면 누락 된 이름이 인쇄됩니다.

*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);}}

아이디어로 사용해보십시오.


2

PowerShell v4 +, 107 바이트

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

PowerShell에는 삼항 연산자 또는 모든 종류의 기능이 없기 때문에 다른 것에 비해 약간 어색합니다. map 스타일 연산자 합니다. 결과적으로 우리는 우리 자신의 것을 만듭니다.

입력을 받아 $n문자열 (의 명시 적 배열로 예 .\which-ghosts-are-missing.ps1 @('Clyde','Blinky'). 프로그램의 나머지 부분에 약간의 논리를 통해 우리의 인덱스 것을 배열로 구성되어있어 하나의 의사 원이다 [...].이 논리는 단순히 여부 -입력 배열에 문자가 어느 곳입니다 -join함께 에드 단일 문자열로 만든 다음 char배열 로 다시 캐스팅 하여-in 연산자 . 따라서 Pac-Man입력 배열에 있으면 $TRUE의사 배열의 두 번째 요소가 선택되고 그렇지 않으면 첫 번째 배열이 선택됩니다. 선택된다.

Pac-Man배열에없는 경우 의사 삼항 배열의 첫 번째 부분이 출력됩니다. 이것은 $n모든 고스트의 배열과 연결된 입력 배열의 조합입니다 (에 저장 됨 $x). 우리 파이프에 새로운 배열 것을 Group-Object함께 항목과 같은 어떤 의지 그룹은 다음 사용 선택 Where-Object을 통해 별명 ( |?{...}자신 만 항목 .count입니다 -eq에 연간를 1그 모두가 괄호에 캡슐화합니다., 우리는을 선택.Name 속성을. V4 요구 사항이 들어오는 곳입니다, v4에서와 같이 해시 테이블 레이블을 참조 할 수 있습니다.|Select Name 몇 바이트를 절약 할 수 있습니다.

그렇지 않으면 Pac-Man입력 배열에 있기 때문에 모든 고스트를 출력해야합니다. 고맙게도이 파일들을에 저장 했으므로이 $x경우에 선택입니다. 어느 쪽이든, 파이프 라인은 이제 고스트의 문자열 배열을 포함하며 출력은 암시 적입니다.

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

2

파이썬 2, 66 61 96 바이트

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

입력은 목록이어야하며, 출력은 이름으로 구분 된 문자열입니다 ,.

팩맨을 처리하지 않는 61 바이트 버전 :

print",".join({"Blinky","Inky","Pinky","Clyde"}-set(input()))

8
이 항목에서는 Pac-Man을 처리하지 않습니다.
Destructible Lemon

당신은 필요하지 않습니다 set[...]. {...}세트 리터럴을 사용하십시오 .
Dennis

나는 3 번 도전을 읽은 후에도 팩맨을 알지 못했습니다 ... 코드를 고칠 것입니다.
acrolith

2

하스켈, 91 바이트

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

입력은 문자열 목록입니다. "Pac-Man"의 존재 여부에 따라 목록을 그대로 사용하거나 목록 차이를 수행할지 여부를 결정합니다.

추가 재미를 위해 여기 팩맨이 없습니다 :

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

이 답변을 곧 개선 할 것입니다. 늦은 밤에 슈퍼했습니다.


2

파이썬 3, 77 바이트

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

여기에 내가 놀고 있었지만 운동하지 않은 89 바이트의 또 다른 대답이 있습니다 :(

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

그리고 여기에 85 바이트의 원본이 있습니다.

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

이들은 모두 공백 / 쉼표로 구분 된 단일 문자열을 사용합니다.


2

05AB1E, 47 44 바이트

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

설명

•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

온라인으로 사용해보십시오


2

파이썬 2, 151 바이트

이미 세트와 문자열을 사용하는 Python 답변이 있으므로 목록으로 작업하도록 제한하기로 결정했습니다. 그러나 사용 된 접근 방식이 일반적인 방법과 다르기 때문에 다음과 같습니다.

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

여기서 예상되는 입력은 문자열 목록입니다.

이 방법은 0,1,2,3 및 4 요소의 가능한 모든 조합을 순서대로 고려하지 않는 것입니다. 이것은에 의해 수행

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

어떤 반환

[[], ['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']]

입력 목록 외에 유령 목록 전체를 생성하는 것을 찾으십시오.

그런 다음 문자열인지 확인합니다. 'Pac-Man' 이 입력의 일부 하고, 경우에 따라 전체 고스트 목록이 반환됩니다. 그렇지 않은 경우 입력의 일부가 아닌 것만 반환됩니다.

모든 고스트 이름 ( o)을 포함하는 목록 은 알파벳순으로 정렬되며 ( )로 작성된 목록과 동일 sorted(l+x)합니다. 이것은 파이썬에서 다음 ['a','b']==['b','a']과 같이 평가되는 False반면 ['a','b']==['a','b']True 입니다.

응답을 목록 목록으로 리턴하도록 허용 된 경우 ( [0]첫 번째 목록 이해의 끝에서 를 제거하여) 3 바이트를 저장할 수 있습니다 . 그러나 그것이 올바른 출력인지 확실하지 않기 때문에 나는 그들을 세고 있습니다.


2

오브젝트 파스칼, 204 바이트

바이너리를 사용하여 존재하는 유령 + 팩맨을 찾는 두 개의 루프. 명령 행에서 인수를 가져옵니다. 더 많은 바이트를 절약 해 준 @manatwork에게 감사합니다!

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.

언 골프 드 :

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.

세트를 사용하는 이전 버전, 227 209 바이트

존재하는 유령 + 팩맨을 찾기 위해 세트를 사용하는 두 개의 루프. 명령 행에서 인수를 가져옵니다.

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.

언 골프 드 :

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.

좋은. 그것을 단축시키는 몇 가지 방법 : integerbyte; 선언을 제거 g하고 그 값을 직접 사용하십시오. ParamCount5(작업을 이해함에 따라 어쨌든 중복되거나 유효하지 않은 입력 항목은 없습니다). 적어도 FreePascal에서 숫자 리터럴은 i:=1to 5do또는 같은 키워드를 터치 할 수 있습니다 5in s. 당신도 그것을 지원하는지 확인하십시오.
manatwork

나는 비트 대신를 사용하여 생각 set도움이 될 것입니다 : pastebin.com/r2nB5wY3
manatwork

@manatwork 와우, 뭔가 새로운 것을 배울 때마다 ..를 제외하고는 당신의 제안을 사용하고 있습니다 ParamCount. 왜냐하면 실제 입력 매개 변수보다 큰 숫자에 대해서는 동작이 정의되어 있지 않기 때문입니다 (적어도 문서에는 아무것도 없습니다).
hdrz

1

PHP 프로그램, 84 바이트

<?print_r(array_diff([Blinky,Inky,Pinky,Clyde],in_array('Pac-Man',$argv)?[]:$argv));
  • 명령 행에서 인수를 가져오고 결과를 배열로 인쇄합니다.
  • filename은 유령이나 'Pac-Man'이 아니어야합니다!
  • 짧은 고장 : 모든 유령에서 제거하십시오 ( 'Pac-Man'이 인수에있는 경우 : 아무것도 아니면 다른 모든 인수). 재귀 적으로 결과 인쇄

예 :

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

PHP 함수, ​​90 바이트

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

배열을 가져 와서 반환합니다. 빈 입력에는 빈 배열을 사용하고 다른 거짓 값은 없습니다!

더 생각

  • 교체 in_array(...)strstr(join($argv),'-')감지하는 -대신Pac-Man (-2)
  • 용도 ereg('-',join($argv)) 대신에 (다른 -2)
  • 프로그램은 PHP <5.4에서 register_globalson으로 다른 6 바이트를 잃을 수 있습니다 .
  • 대체 : 프로그램이 쉼표로 구분 된 목록을 인쇄 할 수 있도록하기 <?print_r(<?=join(',',(+2). ;echo""줄 바꿈에 대한 통화에 추가 할 수 있습니다

1

jq, 69 자

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

입력은 JSON, 출력은 JSON, 조건부 구문은 고통입니다.

샘플 실행 :

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"
]

온라인 테스트 :


1

TSQL (sqlserver 2016), 114 바이트

골프 :

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

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

언 골프 드 :

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

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

깡깡이


1

Lotus Notes @Formula 언어, 85 84 75 74 자

@If 할당을 반대로하여 -1 문자

-9 @Contains (i; "-")를 @Like (i; "%-%")로 변경하고 @Trim을 제거했습니다 (공간을 구분 기호로 사용하는 경우 필요하지 않음)

줄 바꾸기를 제거하여 -1

i (텍스트, 편집 가능, 다중 값) 및 o (텍스트, 계산, 다중 값)의 두 필드로 양식을 작성하십시오. o에 다음 공식을 입력하십시오.

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

Notes 클라이언트에서 양식을 사용하여 새 문서를 작성하고 i 필드에 이름을 입력 한 후 F9를 눌러 문서를 새로 고치십시오. o 필드에 답변이 표시됩니다.

이것은 @Like와 @Replace가 문자열이나 문자열 목록에서 모두 사용될 수 있다는 사실을 이용합니다.


1

C # 135 바이트 126 바이트

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

(여기서 i는 입력을 포함하는 문자열 배열입니다)

다른 예제를 살펴본 후 C #이 장황한 언어라는 것을 알았습니다. :)


1
공백과 줄 바꿈을 제거하여 126 바이트를 얻을 수 있습니다.
acrolith

1

파이크, 45 39 38 37 32 바이트

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

여기 사용해보십시오!

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

1

배치, 141 바이트

@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%

:~1,-1선행 및 후행 공백이 허용되는 경우 6 바이트를 뺍니다 . 제목은 Pac-Man이 필요하지만 고스트는 대소 문자를 구분하지 않습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.