쉽게 입력 할 수있는 단어


30

이 경쟁은 끝났습니다.

우승자는 TwiNight 의 답을 한 문자 이기는 22 자 CJA입니다 . 축하합니다 데니스 !

감투상은 간다 팔코 무료 수입과 완전히 미친 갔다.

.


얼마 전 Nokia 3310으로 최신 스마트 폰을 어떻게 타이핑 할 수 있는지 알고 싶었습니다. 일부 답변은 정말 좋았지 만 계속 유지할 수는 없었습니다! 어쩌면 나는 다른 접근법을 취해야하며 입력하기에 어색한 단어를 쓰지 않아야합니다.

표준 레이아웃을 고려할 때 전화 키보드의 동일한 버튼에 두 개의 연속 문자가없는 경우 쉽게 입력 할 수있는 텍스트를 호출합니다.

전화 키보드


당신의 작업

당신의 임무는 sstdin 에서 문자열 을 매개 변수로 받아들이고 s쉽게 입력 할 수 있으면 참 값을 반환하고 그렇지 않으면 거짓 값을 반환 하는 프로그램 / 함수를 작성하는 것 입니다. 입력은 소문자와 공백으로 만 구성되며 비어 있지 않아야합니다!

채점

이것은 codegolf이므로 문자 수가 가장 적습니다.

수입 명세서는 최종 점수에 포함되지 않으므로 , 또는 코드 를 사용 std::set_symmetric_difference하고 싶었다 면 지금이 시간입니다!liftM4itertools.combinations

-3 문자가 아닌 모든 것이 버튼 0에 있다고 가정하면 소스 코드를 쉽게 입력 할 수 있다면 결국 친구에게 코드를 보내고 싶습니다!

테스트 케이스

다음은 코드가 의도 한대로 작동하는지 확인하기위한 몇 가지 테스트 사례입니다.

"x" -> True
"aardvark" -> False
"ardvark" -> True
"flonk" -> False

"im codegolfing all day long" -> False
"i indulge in minimizing bytecount" -> True

"havent heard from you in a long time" -> False
"your silence was of undue permanence" -> True

"how are  you" -> False
"how are you" -> True

행복한 골프!


두 개의 연속 공백이 나쁩니 까?
Martin Ender

@ MartinBüttner 네! 아마도 테스트 케이스를 추가해야합니다.
Flonk September

9
스페이스 키를 두 번 누르면 노키아 듀폰이 있는데 숫자 0을 얻습니다.
overactor

1
관련 질문 : 가장 자주 발생하는 단어를 얼마나 쉽게 입력 할 수 있는지에 따라 점수를 최대화하는 전화 키보드 레이아웃을 고안하십시오.
justinpc

1
@jpcooper 여기에 언급 된 두 가지 ? 나는 8pen을 사용했으며 실제로는 전화 유리가 (CPU 활동이 아닌 접촉에서) 가열되어 마찰 계수가 길어 긴 입력에 사용하기 어렵다는 점을 제외하고는 정말 좋아합니다. 참고 3에 s-pen을 사용하는 것이 훨씬 쉽습니다 :)
Eben

답변:


6

CJam, 34 31 27 22 자

