회문 잔류 물


25

오늘이 글을 쓰고있는 3 월 31 일입니다. 미국에서 이것은입니다 3/31. 나는 331도전을 제기하기 위해 숫자 로 놀고 있었고 , 그 잔류 물 (모듈로 작은 숫자)은 회문으로 나타났습니다. 331%2=1, 331%3=1, 331%4=3, 331%5=1, 331%6=1( 11311).

정수가 주어지면 모듈로를 취할 때 회문 잔류 물이 n > 2있는 첫 번째 n양수를 출력하십시오 [2,n].

예를 들어 input 7의 경우 출력은이어야합니다 1, 42, 43, 140, 182, 420, 421. 그 이유를 설명하는 차트는 다음과 같습니다.

        mod
num | 2 3 4 5 6 7
-----------------
  1 | 1 1 1 1 1 1
 42 | 0 0 2 2 0 0
 43 | 1 1 3 3 1 1
140 | 0 2 0 0 2 0
182 | 0 2 2 2 2 0
420 | 0 0 0 0 0 0
421 | 1 1 1 1 1 1

입력

하나의 양의 정수 nn > 2 편리한 형식 .

산출

상기 n개략 된 제 1 회문 잔류 물의 결과 배열 / 목록 . 다시, 어떤 적절한 형식으로.

규칙

  • 의 경우 n > 10잔류 물 목록이 회문인지 확인하기 전에 평평한 것으로 가정합니다. 즉, [1, 10, 11]회 문성이지만 [1, 10, 1]그렇지 않습니다.
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 가능하면 다른 사람들이 귀하의 코드를 시험해 볼 수 있도록 온라인 테스트 환경에 대한 링크를 포함하십시오!
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

[input]
[output]

3
[1, 6, 7]

4
[1, 4, 5, 8]

5
[1, 50, 60, 61, 110]

6
[1, 30, 31, 60, 61, 90]

7
[1, 42, 43, 140, 182, 420, 421]

8
[1, 168, 169, 336, 337, 504, 505, 672]

9
[1, 2520, 2521, 5040, 5041, 7560, 7561, 10080, 10081]

10
[1, 280, 281, 560, 1611, 1890, 1891, 2170, 2171, 2241]

11
[1, 22682, 27720, 27721, 50402, 55440, 55441, 78122, 83160, 83161, 105842]

출력을 주문해야합니까?
Arnauld

@Arnauld 첫 번째 n요소 만 포함되어 있다면 반드시 할 필요는 없습니다 .
AdmBorkBork

2
arrgh ... 당신의 도전 = 당신의 규칙, 그러나 "창문 적이지만 [1, 10, 11], [1, 10, 1]아닙니다"는 수학적으로 너무 잘못 보인다.
Greg Martin

1
@GregMartin 까다로운 회문이 아닌 끈끈한 회문. ;-)
AdmBorkBork

1
grr. 교묘 한 회문 대신에 전체적으로 끈적 거리면 특정 언어에서는 이것을 천 배 어렵게 만듭니다. 오 잘
MildlyMilquetoast

답변:


9

하스켈, 57 바이트

f n=take n[x|x<-[1..],(==)=<<reverse$show.mod x=<<[2..n]]

사용 예 : f 4-> [1,4,5,8]. 온라인으로 사용해보십시오!

첫 번째 =<<는 함수 컨텍스트에 있고 람다로 변환되고 \x -> reverse x == x두 번째 =<<는 목록 컨텍스트에 있으며 concatMap, 즉 map-andflatten-one-list-level과 같습니다.


5

05AB1E , 12 바이트

µN2¹Ÿ%JÂQD½–

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

설명

µ              # until counter equals input do:
 N             # push current iterations number
     %         # modulus each in
  2¹Ÿ          # range [2 ... input]
      J        # joined to string
       ÂQ      # equals it's reverse
         D     # duplicate
          ½    # if true, increase counter
           –   # if true print iteration number

당신은 당신의 전화에서 05AB1E 답변을 게시합니까? 이 빠른 롤을 수행하십시오.
Magic Octopus Urn

