Odd'em out : 편지


11

객관적인

임의 크기의 행렬로 홀수 문자를 정렬하여 반환하는 프로그램 또는 함수 (또는 이에 상응하는)를 작성하십시오.

세부

이와 같은 임의의 차원의 입력으로 행렬 (문자열)이 전달됩니다.

bbbbbbbbbb
bbbbbdbbbb
bbbbbbbbbb
bbbbbbbbbb
bbbbbbbbbb

당신의 임무는 나머지와 일치하지 않는 문자 (이 경우, d2 행, 6 행에 있음)를 찾아 해당 문자를 출력으로 반환하는 것입니다. 행렬은 문자 A-Z, a-z개행 ( \n, 행 끝에 만)으로 구성되며 크기는 5x5에서 10x10 (25-100 자)입니다.

표준 허점이 적용됩니다. 이것은 코드 골프 도전입니다. 최소 바이트 코드를 가진 항목이 이깁니다.

입력

입력은 프로그램 인 경우 표준 입력을 통해 문자열로 전달되거나 함수 (또는 유사한) 인 경우 인수로 전달됩니다.

산출

행렬에서의 "홀수"인 단일 문자 또는 None , nil, NUL, 또는 캐릭터 "None"에는 "홀수"문자가 존재하지 않는 경우.

더 많은 예

AAAAAAA
AAAAAAA
AAAAAAA
AAAIAAA
AAAAAAA

대답: I

vvqvvvvvvv
vvvvvvvvvv
vvvvvvvvvv
vvvvvvvvvv
vvvvvvvvvv

대답: q

puuuuuuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu

대답: p

발전기

다음은 프로그램을 테스트하는 데 사용할 수있는 Python으로 작성된 임의 행렬 생성기입니다. 참고 : 실수를하거나 홀수 문자를 입력하지 않을 가능성이 약간 있습니다.


1
다음 은 파이썬 코드를 JS로 문자 그대로 번역 한 것입니다.
Arnauld

1
@juniorRubyist의 "보너스 제거"는 "보너스를 필수로하는"것과 다릅니다. 지금까지 선택 사항 인 부분을 챌린지 요구 사항으로 이동하면 기존 답변의 상당 부분이 무효화되었습니다.
Martin Ender

답변:



6

J , 12 10 7 바이트

-.}./.~

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

    /.~        Group identical items together
  }.           Remove one item from each group
-.             Remove the rest from the input

10 바이트 버전

