시저 등가


24

해당 문자 사이의 거리 (카운트 업)가 동일한 경우 두 문자열은 "시저 동등"입니다. 예,이 용어를 만들었습니다. 예를 들면 다음과 같습니다.

"Abc"와 "Cde"는 동일하므로

distance from a-c == 2
distance from b-d == 2
distance from c-e == 2

대문자는 아무런 차이가 없습니다.

"Hello"와 "World"는 Caesar와 동일하지 않으므로

distance from h-w == 15
distance from e-o == 10
distance from l-r == 6
distance from l-l == 0
distance from o-d == 15

"Abcd"와 "Yzab"는 Caesar와 동일하므로

distance from a-y = 24
distance from b-z = 24
distance from c-a = 24 (it wraps around)
distance from d-b = 24

STDIN에서 두 개의 문자열을 가져와 Caesar와 동등한 경우 정확한 값을 인쇄하고 그렇지 않은 경우 잘못된 값을 인쇄하는 전체 프로그램을 작성해야합니다.

유효한 입력

  • 대소 문자는 중요하지 않으므로 프로그램에서 입력이 모두 소문자, 모두 대문자 또는 원하는대로 혼합해야하는 경우 허용됩니다 (답에 명시되어있는 한).

  • 입력에 공백이나 문장 부호가 없습니다.

  • 입력 길이는 동일합니다.


8
명령 행 인수로 입력을 허용하는 것이 좋을 것입니다. C 솔루션을 작성하려고했지만 stdin에서 읽는 데는 특히 긴 길이의 코드가없는 경우 상당히 긴 코드가 필요합니다.
Reto Koradi

@RetoKoradi 왜 안돼? C는 간결한 것으로 정확하게 알려져 있지 않기 때문에 어쨌든 이길 수는 없습니다.
DJMcMayhem

맞다, 나는 C가 절대적인 승리의 기회를 가질 것이라고 의심한다. 기껏해야 "실제";) 프로그래밍 언어를 사용하는 솔루션과 비교합니다. 그러나 거기에서도 다른 언어는 특히 문자열 처리와 관련하여 더 간결한 경향이 있습니다.
Reto Koradi

4
질문 목록에서이 질문을 볼 때마다 답만큼 정확한 투표 결과가 있습니다.
Alex A.

1
@AlexA. 나는 당신이 그것을 지적 할 때까지 응답 비율에 대한 투표에주의를 기울이지 않았습니다. 이제 내가 아는 전부입니다.
DJMcMayhem

답변:


10

Pyth, 9 바이트

}wm=.rzGG

두 문자열은 줄 바꿈으로 구분 된 소문자로 예상됩니다.

데모.

작동 방식 :

.rPyth의 회전 변환 기능입니다. 첫 번째 인수의 각 요소를 두 번째 인수의 첫 번째 발생에서 두 번째 인수의 다음 항목에 매핑합니다. 이 경우 두 번째 인수는 G소문자 알파벳이므로 시저 이동 1과 같습니다.

=함수 앞에 놓으면 해당 위치에있게됩니다. 따라서 =.rzG시저 이동을 z1 씩 할당합니다 z. 참고 zPyth 입력에서의 첫 번째 라인에 초기화된다.

이 표현은지도 안에서 사용됩니다. m=.rzGGz각 요소에 대해이 변환을 26 회에 적용 G하고 결과를 목록에 저장합니다. 이것은 가능한 모든 시저 이동 목록을 제공합니다 z.

마지막으로 }w다음 입력 행이 해당 목록에 있는지 확인합니다.


14

CJam, 17 12 11 바이트

Dennis가 1 바이트를 절약했습니다.

ll.m26f%)-!

여기에서 테스트하십시오.

첫 번째 문자열은 소문자이고 두 번째 문자열은 대문자 일 것으로 예상합니다. 1시저와 동등한 문자열을 인쇄 합니다 0.

설명

ll           e# Read two lines of input.
  .m         e# Take the differences of corresponding characters.
    26f%     e# Take the differences modulo 26.
        )-   e# Remove all copies of the last difference from the array. This will 
             e# yield an empty array if and only if all differences are the same.
          !  e# Logical NOT, which yields 1 for an empty array and 0 otherwise.

첫 번째 문자열은 소문자로, 두 번째 문자열은 대문자로 표시해야하는 이유는 항상 양의 차이를 유지하기 위함입니다. 그렇지 않으면 모듈로를 취하면 음의 값이 반환 될 수 있으며 시저와 동등한 문자열 일지라도 반드시 고유하지는 않습니다.


