지루한 숫자를 찾는 골프


22

정수가 연속적으로 반복되는 자릿수 / 자릿수의 자릿수를 5 번 이상 반복하면 ( "지속적으로"라고 말한 이유를 이해할 것입니다) "보링"이라고합니다.

예를 들어, 11111지루한 반면 12345그렇지 않습니다.

명령

정수를 입력 값으로 사용

정수가 지루하면 참 값을, 정수가 지루하지 않으면 거짓 값을 출력합니다.

11111=> true또는 1(1 회 5 회 반복)

12345=> false또는0

1112111=> false또는0

4242424242=> true또는 1(42 회 5 회 반복)

-11111=> true또는1

3452514263534543543543543543876514264527473275=> true또는 1(543 회 5 회 반복)

다른 유형의 "진실"및 "거짓"을 사용하는 경우이를 지정하십시오.

규칙

기본 규칙이 적용됩니다.

행운을 빕니다!


되어 1112111지루한?
Leaky Nun

1
되어 4242424242지루한?
페이탈 라이즈

4242424242는 지루합니다.

22
오늘은 아무도 좋아하지 않는 숫자의 날이라고 생각합니다. :)
Seims

12
엄밀히 말하면 모든 숫자는 임의의 수의 선행 0으로 쓰여질 수 있으므로 지루합니다. :-)
celtschk

답변:


13

05AB1E , 8 바이트

암호:

Œv¹y5×åO

설명:

Œ         # Compute all substrings from the input.
 v        # For each substring.
   y5×    # Repeat the substring 5 times (42 × 5 = 4242424242).
  ¹   å   # Check if it's in the input string.
       O  # Sum up the result. Non-boring numbers should give 0.

진실 은 0이 아니며 거짓 은 0입니다. CP-1252 인코딩을 사용합니다 .

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


1
Œ와 함께 사용 하는 것이 ×좋습니다.
Emigna

1
@Adnan 니스 일! c =

23

레티 나 , 9 바이트

(.+)\1{4}

모든 테스트 케이스를 확인하십시오! (모든 테스트 케이스를 한 번에 실행하도록 약간 수정했습니다.)


4
잠깐만, 사람들이 그렇게 빨리?

나는 이것을 게시하기에는 너무 느렸다. Knew Retina는이 도전을 좋아할 것입니다 :)
Emigna

@Emigna 죄송합니다 xd
Leaky Nun

1
@LuisMendo 동일 여부에 관계없이 5 개 이상 일치하지 않습니까? 예를 들어12345
Emigna

4
@LuisMendo는로 (.+){5}확장하고 (.+)(.+)(.+)(.+)(.+)으로 (.+)\1{4}확장합니다 (.+)\1\1\1\1.
Leaky Nun

7

자바 8, 52 바이트

s->s.matches(".*(.+)\\1{4}.*")

이 Java 8 답변 을 직접 사용하여 능가 했습니다String#matches .

설명:

여기에서 시도하십시오.