1l{'h-_9/-D+3/X\:X^*}/

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

예제 실행

$ cjam <(echo "1l{'h-_9/-D+3/X\:X^*}/") <<< 'aardvark'; echo
0
$ cjam <(echo "1l{'h-_9/-D+3/X\:X^*}/") <<< 'ardvark'; echo
66000

작동 원리

1l                         " Push a R := 1 and read a line L from STDIN.                  ";
                           " Initialize X := 1. (implicit)                                ";
  {                  }/    " For each character C of L, do the following:                 ";
    'h-                    "     C -= 'h'                                                 ";
       _9/-D+3/            "     Y := (C - C / 9 + 13) / 3                                ";
               X\  ^*      "     R *= X ^ Y                                               ";
                 :X        "     X := Y                                                   ";
                           " Print R. (implicit)                                          ";

배경

코드의 핵심은 동일한 키의 심볼 이미지가 일치하도록 입력 문자열의 각 문자 C 에 맵 F 를 적용하는 것 입니다. 다음을 관찰하여 적합한지도를 찾았습니다.

T : C ↦ (C- 'h') + 13 은 다음과 같이 문자열 S : = "abcdefghijklmnopqrstuvxyz" 를 변환합니다.

[-59   6  7  8   9 10 11  12 13 14  15 16 17  18 19 20  21 22 23 24  25 26 27  28 29 30 31]

0를 위해서는 T (C)36 으로 나누는 것으로 충분 하지만 s , t , v , yz 의 문자에는 일종의 수정을 적용해야합니다 .

D : C ↦ (C- 'h') / 9 는 문자열 S 를 다음 배열로 변환합니다 .

[ -8   0  0  0   0  0  0   0  0  0   0  0  0   0  0  0   0  1  1  1   1  1  1   1  1  1  2]

이것은 다른 것에 영향을 미치지 않고 s , t , v , yz 의 몫을 수정합니다 .

마지막으로 맵 F : C ↦ (T (C)-D (C)) / 3 은 다음과 같이 문자열 S 를 변환합니다 .

[-17   2  2  2   3  3  3   4  4  4   5  5  5   6  6  6   7  7  7  7   8  8  8   9  9  9  9]

나머지는 연속 된 문자를 어떻게 든 비교하는 것입니다. 이를 위해 이전 문자의 이미지와 함께 XOR F (C) – 첫 번째 의 경우 사전 이미지가없는 1 (변수 X 의 기본값 ) 로 XOR F (C) 를 적용 하고 모든 결과를 곱합니다.

요인 중 하나가 0 인 경우에만, 즉 연속 된 두 문자가 F에 의해 동일한 이미지를 갖는 경우에만 제품이 거짓 입니다.


나는이 하나가 54의 바이트 (안 문자) 계산 생각

내가 생각 @Optimizer 코드 골프 태그 위키 바이트 말한다

이 답변에는 더 이상 비 ASCII 문자가 포함되지 않습니다.
Dennis

@professorfish 태그 위키는 기본값입니다. 챌린지가 문자를 지정하면 문자입니다.
Martin Ender

27

파이썬 2-80 , 68, 64, 61, 58, 50, 48, 45, 44 42

지금은 어리석은 일이지만 라이브러리를 포함한 무료 라이브러리 가져 오기를 계속 사용 __builtin__합니다.

from numpy import diff as D
from pprint import pprint as P
from __builtin__ import all as A
from __builtin__ import raw_input as I
from __builtin__ import bytearray as B

따라서 다음 짧은 줄만 코드 길이에 포함됩니다.

P(A(D([(o-o/112-o/59)/3for o in B(I())])))

관련 아이디어에 대한 Markuz의 크레딧 input()! 이러한 자유 수입 문제는 항상 알려지지 않은 라이브러리를 소개합니다. ;)


operator라이브러리 만 사용하는 대안 ( 98, 83 79) :

from operator import ne as n
K=[(ord(c)-1-(c>'p')-(c>'w'))/3for c in input()]
print all(map(n,K[1:],K[:-1]))

나는 여기서 멈출 것이다. 하지만 당신은 골프이 사용하는 버전 증진 수 sys, pprint및 기타 라이브러리를 ...


라이브러리가없는 대안 (105) :

s=input()
n=lambda c:(ord(c)-1-(c>'p')-(c>'w'))/3
print all([n(s[i])!=n(s[i+1])for i in range(len(s)-1)])

그리고 다시 한 번 루비와 파이썬에 동일한 솔루션을 독립적으로 게시합니다. 이번에는 우승 한 것 같습니다. ;) ... 수 없습니다 당신도 4 바이트 저장, 할당하여 ord(c)변수 (예를 들어를 o뺀 다음)과 c/112c/119대신 불리언?
Martin Ender

@ MartinBüttner : 예, 가끔 파이썬이 루비를 이길 수 있습니다. 불행히도 lambda표현식 내에 변수 를 쉽게 할당 할 수 없습니다 . 로 [(o-1-o/112-o/119)/3for o in map(ord,s)]나는 80와 끝까지 다시 바이트.
Falko

아 알 겠어요 그래도 아픈 새로운 개선! : D
Martin Ender

매우 인상적. 그리고 대신 다음을 from sys import argv as s사용하여 3 바이트를 절약 할 수 있습니다.s[1]input()
Markuz