@carusocomputing : cp-1252의 많은 문자들이 전화로 타이핑 / 복사-붙여 넣기를 성가 시게하는 경우는 거의 없습니다. 저녁 식사 후 내 컴퓨터를 확인하기 바로 전에이 메시지가 나타
났으므로

4

Mathematica, 79 바이트

NestList[#+1//.x_/;!PalindromeQ[ToString/@Mod[x,Range@n+1]<>""]:>x+1&,1,n=#-1]&

4

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

f=(n,x=(k=--n,2))=>k?([...Array(n)].map(_=>(r=x%++i+r,x%i),i=1,r='').join``==r?k--&&x+' ':'')+f(n,x+1):1

데모

주의 : 많은 재귀 호출로 인해 Firefox 에서는 n> 8 , Chrome에서는 n> 10 에서 충돌이 발생합니다 .



3

MATL , 19 바이트

이전 버전의 코드에서 실수를 지적한 @AdmBorkBork에게 감사합니다.

`@Gq:Q\VXztP=?@]NG<

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

설명

`        % Do...while
  @      %   Push iteration index, starting at 1
  Gq:Q   %   Push [2 3 ... n], where n is the input
  \      %   Modulo, element-wise
  V      %   Convert to string. Numbers are separated by spaces
  Xz     %   Remove spaces
  tP     %   Duplicate, flip
  =      %   Equal? (element-wise)
  ?      %   If all results were true
    @    %     Push current iteration index. It is one of the sought numbers
  ]      %   End
  N      %   Push number of elements in stack
  G      %   Push input n
  <      %   Less than? This is the loop condition
         % End (implicit). Display (implicit)

3

스칼라, 90 86 82 바이트

(n:Int)=>Stream.from(1)filter{i=>val d=(2 to n)map(i%)mkString;d.reverse==d}take(n)

설명

Stream.from(1)                              // From an infinite Stream starting from 1,
    filter ( i => {                         // keep only elements matching the next condition :
        val d=(2 to n)map(i%)mkString;      // Generate residues and convert to String,
        d.reverse==d                        // return true if palindrom, false otherwise
    })take(n)                               // Finally, take the n first elements matching the condition

테스트 사례

val f = (n:Int)=>...    // assign function
(3 to 11).foreach { i =>
    println(i + "\n" + f(i).mkString(", ") + "\n")
}

결과

3
1, 6, 7

4
1, 4, 5, 8

5
1, 50, 60, 61, 110

6
1, 30, 31, 60, 61, 90

7
1, 42, 43, 140, 182, 420, 421

8
1, 168, 169, 336, 337, 504, 505, 672

9
1, 2520, 2521, 5040, 5041, 7560, 7561, 10080, 10081

10
1, 280, 281, 560, 1611, 1890, 1891, 2170, 2171, 2241

11
1, 22682, 27720, 27721, 50402, 55440, 55441, 78122, 83160, 83161, 105842

편집

# 1 (90 => 86)

  • 익명의 기능

# 2 (86 => 82)

  • 괄호 또는 대괄호 뒤에 쓸모없는 점 문자를 제거하십시오 (예 : (2 to n).map(%i)=>(2 to n)map(%i)

1
PPCG에 오신 것을 환영합니다!
Martin Ender

감사! 내가 바꿀 수 있는지 궁금 해서요 def f(n:Int)=(n:Int)=>그것은 또한 함수를 정의합니다 (그러나 이름없이) 이후. 4 바이트를 절약합니다!
norbjd

예, 재귀 호출이나 이와 유사한 이름이 필요하지 않은 경우 명명되지 않은 함수가 허용 됩니다.
Martin Ender

위대한 편집 :)
norbjd

2

젤리 , 12 바이트

%ЀḊDFŒḂ
1ç#

방법?

1ç# - Main link: n
1   - initialise "i" at 1
  # - increment i and yield a list of the first n truthful results of:
 ç  -     last link (1) as a dyad

%ЀḊDFŒḂ - Link 1, test a value "i" for mod [2,n] being palindromic: i, n
 Ѐ      - for each, mapped over the right argument, i.e. for j = 1 to n:
