Dư lượng Palindromic


25

Hôm nay, khi tôi viết bài này, là ngày 31 tháng 3. Ở Mỹ, đây là 3/31. Tôi đã chơi xung quanh với 331tư cách là một con số để đưa ra một thử thách và nhận thấy rằng dư lượng của nó (số lượng nhỏ modulo) là palindromic. 331%2=1, 331%3=1, 331%4=3, 331%5=1, 331%6=1( 11311).

Thách thức của bạn ở đây là, khi được cung cấp một số nguyên n > 2, xuất ra các nsố dương đầu tiên có dư lượng palindromic khi lấy modulo [2,n].

Ví dụ, đối với đầu vào 7, đầu ra phải là 1, 42, 43, 140, 182, 420, 421. Đây là biểu đồ giải thích lý do tại sao:

        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

Đầu vào

Một số nguyên dương duy nhất nvới n > 2 bất kỳ định dạng thuận tiện .

Đầu ra

Mảng / danh sách kết quả của ndư lượng palindromic đầu tiên , như đã nêu ở trên. Một lần nữa, trong bất kỳ định dạng phù hợp.

Quy tắc

  • Đối với n > 10, giả sử danh sách dư lượng được làm phẳng trước khi kiểm tra xem đó có phải là một bảng màu hay không. Đó là, [1, 10, 11]là palindromic, nhưng [1, 10, 1]không.
  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Nếu có thể, vui lòng bao gồm một liên kết đến một môi trường thử nghiệm trực tuyến để người khác có thể thử mã của bạn!
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Ví dụ

[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]

Là đầu ra được cho là được đặt hàng?
Arnauld

@Arnauld Không cần, không, miễn là nó chỉ bao gồm các nyếu tố đầu tiên .
admBorkBork

2
mảng ... thách thức của bạn = quy tắc của bạn, nhưng " [1, 10, 11]là palindromic, nhưng [1, 10, 1]không" có vẻ rất sai về mặt toán học.
Greg Martin

1
@GregMartin palindromes Stringy, không phải palindromes toán học. ;-)
admBorkBork

1
grr. Toàn bộ chuỗi thay vì palindrom toán học làm cho điều này khó hơn gấp ngàn lần trong một số ngôn ngữ nhất định. Ồ tốt
MildlyMilquetoast

Câu trả lời:


9

Haskell, 57 byte

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

Ví dụ sử dụng: f 4-> [1,4,5,8]. Hãy thử trực tuyến!

Cái đầu tiên =<<là trong bối cảnh chức năng và dịch sang lambda \x -> reverse x == xvà cái thứ hai =<<là trong bối cảnh danh sách và tương đương với concatMap, tức là map-and-flatten-one-list-level.


5

05AB1E , 12 byte

µN2¹Ÿ%JÂQD½–

Hãy thử trực tuyến!

Giải trình

µ              # 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

Bạn có đăng câu trả lời 05AB1E từ điện thoại của bạn không? Vì bạn làm những lol nhanh chóng.
Bạch tuộc ma thuật Urn

@carusocomputing: Rất hiếm khi nhiều nhân vật trong cp-1252 khó chịu khi gõ / sao chép-dán trên điện thoại. Cái này bật lên ngay trước khi tôi kiểm tra máy tính của mình sau bữa tối, vì vậy tôi có thời gian khá tốt :)
Emigna

4

Toán học, 79 byte

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

4

JavaScript (ES6), 104 byte

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

Bản giới thiệu

Lưu ý : Do có nhiều cuộc gọi đệ quy, điều này sẽ sập đối với n> 8 trên Firefox hoặc n> 10 trên Chrome.



3

MATL , 19 byte

Cảm ơn @AdmBorkBork đã chỉ ra một lỗi trong phiên bản mã trước đó, hiện đã được sửa

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

Hãy thử trực tuyến!

Giải trình

`        % 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

Scala, 90 86 82 byte

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

Giải trình

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

Các trường hợp thử nghiệm

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

Các kết quả

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

Chỉnh sửa

# 1 (90 => 86)

  • chức năng ẩn danh

# 2 (86 => 82)

  • xóa các ký tự dấu chấm vô dụng sau dấu ngoặc đơn hoặc ngoặc vuông (ví dụ: (2 to n).map(%i)=>(2 to n)map(%i)

1
Chào mừng đến với PPCG!
Martin Ender

Cảm ơn! Tôi đã tự hỏi nếu tôi có thể thay đổi def f(n:Int)=thành (n:Int)=>, vì nó cũng xác định một chức năng (nhưng không có tên). Nó tiết kiệm 4 byte!
norbjd

Có, các chức năng không tên được cho phép , miễn là bạn không cần tên cho một cuộc gọi đệ quy hoặc đại loại như thế.
Martin Ender

Tuyệt vời, đã được chỉnh sửa :)
norbjd

2

Thạch , 12 byte

%ЀḊDFŒḂ
1ç#

Làm sao?

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?

Hãy thử trực tuyến!


1

CJam , 28 byte

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

Hãy thử trực tuyến!

Giải trình

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 byte

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

Phiên bản 2 vòng lặp trực tuyến Đầu ra dưới dạng chuỗi

Mở rộng

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

PHP 130 byte

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);

Vòng lặp phiên bản 2 trực tuyến

Mở rộng

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, 139 byte với 1 vòng lặp

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);

Vòng lặp phiên bản 1 trực tuyến

Chạy với

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

Mở rộng

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 byte

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

Beats Mathicala! Chạy mẫu:

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

Giải trình:

:{          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

Japt , 26 byte

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

Hãy thử trực tuyến! Mất vài giây tất cả các đầu vào, vì vậy hãy kiên nhẫn.

Điều này sẽ ngắn hơn đáng kể (và nhanh hơn) nếu có tích hợp sẵn để có được số N đầu tiên thỏa mãn một số điều kiện:

R{C=Uò2@R%Xì ¥Cw}aU
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.