수입 input에서 __builtin__뿐만 아니라 실제로 더 나은입니다 : D는 또 다른 바이트를 저장.
Markuz

20

Ruby Regex (가장 인기있는 맛), 106 83 바이트

정규식 때문에

^(?!.*(  |[abc]{2}|[def]{2}|[ghi]{2}|[jkl]{2}|[mno]{2}|[p-s]{2}|[tuv]{2}|[w-z]{2}))

방금 중개인 (Ruby)을 자르고 이것을 순수한 정규 솔루션으로 만들었습니다. 많은 풍미에서 작동하며 문자열에 동일한 버튼에 두 개의 연속 문자가 포함되지 않은 경우에만 일치를 찾습니다.


{2}22 바이트를 절약하여 대체 외부에 넣을 수 없습니까 ?
어둠의 절대자 니트

1
불행히도 @NiettheDarkAbsol은 두 번의 반복에 대해 다른 대안을 선택할 수 있기 때문에 아닙니다.
Martin Ender

물론입니다. 나는 이유 XD가 알고 있었다
NIET 다크 Absol

읽기 쉽고 이해하기 쉬운 골프 솔루션을 원하십니까?
GreenAsJade

12

배쉬 + 코어 유틸리티, 49

tr a-z $[36#8g7e9m4ddqd6]7778888|grep -Pq '(.)\1'

TRUE의 경우 종료 코드 1을, FALSE의 경우 0을 리턴합니다.

$ for s in "x" "aardvark" "ardvark" "flonk" "im codegolfing all day long" "i indulge in minimizing bytecount" "havent heard from you in a long time" "your silence was of undue permanence" "how are  you" "how are you"; do echo "./3310.sh <<< \"$s\" returns $(./3310.sh <<< "$s"; echo $?)"; done
./3310.sh <<< "x" returns 1
./3310.sh <<< "aardvark" returns 0
./3310.sh <<< "ardvark" returns 1
./3310.sh <<< "flonk" returns 0
./3310.sh <<< "im codegolfing all day long" returns 0
./3310.sh <<< "i indulge in minimizing bytecount" returns 1
./3310.sh <<< "havent heard from you in a long time" returns 0
./3310.sh <<< "your silence was of undue permanence" returns 1
./3310.sh <<< "how are  you" returns 0
./3310.sh <<< "how are you" returns 1
$ 

아주 좋아요! 이것은 Perl에서 46 자입니다. perl -pE'y/a-z/aaadddgggjjjmmmpppptttwwww/;$_=!/(.)\1/' <(echo "x")true로 1을 인쇄하고 false로 아무것도 인쇄하지 않습니다.
hmatt1

@chilemagic 계속해서 펄 답변을 게시하십시오 :). 코드 골프 규칙에 따라 -p 명령 줄 매개 변수를 사용하기 위해 점수에 1을 추가하는 것을 잊지 마십시오.
Digital Trauma

나는 줄이는 방법을 찾을 수 있다고 생각 aaadddgggjjjmmmpppptttwwww했지만 포기했습니다.
벤 잭슨

2
@ BenJackson 나는 방법을 알아 냈습니다. 우리는 실제로 다른 문자의 문자열을 사용할 수 있습니다 11122233344455566667778888. 이 숫자의 처음 19 자리를 기본 36으로 인코딩하면 1 문자를 절약 할 수 있습니다!
Digital Trauma

9

APL (Dyalog), 24 23

~∨/2=/⌊¯13⌈.21-.31×⎕AV⍳⍞

∧/2≠/⌊¯13⌈.21-.31×⎕AV⍳⍞

설명

: 화면에서 문자열 입력을받습니다
⎕AV. 이것은 기본적으로 APL이 인식하는 모든 문자의 문자열 인 원자 벡터입니다. 물론 모든 소문자 (인덱스 18 ~ 43)와 공백 (인덱스 5)
: IndexOf함수가 포함됩니다. 하나 또는 두 개의 스칼라 인수를 사용하는 APL의 많은 함수의 경우 스칼라 대신 배열에 피드를 제공 할 수 있습니다. APL이 루핑을 수행합니다. 따라서 숫자 형 배열을 반환합니다. .21-.31×시간은 0.31이고 0.21에서 뺍니다. 이것은 동일한 번호로 동일한 키 (특히 PQRS)에 편지를 매핑하는 약간의 트릭이다 (시 정수로 반올림 아래로) 자신의 그룹에 매핑되는 Z, 제외
¯13⌈: max-13과. 이것은 Z를 WXY
: 그룹 으로 정수로 반올림합니다
2≠/: Pairwise-. 각 연속 쌍에 대한 부울 배열을 반환합니다.
∧/: AND 결과 배열의 모든 항목을 함께.


