예 또는 아니오를 결정합니까?


19

문자열 [길이 1-20]을 입력 한 후, 예 ( y) 와 아니오 ( n) 를 포함하는 문자 만 포함하면 프로그램은 결과를 출력해야합니다 (y 또는 n). 입력 예 :yynynynny y를 출력합니다.

결과는 y와 n을 다음과 같은 방식으로 결합하여 결정됩니다.

  • Y ES 및 N 같음 O N O

  • Y ES 및 Y ES는 동일 Y 말이지

  • n o와 n o는 y es 와 같습니다

문자열에 두 개 이상의 문자가 포함 된 경우 (예 : ...) 계산은 동일하게 나타납니다. 예 :

  • Y ES 및 Y ES 및 n은 등호 O N O (no로 첫 번째 예와 더 병합가. 다음도하고 그렇습니다이 남아 있지과 같은 일이 다시 발생하기 때문에)

  • N O 및 N O 및 N 동등한 O를 N O (yes로 처음 2 개의 10의 병합, 다음 예와 아니오 no로 등장하지 않는,이 남아 있지)

출력이있는 입력 예 :

  • yynynynynyyn = n

팁 : 프로그램이 작동하는 문자 순서는 중요하지 않습니다. (예를 들어, 뒤에서 또는 뒤에서 입력을 읽을 수 있고, 문자를 혼합하고, 정렬하거나, 무엇이든 정렬 할 수 있습니다. 올바른 출력값은 무엇입니까?) 재미 있습니다!

승리 기준 : 이것은 이므로 바이트 단위로 가장 짧은 코드입니다.


3
명확한 사양으로 첫 번째 도전을 축하합니다! (아쉽지만 일부 커뮤니티 회원은 "사소한"도전을 좋아하지 않습니다 ....)
user202729


7
대체 페어를 출력 할 수 있습니까? 말 1에 대한 y, 그리고 0에 대한 n.
Oliver

5
문자 목록으로 입력 할 수 있습니까?["y", "n", "n"]
Okx

3
이 과제의 사본이 크게 하향 조정되었으므로이 과제를 복제본으로 닫는 것이 도움이되지 않는다고 생각합니다. 오히려 것은, 이전 문제가 있기 때문에이 하나의 중복해야 더 나은 도전을 떠날 그것의 정책이 열려 나는이 문제 재개 한
DJMcMayhem

답변:


9

, 6 바이트

§yn№Sn

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

    S   Input string
   № n  Count number of `n`s
§yn     Circularly index into string `yn`
        Implicitly print appropriate character

1
어떻게 작동하는지 설명 해주세요.
Malady

@Malandy Link는 자세한 코드 버전입니다.
Adám

1
@ Adám 실제로 나는 보통 하나를 추가하지만, 작업 시간에이 부분을 없애고 편집하는 것을 잊어 버렸습니다.
Neil

14

옥타브 , 29 27 바이트

실수를 지적 해 주신 @RickHithcock 에게 감사합니다 . 이제 수정되었습니다. 또한 @StewieGriffin 덕분에 2 바이트가 줄었습니다!

@(s)'yn'(mod(sum(s+1),2)+1)

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

설명

ASCII 코드 포인트 'y'는 홀수이며 홀수 'n'입니다. 코드

  1. 추가 1하기 위해 상기 입력 문자열의 각 문자에 'y'짝수 및 'n'홀수;
  2. 합계를 계산합니다.
  3. 홀수 12경우 결과를 짝수로 줄입니다.
  4. 문자열에 인덱스 (1부터 시작) 'yn'.

아마도 명백한 것이 누락되었지만 이것은 -4 바이트에 대한 제한된 테스트 사례에서 동일한 방식으로 작동하는 것 같습니다 . 옥타브를 모르기 때문에 아마 잘못되었습니다!
Dom Hastings

2
@DomHastings OP에 제공된 yynynynny에 실패하면 y를 반환해야하지만 n을 반환해야합니다.
Skidsdev

9

자바 스크립트 (ES6), 28 바이트

입력을 문자열로받습니다.

s=>'ny'[s.split`n`.length&1]

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


자바 스크립트 (ES6), 30 바이트

문자 배열로 입력을받습니다.

y=>'yn'[n=1,~~eval(y.join`^`)]

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


31 : s=>'yn'[s.match(/n/g).length&1]: P
ASCII 전용

@ ASCII-only 적어도 하나를 포함하지 않는 문자열에서는 실패합니다 n.
Arnauld