-._1 1{\:~

s ...

       \:~        Sort down
  _1 1{           Take the last character (which is a newline) and the second one.
-.                Remove those from the input

2
@ FrownyFrog 이것은 이상한 캐릭터를 찾는 영리한 방법입니다
Galen Ivanov

내가 더 좋아하는 것을 결정할 수 없다 :이 사랑스러운 후크 또는 당신의 드래곤 농담 ...
Jonah

4

Brachylog , 8 4 바이트

oḅ∋≠

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

설명

나는 전에 Brachylog를 사용하지 않았으므로 이것이 최적이 아닐 수 있습니다.

oḅ∋≠  Input is a string.
o     Sort the input.
 ḅ    Split it into blocks of equal elements.
  ∋   There is a block
   ≠  whose elements are all different.
      That block is the output.

길이 1의 결과를 얻기 위해 ∋≠after 를 사용하는 것은 매우 영리합니다. Brachylog 팁 질문 에 반드시 게시해야합니다 .
페이탈 라이즈

@ Fatalize 감사합니다, 팁을 추가했습니다.
Zgarb

3

K (oK) , 7 6 바이트

해결책

*<#:'=

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

예:

*<#:'="vvqvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv"
"q"

설명:

약간 짧은 접근 방식을 찾았습니다. 오른쪽에서 왼쪽으로 평가되었습니다.

*<#:'= / the solution
     = / group matching items together
  #:'  / count (#:) each (')
 <     / sort ascending
*      / take the first one

메모:

이 도전의 보너스 측면이 떨어질 것으로 예상하지만이 솔루션은 \n홀수 문자가 없으면 개행 문자를 반환합니다 .

*<#:'="vvvvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv\nvvvvvvvvvv"
"\n"

3

프롤로그 (SWI) , 46 바이트

p(L):-select(X,L,Y),\+member(X,Y),writef([X]).

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

또는 프롤로그 쿼리 의 표준 실제 출력이 올바르지 않은 경우 :

프롤로그 (SWI) , 48 바이트

Z*L:-select(X,L,Y),\+member(X,Y),char_code(Z,X).

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

설명

Find the first element X in the input  
that when removed, results in output  
that does not contain X

then depending on the version above either:  
print X as a character  
or  
return X as an atom

3

C (gcc) , 93 92 90 66 62 바이트

함수로서 훨씬 짧다

t;f(char*p){for(t=*p;*p;)t^*p++?putchar(*p^*--p?*p:t),*p=0:0;}

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

테스트 코드

main()
{
    char s[99];
    for(;gets(s);)f(s);
}

구 버전은 프로그램입니다

C 86 바이트

char*p;s[9];main(t){for(;p=gets(s);)for(t=*p;*p;)t^*p++?putchar(*p^*--p?*p:t),*p=0:0;}

홀수 문자를 출력하거나 아무것도 출력하지 않습니다. 이런 식으로 실행;

C:\eng\golf>python matrix_gen.py | a.exe
X
C:\eng\golf>python matrix_gen.py | a.exe
G
C:\eng\golf>python matrix_gen.py | a.exe
x
C:\eng\golf>python matrix_gen.py | a.exe

C:\eng\golf>python matrix_gen.py | a.exe
J

gets()\ n 문자를 제거하여 입력을 위생 처리하므로 테스트 드라이버 에 넣는 것이 공정하다는 것을 모르겠습니다 . 함수가 원래 입력에서 작동하지 않도록 일부 작업을 수행하고 있습니다.
Michael Dorgan

@MichaelDorgan 파이썬 스크립트의 파이프 입력과 TIO의 입력으로 작동합니다. 다른 이들은 단순히 도전 정신으로 보이지 않는 입력을 하드 코딩했습니다.
cleblanc

3

05AB1E ,  4  2 바이트

Adnan 덕분에 2 바이트 절약

.m

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

설명

.m   # push a list of the least frequent character(s) in input

입력 길이가 5 줄 이상임을 보장하면서 줄 바꿈을 제거해야합니까?
Shaggy

@Shaggy : 아니요. 그것은 2x2행렬 을 다루는 것이 었습니다 . 나는 그 부분을 놓쳤다 5x5. 감사!
Emigna

nil"홀수"가없는 경우 반환 해야합니까?
매직 문어 Urn

@MagicOctopusUrn이 부분은이 답변이 게시 될 때 선택 사항입니다. 나는 그 변화가 지금 대부분의 답변을 무효화 시킨다고 생각한다.
Martin Ender



2

C, 94 바이트

포인터로 돌아갑니다. 없는 경우을 반환하십시오 \0.

메모리 누수가 발생합니다. int4 바이트 라고 가정 합니다.

*t;f(c,p,i)char*c,*p;{t=calloc(64,8);for(*p=-1;*c;c++)t[*c]--;for(i=0;++i<128;)!~t[i]?*p=i:0;}

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



@Shaggy 사실, 나는 (다른) 사용자가 그 규칙에 대해 명시 적으로 알고 있지만 여전히 이와 같은 답변을 게시하는 것을 볼 때 그 규칙을 해석하는 방법을 모른다.
user202729

2
@ user202729, 다른 사람들이 그렇다고해서 그것이 옳다는 것을 의미하지는 않습니다.
Shaggy

@Shaggy 글쎄, 나는 명시 적으로 규칙을 지적했지만 그 사용자는 "이 규칙은 유효하다"고 명시했다. 무슨 말을해야할지 모르겠습니다. | 이 경우 함수 t는 처음이 아닌 매번 호출하기 전에 배열 을 0으로 설정 해야합니다 .
user202729

@Shaggy 감사합니다.
Colera Su


2

배쉬 , 15 20 바이트

fold -1|sort|uniq -u

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

설명 : 한fold1문자를 입력하고 sort일치하는 문자 그룹으로 입력 한 다음 uniq대기중인 행만 인쇄합니다 .

이 방법으로 문제를 해결하고 해결해 준 @Nahuel Fouilleul 에게 감사 합니다.


홀수 문자가 두 번째 또는 반수 인 경우 작동하지 않습니다
Nahuel Fouilleul

@NahuelFouilleul Good catch ... 현재이 문제를 해결하는 방법을 잘 모르겠지만 제안 된 수정 사항이 없으면 나중에 수정하거나 삭제하겠습니다.
저스틴 마리너

그것은 간단하게 고칠 수 |sort|있지만 더 나은 해결책이있을 수 있습니다
Nahuel Fouilleul

또한 grep 솔루션을 찾았지만 더 길었습니다grep -oP '^(.)((?=(?!\1).){2}|.*\K(?!\1).)'
Nahuel Fouilleul

@NahuelFouilleul 나는 sort고칠 것입니다 . 원하는 경우 언제든지 그렙 답변을 자신의 것으로 게시 할 수 있습니다.
저스틴 마리너



1

Matlab, 25 바이트

a=input('');a(a~=mode(a))

"a"의 입력 "a"는 "a"의 모드가 아닙니다. 홀수 볼이없는 빈 배열을 출력합니다.


1

하스켈, 33 * 0.75 = 24.75 바이트

f s=[c|[c]<-(`filter`s).(==)<$>s]

홀수 문자가 없으면 빈 목록을 반환합니다.

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

c행렬의 각 문자 에 대해 (string으로 제공됨 s) 모든 문자의 문자열을 s같고 c길이가 1 인 문자열을 유지하십시오.


1

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

null홀수 문자가없는 경우 반환 합니다.

s=>s.match(`[^
${s.match(/(.)\1/)}]`)

테스트 사례


1

Japt , 6 바이트

입력을 여러 줄 문자열로 받아서 단일 문자열을 출력하거나 솔루션이없는 경우 빈 문자열을 출력합니다.

k@èX É

시도 해봐


설명

입력에서 현재 요소 ( ) 의 발생 횟수를 세고 ( ) k함수 1을 통과하여 진리 ( ) 를 반환하는 문자를 제거하고 1을 뺍니다 .@èXÉ



1

젤리 , 4 바이트

ċ@ÐṂ

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

\n홀수 문자가없는 경우 (한 줄 바꿈)을 반환하십시오 . 명백하게\n 인쇄 가능한 문자가 아닙니다.

우연히 이것은 Mr.Xcoder Python 답변과 정확히 동일한 알고리즘입니다. (독립적으로 생각해 냈습니다)

설명:

  ÐṂ    Ṃinimum value by...
ċ@      ċount. (the `@` switch the left and right arguments of `ċ`)

m×n매트릭스 에서 작동하기 때문에 작동합니다 .

  • 이상한 문자가 존재하는 경우가 있습니다 m-1줄 바꿈, 1 개 이상한 문자와 m×n-1일반 문자, 그리고 1 < m-1 < m×n-1때문이 5 ≤ m, n ≤ 10.
  • 홀수 문자가없는 경우 : m-1개행 및 m×n일반 문자가 m-1 < m×n있습니다.


1

C (gcc) , 91 86 82 79 71 바이트

f(char*s){for(;*++s==10?s+=2:0,*s;)if(*s^s[-1])return*s^s[1]?*s:s[-1];}

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

  • xor에 대한 Gastropner 에 감사 하고? 트릭 (-3 바이트)
  • 비교 버전을 수정하여 버그를 수정하고 주석에서 Gastropner 마술을 사용했습니다 .

설명:

줄 바꿈을 생략하면서 현재와 이전 문자를 비교하십시오. 다른 경우 다음 문자와 비교하십시오. 현재 또는 이전 문자를 반환하는지 알려줍니다. 이 함수는 "odd"char 값이 있으면 배열을 반환하고 홀수가 아닌 경우 0을 반환합니다. 문자 앞에 항상 줄 바꿈이 있기 때문에 "다음"문자 검사를 \0피할 수 있습니다. 홀수 문자가 없으면 for 루프에서 본질적으로 \ 0을 반환합니다.


이전의 더 섹시한 xor 코드 설명 :

다음 3 개의 문자열 값으로 실행중인 xor 마스크를 만듭니다. 모두 동일하면 값은 세 가지 중 하나와 같습니다. 그것들이 다르면, 동일한 2 개는 서로를 상쇄 시켜서 고유성을 남깁니다.

xor보다 먼저 / n을 인수 분해해야합니다. 또한 s [0]이 홀수 값인 경우 2 개의 문자가 부등식인지 확인해야합니다. 추가 비용이 || 검사.

v;f(char*s){while(s[3]){s[2]==10?s+=3:0;v=*s^s[1]^s[2];if(v^‌​*s++||v^*s)break;}}

약간의 조정으로 79. v;f(char*s){while(s[3]){s[2]==10?s+=3:0;v=*s^s[1]^s[2];if(v^*s++||v^*s)break;}}

내가 쓰고있는 쓰레기의 경우, TIO는 내가 고수하는 것입니다. 감사!
Michael Dorgan

일부 표현을 정리하는 것은 또 다른 수 있습니다 -2 77 : v;f(char*s){while(s[2]==10?s+=3:0,v=*s^s[1]^s[2],s[3])if(v^*s++||v^*s)break;} 당신은 73, 조금 그것으로 바이올린 그러나 당신의 경력이 말이 다른 하나는,이다 :v;f(char*s){for(v=-1;*++s==10?s+=2,v--:0,*s;v=0)if(*s^s[-1])return s[v];}
gastropner

네,하지만 xor는 너무 섹시 해 보입니다. :)
Michael Dorgan

s+=*++s-10?0:2대신 제안*++s==10?s+=2:0
ceilingcat


0

Alice , 16 * 75 % = 12 바이트

/-.nDo&
\i..*N@/

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

Jabberwocky중복 문자가 없으면 출력 합니다.

설명

/...@
\.../

이것은 서수 (문자열 처리 모드)에서 완전히 작동하는 선형 프로그램의 프레임 워크입니다. 실제 코드는 지그재그 방식으로 실행되며 다음과 같이 전개됩니다.

i..DN&-o

i   Read all input.
..  Make two copies.
D   Deduplicate one copy, giving only the two letters and a linefeed.
N   Multiset difference. Removes one copy of each letter and one linefeed.
    Therefore it drops the unique letter.
&-  Fold substring removal over this new string. This essentially removes
    all copies of the repeated letter and all linefeeds from the input,
    leaving only the unique letter.
.   Duplicate.
n   Logical NOT. Turns empty strings into "Jabberwocky" and everything else
    into an empty string.
*   Concatenate to the previous result.
o   Print the unique letter or "Jabberwocky".

대신 (빈 문자열로 음역)을 &-사용할 수도 있습니다 ey. 또는 스택 조작에 하나 이상의 문자를 사용하여 입력을 중복 제거하여 원치 않는 문자를 제거 할 수 N있지만 여전히 동일한 바이트 수입니다.

i.D.QXN.n*o@

Alice , 13 바이트

/N.-D@
\i&.o/

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

이것은 보너스가없는 솔루션이며 간단히 누락되었습니다 .n*.



0

APL + WIN, 16 바이트

(1=+/a∘.=a)/a←,⎕

화면 입력을 요구하고 홀수 문자를 출력하거나 홀수 문자가 없으면 아무것도 출력하지 않습니다


a/⍨1=+/a∘.=a←,⎕바이트
Uriel

@ Uriel 고맙지 만 운영자 ⍨이 내 오래된 APL + WIN 버전 5에서는 사용할 수 없습니다 :(
Graham

0

PowerShell , 39 바이트

([char[]]"$args"|group|sort c*)[0].Name

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

입력을 줄 바꾸기 (챌린지에 지정된대로)가있는 문자열로 가져 와서 char-array 로 변환합니다 . 그런 다음 Group-Object캐릭터를 이름별로 그룹화 한 다음 귀신 을 sort기준으로 캐릭터를 그룹화합니다 c. 이렇게하면 외로운 문자가 첫 번째가되므로 [0]인덱스를 가져와 출력합니다 .Name.

줄 바꿈이 "아무것도"에 허용되는 경우 보너스를받을 수 있습니다.


나는 sort c*)[0]단축 될 수 있기를 바랐 지만, 내가 찾은 것은 같은 바이트 수였습니다 ? c* -eq 1).
root