%        -     i modulo j
   Ḋ     - dequeue, i.e. discard the modulo 1 result
    D    - convert to decimal list (vectorises)
     F   - flatten into one list
      ŒḂ - is palindromic?

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


1

CJam , 28 바이트

0ri:N{{)_N),2>f%s_W%#}g_p}*;

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

설명

0          e# Push 0, the value we'll repeatedly increment to search for valid outputs.
ri:N       e# Read input, convert to integer, store in N.
{          e# Run this block N times...
  {        e#   Run this block until the condition is true, which will find the next
           e#   number with palindromic residues...
    )_     e#     Increment and duplicate.
    N),2>  e#     Push [2 3 ... N].
    f%     e#     Take the current value modulo each of these.
    s      e#     Flatten them into a single string.
    _W%    e#     Duplicate and reverse.
    #      e#     Try to find the reverse in the original. A common way to compute
           e#     "not equal" for strings of the same length.
  }g
  _p       e#   Print a copy of the result.
}*
;          e# Discard the final result to prevent printing it twice.

1

PHP, 93 바이트

for(;$x<$a=$argn;$s="")for($i=1,++$n;$i++<$a;)if($i==$a&strrev($s.=$n%$i)==$s)echo$n._.!++$x;

문자열로 출력되는 온라인 버전 2 루프

넓히는

for(;$x<$a=$argn;$s="") 
for($i=1,++$n;$i++<$a;)
    if($i==$a&strrev($s.=$n%$i)==$s)echo$n._.!++$x; 

PHP 130 바이트

for(;count($r)<$a=$argn;$s=[])for($i=1,++$n;$i++<$a;){$s[]=$n%$i;if(count($s)==$a-1&strrev($j=join($s))==$j)$r[]=$n; }print_r($r);

온라인 버전 2 루프

넓히는

for(;count($r)<$a=$argn;$s=[])
for($i=1,++$n;$i++<$a;){
    $s[]=$n%$i;
    if(count($s)==$a-1&strrev($j=join($s))==$j)$r[]=$n; 
}
print_r($r);

PHP, 1 루프의 139 바이트

for($i=$n=1;count($r)<($a=$argn)&$i++<$a;){$s[]=$n%$i;if(count($s)==$a-1){if(strrev($j=join($s))==$j)$r[]=$n;$n++;$s=[];$i=1;}}print_r($r);

온라인 버전 1 루프

로 실행

echo '<string>' | php -nR '<code>'

넓히는

for($i=$n=1;count($r)<($a=$argn)&$i++<$a;){
    $s[]=$n%$i;
    if(count($s)==$a-1){
        if(strrev($j=join($s))==$j)$r[]=$n;
        $n++;
        $s=[];
        $i=1;
    }
}
print_r($r);

1

QBIC , 48 바이트

:{A=G[2,a|A=A+!q%b$]~A=_fA||h=h+1?q]q=q+1~h=a|_X

Mathematica를 친다! 샘플 실행 :

Command line: 10
 1 
 280 
 281 
 560 
 1611 
 1890 
 1891 
 2170 
 2171 
 2241 

설명:

:{          Get 'a' from the command line, start an inf. loop
A=G         Clear out whatever's in A$
[2,a|       For each of the numbers we want to modulo
A=A+        Add to A$ 
     q%b       our current number MODULO te loop iterator
    !   $      cast to string
]           NEXT
~A=_fA|     If the string of remainders is a palindrome (_f ... | is Reverse())
|h=h+1      THEN h=h+1 (h starts at 0) - this counts how many hits we've had
 ?q            also, print the number with the palindromic remainder
]           END IF
q=q+1       Test the next number
~h=a|_X     If we've had 'a' hits, quit.
            The last IF and the infinite loop are closed implicitly.

1

apt , 26 바이트

L³o fR{C=Uò2@R%Xì ¥CwÃj1U

온라인으로 사용해보십시오! 모든 입력 에 몇 초가 걸리므로 기다려주십시오.

어떤 조건을 만족시키는 첫 번째 N 숫자를 얻는 내장 기능이 있다면 이것은 훨씬 짧고 빠릅니다.

R{C=Uò2@R%Xì ¥Cw}aU
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.