이런 식으로 글을 올리려고했지만 당신이 나를 이겼습니다. 젠장 Z 키! ∧/2≠/( ~∨/2=/동일한 키에 연속 쌍이 입력되지 않음 ) 대신 (모든 연속 쌍이 다른 키에 입력 됨) 대신 1 개의 문자를 면도 할 수 있습니다 . APL FTW !!!
Tobia

예 tkx "내가 왜 그것을 할 수 없는지 숯불 1 개를 깎을 수 있어야한다고 생각 했어 !!!" 그러나 나는 수업에 가야하므로 내가 가진 것을 게시합니다. 그렇습니다. DAMN Z KEY. 불행히도 나는 내 전화를 사용하여 나중에 편집 할 수 없습니다
TwiNight

그리고 나는 De Morgan의 법칙에 대해 의식적으로 생각했지만 여전히 그것을 알아낼 수 없습니다 ... How dumb
TwiNight

1
친구에게 문자 메시지를 보내십시오. ;)
Thane Brimhall

이것은 매우 흥미로운 것 같습니다. Dyalog APL 인터프리터를 구매하지 않고이 코드를 시험해 볼 수있는 방법이 있습니까? 내가 일반적으로 사용하는 온라인 통역사 는 방언을 이해하지 못하는 것 같습니다.
Dennis

7

펄-44

이것은 기본적으로 @DigitalTrauma의 답변 이 Perl의 승인으로 게시 된 것입니다. @KyleStrand 덕분에 2자를 깎았습니다.

y/b-y/aadddgggjjjmmmpppptttzzz/;$_=!/(.)\1/

-p플래그는 43 자 + 1입니다 . y///와 동일합니다 tr///. 1true로 인쇄 하고 false로 인쇄 하지 않습니다. 요청하면 자세한 설명을 게시 할 수 있습니다.

예제 실행 :

perl -pE'y/b-y/aadddgggjjjmmmpppptttzzz/;$_=!/(.)\1/' <(echo "x")

펄-81

$s=join"]{2}|[",qw(abc def ghi jkl mno p-s tuv w-z);say/^(?!.*(  |[$s]{2}))/?1:0

-n깃발의 경우 +1 그것은 몇 바이트를 면도 join하는 정규 표현식 ( 마틴의 것과 같은)을 만드는 데 사용 합니다.

예제 실행 :

perl -nE'$s=join"]{2}|[",qw(abc def ghi jkl mno p-s tuv w-z);say/^(?!.*(  |[$s]{2}))/?1:0' <(echo "your silence was of undue permanence")

당신이시키는하여 펄 솔루션에서 두 개의 문자를 면도 할 수 없습니다 azuntransliterated 남아? y/b-y/aadddgggjjjmmmpppptttzzz/;$_=!/(.)\1/또한 이것은 공백을 처리하지 않습니까?
Kyle Strand

... 오, 두 줄의 공백은 이미 두 줄의 동일한 문자입니다. 내 잘못이야.
Kyle Strand

@KyleStrand 좋은 분들께에 전화 a하고 z동일하게 유지. 업데이트 된 답변!
hmatt1

4

자바 스크립트 -159 156 바이트

function g(s){p=n=-1;for(i=0;i!=s.length;i++){p=n;n=s.charCodeAt(i);n-=97;if(n>17)n--;if(n>23)n--;if(p==-1)continue;if(~~(p/3)==~~(n/3))return 0;}return 1;}

진실의 경우 1을, 거짓의 경우 0을 반환합니다.

키워드 만 제거 할 수 있다면