아, 그래 죄송합니다> _>
ASCII 전용


7

젤리 , 7 바이트

ċ”nị⁾ny

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

문자열 " nny ""n , " ndex의 숫자를 생략 합니다. (모듈로 2 포함)


ċḢịɗ⁾ny

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

{ ċ 번호를 잊어 버린 경우 ead를 가져간 다음 ị ndex into} 문자열 ⁾ny .


OCSị⁾ny

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

위의 옥타브 답변과 유사합니다. 계산 O RD 값 테이크 C의 (ORD 각 값에 대해 omplement을 X 계산 1-X ) (S) 후, UM I ndex 문자열로 ⁾ny .


나를 혼란스럽게 만드는 가짜 솔루션이었습니다!
Jonathan Allan

7

APL (Dyalog Unicode) , 15 바이트

'ny'[1+=/'y'=⍞]

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

참고 : TIO의 기본값은 ⎕IO = 1입니다. 로 실행 ⎕IO←0하면

APL (Dyalog Unicode) , 13 바이트

'ny'[=/'y'=⍞]

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

이것은 XNOR 기능입니다 (때로는 오래된 BASIC에서 EQV라고도 함).

분해 / 분석 :

               - Accept string input  
         'y'=   - Compare it to the letter `y`. This "converts" the input 
                  string into a vector of 1s and 0s where the 1s correspond 
                  to 'y' and the 0s to 'n'.  
       =/       - XNOR/EQV/equality reduction - converts the vector into a 
                  single boolean value by evaluating e.g., 1 xnor 0 xnor 0 
                  xnor 1 ...  
     1+         - adds one for subscripting in IO = 1 environment. In 
                  IO = 0, should be omitted (save 2 bytes)  
    [         ] - subscript indicator - the expression, which should be 
                  either a 1 or 2 (0 or 1 in `⎕IO = 0`), is now going to be 
                  interpreted as a subscript of...  
'ny'            - The string of possible results - a 0/1 is 'n', a 1/2 is 'y'

XOR은 0을 무시하고 1을 뒤집는 반면, XNOR은 1을 무시하고 0을 뒤집습니다. "초기"는 XOR과 같이 0 대신 1이됩니다.
FrownyFrog

@FrownyFrog-그런 식으로 볼 수 있다고 생각합니다 ... 또는 입력 값이 모두 같은지 확인하는 것으로 볼 수 있습니다.
Jeff Zeitlin

6

Pyth, 9 바이트

@"yn"l@\n

여기 사용해보십시오

설명

@"yn"l@\n
     l@\nQ   Get the length of the intersection of the (implicit) input and "n".
@"yn"        Modular index into "yn".

6

dc , 39

?dsiZdsl[[]r1-d0<m]dsmxklixzll-2%B*C1+P

입력 문자열은 STDIN에서 읽으며 형식이어야합니다 [yynynynynyyn].

dc는 문자열 처리로 알려져 있지 않지만 여기서 작동하려면 충분합니다. 여기서 접근 방식은 ns 를 세고 y짝수 또는 n홀수이면 출력 하는 것 입니다. 입력 문자열을 매크로로 실행하면됩니다. 모든에 대한 오류를 dc출력 하고 문자열을 팝하여 모든에 대해 인쇄하려고 시도합니다 . 먼저 스택 에 빈 문자열이 많이 있는지 확인하십시오 (총 입력 문자열 길이) . 그런 다음 입력 문자열을 실행 하고 스택에 몇 개가 남아 있는지 확인합니다 . 원래 문자열 길이를 빼고 (-ve) 총 s 수를 제공합니다 . 나머지는 mod 2를 수행하기 위해 산술적이며 출력이 ASCII 또는로 나타납니다 .'y' (0171) unimplementedyn[][]nyn

?dsi                                    # Read input string, duplicate, store in register i
    Zdsl                                # Get input length, duplicate, store in register l
        [         ]                     # define macro to:
         []                             #   push empty string
           r                            #   swap empty string and remaining length 
            1-                          #   subtract 1 from length
              d0                        #   duplicate and compare with 0
                <m                      #   if >0 recursively call this macro again
                   dsmx                 # duplicate macro, store in register m and execute
                       k                # discard left-over 0
                        lix             # load input string and execute as macro
                           z            # get stack length
                            ll-         # load string length and subract
                               2%       # mod 2 (result is -ve because difference is -ve)
                                 B*     # multiply by 11 ('y' - 'n')
                                   C1+  # add 121 ('y')
                                      P # print result as ASCII char

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