1
첫 번째 단어가 소문자이고 두 번째 단어가 대문자 인 경우 26f%1 바이트를 저장 하는 데 사용할 수 있습니다 .
데니스

쉘 규칙 ( stackoverflow.com/questions/2933843/… )을 사용하여 Pyth 답변에 더 가깝게 만들 수 있습니다.
VicAche

1
@VicAche 받아 들여진 컨벤션당신의 언어가 해석하는 방식에 따라 진실되고 허위를 해석하는 것입니다. 또한, 제거하면 !0 또는 1은 없지만 비어 있거나 비어 있지 않은 배열이 있습니다.
마틴 엔더

9

Python2, 68 67 70 69 바이트

print len({(ord(y)-ord(x))%26for x,y in zip(*raw_input().split())})<2

Python3, 67 66 바이트

print(len({(ord(y)-ord(x))%26for x,y in zip(*input().split())})<2)

언 골프하기는 약간 어렵습니다.

  • zip(*raw_input().split())단어가 공백으로 분리되어 있다고 가정하면 입력을 받아 두 단어 목록으로 나눕니다. 그 후 각 단어는 연산자 zip를 사용 하여 함수 의 매개 변수로 전달됩니다 *. 이 zip기능은 같은 위치에있는 문자에 대한 문자 쌍 목록을 만듭니다.
  • (ord(y)-ord(x))%26for x,y in ... 이것은 단지 두 글자의 목록을 그 글자들 사이의 거리에 대한 생성기 표현으로 변환합니다.
  • {...} 이 표현식을 세트로 줄이고 본질적으로 복제본을 버립니다.
  • len(...)<2 세트에 하나의 항목 만 남아 있는지 확인하거나 빈 문자열의 경우 0입니다. 이는 본질적으로 모든 문자의 거리가 동일 함을 의미합니다.
  • print 그 값을 출력

xnor 덕분에 나를 set(...)대신 할 수 있으며 {...}이전의 공간 for이 필요하지 않습니다. 또한 <=1to <2최적화에 대한 Josay에게 감사드립니다 .


내 솔루션과 거의 비슷한 순간에 게시되었습니다. 입력보다 더 똑똑해졌지만 <=1'<2'로 줄일 수 있습니다 .
SylvainD

1
직접 이해하는 {...}대신 이해력을 발휘할 수 있습니다 set((...)). 코드는 실제로 결과를 인쇄해야합니다.
xnor

@KillianDS 기본 규칙 은 STDOUT으로 인쇄하거나 복귀 (REPL 평가 아님) 및 여기에서 OP 지정 인쇄를 요구합니다. 그렇지 않으면, 일반적인 짧은 방법은 사용하는 것입니다 lambda서면에 저장 print하거나 return.
xnor

1
그건 그렇고, 당신은 전에 공간이 없습니다 for; 파이썬 렉서가 올바르게 분할 26for됩니다.
xnor

5

APL (15)

1=≢∪26|-⌿⎕A⍳↑⍞⍞

그것은 대문자로 문자를 필요로하고, 인쇄 중 1또는 0과 같이 :

      1=≢∪26|-⌿⎕A⍳↑⍞⍞
ABCD
YZAB
1

      1=≢∪26|-⌿⎕A⍳↑⍞⍞
HELLO
WORLD
0

설명:

  • ↑⍞⍞: 키보드에서 두 줄을 읽고 문자를 N × 2 행렬로 배열합니다.
  • ⎕A⍳: 각 문자에 대해 어떤 위치에서 발생하는지 찾으십시오 ⎕A(대문자).
  • -⌿: 각 열에 대해 첫 번째 값에서 두 번째 값을 뺍니다.
  • 26|: 각 숫자의 mod-26을 사용하십시오.
  • 문자열이 시저와 동등한 경우이 목록의 모든 숫자는 이제 동일합니다.
  • ≢∪: 목록에서 고유 한 값의 수를 찾습니다.
  • 1=:와 비교하십시오 1.

난 절대 APL
을지지

@AlexA .: Dyalog APL 14를 사용하고 있습니다. Raspberry Pi가 있으면 무료입니다. 학생들에게는 무료입니다. 그렇지 않으면 등록되지 않은 버전을 다운로드 할 수 있습니다.이 버전은 nagware이지만 기능적으로는 실제 버전과 동일합니다. 그런데 dyalog.com TryAPL 은이를 기반으로합니다.
marinus