적어도 일부 공백을 제거 할 수 있으며 if : : 141 :function g(s){p=n=-1;for(i=0;i<s.length;i++){p=n;n=s.charCodeAt(i)-97;n>17&&n--;n>23&&n--;if(~p)continue;if(~(p/3)==~(n/3))return 0}return 1}
Optimizer

당신은 내가 전에 보지 못한 답에 흥미로운 것들을 많이 사용합니다. 나는 보통 C ++로 작성하지만 온라인 테스트가 더 빠르기 때문에 JS에 샷을 줄 것이라고 생각했습니다.
Lozzaaa

나는 오늘이 장소를 발견했고 내가 그것을 줄 것이라고 생각했다. 나의 다음 시도는 우수 할 것입니다 : D
Lozzaaa

!=for 루프를 로 대체하여 코드를 더 짧은 문자로 만들 수 있습니다 <.
ProgramFOX

그렇습니다. Optimizer의 최적화에있었습니다. 이제 수정 사항을 수락하여 이길 수있는 또 다른 JavaScript 항목이 있습니다.
Lozzaaa

4

c, 74 바이트

main(c,d,r){for(;~(c=getchar());r*=d!=c/3,d=c/3)c-=--c/'p'*(c-'k')/7;c=r;}

TRUE의 경우 0이 아닌 종료 상태를, FALSE의 경우 0을 반환합니다.

$ for s in "x" "aardvark" "ardvark" "flonk" "im codegolfing all day long" "i indulge in minimizing bytecount" "havent heard from you in a long time" "your silence was of undue permanence" "how are  you" "how are you"; do echo "./3310 <<< \"$s\" returns $(./3310 <<< "$s"; echo $?)"; done
./3310 <<< "x" returns 40
./3310 <<< "aardvark" returns 0
./3310 <<< "ardvark" returns 216
./3310 <<< "flonk" returns 0
./3310 <<< "im codegolfing all day long" returns 0
./3310 <<< "i indulge in minimizing bytecount" returns 72
./3310 <<< "havent heard from you in a long time" returns 0
./3310 <<< "your silence was of undue permanence" returns 232
./3310 <<< "how are  you" returns 0
./3310 <<< "how are you" returns 8
$ 

로 변경하여 3 바이트를 절약 하고 첫 번째 를 연산자 로 변경하여 다른 바이트 while를 저장할 수 있습니다 . for(;c=~getchar();d=c/3)if?:
Allbeert

@ Allbeert-감사합니다. 보다 우선 순위가 높기 c=getchar()때문에 괄호 가 필요합니다 . 아직도, 나는 다른 두 바이트를 취할 것이다 :)~=
Digital Trauma

마지막 exit(d!=c/3);으로 if(d==c/3)exit(0);작업 대신에 비슷한 것이 있습니까?

@professorfish 그것은 내가 원하지 않는 그 시점에서 출구를 무조건 만들 것입니다
Digital Trauma

만약 (R)와 하나 개의 문자를 저장할 수 * ^ D = C / 3
알키 미스트

3

루비 1.8, 89 83 81 78 바이트

p$*[0].chars.map{|c|c=c[0];(c-c/?p-c/?w-1)/3}.each_cons(2).map{|a,b|a!=b}.all?