6

Japt , 8 바이트

"yn"gUèn

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

설명:

"yn"gUèn
"yn"       String literal - "yn"
    g      Return the char at index:   
      è      Number of matches where:
       n       "n" is found in
     U         Input

JAPT는 그렇다면, 인덱스 포장을 사용하여 Uèn반환 2, 그것은 반환 y에서 문자를 가져올 때 "yn".


내가 가진 것과 동일합니다.
Shaggy

5

펄 6 , 21 바이트

{<y n>[.comb('n')%2]}

시도 해봐

넓히는:

{  # bare block lambda with implicit parameter $_

  # index into the list ('y', 'n')
  <y n>[

    .comb('n') # get every instance of 'n' (implicit method call on $_)
    % 2        # turn it into a count and get the modulus

  ]
}



5

J , 10 9 바이트

{&'ny'@=/

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


1
매우 영리한 축소 사용!
Adám

정말 좋은 해결책!
Galen Ivanov

(내 APL 솔루션과 마찬가지로) / 둘 다 솔루션의 분해를 제공 하시겠습니까? (우연히, 알고리즘이 동일한 경우에도 APL 솔루션을 J 솔루션과 별도의 솔루션으로 게시해야합니다.)
Jeff Zeitlin

{&'ny'@=/바이트를 저장합니다.
algorithmshark

@algorithmshark 감사합니다!
FrownyFrog

3

R , 46 44 바이트

"if"(sum(1+utf8ToInt(scan(,"")))%%2,"n","y")

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

주세페와 ngm 덕분에 2 바이트가 줄었습니다. Luis Mendo의 옥타브 포트 답변.


옥타브 응답에서 가장 쉽게 영감을 얻습니다. Octave는 문자열을 코드 포인트로 더 쉽게 변환 할 수 있다는 이점이 있지만 몇 바이트 아래로 접근 방식을 이식 할 수 있다고 생각합니다.
주세페

sum(utf8ToInt(scan(,""))%%2)%%21 바이트를 저장합니다.
ngm

@ngm @Giuseppe는 슬프게도 n+1을 먼저 추가해야합니다.
JayCe

3

apt, 9 바이트

Oliver는 나를 가장 짧은 해결책으로 이겼습니다. 여기서 1 바이트 더 긴 커플이 있습니다.

B*aUèÍu¹d

시도 해봐

#ndB*UèÍv

시도 해봐


설명

              :Implicit input of string U
B             :11
 *            :Mutiplied by
  a           :  The absolute difference of 11 and
   UèÍ        :    The count of "n" in U
      u       :    Mod 2
       ¹d     :Get the character at that codepoint
              :Implicit input of string U
#n            :110
   B*         :Add 11 multiplied by
        v     :  The parity of
     UèÍ      :    The count of "n" in U
  d           :Get the character at that codepoint

3

/// , 24 바이트

/ny/n//nn/y//yy/y//yn/n/<input>

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

하나의 문자 대체를 사용하는 것이 쓸모 없거나 (그 대신 무언가를 삽입하는 경우) 출력이되지 않도록 (아무 것도 삽입하지 않음) 이것이 가장 짧은 /// 프로그램이라고 생각합니다. 그러나 프로그램은 두 개의 문자 사례를 처리해야하므로 이는 최소화되어야합니다.

먼저의 모든 y권리를 제거합니다 n. 그런 다음 LTR 대체를 활용 n하여 double을 s로 바꿉니다 y. 이 단계에는 많은 ys 가 있고 그 뒤에 최대 하나가 있습니다 n. 우리는 ys 를 중복 제거하고 n그것을 사용하여 마지막을 걸레로 y만듭니다.


3

MATL , 8 바이트

Qs'ny'w)

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

Luis Mendo 덕분에 2 바이트를 절약했습니다! 이전에 명시 적 계수 명령을 사용하여 색인을 범위로 가져 왔습니다.1,2 .

설명

이것은 MATL에 모듈 식 인덱싱이 있다는 사실을 사용하므로 문자열의 첫 번째, 세 번째, 다섯 번째 ... 요소가 ny동일합니다 ( n). 문자열의 두 번째, 네 번째, 여섯 번째 ... 요소도 마찬가지입니다 ( y).

Q          % Grab input implicitly, and increment each ASCII-value by 1
           % This makes 'n' odd, and 'y' even
 s         % Take the sum of all elements
  'ny'     % Push the string `ny`
      w    % Swap the stack to facilitate the indexing
       )   % Take the n'th element of 'yn' and output it.