s->              // Method with String parameter and boolean return-type
  s.matches(     //  Return whether the entire String matches the following regex:
    ".*          //   0 or more leading characters
     (.+)\\1{4}  //   group of 1 or more characters, repeated 5 times
     .*")        //   0 or more trailing characters


4

루아, 35 바이트

글쎄, 나는 루아의 패턴으로 더 잘하는 법을 모른다! nil잘못된 경우에 대한 입력 및 출력으로 명령 줄 인수를 사용하고 , 사실 일 때 반복되는 숫자를 사용합니다.

print((...):match("(%d+)%1%1%1%1"))

4

자바 스크립트, 16 바이트

node.js에서 (60 바이트)

process.stdin.on('data',t=>console.log(/(.+)\1{4}/.test(t)))

소모성 입력 / 출력에 바이트를.

자바 스크립트 ES6 (33 바이트)

alert(/(.+)\1{4}/.test(prompt()))

입출력에 바이트를 다시 낭비합니다.

익명 함수 (22 바이트)

n=>/(.+)\1{4}/.test(n)

또는 더 짧은 ( 16 바이트 )

/(.+)\1{4}/.test

내 실수를 지적 해 주신 @BusinessCat에게 감사드립니다.


1
/(.+)\1{4}/.test(n)대신 match몇 바이트를 절약하는 대신 사용할 수 있습니다 . 또한 실제로 출력되는 것처럼 보이지 않습니다.
비즈니스 고양이

@BusinessCat 당신은 절대적으로 맞습니다, 나는 질문에서 그것을 놓친 것 같아요. 제안 해 주셔서 감사합니다.
charredgrass

표준 입력을받을 필요가 없습니다. 함수 인자를 사용할 수 있습니다
cat

2
Uncaught TypeError: Method RegExp.prototype.test called on incompatible receiver undefined. 기술적으로 정답으로 계산되는지 확실하지 않습니다 /./.test.bind(/(.+)\1{4}/).
패트릭 로버츠

이 질문은 "5 번 이상 반복 된 숫자 "는 지루 하다고 말합니다 .
칫솔

3

Python 3.5, 49 43 바이트 :

( Martin Ender의 팁 덕분에 -6 바이트 ! )

import re;lambda u:re.search(r'(.+)\1{4}',u)

정규식을 사용하여 5 회 이상 연속 반복되는 한 모든 반복되는 문자 시퀀스를 일치시킵니다. 리턴 re매치 객체 (예 : <_sre.SRE_Match object; span=(0, 10), match='4242424242'>경기가 truthy 값, 아무것도 또는 발견되는 경우) Nonefalsey 값으로한다.

온라인으로 사용해보십시오! (아이디어)


3
아, 전능 한 정규식.

2
교체 {4,}{4}?
Leaky Nun

@LeakyNun 그래, 그것도 작동합니다.
R. Kap

\1정규식 그룹 이후 에 해야 할 일은 무엇입니까 ?
speedplane

@speedplane 그룹에서 일치하는 모든 일치 항목을 찾습니다.
R. Kap

2

펄, 17 15 바이트

$_=/(.+)\1{4}/

+ p깃발.

(로 실행 perl -pe '$_=/(.+)\1{4}/')

(.+)대신 Dom Hasting에게 감사합니다 (\d+).

필요한 경우 설명 : (.+)숫자의 일부와 일치하며 \1{4}$4 번 연속 반복되는지 검색합니다.


좋은 사람이지만 더 나은 골퍼가 있습니다. 그래도 여전히 좋습니다.

4
펄이 그보다 더 잘할 수 있을지 모르겠다 ... 그리고 여전히 펄 솔루션을 제출하고 싶었다.
Dada

설명을 추가 할 수 있습니까?

나는 당신이 $_=/(\d+)\1{4}/대신 111112지루할 필요가 있다고 생각 하지만 이것은 잡을 수 없습니다. /./Retina 답변에 따라 사용할 수도 있습니다 .
Dom Hastings

1
그래, 맞아, 지루한 것만으로 충분했을 때 나는 "매우 지루한 수"와 일치하도록 묶고 있었다
Dada

1

C # -93 38 바이트

s=>new Regex(@"(.+)\1{4}").IsMatch(s);

문자열을 받아서 정수를 반환합니다.

많은 바이트를 절약 한 aloisdg 에게 감사드립니다 !


그러나 인수를 문자열로 사용하면 바이트를 절약 할 수 있습니다.
Leaky Nun

1
@"(.+)\1{4}"정규식으로도 작동 하지 않습니까? 내 C # 환경에서 적어도 않습니다.
Emigna

람다를 사용할 수 있습니다. 허용됩니다. s=>Syst...
aloisdg는 Reinstate Monica

@Emigna-C # 환경에 관계없이 확실히 작동합니다. 연속 된 문자가 5 개를 초과하면 정확히 5 개의 연속 문자에 대해서도 작동합니다.
charredgrass

1
또한, 우리가 쓸 수 있어야한다고 생각 s=>new Regex(@"(.+)\1{4}").IsMatch(s);우리가 .NET에 머물 (이 자신의 우리의 다음 stdlib)과 우리가 계산되지 않습니다 때문에 using System.Linq;using System.Collections.Generic.
aloisdg는 Reinstate Monica

1

Pyth , 9 8 바이트

Maltysen 덕분에 1 바이트.

sm} * 5dQ .:
f} * 5TQ .:

진실 값은 비어 있지 않은 배열입니다.

Falsey 값은 [](빈 배열)입니다.

테스트 스위트.

f}*5TQ.:   input as a string stored in Q
f}*5TQ.:Q  implicit arguments
        Q  input
      .:   all substrings of.
f   T      filter for this condition, keep those returning true:
  *5           repeat five times
 }   Q         in Q? (True/False)

대체하여 8 바이트를 얻을 mf하고 합을 복용.
Maltysen

1

매스 매 티카, 46 40 36 바이트

b=a__;StringContainsQ[b~~b~~b~~b~~b]

기능. 입력 및 출력으로서 얻어 문자열 True또는 False. a__~~a__~~a__~~a__~~a__5 번 반복되는 동일한 문자 시퀀스를 나타내는 expression에 대해 문자열을 테스트 합니다. 참고로 정규 표현식을 사용하는 가장 짧은 솔루션의 길이는 45 바이트입니다.

StringContainsQ@RegularExpression@"(.+)\1{4}"

당신에게 RegularExpression을 저주하십시오!


패턴 일치를 잘 사용합니다.
마일

1

PHP, 37 33 바이트

NoOneIs 덕분에, 나는 잊었다 <?=

PHP <5.4을위한 프로그램, 인쇄 1번호를 지루를 들어, 0다른

<?=preg_match('/(.+)\1{4}/U',$n);

용법:

  • 설정 register_globals=1에서 php.iniPHP가 CGI에 대한은
    다음 전화php-cgi <filename> n=<number>;echo""
  • PHP> = 5.4, 교체 $n$_GET[n]

비 - 정규 표현식 용액, 152 (147) 140 바이트