여기 또 다른 제출물이 있습니다. 부끄러운 일이지만 정규 표현식보다 뛰어납니다. :(

명령 줄 인수를 통해 문자열을 가져 와서 부울을 인쇄합니다.

알고리즘에 관해서는 문자 p를 1 씩, z2 씩씩 아래로 이동 한 다음 정수를 3으로 나눈 후 충돌이 없는지 확인합니다.

추신 : Ruby 1.8을 사용하면 코드가 단축되었습니다 (문자 코드를 얻는 더 짧은 방법으로 인해).


3

코브라-80

def f(s)
    for c in s
        for x in 9,if' adgjmptw'[x]>c,break
        t,f=x,t<>x
    print f

3

자바 스크립트 (ES6) 66 74

F=s=>[...s].every(c=>[...' adgjmptw'].map(x=>s+=c<x,w=s,s=0)|s!=w)

내부 루프는 각 문자의 그룹을 찾습니다. 개념적으로는 '감소'이지만 '지도'는 더 짧습니다. 외부 루프는 연속 문자 그룹을 비교하고 동일하면 false로 종료합니다.

Firefox / Firebug 콘솔에서 테스트

;["x","aardvark","ardvark","flonk","im codegolfing all day long",
"i indulge in minimizing bytecount","havent heard from you in a long time",
"your silence was of undue permanence","how are  you","how are you"]
.forEach(x=>console.log(x + ' -> ' + F(x)))

산출

x -> true
aardvark -> false
ardvark -> true
flonk -> false
im codegolfing all day long -> false
i indulge in minimizing bytecount -> true
havent heard from you in a long time -> false
your silence was of undue permanence -> true
how are  you -> false
how are you -> true

.some모든 대신 할 수 있습니다 . 한 번 실패하더라도 대답은 허위이기 때문입니다.
Optimizer

@Optimizer someevery상호 교환 가능하며 조건에 맞지 않습니다. 그러나 여기서는 단순히 작동하지 않는 some대신 넣어 every보십시오.
edc65

흠, 맞아. 먼저 논리를 이해해야합니다.
Optimizer

[...s].every내 골프 에서이 트릭을 사용하기 시작해도 괜찮습니다. :)
Optimizer

2

펄, 83 바이트

$_=<>;chop;map{$_=ord;$_=($_-$_/112-$_/119-1)/3;die 0 if$l==$_;$l=$_}split//;die 1

Perl에서 $ _을 (를) 많이 학대합니다.


1
관찰 할 수 있듯이 명령 줄 매개 변수를 인터프리터에 전달할 수 있으므로 추가 매개 변수를 세면됩니다. ( -ePerl 에서 코드에 액세스하는 데 필요한 최소값 은 무료입니다.) 명령 줄 매개 변수를 사용하여 71자를 대체 할 수 perl -nlaF -e 'map{$_=ord;$_=($_-$_/112-$_/119-1)/3;die 0 if$l==$_;$l=$_}@F;die 1'있습니다.
manatwork

@manatwork 필요 -l하지는 않지만 잘 보입니다!
hmatt1

@chilemagic, 방금 원래 코드와 동등한 코드를 재현하려고 시도했기 때문에에 -l대한 대체물로 추가 했습니다 chop. 물론 그렇습니다.
manatwork

@manatwork 덕분에 Perl의 명령 줄 옵션을 사용하려고 생각조차하지 않았습니다.
mcreenan

2

파이썬에서는 두 가지 작업이 까다 롭습니다. 체인을 감지하고 그룹을 할당합니다. 둘 다 numpy를 사용하여 도움을 줄 수 있지만 표준 라이브러리에는 없습니다.

Python 2 (표준 라이브러리 만)-59 자 함수

from itertools import imap as M
from __builtin__ import bytearray as A, all as E
from operator import ne as D, not_ as N
from re import S, sub as X, search as F

# 68
#def f(s):
# g=[(n-n/115-n/61)/3for n in A(s)]
# return E(M(D,g,g[1:]))

# 67 with regex via regex
#f=lambda s:N(F(X('(\S)(.)',r'|[\1-\2]{2}','  acdfgijlmopstvwz'),s))

# 59 slightly optimized ordinal classifier and regex sequence detector
f=lambda s:N(F(r'(.)\1',A((n-n/23-n/30)/3for n in A(s)),S))

# 69 using itertools.groupby
#from itertools import groupby as G
#from __builtin__ import sum as S, len as L
#f=lambda s:N(S(L(A(g))-1for _,g in G((n-n/115-n/61)/3for n in A(s))))

Python 2 (표준 라이브러리 만)-53 자 stdin이 종료됩니다.

여기서 나는으로 issubclass(bool,int)변경 하면 유효한 종료 값 all()any()가져 와서 not()반환 값에서 벗어나는 사실을 남용합니다 . 함수 오버 헤드가 제거되어 정규식 버전의 크기가 줄어 듭니다.

from itertools import groupby as G, imap as M
from __builtin__ import bytearray as A, any as E
from __builtin__ import raw_input as I
from sys import exit as Q
from operator import eq as S

g=[(n-n/23-n/30)/3for n in A(I())]
Q(E(M(S,g,g[1:])))

2

J-42 자

오른쪽에 문자열이있는 함수.