1
'yn'3)준다 y...? 이제는 영리한 디자인 Luis =) 팁을 주셔서 감사합니다! :)
Stewie Griffin






2

자바 (OpenJDK 8) , 143 바이트

a->{char[] u=a.toCharArray();if(u.length==1)return u[0];else{char b=(u[0]==u[1])?'y':'n',i=2;for(;i<u.length;b=(b==u[i++])?'y':'n');return b;}}

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

입력을 목록으로 가져 오면 :

자바 (OpenJDK 8) , 118 바이트

u->{if(u.length==1)return u[0];else{char b=(u[0]==u[1])?'y':'n',i=2;for(;i<u.length;b=(b==u[i++])?'y':'n');return b;}}

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

설명:

(문자열로 입력)

char[] u=a.toCharArray();  //turn string into char array
if(u.length==1){    
    return u[0];      //if single letter, return it
}else{
    char b=(u[0]==u[1])?'y':'n';     //first two XNOR
    for(char i=2;i<u.length;b=(b==u[i++])?'y':'n');   //XNOR each remaining character
return b;    //return final result
}

3 진 -if (-4 바이트)에는 괄호가 필요하지 않으며 char[]u(-1 바이트) 에서 공백을 제거 할 수 있습니다 . 그리고 if(u.length==1)될 수있다 if(u.length<2)(-1 바이트). 골프에는 더 많은 것이 있을지 모르지만 지금은 시간이 없습니다. :)
Kevin Cruijssen


2

Cubix , 24 20 바이트

Cubix와 함께 연주 한 이후로 오랜 시간이 걸렸습니다.

i;iwW-?;o@..!'yv.n'|

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

문자열을 단계별로 실행하고 문자를 현재 결과와 비교하는 상당히 순진한 구현입니다.

대화식 데모

다음과 같이 큐브에 풀립니다.

    i ;
    i w
W - ? ; o @ . .
! ' y v . n ' |
    . .
    . .
  • W IP를 왼쪽으로 이동
  • i 초기 캐릭터를 얻는다
  • i? 문자를 얻고 EOI (-1)을 테스트하고 루프 시작
    • EOI가 ;o@TOS를 제거 하면 TOS를 문자로 출력하고 종료하십시오.
  • 그밖에 -W! 빼기, ip를 왼쪽으로 이동, 진실성 테스트
    • 진실하다면 'n 문자 n을 TOS로 푸시
    • 거짓이 |!'y반영되면 테스트하고 문자 y를 TOS로 푸시하십시오.
  • v'.;w를 밀고 제거하는 큐브 주위로 리디렉션합니다. 캐릭터와 루프로 다시 이동


2

Befunge-98 , 13 바이트

~k!aj@,+n'*b!

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

기본적으로 모든하는 0을 반전 n입력에 한 번 더 좋은 측정을 위해, 다음 출력 y을 위해 1n대한0

~     Get inputted character
 k!   Invert the current value 110 (n) or 121 (y) + 1 times
   aj Jump past the rest of the code
~     Get input again. If no more input, reverse direction
            ! Invert the value once again
       +n'*b  Convert 0/1 to n/y
     @,       Output letter


2

자바 스크립트, 39 37 바이트

s=>[...s].reduce((x,y)=>x==y?'y':'n')

입력 문자열을 분리 한 후 간단한 축소 기능.


1
PPCG에 오신 것을 환영합니다! 귀하의 코드는 입력이 변수에 있다고 가정합니다 . 여기서 유효한 입력 방법s아닙니다 . 대신 s=>42 바이트의 답변 앞에 추가하여 입력을 인수로 취하는 람다 함수를 답변으로 만들 수 있습니다 .
dzaima

골프 제안 : 대체 s.split('')[...s]37 바이트s=>[...s].reduce((x,y)=>x==y?'y':'n')
dzaima

2

C (gcc) , 52 50 바이트

제안에 @Neil에게 감사드립니다.

ns 계산 솔루션을 빌 렸지만 카운트 를 유지하는 대신 초기 상태와의 역수를 뒤집습니다 n.

i;f(char*a){for(i=*a;*++a;i^=*a&1?0:23);return i;}

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


*a&1?0:23바이트를 return i저장하고 다른 바이트를 저장합니다.
Neil

제안i;f(char*a){for(i=*a;*++a;i^=*a&1?:23);a=i;}
ceilingcat

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