<?for($e=$n+1;--$e;)for($f=$e;$f--;)for($a=str_split(substr($n,$f),$e),$k=$c='';strlen($v=array_pop($a));)$c-$v?$k=0&$c=$v:($k++<3?:die(1));
  • 지루한 숫자를 반환 종료 코드 1, 그렇지 않으면 0
    교체 die(1)die(print 1)하고 추가 echo 0;하는 대신 인쇄
  • 위와 동일한 사용법이지만 short_open_tags=1비활성화 된 경우 에도 설정
  • 외부 루프는 골프의 불합리한 시작 값을 얻었다 교체 $n+1ceil(strlen($n)/5)+1또는 최소한으로 strlen($n)테스트 또는 영원히 같은 루프 할 수있다.

1
<?=preg_match... 몇 자 더 짧습니다
NoOneIsHere16

1

하스켈, 80 (63?)

import 문이 없으면 63이됩니다.

import Data.List
f x=or$tail[isInfixOf(concat$replicate 5 b)x|b<-subsequences x]

용법

f "11111211"
f "11111"
f "12345" 
f "1112111"
f "4242424242"
f "-11111"
f "3452514263534543543543543543876514264527473275"

그건 그렇고, 연속연속 보다 나에게 더 의미가 있습니다.

(죄송합니다. 아직 댓글을 달 수 없습니다.)


1
본인의 의견을 밝히는 데 도움이 되었기를 바랍니다.

0

MATLAB, 26 또는 13 바이트

s=int2str(i);all(s==s(1))

정수 변수 'i'를 사용합니다. 문자열은 마지막 부분입니다.

all(s==s(1))

나는 개행을 문자로 세었다.


예를 들어 입력을 지정해야합니다. 함께 가져 가거나 i=input('')모든 것을 기능으로 만드십시오 (예 :) @(i).... BTW, 정수를 이미 문자열로 사용하기에는 너무 많이 늘어날 것이라고 생각하지 않습니다. 추신 : 나는 그것이 마지막 테스트 케이스에 실패하고 간단하다고 생각합니다 211111.
pajonk

질문을 편집 한 사람 :하지 마십시오. 잠시 후 (예 : 내일) OP가 응답하지 않으면 편집을 시도 할 수 있습니다. 또한 비경쟁으로 유지되지 않고 삭제해야합니다.
Rɪᴋᴇʀ

0

TSQL, 151 바이트

골프 :

DECLARE @t varchar(99)='11111'

,@z bit=0,@a INT=1,@ INT=1WHILE @a<LEN(@t)SELECT @z=IIF(@t LIKE'%'+replicate(SUBSTRING(@t,@a,@),5)+'%',1,@z),@=IIF(@=20,1,@+1),@a+=IIF(@=1,1,0)PRINT @z

언 골프 드 :

DECLARE @t varchar(99)='11111'

,@z bit=0,
@a INT=1,
@ INT=1
WHILE @a<LEN(@t)
  SELECT
    @z=IIF(@t LIKE'%'+replicate(SUBSTRING(@t,@a,@),5)+'%',1,@z),
    @=IIF(@=20,1,@+1),
    @a+=IIF(@=1,1,0)

PRINT @z

깡깡이


0

PowerShell, 26 바이트

$args[0]-match"(.+)\1{4}"

나는 결코 정규 표현식 마스터가 아니므로 다른 답변에 대한 신용도입니다.


0

클로저, 24 바이트

#(re-find #"(.+)\1{4}"%)

clojure의 잘못된 값 nil/ false및 다른 모든 값에 대한 진실 값을 사용합니다. 구체적으로, nilfalse와 일치하는 것이 없으면 []11111과 같이 일치하는 것이 있으면 true 의 배열 ["11111" "1"]이 참입니다.


0

정규 표현식이없는 JS, 166

b=s=>{for(let i=0;i<s.length-4;i++){for(let n=1;n<=Math.floor((s.length-i)/5);n++){if([1,2,3,4].every(k=>s.slice(i,i+n)==s.slice(i+n*k,i+n*(k+1))))return 1}}return 0}

비 축소 :

// test any start pos, and length
var b = s => {
    for (let i = 0; i <= s.length - 5; i++) {
        for (let n = 1; n <= Math.floor((s.length - i) / 5); n++) {
            // test if s is boring at position i, with length n
            if ([1, 2, 3, 4].every(k => s.slice(i, i + n) === s.slice(i + n * k, i + n * (k + 1)))) {
                return 1;
            }
        }
    }
    return 0;
};

console.log(b('11111'));
console.log(b('12345'));
console.log(b('1112111'));
console.log(b('-11111'));
console.log(b('3452514263534543543543543543876514264527473275'));

1
안녕하세요, PPCG에 오신 것을 환영합니다! 그러나 이것은 실제로 더 골프를 칠 수 있습니다. 훨씬 짧은 코드를 위해 여분의 공백 만 제거 할 수 있습니다. 더 골프를 치거나 삭제하십시오.
Rɪᴋᴇʀ

나는 정규 표현식을 피하는 아이디어를 좋아합니다. Replace ([ 'boring', 'let', 'false', 'true'] [ 'b', '', '0', '1']; 20자를 자릅니다
Coomie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.