*/@(2~:/\(I.4 3 4 1,~5#3){~(u:97+i.26)&i.)

먼저 알파벳 ( u:97+i.26)을 0에서 25까지의 숫자에 매핑하고 다른 모든 문자 (공백 포함)는 26 ( i.)이됩니다. 그런 다음 {~첫 번째 세 요소를 첫 번째 키에 매핑하고 다음 세 개를 다음 키에 매핑하는 등 전화 패드의 키를 통해 매핑합니다. 마지막에 공백 / 기타 구두점을 별도의 키에 매핑합니다. . ( 처음 세 개가 키 1 등인 27 개 항목 배열 과 4 3 4 1,~5#3동일하고 이를 27 개 항목 배열로 바꿉니다.) 그런 다음 쌍별 부등식 ( )과 모든 결과를 함께 검사합니다 ( ).3 3 3 3 3 4 3 4 1I.2~:/\*/

   */@(2~:/\(I.4 3 4 1,~5#3){~(u:97+i.26)&i.) 'i indulge in minimizing bytecount'
1
   f =: */@(2~:/\(I.4 3 4 1,~5#3){~(u:97+i.26)&i.)
   f 'im codegolfing all day long'
0
   f '*/@(2~:/\(I.4 3 4 1,~5#3){~(u:97+i.26)&i.)'  NB. no -3 bonus :(
0

2

라켓, 119

(define(f t)(for*/and([s(map ~a'(abc def ghi jkl mno pqrs tuv wxyz))][i s][j s])(not(regexp-match(format"~a~a"i j)t))))

Ungolfed (조합 정규식) :

(define(f t)
  (for*/and([s (map ~a '(abc def ghi jkl mno pqrs tuv wxyz))]
            [i s]
            [j s])
    (not (regexp-match (format "~a~a" i j) t))))

1

자바 스크립트-152

승자는 아니었지만 기회를주었습니다. 게시 시간 기준으로 @Lozzaaa를 4 바이트로 친다 :)

function m(a){c="abc-def-ghi-jkl-mno-pqrstuv-wxyz";j=a.split("");for(z in j)if(j[z]=Math.floor(c.indexOf(j[z])/4),0!=z&&j[z-1]==j[z])return 0;return 1};

모든 테스트를 통과합니다.
다중 유형 배열을 만들기 위해 JS의 입력 부족을 이용하고 공간 지원을 위해 indexOf -1을 사용합니다.

용법:

m("string here")

소문자와 공백 만 가정합니다. true는 1, false는 0을 반환합니다.

ES6를 알고 있다면 두 번째 도전을 시도 할 수 있습니다.


"만 ..."-내 대답을 보셨습니까? : P
Optimizer

그래, 내가 했어. 나는 슬프게도 ES6 (아직)을 모른다. 그러나 이것은 흥미로웠다.
DankMemes

예, 흥미로운 접근법을 사용하는 솔루션입니다.
Optimizer

1

ES6, JavaScript 89 70 자

문자의 ASCII 값을 얻는 것과 같은 편리한 작업을 할 때 JS가 부풀어 오르기 때문에 승자가 아닙니다 .charCodeAt().

N=s=>[...s].every(c=>l-(l=(c.charCodeAt()-(c>"r")-(c>"y")-1)/3|0),l=1)

최신 Firefox 웹 콘솔에서 실행하십시오.

용법:

N("testing if this works")

이 함수는 true 또는 false를 반환합니다.

편집 : [...x].every@ edc65 (Thanks!)에서 배운 트릭을 사용하여 많은 골프를 쳤다.

나는 그것을 더 골프하려고합니다 :)


0

GML (게임 메이커 언어), 149

s=argument0p=n=-1for(i=0;i<string_length(s);i++){p=n;n=string_char_at(s,i)-97;x=n>17&&n--;x=n>23&&n--‌​;if(!p)x=1if(!(p/3)=!(n/3))x=0}show_message(x)

0

파이썬 3-152 자

내가 갈 수있는 최단은 아니지만 지금은 할거야

k=['abc','def','ghi','jkl','mno','pqrs','tuv','wxyz',' ']
x=input()
l=2>1
for i in range(len(x)-1):
 for j in k:
  if x[i+1] in j and x[i] in j:l=1>2
print(l)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.