주위의 큰 따옴표를 제거하여 단축 할 수 있습니다 $args. 또한 줄 바꿈 문자가 아닌 홀수 문자가 없으면 ([char[]]$args|group|? c* -eq 1).Name정확하게 반환 null되므로 수행하는 것이 더 정확합니다 . 그러나 바이트 단위로는 여전히 37 이하로
떨어지지

@ cogumel0 큰 따옴표없이 실행되지 않습니다.
root

@root 당신이 맞습니다. 그러나 요구 사항 중 하나 (매트릭스 또는 "홀수"인 단일 문자 통과 None, nil, NUL, 또는 캐릭터 "None"가 여전히 변경되어야 아니오 "홀수"문자가 없으면한다.). 줄 바꿈은 허용되는 답변의 일부가 아닙니다.
cogumel0

@ cogumel0 아, 대답을 게시 한 후 도전이 변경되었습니다. "없음 / 없음 / 무엇이든"은 필수가 아니라 보너스였습니다. 대답을있는 그대로 유지하겠습니다.
AdmBorkBork

0

펄 6 ,  27  24-25 % = 18 바이트

*.comb.Bag.min(*.value).key

그것을 테스트

{%(.comb.Bag.invert){1}}

그것을 테스트

홀수 문자가없는 입력이 주어지면 정의되지 않은 값반환합니다 .

넓히는:

{  # bare block lambda with implicit parameter 「$_」

  %(        # coerce into a Hash

    .comb   # split the input into graphemes (implicit method call on 「$_」)
    .Bag    # turn into a weighted Set
    .invert # invert that (swap keys for values) returns a sequence

  ){ 1 }    # get the character that only occurs once
}

0

Brainfuck, 125 바이트

,[----------[>],]<[->+<]<<[[->->+<<]>[>[->-<<<+>>]>[,<<,>>]<<<[->+<]>[->+<]<]>[-<<+>>]>[-<+>]<<<<]>>>>[<]<++++++++++.

온라인 시도

홀수 문자가 없으면 행렬의 문자를 인쇄합니다


0

자바 8, 85 바이트

이것으로부터, λ이고 StringString(예를 들면 Function<String, String>). 그것은 본질적으로 Luca 솔루션의 사본 이지만 문자열을 조금 정렬하여 분석했습니다.

s->new String(s.chars().sorted().toArray(),0,s.length()).replaceAll("(.)\\1+|\\n","")

온라인 시도

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