Dyalog vs. GNU APL, ngn / apl 및 APLX에 대한 귀하의 의견을 듣고 싶습니다. ;)
Alex A.

3

J, 19 바이트

1=[:#@~.26|-&(3&u:)

같은 위치에있는 글자는 대소 문자가 같아야합니다.

두 입력 문자열을 코드 포인트 표현으로 변환 한 후 두 배열 의 차이 에 대한 모듈로 (26) 의 너브 길이 와 &(3&u:)비교 합니다. 모든 시저 거리가 동일한 경우 넌브가됩니다 .1#~.26|-1

용법:

   'abcd' (1=[:#@~.26|-&(3&u:)) 'yzab'
1

여기에서 온라인으로 사용해보십시오.


3

줄리아, 91 87 83 바이트

a=readline()
b=readline()
show(length(Set([mod(a[i]-b[i],26)for i=1:length(a)]))<2)

언 골프 + 설명 :

# Read two strings from STDIN
a = readline()
b = readline()

# Get the absolute difference mod 26 of the character values in the strings
x = [mod(a[i] - b[i], 26) for i = 1:length(a)]

# Construct a set consisting of the elements of x. If the set has only a
# single element, the strings are Caesar equivalent. This will print a
# boolean value to STDOUT.
show(length(Set(x)) < 2)

이는 Julia의 문자열을 문자 배열로 취급 할 수 있고 문자 값에 대해 산술 연산을 수행 할 수 있다는 사실을 이용합니다. 각 위치의 대소 문자가 문자열간에 일치하는 한 입력 문자열에 원하는 대소 문자 조합을 사용할 수 있습니다.


3

C99, 92 바이트, 버그   101 92 바이트

  r,i;main(z,a)char**a;{for(;z=a[2][++i];)r|=(a[1][i]-z+*a[2]-*a[1]+52)%26;putchar(49-!!r);}

꽤 직설적 인; 단어가 각각 첫 번째와 두 번째 인수로 가정합니다. 로 컴파일되었습니다 -std=c99.


이것은 두 번째 샘플 입력에 대해 잘못된 결과를 제공합니다.
Reto Koradi

당신 말이 맞아요 결정된.
rr-

3

자바 스크립트 ( ES7 초안 ), 87 바이트

입력이 같은 경우가 필요합니다.

(p=prompt)(![z=(a[c='charCodeAt'](i)-b[c](i)+26)%26 for(i in b=p(a=p()))].some(x=>x^z))


2

CJam, 13 바이트

{r(fm26f%}2*=

각 단어의 첫 번째 문자는 대문자 여야하고 다른 문자는 소문자 여야합니다.

여기에서 시도하십시오 . ( 여기에 Firefox가 있습니다 .)

APL 변형이 문자 산술을 지원하지 않는 것이 너무 나쁩니다 ...

설명

{
    r       e# Read a word.
    (f-     e# Return each character value minus the first character.
    26f%    e# Mod 26.
}2*         e# Repeat 2 times.
=           e# Check if they are equal.

2

펄, 80

편집 : 실패한 최적화가 골프 코드에 빠져 들었습니다. 이제 ungolfed 버전과 일치합니다. (바이트 수는 맞습니다.)

@a=unpack"W*",<>;for(<>=~/./g){$n=ord()-shift@a;$p=!$c++||$p&&$n==$o;$o=$n}say$p

Perl 버전 5.10 ( perl -M5.10.0또는 perl -E …)으로 실행하십시오 say(). 약간 확장 된 버전 :

@a=unpack"W*",<>;             # read first string, split and convert to numbers

for(<>=~/./g){                # reads the second string and splits it
   $n=ord()-shift@a;          # convert next character of second string and compare
   $p= !$c++ || $p && $n==$o; # compare differences (special case for first char)
   $o=$n
}

say $p

1문자열이 Caesar와 같으면 코드가 출력되고 (Perl에서 truthy), 그렇지 않으면 비어있는 문자열 (Perl에서 false)이 출력됩니다. 이 해석을 잃어 너무 경우, 나는 2 바이트를 추가 할 필요가 say$p+0있는 인쇄, 1또는 0.

대소 문자는 입력간에 일치해야합니다.


위의 질문에 대한 의견을 바탕으로 명령 줄 인수로 입력 할 수도 있습니다. 당신이 사용할 수있는 -i변수에 저장 할 두 번째 문자열에 걸릴 $^I. 또한 명령 줄에서 실행할 때 -E대신 대신 사용 -e하면 say무료로 사용할 수 있으므로 바이트를 추가하지 않고도 사용할 수 있습니다. 이것을 실행하십시오 : 트릭으로 perl -iteststring -E'say$^I'이것을 단축 할 수 있습니다 -i.
hmatt1

@chilemagic에게 감사합니다. -i트릭은 깔끔합니다 (그리고 나는 그것을 몰랐습니다!). 이 경우 $^I보다 길기 때문에 도움이되지 않습니다 <>.
xebtl

@chilemagic 아, 그리고이 토론에 따르면, 나는 바이트를 계산하지 않았다 -M5.10.0. (그러나 나는 -E편집 에서 스위치를 언급했다 )
xebtl

2

Matlab, 49 48 바이트

이것은 정말 빠른 것이었다. 슬프게도 stdin에서 문자열을 얻는 것은 꽤 비쌉니다.

x=@()input('','s');sum(diff(mod(x()-x(),26)))==0

대부분의 답변과는 달리 대소 문자를 구분합니다.

편집 : 익명 함수를 정의하여 1 바이트를 면도했습니다!



2

C, 97 바이트

#define D (*a[2]++-*a[1]+++26)%26
d,r;main(int c,char**a){for(d=D;*a[1];r|=d-D);puts(r?"N":"Y");}

1
예이! 잔액을 복원했습니다!
DJMcMayhem

다음 da같이 매개 변수 외부에서의 유형 을 재사용 하고 선언 하면 4자를 저장할 수 있습니다 . d,r;main(int c,char**a){r;main(d,a)char**a;{
rr-

1

스칼라, 57 바이트

(readLine zip readLine map(x=>x._1-x._2%26)toSet).size==1

다른 것보다 약간 길고 본질적으로 동일하지만 언어의 스타일이 다릅니다!

또한이 버전 (56 바이트)이 있습니다.

(readLine zip readLine map(_._1-x$1._2%26)toSet).size==1

그러나 x $ 1 작업이 우연의 일치인지 아니면 의도적으로인지 모르겠습니다 ...


1
정말 이상합니다. 정의 되지 x$1않은 채 어떻게 작동 x합니까?
Dan Getz 1

@ DanGetz 나는 그것이 컴파일러 우연이라고 확신합니다. 나는 그것에 대해 스택 오버플로에 대한 질문을 할 수 있습니다 : D
Others

1

파이썬 2, 80 바이트

stdin에서 공백으로 구분 된 비슷한 대소 문자 문자열 2 개를 가져옵니다.

s,t=raw_input().split();print len(set((ord(c)-ord(d))%26 for c,d in zip(s,t)))<2

다음과 같은 테스트 사례에서 테스트되었습니다.

tests = [
    ("abc", "abc", True),
    ("abcd", "abc", False),
    ("abc", "cde", True),
    ("Abc", "Cde", True),
    ("abc", "deg", False),
    ("Hello", "World", False),
    ("Abcd", "Yzab", True),
    ("", "", True)
]

for s, t, v in tests:
    if len(s) == len(t): # I didn't read that at first
        assert v == (len(set((ord(c) - ord(d)) % 26 for c, d in zip(s, t))) < 2)

1

파이썬 2 - (241) 237 188 147 바이트

공백으로 구분 된 따옴표로 묶은 소문자 문자열로 입력을받습니다. 더 좋은 방법이 있어야합니다 ..

s=[[ord(x)for x in y]for y in input().split()];v=[];v=[v+[(s[1][i]-s[0][i])%26]for i in xrange(0,len(s[0]))];v=sum(v,[]);print sum(v)//v[0]==len(v)

언 골프 (260- 홀수 바이트)

strs = [[ord(x) for x in y] for y in raw_input().split()]
vals = []
for i in xrange(0, len(strs[0])):
if strs[0][i]<strs[1][i]:
    vals += [strs[1][i]-strs[0][i]]
else:
    vals += [26-(strs[0][i]-strs[1][i])]
return sum(vals)//vals[0] == len(vals)

모든 변수를 1 문자 길이로 만들고 많은 바이트를 저장할 수 있다고 확신합니다. "입력 값에 4 초가 더 필요 하므로 점수에 4를 더해야합니다.

@Reticality 나는 변수를 단축하지 않았다 믿을 수 없어 .. 아마추어 이동. 제대로 설명하지 않았으므로 바이트 수에 2를 추가했습니다. 입력은 "abc cde"와 같이 작동합니다.
Kade

1

R 83 84

다른 솔루션과 거의 동일합니다. 문자열을 정수 벡터로 변환하십시오. 벡터의 차이를 26만큼 수정하십시오. 길이가 1인지 확인하여 목록에서 고유 한 작업을 수행하십시오. 각 문자열의 해당 문자에서 대소 문자가 동일해야합니다.

length(unique(((S=strtoi)((R=charToRaw)((I=readline)()),16L)-S(R(I()),16L))%%26))<2

두 문자열이 입력되기를 기다립니다.

> length(unique(((S=strtoi)((R=charToRaw)((I=readline)()),16L)-S(R(I()),16L))%%26))<2
abcdefghijklmnopqrstuvwxyz
opqrstuvwxyzabcdefghijklmn
[1] TRUE
> length(unique(((S=strtoi)((R=charToRaw)((I=readline)()),16L)-S(R(I()),16L))%%26))<2
Hello
World
[1] FALSE
> length(unique(((S=strtoi)((R=charToRaw)((I=readline)()),16L)-S(R(I()),16L))%%26))<2
Bob
Nan
[1] TRUE
>

<2대신 을 사용하여 바이트를 저장할 수 ==1있습니다.
Alex A.

당신은 출력에 의해 3 바이트를 절약 할 수 1또는0

@AlexA. 고마워 Alex 내가 그 하나를 그리워 ... 그리고 지금 나는 그 하나를 그리워 :)
MickyT

@Reticality : 어떻게?
Alex A.

@Reticality 불행히도 1 이상을 반환합니다.
MickyT

1

MATLAB / 옥타브, 53 52

x=@()input('','s');isscalar(unique(mod(x()-x(),26)))

입력은 모두 같은 경우 여야합니다.

슬프게도 Matlab은 사용자 입력에 좋지 않습니다. 익명의 핸들로서 이것은 단지 35 바이트 일 수 있습니다 :

@(a,b)isscalar(unique(mod(a-b,26)))

Matlab은 문자열의 문자를 숫자로 구성된 벡터로 취급합니다. 빼기를하면 차이가 unique생기고 그 벡터를 고유 한 값만 포함하는 벡터로 변환합니다. 하나의 숫자 만있는 경우 단어는 시저와 동일하며 isscalar는 1을 반환하고, 그렇지 않으면 0을 반환합니다.


오! 또 다른 Matlab 항목! 스스로 대답 한 후에 만 ​​답변을 보았습니다.
Oebele

x = @ () input ( '', 's')를 정의하여 1 바이트를 절약 할 수 있다는 것을 알았습니다.
Oebele

@Oebele 감사합니다! Matlab에서 더 많은 골프 문제를 시도 할 것이라고 생각합니다. 실제로는 오히려 재미 있습니다.
FryAmTheEggman

그렇습니다. 많은 문제의 경우 매트릭스 기반의 내용으로 매우 간결 할 수 있습니다. 옥타브는 인라인 변수 정의와 같이 약간 더 많은 바이트를 절약 할 수있는 좀 더 자유로운 구문을 가지고 있습니다.
Oebele

1

강타, 71 48

“표준”유닉스 프로그램 사용 caesar(6).

새 버전 (@DigitalTrauma의 많은 도움으로) :

read a b;seq -f"caesar %g <<<$a" 26|bash|grep $b
  • 입력은 공백으로 구분 된 동일한 행에 있어야합니다.
  • 대소 문자는 입력간에 일치해야합니다.
  • 1true로 인쇄 하거나 false로 인쇄 하지 않습니다.

명령 행 인수를 통한 입력이 허용되는 경우 39 바이트 로 단축 될 수 있습니다 .

 seq -f"caesar %g <<<$1" 26|bash|grep $2

레코드의 이전 버전 :

 read a b;for i in `seq 26`;do [ `echo $a|caesar $i` = $b ]&&echo 1;done

48 바이트, 내 카운트 : read a b;seq -f"caesar %g <<<$a" 26|bash|grep $b결과는 $?표준 변수 의미 에 따라 내장 변수에 0 == FALSE 및 1 == TRUE입니다.
Digital Trauma

@DigitalTrauma 멋진 아이디어입니다! 나는 특히 seq -f | bash비트를 좋아한다 . 결과 $?는 도전 과제를 읽음으로써 유효하지 않지만 내 코드와 마찬가지로 false와 true를 출력하지 않습니다 (두 개의 빈 입력 문자열의 경계선 경우 제외). 어쨌든, 내 대답 에이 모든 것을 사용하는 것이 바람을 피우는 것처럼 느껴질 것입니다. 아마도 직접 제출해야합니다.
xebtl

걱정하지 마세요. 골프 팁을 제공하고 있습니다. 내가 사용하고 싶다면 이미 그렇게했을 것입니다 :). 하여 truthy / falsey 일에 관해서는, 나는 당신의 주어진 언어에 진실과 거짓이 무엇인지 것으로 해석하는 경향이 - 시도 [ 0 == 0 ] ; echo $?[ 0 == 1 ] ; echo $?
디지털 외상

1

> <> (물고기) , 50 바이트

i:3b*(?v88+0.;n1<
0)?vc1.>~ri-&l?!^i-&:&-2d*%
;n0<

같은 위치에있는 글자가 같은 경우를 기대합니다.

설명

  • i:3b*(?v88+0.반복 점프 를 제공하여 스택으로 첫 번째 단어를 읽습니다.
  • ~ri-&~스택에서 분리 공간을 제거 하고 스택을 뒤집고 r(첫 번째 문자가 맨 위에 있음) 두 i번째 단어의 첫 번째 문자를 -읽고 첫 번째 단어의 첫 번째 문자에서 오프셋을 계산 하여 레지스터에 저장합니다 &.
  • l?!^i-&:&-2d*%0)?v스택의 맨 위에있는 첫 번째 단어의 해당 문자에서 빼고 두 번째 단어의 모든 다음 문자를 읽고 &:&-레지스터에 저장된 오프셋을 빼고 결과가 0 mod 26인지 확인합니다 2d*%. 그렇지 않으면 0을 인쇄하고 종료 0n;합니다. c1.루핑 점프를 제공합니다.
  • 두 번째 단어의 끝에 도달하면 프로그램은 1을 인쇄하고 종료 1n;합니다.

0

KDB (Q), 35 바이트

{0=sum(1_-':)mod[;26](-)."i"$(x;y)}

설명

                         "i"$(x;y)      / convert to ascii decimal
                     (-).               / get differences
             mod[;26]                   / mod 26
      (1_-':)                           / difference between the differences
 0=sum                                  / sum should be 0 if equivalent
{                                 }     / lambda

테스트

q){0=sum(1_-':)mod[;26](-)."i"$(x;y)}["abcd";"yzab"]
1b

0

자바 281

import java.util.*;enum C{E;Scanner s=new Scanner(System.in);public static void main(String[]z){char[]u=E.n(),v=E.n();int i=0,d=(u[0]-v[0]+26)%26;boolean e=true;for(;++i<u.length;)e&=d==(u[i]-v[i]+26)%26;System.out.print(e);}char[]n(){return s.next().toUpperCase().toCharArray();}}

넓히는:

import java.util.*;
enum Caesar{
    Equivalence;
    Scanner input=new Scanner(System.in);
    public static void main(String[]z){
        char[]firstString=Equivalence.nextInput(),secondString=Equivalence.nextInput();
        int index=0,difference=(firstString[0]-secondString[0]+26)%26;
        boolean isEqual=true;
        for(;++index<firstString.length;)
            isEqual&=difference==(firstString[index]-secondString[index]+26)%26;
        System.out.print(isEqual);
    }
    char[]nextInput(){
        return input.next().toUpperCase().toCharArray();
    }
}

모든 것을 대문자로 변환하지 않으면 14 바이트를 절약 할 수 있지만 그대로 두는 것이 더 완벽하다고 생각합니다.


0

젤리 , 5 바이트

Oạ/ċ2

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

동등한 양의 정수를 출력하고 그렇지 않으면 0을 출력합니다.

작동 원리

Oạ/ċ2 - Main link. Argument A (a list of strings)  e.g. ["abc", "cde"]

O     - Ordinal. Cast to code point                     [[97, 98, 99], [99, 100, 101]]
  /   - Reduce the list by...
 ạ    -   absolute difference                           [2, 2, 2]
   ċ2 - Count the number of 2s in the list              3
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.