สร้างหมายเลขวันจันทร์


35

ตัวเลขวันจันทร์ตามที่กำหนดโดยGamowในคำถามนี้ในเรื่อง Puzzling เป็นจำนวนเต็มบวกN ที่มีคุณสมบัติสามประการต่อไปนี้:

  • การแทนค่าทศนิยมของNไม่มีตัวเลข 0
  • การแทนค่าทศนิยมของNไม่มีตัวเลขสองหลักใด ๆ
  • Nหารด้วยทุกหลักDที่เกิดขึ้นในการแทนทศนิยม

หมายเหตุว่าสิ่งเหล่านี้เป็นที่รู้จักกันอีกทางเลือกหนึ่งใน OEIS เป็นตัวเลขลินช์เบลล์

ตัวอย่าง:

  • 15เป็นจำนวนวันจันทร์เป็นมันหารทั้งสองข้าง1และ5และความพึงพอใจอีกสองเงื่อนไข
  • 166ไม่ได้เพราะมันไม่หารด้วย
  • จำนวน22ไม่ได้เนื่องจากแม้ว่าตรงตามเงื่อนไข 1 และ 3 แต่ไม่ผ่านเงื่อนไข 2

นี่คือรายการของหมายเลข 25 วันจันทร์แรกที่คุณเริ่มต้นใช้งาน (มีทั้งหมด 548):

1 2 3 4 5 6 7 8 9 12 15 24 36 48 124 126 128 132 135 162 168 175 184 216 248

ความท้าทายที่นี่คือการเขียนรหัสที่สั้นที่สุดที่สร้างลำดับเต็มของตัวเลขวันจันทร์จาก 1 ถึง 9867312 (พิสูจน์แล้วว่าคำถามนั้นมีขนาดใหญ่ที่สุดเท่าที่จะเป็นไปได้)

รหัสของคุณไม่ควรใช้อินพุตและเอาต์พุตควรเป็น STDOUT หรือเทียบเท่ากับตัวเลือกตัวคั่น ใช้กฎการเล่นกอล์ฟตามปกติและไม่อนุญาตช่องโหว่มาตรฐาน

ลีดเดอร์บอร์ด



1
ยังเป็นที่รู้จักตัวเลขลินช์เบลล์
Geobits

@Geobits ขอบคุณ - ฉันไม่พบ OEIS ด้วยเหตุผลบางอย่าง
AdmBorkBork

8
คุณควรโพสต์ความท้าทายนี้เมื่อวานนี้ ...
mbomb007

2
@ mbomb007 ฉันจะได้ - ไม่เห็นคำถามของ Gamow จนกระทั่งเช้านี้!
AdmBorkBork

คำตอบ:


1

เยลลี่ขนาด 8 ไบต์

ȷ7Dg⁼QƲƇ

ทำงานภายในเครื่องภายในไม่ถึงแปดนาที

ลองออนไลน์! (แก้ไขเพื่อค้นหาตัวเลขที่มีตัวเลขหกหลักหรือน้อยกว่า)

มันทำงานอย่างไร

ȷ7Dg⁼QƲƇ  Main link. No arguments.

ȷ7        Set the return value to 10**7.
       Ƈ  Comb; promote 10**7 to [1, ..., 10**7], then keep only those n in the range
          for which the link to the left returns a truthy value.
      Ʋ     Combine the four links to the left into a monadic chain.
  D           Decimal; yield n's digit array in base 10.
   g          Take the GCD of each digit and n.
     Q        Yield the unique digits of n.
    ⁼         Test both results for equality.

16

Python 2, 85 ไบต์

print[n for n in range(1,9**9)if(n<10**len(set(`n`)))>any(n%(int(d)or.3)for d in`n`)]

พิมพ์รายการ

ฉันกำลังรวมคำตอบสองข้อของฉันกับความท้าทายก่อนหน้านี้:

ขอบคุณ xsot สำหรับการบันทึก 1 ไบต์โดยการรวมเงื่อนไขที่ดีกว่า


คุณสามารถบันทึกไบต์:print[n for n in range(1,9**9)if(n<10**len(set(`n`)))>any(n%(int(d)or.3)for d in`n`)]
xsot

11

Perl, 61 47 ไบต์

รหัส 46 ไบต์ + 1 พารามิเตอร์บรรทัดคำสั่งของไบต์

/(.).*\1|0/||1*s/./$_%$&/rge||print for 1..1e7

การใช้งาน:

perl -l entry.pl

คำอธิบาย

/(.).*\1|0/ ผลตอบแทนที่ 1 ถ้าตัวเลขที่อยู่ภายใต้การทดสอบมีตัวละครที่ซ้ำกันหรือ 0

s/./$_%$&/rgeแทนที่แต่ละหลักด้วยค่าของ% ตัวเลขทดสอบภายใต้ ตัวอย่างเช่น 15 -> 00, 16 -> 04 (เพราะ 16% 6 = 4) ซึ่งหมายความว่าอินพุตใด ๆ ที่หารด้วยตัวเลขทั้งหมดจะประกอบด้วย 0 ทั้งหมดมิฉะนั้นจะมีตัวเลข> 0 ในการที่จะถือว่านี่เป็นตัวเลขเรา * 1 ซึ่งหมายความว่าการทดสอบตัวเลขใด ๆ จะส่งกลับค่า 0 สำหรับบล็อกนี้ถ้ามันหารด้วยตัวเลขทั้งหมดไม่ได้> 0

โดยการแยกคำสั่งสองคำสั่งนี้และการพิมพ์ด้วย 'หรือ' ถ้าเงื่อนไขข้อใดข้อหนึ่งข้างต้นคืนค่า> 0 เงื่อนไขจะตรงกับส่วนที่ตามมาของนิพจน์จะไม่ประเมิน ถ้าหากทั้งสองเงื่อนไขก่อนหน้านี้เป็น 0 การพิมพ์จะดำเนินการ การ-lตั้งค่าสถานะทำให้แน่ใจว่าจะเพิ่มบรรทัดใหม่หลังจากพิมพ์แต่ละครั้ง


ดีมาก. คุณสามารถบันทึกไม่กี่ไบต์ด้วยการทำให้เป็น Perl 5.10 และใช้sayแทนprint+ -l:-)
xebtl

ขอบคุณสำหรับคำแนะนำ! ฉันคิดว่าsay ต้องมีการประกาศอย่างชัดเจนก่อนหรือไม่
Jarmex

@ Jarmex ฉันอาจจะเริ่มประเพณีที่นี่เพื่อรับuse feature 'say'หรือuse 5.012ฟรี - ฉันมักจะพูดถึงเมื่อฉันทำมันและไม่มีใครเคยท้าทายมัน ผมเคยเห็นบางคนอื่น ๆ ทำ :) เดียวกัน
ฮอบส์

2
@ ฮอบส์คำตอบของเมตาพูดว่า“ ฉันทามติถึงตอนนี้เกี่ยวกับ SO และนี่คือ“ -M5.010 เมื่อจำเป็นต้องใช้ฟรี””
xebtl

2
การใช้งานmapและsayทำให้เรื่องนี้กลายเป็น
Xcali

10

Pyth, 22 21

f&.{`T!f%T|vY.3`TS^T7

ขอบคุณ Jakube สำหรับการเล่นฟอร์แมทที่ไม่จำเป็น 1 ไบต์

แรงบันดาลใจอย่างมากจากCW นี้ตอบคำถามที่เกี่ยวข้อง

ฉันวางผลลัพธ์ไว้ตรงนี้จากเมื่อมันพิมพ์บรรทัดใหม่ขึ้นบรรทัดใหม่ตอนนี้มันพิมพ์เป็นรายการไพ ธ อน

ฉันอยากจะแนะนำไม่ลองใช้ออนไลน์เว้นแต่คุณจะใช้ตัวเลขที่เล็กกว่า 7 ... ฉันได้ตั้งไว้ที่ 2 ในลิงค์นี้

กรองจาก1ไป10^7-1ซึ่งครอบคลุมค่าทั้งหมดที่จำเป็น รุ่นนี้อาจทำให้เกิดข้อผิดพลาดของหน่วยความจำหากไม่สามารถสร้างรายการS^T7ซึ่งคล้ายกับlist(range(1,10**7))ใน python 3 (อย่างไรก็ตามมันใช้งานได้ดีสำหรับฉัน) ถ้าเป็นเช่นนั้นคุณสามารถลอง:

.f&.{`Z.x!s%LZjZT0548

ซึ่งค้นหาหมายเลข 548 วันจันทร์แรก นอกจากนี้ยังแสดงให้เห็นอีกวิธีหนึ่งในการตรวจสอบ0ตัวเลขในจำนวนแทนที่จะแทนที่พวกเขาด้วย.3การใช้บล็อกลองจับ เครดิตสำหรับรุ่นนี้ไปที่ Jakube (โปรดทราบว่านี่ยังคงช้ากว่าการล่ามออนไลน์)


1
นี่เป็นวิธีการแก้ปัญหาที่แตกต่าง: .f&.{`Z.x!s%LZjZT0548ค่อนข้างเร็วกว่า (4x - 5x) สองเท่าเมื่อเทียบกับวิธีวนลูปของคุณและมีความยาวเพียง 21 ไบต์
Jakube

1
@Jakube Backticks มีความเจ็บปวดในความคิดเห็นใช่ไหม? : P ขอบคุณมากนะ!
FryAmTheEggman

อืม .. ดูเหมือนว่าโซลูชันของคุณจะไม่ทำงาน .. ในลิงค์ TIO ของคุณในช่วง 100 แสดง55, 66, 77, 88, 99ตัวเลขทั้งหมดที่มีตัวเลขที่ซ้ำกัน ..
Kevin Cruijssen

1
@KevinCruijssen น่าเสียดายที่ Pyth ได้รับการปรับปรุงหลายครั้งตั้งแต่ฉันทำโพสต์นี้ฉันไม่พบสิ่งที่เปลี่ยนแปลงไป คุณสามารถเห็นในการวางที่ชัดเจนนี้ทำงานก่อน ฉันคิดว่าอาจ .{มีการเปลี่ยนแปลงเนื่องจากแทนที่ด้วย{Iดูเหมือนว่าจะทำงาน
FryAmTheEggman

@FryAmTheEggman อ่าฉันไม่เห็นแปะ เป็นเวลาเกือบสามปีแล้วดังนั้นจึงไม่มีอะไรน่าแปลกใจที่จะเปลี่ยนแปลง +1 ในกรณีนั้นเนื่องจากการวางพิสูจน์ว่าใช้งานได้ :)
Kevin Cruijssen

9

GS2 , 20 19 ไบต์

gs2 ใช้ช่วงกว้างของไบต์ไม่เพียง แต่ ASCII ที่พิมพ์ได้ ฉันจะนำเสนอวิธีแก้ปัญหาของฉันใน hex

17 7d 2f 24 65 f1 c8 24 d8 62 e9 65 f4 24 40 90 71 f3 54

นี่คือคำอธิบายบางอย่าง gs2 เป็นภาษาที่ใช้สแต็กดังนั้นจึงไม่มีตัวแปร (นอกเหนือจากการลงทะเบียน 4 ตัวซึ่งฉันใช้อยู่ที่นี่)

17         # push constant 7
7d         # 10 raised to the power
2f         # create an array of numbers from 1 to n

    24     # get digits of number into array
    65     # calculate product of array
f1         # filter array by previous block of 2 instructions

    c8     # save top of stack to register a
    24     # get digits of number into array
        d8 # tuck register a under top of stack
        62 # boolean divisibility test 
    e9     # map array using previous block of 2 instructions
    65     # calculate product of array
f4         # filter array by previous block of 5 instructions 

    24     # get digits of number into array
    40     # duplicate top of stack
    90     # remove duplicates from array
    71     # test equality
f3         # filter array by previous block of 4 instructions
54         # show contents of array separated by line breaks

8

Python 3, 132 128 114 111 104 ไบต์

i=0
while i<1e8:
 j=str(i)
 if len(set(j))+2==len(j)+('0'in j)+all(i%int(k)<1 for k in j):print(i)
 i+=1

มีตัวเลขจันทร์ 548


1
คุณสามารถใช้1e8แทนเลขคู่ได้9**9ไหม
Dom Hastings

'0' notนำพื้นที่ใน นอกจากนี้i%int(k)==0อาจจะเป็นi%int(k)<1อย่างไร
mbomb007

ขอบคุณ ฉันไม่ได้ตั้งใจที่จะเพิ่มสิ่งนั้นกลับเข้ามา @ mbomb007
Zach Gates

j=`i`คุณสามารถใช้
mbomb007

สำหรับการใช้งานอีก -6 ครั้งif len(set(j))+2==len(j)+('0'in j)+all(i%int(k)<1 for k in j)
lirtosiast

7

APL, 44 39 37 ไบต์

{0=+/(⊢|∘⍵,0∘∊,⍴∘⊢≠⍴∘∪)⍎¨⍕⍵:⍵⋄⍬}¨⍳1e7

Ungolfed:

{
 x ← ⍎¨⍕⍵⋄                    ⍝ Define x to be a vector of the digits of ⍵
 0=+/(⊢|∘⍵,0∘∊,⍴∘⊢≠⍴∘∪)x:   ⍝ No zeros, all digits divide ⍵, all unique?
 ⍵⋄⍬                          ⍝ If so, return the input, otherwise null
}¨⍳1e7                        ⍝ Apply to the integers 1..1E7

บันทึกแล้ว 7 ไบต์ขอบคุณ Moris Zucca!


ฉันรัก APL นี่คือเหตุผล.
Conor O'Brien

ฉันคิดว่าคุณสามารถเล่นกอล์ฟด้วยฟังก์ชั่นรถไฟประหยัด 5 ไบต์: {0 = + / (⊢ | ∘⍵, 0∘∊, ⍴∘⊢≠⍴∘∪) x ←⍎¨⍕⍵: ⍵⋄⍬} ¨⍳ 1e7
Moris Zucca

@ MorisZucca ดีมากขอบคุณสำหรับคำแนะนำ!
Alex A.

ฉันเพิ่งเห็นว่าในรูปแบบนี้ x ←ไม่จำเป็นอีกต่อไปดังนั้น 2 ไบต์ที่บันทึกไว้! :-)
Moris Zucca

@ MorisZucca คุณเป็นเครื่องจักรสนามกอล์ฟ APL! ขอบคุณอีกครั้ง!
Alex A.

6

TI-BASIC, 60 59 ไบต์

For(X,1,ᴇ7
int(10fPart(X10^(-randIntNoRep(1,1+int(log(X->D
SortA(∟D
If X>9
If not(max(remainder(X,Ans+2Xnot(Ansmin(ΔList(∟D
Disp X
End

∟Dคือรายการของตัวเลขซึ่งถูกสร้างขึ้นโดยใช้คณิตศาสตร์และrandIntNoRep(คำสั่ง (การเปลี่ยนแปลงแบบสุ่มของจำนวนเต็มทั้งหมดระหว่าง1และ1+int(log(Xรวม) ฉันใช้ข้อความสั่งที่ซับซ้อนเล็กน้อยเพื่อตรวจสอบว่าเงื่อนไขทั้งหมดเป็นที่พอใจหรือไม่:

   min(ΔList(∟D        ;Zero if repeated digit, since ∟D was sorted ascending
Ans                    ;Multiplies the unsorted copy of ∟D by the minimum from above
                       ;(Lists are different dimensions; we can't elementwise AND)
                       ;Will contain a 0 if there's a 0 digit or a repeated digit
      not(             ;If there's a zero,
Ans+2X                 ;Add 2X to that pos. in the list, failing the test:

    max(remainder(X,   ;Zero iff all digits divide X and 2X wasn't added
not(

ที่จะล้มเหลวตัวเลขที่มีการทำซ้ำหรือตัวเลขตัวเลขศูนย์ผมเปลี่ยนเลขด้วย2Xเพราะไม่เคยหารด้วยX2X

ในกรณีพิเศษ 1 ~ 9 (เนื่องจากΔList(ข้อผิดพลาดในรายการองค์ประกอบเดียว) ฉันใช้Ifคำสั่งในบรรทัดที่สี่เพื่อข้ามการตรวจสอบในบรรทัดที่ห้าโดยอัตโนมัติแสดงทั้งหมดX≤9

หมายเลขเอาต์พุตจะถูกคั่นด้วยบรรทัดใหม่


5

Mathematica 105

l=Length;Cases[Range@9867312,n_ /;(FreeQ[i=IntegerDigits@n,0]&&l@i== l@Union@i&&And@@(Divisible[n,#]&/@i))]
  • IntegerDigitsแบ่งออกเป็นรายการหลักของมันni
  • FreeQ[i,0] ตรวจสอบว่าไม่มีเลขศูนย์ในรายการ
  • Length[i]==Length[Union[i]] ตรวจสอบว่าไม่มีตัวเลขซ้ำ
  • And@@(Divisible[n,#]&/@i)nตรวจสอบว่าแต่ละหลักเป็นตัวหารของ

{1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 24, 36, 48, 124, 126, 128, 132, 132, 135, 162, 168, 175, 184, 216, 248 , 264, 312, 315, 324, 384, 396, 412, 432, 612, 624, 648, 672, 728, 735, 735, 784, 816, 864, 936, 1236, 1248, 1296, 1326, 1362, 1368 , 1395, 1632, 1692, 1764, 1824, 1926, 1935, 1962, 2136, 2184, 2196, 2316, 2364, 2436, 2916, 3126, 3162, 3268, 3264, 3276, 3476, 3612, 3624 , 3648, 3816, 3864, 3915, 3924, 4128, 4172, 4236, 4368, 4392, 4632, 4872, 4896, 4932, 4968, 6132, 6192, 6312, 6324, 6384, 6432, 6912, 6984, 8136 , 8736, 9126, 9135, 9162, 9216, 9315, 9324, 9432, 9612, 9648, 9864, 12384, 12648, 12768, 12864, 13248, 13824, 13896, 13968, 14,88, 14,88 , 18264, 18432, 18624, 18936, 19368, 21384, 21648, 21784, 21864, 23184, 24168, 241616, 26184, 27384, 28416, 29736, 31248, 3186, 31896, 31968, 31868, 32184, 34128, 3112837128, 37296, 37926, 38472, 39168, 39816, 41328, 41832, 42168, 42816, 43128, 43128, 43176, 46128, 46872, 48212, 61248, 61248, 61848, 61848, 61824 73962, 78624, 79128, 79632, 81264, 81432, 81624, 81936, 82416, 84216, 84312, 84612, 84672, 87192, 89136, 891312, 91476, 91476, 91776, 916369, 12,916,812 124368, 126384, 129384, 132648, 132864, 132984, 134928, 136248, 136824, 138264, 138624, 139248, 139824, 142368, 143928, 146328, 146832, 146832, 14,9328 164832, 167328, 167832, 168432, 172368, 183264, 183624, 184392, 184632, 186432, 189432, 213848, 213848, 213848, 213848, 213848, 213864, 213884, 214368 231864, 231984, 234168, 234816, 236184, 238416, 239184, 241368, 243168, 243768, 243816, 247968, 248136,248976, 261384, 263184, 273168, 281736, 283416, 284136, 291384, 293184, 327, 328, 328, 312924, 316824, 316824, 318244, 318624, 319248, 329,824, 32,824, 32,824, 318244, 318624, 319248, 318624, 319248 326184, 328416, 329184, 341928, 342168, 342816, 346128, 348192, 348216, 38816, 381216, 381224, 361824, 361824, 364248, 364724, 368248, 38824, 38824, 381824, 364248, 364248, 368248, 36824, 381824, 361824, 364248, 368248, 361824, 364248 391248, 391824, 392184, 394128, 412368, 413928, 416328, 416832, 418392, 418632, 418632, 419328, 419832, 421368, 423168, 4238166, 428136, 428136, 428736, 4287364, 4187364 438912, 439128, 461328, 461832, 463128, 468312, 469728, 478296, 478632, 488632, 488,912,812,812,824,812,812,812,812,812,812,812,812,812,812,812,812,812,432,412,432,432,432,438,432,432,412,412,432,412,412,412,4384, 438912, 439128, 461328, 461832, 463128, 468312, 469728, 478296, 478632, 488632 613872, 614328, 614832, 618432, 621384, 623184, 623784,627984, 631248, 631824, 632184, 634128, 634872, 641328, 641832, 643128, 648312, 671328, 671832, 681432, 684312, 689472, 732648, 732616, 742896, 7289, 78328, 732616, 742896, 7288168, 732648, 7288168 813624, 814392, 814632, 816432, 819432, 823416, 824136, 824376, 824376, 812,612,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,986,842,812,843,843,843,843,843,843,843,843,843,843,843 873264, 891432, 894312, 897624, 912384, 913248, 913824, 914328, 914832, 918832, 9128, 9128, 9328, 9328, 9328, 932324, 932324, 941328, 943328, 9328, 9328, 943328, 912328, 918328, 918328, 918328, 918328, 941328, 943324, 932324 1289736, 1293768, 1369872, 1372896, 1376928, 1382976, 1679328, 1679832, 1687392, 276,686,986,686,986,686,686,686,686,686,986,686,986,686,686,986,686,686,686,686,686,686,686,686,686,686,686,686,9863,989,636,989,636,989,636,9893 2937816, 2978136, 2983176,3186792, 3187296, 3196872, 3271968, 3297168, 3298176, 3619728, 3678192, 6859, 6858, 6858, 6858, 6859, 6858, 6859, 6, 6, 9, 389196, 3869296, 3867192, 3869296, 3828196, 628196 6893712, 6913872, 6971328, 6971832, 7168392, 7198632, 7231896, 7291386, 729138, 7369168, 7369288, 7392168, 7398216, 7613928, 73982168, 7829136, 7368168, 7398168 8163792, 8176392, 8219736, 8312976, 8367912, 8617392, 8731296, 879638, 9798168, 9168,9898,9898,9898,9898,9898,9898,9898,9898,9898,9898,9898,9898,9898,989,828,986,828,986,986,828,986,9168,9168,986,986,986,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,818 9812376, 9867312}6387192, 6389712, 6391728, 6719328, 6719832, 6731928, 6893712, 713,986,8, 78,986,829,786,986,8, 78,986,829,786,829,886,7,986,986,838,986,986,986,986,986,986,986,838,986,986,986,838,828,786,986,929,986,986,986,986,986,986,929,986,929,986,962,929,986 7891632, 7892136, 7916328, 7916832, 7921368, 8123976, 8163792, 8176,968,986,986,886,986,886,986,886,9898,886,9898,886,9898,9898,9898,989,828,986,986,989,817,986,989,986,989,986,968,989,817,986,986,989,817,917,962,968,962,968,917,968,917,918,918,918,918,918,918,918,918,918,918,910,966,917,966,911,966,9 ด่วนพิศ 9617832, 9678312, 9718632, 9723168, 9781632, 9782136, 9812376, 9867312}6387192, 6389712, 6391728, 6719328, 6719832, 6731928, 6893712, 713,986,8, 78,986,829,786,986,8, 78,986,829,786,829,886,7,986,986,838,986,986,986,986,986,986,986,838,986,986,986,838,828,786,986,929,986,986,986,986,986,986,929,986,929,986,962,929,986 7891632, 7892136, 7916328, 7916832, 7921368, 8123976, 8163792, 8176,968,986,986,886,986,886,986,886,9898,886,9898,889,986,9898,989,828,986,986,989,817,986,986,989,968,986,986,968,989,986,986,989,968,968,917,968,917,917,917,917,917,968,962,968,968,917,928,917,917,917,917,917,917,917,966,911,666 ฉุกเฉิน 9617832, 9678312, 9718632, 9723168, 9781632, 9782136, 9812376, 9867312}8796312, 8912736, 8973216, 9163728, 9176328, 9176832, 9182376, 9231768, 9231716, 9278136, 9283176, 9617328, 9617832, 9678312, 9718632, 92361288796312, 8912736, 8973216, 9163728, 9176328, 9176832, 9182376, 9231768, 9231716, 9278136, 9283176, 9617328, 9617832, 9678312, 9718632, 9236128

Length[%]

548


ผมคาดว่าจะมีวิธีใน Mathematica ที่จะได้รับจำนวนมากในไบต์น้อยลงเช่น9^9หรือ1e8หรือบางสิ่งบางอย่าง
FryAmTheEggman

ฉันประหลาดใจที่ Mathematica ไม่มีตัวในสำหรับ ;-) นี้ เคล็ดลับที่ดีในUnionการตรวจสอบรายการซ้ำ
AdmBorkBork

@FryAmTheEggman คุณถูกต้องเกี่ยวกับ Mathematica ที่อนุญาตให้ 9 ^ 9 แต่นั่นจะไม่ส่งคืนตัวเลขมากกว่า 548 วันจันทร์ใช่ไหม
DavidC

ดังที่กล่าวไว้ในคำถามไม่มีความเป็นไปได้ที่จะเกิดวันจันทร์มากกว่าจำนวนที่กำหนดไว้ในระดับสูงสุด
FryAmTheEggman

5

Haskell, 77 ไบต์

[x|x<-[1..9^9],all(\a->a>'0'&&mod x(read[a])+sum[1|y<-show x,y==a]<2)$show x]

ตัวอย่างการใช้งาน (20 หมายเลขแรก):

take 20 $ [x|x<-[1..9^9],all(\a->a>'0'&&mod x(read[a])+sum[1|y<-show x,y==a]<2)$show x]

[1,2,3,4,5,6,7,8,9,12,15,24,36,48,124,126,128,132,135,162]

มันทำงานอย่างไร: วนซ้ำทุกตัวเลขตั้งแต่ 1 ถึง 9 ^ 9 และตรวจสอบเงื่อนไข จำนวนปัจจุบันxกลายเป็นมันเป็นตัวแทนสตริง ( show x) เพื่อดำเนินการกับมันเป็นรายการของตัวละคร


5

R, 99 ไบต์

for(n in 1:1e8){i=1:nchar(n);if(all(table(d<-(n%%10^i)%/%10^(i-1))<2)&!0%in%d&all(!n%%d))cat(n,"")}

golfed น้อยกว่าเล็กน้อย:

for(n in 1:1e8){
    i = 1:nchar(n)
    d = (n%%10^i)%/%10^(i-1) # Digits of n
    if(all(table(d)<2) # No digits is present more than once 
      & !0%in%d        # 0 is not one of the digits
      & all(!n%%d))    # All digits are divisors of n
    cat(n,"")
    }

5

Perl, 90 75 70 ไบต์

print+($_,$/)x(grep(!/(\d).*\1|0/,$_)&s/./!$&||$_%$&/ger<1)for 1..1e7

1
อ๊ะฉันพลาดเคล็ดลับ \ 1 สำหรับการดูล่อลวงดี คุณสามารถประหยัดมากขึ้นด้วยโมดิฟายเออร์คำสั่งในขณะที่และการพิมพ์แบบไตรภาคหรือไม่?
Dom Hastings

@DomHastings ขอบคุณตอนนี้เล่นกอล์ฟมากขึ้นโดยใช้คำแนะนำของคุณ
สตีฟ

ดีฉันคิดว่าคุณสามารถบันทึกอีกไม่กี่เช่นกันในขณะที่คุณไม่จำเป็นต้อง^และ$รอบ0ในของคุณgrepคุณสามารถเปลี่ยน&&ก่อนที่จะs/./มีเพียงหนึ่งเดียว&และฉันคิดว่าสุดท้าย|0เป็นที่ไม่จำเป็น 1e3(แม้ว่าการทดสอบเฉพาะขึ้นไป.. ) ดีและจริง ๆ แล้วคะแนนของฉัน! :)
Dom Hastings

1
@DomHastings ขอบคุณลดลงถึง 70 ด้วยเคล็ดลับการเล่นกอล์ฟของคุณ
สตีฟ

นำมันลงมาอีกเล็กน้อยโดยกำจัด grep (ไม่จำเป็น - การจับคู่รูปแบบดูแลโดยไม่มี grep) และจัดเรียงส่วนที่เหลือลงในแผนที่: ลองออนไลน์!
Xcali

4

CJam, 25 ไบต์

1e7{_Ab__&0-_@=@@f%1b>},`

ลองมันออนไลน์ โปรดทราบว่าลิงก์ออนไลน์จะมีถึง 10,000 เท่านั้น ฉันไม่แน่ใจว่ามันจะออนไลน์เสร็จสิ้นหรือไม่ถ้าคุณอดทนพอ มันไม่ได้ทดสอบด้วย CJam เวอร์ชันออฟไลน์ แต่ฉันคาดว่ามันจะยุติ

คำอธิบาย:

1e7     Upper limit.
{       Start filter loop.
  _Ab     Copy and convert to list of decimal digits.
  __&     Intersect list with itself to remove duplicates.
  0-      Remove zero.
  _       Make a copy of unique non-zero digits. Will use these as divisors.
  @=      Compare unique non-zero digits to all digits. Must be true for Monday numbers.
  @@      Rotate original number and list of non-zero digits to top.
  f%      Remainders of original number with all non-zero digits.
  1b      Sum up the remainders. Since they all must be zero for Monday numbers,
          their sum must be zero.
  >       Check that first part of condition was 1, and sum of remainders 0.
},      End filter loop.
`       Convert resulting list to string.

4

C #, 230 227

ไม่นานมานี้ฉันได้สูญเสียดังนั้นฉันอาจลืมกลเม็ดบางอย่างเพื่อลดจำนวนผู้ลงคะแนน จะดีขึ้นเมื่อฉันคิดถึงพวกเขา ... ตอนนี้:

using System.Linq;class P{static void Main(){System.Console.Write(string.Join(",",Enumerable.Range(0,1<<24).Where(i=>{var s=i.ToString();return!s.Contains('0')&&s.Length==s.Distinct().Count()&&s.All(x=>i%(48-(int)x)==0);})));}}

Ungolfed:

using System.Linq;
class P
{
    static void Main()
    {
        System.Console.Write(                                       //Output...
            string.Join(                                            //...all results...
                ",",                                                //...comma separated...
                Enumerable.Range(0, 1<<24)                          //...from 0 to 16777216...
                    .Where(i => {                                   //...where...
                        var s = i.ToString();                       //...the digits as char array (what we usually call a string)...
                        return !s.Contains('0')                     //...for which none of the digits is 0...
                            && s.Length == s.Distinct().Count()     //...and the number of distinct digits equals the total number of digits (e.g. all unique)...
                            && s.All(x => i % (48 - (int)x) == 0);  //...and the number is divisible by each of the digits (after 'ASCII-correction')
                    })
            )
        );
    }
}

1,2,3,4,5,6,7,8,9,12,15,24,36,48,124,126,128,132,135,162,168,175,184,216,248,264,312,315,324,384,396,412,432,612,624,648,672,728,735,784,816,824,864,936,1236,1248,1296,1326,1362,1368,1395,1632,1692,1764,1824, 1926,1935,1962,2136,2184,2196,2316,2364,2436,2916,3126,3162,3168,3195,3216,3264,3276,3492,3612,3624,3648,3816,3864,3915,3924, 4128,4172,4236,4368,4392,4632,4872,4896,4932,4968,6132,6192,6312,6324,6384,6432,6912,6984,8136,8496,8736,9126,9135,9162,9216, 9315,9324,9432,9612,9648,9864,12384,12648,12768,12864,13248,13824,13896,13968,14328,14728,14832,16248,16824,17248,18264,18432,18624,18936,19368, 21384,21648,21784,21864,23184,24168,24816,26184,27384,28416,29736,31248,31824,31896,31968,32184,34128,36792,37128,37296,37926,38472,39168,39816,41328, 41832,42168,42816,43128,43176,46128,46872,48216,48312,61248,61824,62184,64128,68712,72184,73164,73248,73416,73962,78624,79128,79632,81264,81432,81624,81936,82416,84216,84312,84672,87192,89136,89712,91368,91476,91728,92736,93168,93816,98136,123648,123864,123984, 124368,126384,129384,132648,132864,132984,134928,136248,136824,138264,138624,139248,139824,142368,143928,146328,146832,148392,148632,149328,149832,162384,163248,163824,164328, 164832,167328,167832,168432,172368,183264,183624,184392,184632,186432,189432,192384,193248,193824,194328,194832,198432,213648,213864,213984,214368,216384,218736,219384,231648, 231864,231984,234168,234816,236184,238416,239184,241368,243168,243768,243816,247968,248136,248976,261384,263184,273168,281736,283416,284136,291384,293184,297864,312648,312864, 312984,314928,316248,316824,318264,318624,319248,319824,321648,321864,321984,324168,324816,326184,328416,329184,341928,342168,342816,346128,348192,348216,348912,349128,361248, 361824,361872,362184,364128,364728,367248,376824,381264,381624,382416,384192,384216,384912,391248,391824,392184,394128,412368,413928,416328,416832,418392,418632,419328,419832,421368, 423168,423816,427896,428136,428736,431928,432168,432768,432816,436128,438192,438216,438912,439128,461328,461832,463128,468312,469728,478296,478632,481392,481632,482136,483192, 483216,483672,483912,486312,489312,491328,491832,493128,498312,612384,613248,613824,613872,614328,614832,618432,621384,623184,623784,627984,631248,631824,632184,634128,634872, 641328,641832,643128,648312,671328,671832,681432,684312,689472,732648,732816,742896,746928,762384,768432,783216,789264,796824,813264,813624,814392,814632,816432,819432,823416, 824136,824376,831264,831624,832416,834192,834216,834912,836472,841392,841632,842136,843192,843216,843912,846312,849312,861432,864312,873264,891432,894312,897624,912384,913248,913824,914328,914832,918432,921384,923184,927864,931248,931824,932184,934128,941328,941832,943128,948312,976248,978264,981432,984312,1289736,1293768,1369872, 1372896,1376928,1382976,1679328,1679832,1687392,1738296,1823976,1863792,1876392,1923768,1936872,1982736,2137968,2138976,2189376,2317896,2789136,2793168,2819376,2831976,2931768,2937816,2978136,2983176, 3186792,3187296,3196872,3271968,3297168,3298176,3619728,3678192,3712968,3768912,3796128,3816792,3817296,3867192,3869712,3927168,3928176,6139728,6379128,6387192,6389712,6391728,6719328,6719832,6731928, 6893712,6913872,6971328,6971832,7168392,7198632,7231896,7291368,7329168,7361928,7392168,7398216,7613928,7639128,7829136,7836192,7839216,7861392,7863912,7891632,7892136,7916328,7916832,7921368,8123976, 8163792,8176392,8219736,8312976,8367912,8617392,8731296,8796312,8912736,8973216,9163728,9176328,9176832,9182376,9231768,9237816,9278136,9283176,9617328,9617832,9678312,9718632,9723168,9781632,9782136,9812376,9867312


(int) 1e7 สามารถเป็น 1 << 24 ได้หรือไม่
lirtosiast

@ThomasKwa ใช่มันเป็นไปได้ จริง ขอบคุณ!
RobIII

4

TI-BASIC, 55 53 ไบต์

นี่เป็นการแก้ไขคำตอบของThomas Kwaเล็กน้อยแต่ฉันส่งมันเป็นคำตอบใหม่เพราะฉันได้ยินมาว่าเขามีความสุขกับการเล่นกอล์ฟคำตอบ TI-BASIC ของเขา

For(X,1,ᴇ7
int(10fPart(X10^(-randIntNoRep(0,1+int(log(X->D
SortA(∟D
If not(sum(remainder(X,Ans+Xnot(Ansmin(ΔList(∟D
Disp X
End

การเปลี่ยนแปลงหลักของฉันคือจากrandIntNoRep(1,เป็นrandIntNoRep(0,หมายความว่าจะมีศูนย์ในรายการตัวเลขที่สร้างขึ้นทุกครั้ง

number  |  randIntNoRep  |  digits  |  sorted
9       |  1,0           |  9,0     |  0,9
102     |  3,1,0,2       |  1,2,0,0 |  0,0,1,2

เนื่องจากขณะนี้มีศูนย์ในทุกชุดตัวเลขจึงมีผลต่อผลรวมของเศษที่เหลือ โดยทั่วไปผลรวมของเศษที่เหลือคือ 0 แต่ตอนนี้การมีศูนย์พิเศษทำให้เกิดการทดสอบการหารของเราล้มเหลว
ที่จะรับมือกับเรื่องนี้ผมเปลี่ยนไป2Xnot( Xnot(เดิมที 2 มีไว้เพื่อให้การทดสอบล้มเหลวที่ 0 แต่ตอนนี้มันผ่านที่ศูนย์ ตัวเลขที่มีตัวเลขเป็นศูนย์ในขณะนี้มีmin(ΔList(∟Dศูนย์อยู่แล้ว (เนื่องจากมีศูนย์ 2 ตัวหรือมากกว่าในรายการ) ดังนั้นการเปลี่ยนแปลงนี้จึงไม่ทำให้ตัวเลขพิเศษใด ๆ ผ่านการทดสอบ

ประโยชน์ของวิธีนี้คือเนื่องจากขณะนี้มี "ตัวเลขสองหลัก" ที่ผลิตจากหมายเลข 1-9 ΔList(ฟังก์ชันจะไม่เกิดข้อผิดพลาดทำให้เราสามารถกำจัดเงื่อนไขพิเศษสำหรับตัวเลขหลักเดียว


4

05AB1E , 30 22 21 18 14 13 12 9 ไบต์

-9 ขอบคุณที่ช่วยเหลือและให้กำลังใจของไบต์@Enigmaและ@ Mr.Xcoder ขอบคุณที่ให้ฉันคิดออกเองเป็นส่วนใหญ่แม้ว่าคุณจะมีวิธีแก้ปัญหาแบบ 12 ไบต์อยู่แล้วเมื่อตอนที่ฉันยังอายุ 30 เรียนรู้อะไรมากมายเกี่ยวกับ 05AB1E จากความท้าทายนี้!
-3 ไบต์ขอบคุณ@Grimy

7°LʒÐÑÃÙQ

ลองใช้ออนไลน์ (ส่งออกเฉพาะตัวเลขด้านล่าง 10 3แทน 10 7เพื่อป้องกันการหมดเวลาหลังจาก 60 วินาที)

คำอธิบาย:

7°L        # Generate a list in the range [1, 10^7]
   ʒ       # Filter, so only the numbers that evaluated to 1 (truthy) remain:
    Ð      #  Triplicate the current number
     Ñ     #  Get the divisors of this number
           #   i.e. 128 → [1,2,4,8,16,32,64,128]
           #   i.e. 1210 → [1,2,5,10,11,22,55,110,121,242,605,1210]
      Ã    #  Only keep those digits/numbers in the original number (which is checked in
           #  order, so it will only keep the digits and ignores the later numbers)
           #   i.e. 128 → 128
           #   i.e. 1210 → 121
       Ù   #  Uniquify the number, removing any duplicated digits
           #   i.e. 128 → 128
           #   i.e. 121 → 12
        Q  #  Check if the number is unchanged after this
           #   i.e. 128 and 128 → 1 (truthy)
           #   i.e. 1210 and 12 → 0 (falsey)

รุ่น 12 byter ก่อนหน้า (หนึ่งในคำตอบ 05AB1E แรกของฉัน):
หมายเหตุ: ใช้ได้เฉพาะในรุ่นดั้งเดิมที่เป็น 05AB1E

7°LʒÐSÖPsDÙQ*

ลองใช้ออนไลน์ (ส่งออกเฉพาะตัวเลขด้านล่าง 10 3แทน 10 7เพื่อป้องกันการหมดเวลาหลังจาก 60 วินาที)

คำอธิบาย:

7°L        # Generate a list in the range [1, 10^7]
   ʒ       # Filter, so only the numbers that evaluated to 1 (true) remain:
    Ð      #  Triplicate the current number N
     Ù     #  Remove all duplicated digits of the second N
           #   i.e. 1210 → 120
      Q    #  Check if the last two numbers are still the same (1 or 0 as result)
    *      #  Multiply this result with remaining third number from the triplication
     D     #  Duplicate this number, so we have two again
      S    #  Separate all the digits of the second one
           #   i.e. 128 → ['1', '2', '8']
       Ö   #  Check if (the second) N is divisible by each of its digits
           #   i.e. 128 and ['1', '2', '8'] → [1, 1, 1]
           #   (NOTE: If the number contains a '0', it won't error on division by 0,
           #          but instead return the number N itself in the list)
           #   i.e. 105 and ['1', '0', '5'] → [1, 105, 1]
        P  #  Take the product of this list (if the divisible test for one
           #  of the digits was 0, this will be 0 as well)
           #   i.e. [1, 1, 1] → 1
           #   i.e. [1, 105, 1] → 105 (only 1 is truthy in 05AB1E)

คำตอบของคุณจะพิมพ์ออก297มาซึ่งไม่ได้อยู่ในลำดับหมายเลข Lynch-Bell
นาย Xcoder

@ Mr.Xcoder ถอนหายใจ .. มีบางอย่างที่นานกว่านั้นในตอนแรกเพื่อตรวจสอบว่าตัวเลขหารด้วยตัวเลขทั้งหมดหรือไม่ แต่คิดว่าความท้าทายแบบนั้นมีอยู่จริง ดูเหมือนว่าคำตอบนี้จะไม่ถูกต้อง .. และที่นี่คุณและปริศนากำลังพูดถึงคำตอบ 12-15 ไบต์ในขณะที่คำตอบ 30 ไบต์ของฉันไม่ทำงานแม้แต่น้อยฮ่า ๆ .. มีการสอนที่ใดหรือไม่ ; p
Kevin Cruijssen

1
9 ไบต์:7°LʒÐÑÃÙQ
Grimmy

@Grimy หนึ่งในคำตอบแรกของฉันคือ 05AB1E :) วิธีการที่ดี!
Kevin Cruijssen

3

Julia, 88 ไบต์

print(join(filter(i->(d=digits(i);0d&&d==unique(d)&&all(j->i%j<1,d)),1:9867312)," "))

ซึ่งจะใช้หมายเลขทั้งหมดตั้งแต่ 1 ถึงหมายเลขที่ใหญ่ที่สุดใน Lynch-Bell และกรองตัวเลขเหล่านั้นให้เหลือเพียงหมายเลข Lynch-Bell

Ungolfed:

lynch = filter(i -> (d = digits(i);
                     0  d &&
                     d == unique(d) &&
                     all(j -> i % j == 0, d)),
               1:9867312)

print(join(lynch, " "))

3

Python 2, 101 ไบต์

print[i for i in range(6**9)if'0'not in`i`and len(set(`i`))==len(`i`)and all(i%int(k)==0for k in`i`)]

คุณสามารถละเว้นการprintใช้ล่ามได้ถึง 96 ใช้6**9เพราะมันเป็น 8 หลักในขณะที่จำนวนวันจันทร์ที่ใหญ่ที่สุดคือ 7 หลักสิ่งที่9**9อาจจะใช้เวลานาน 6 ** 9 ใช้เวลาประมาณ 10 วินาทีเท่านั้น


ตามที่ระบุไว้ในคำถามสองข้อที่ 1e7 นั้นสั้นกว่าทั้งสองคำถาม
Holloway

@Trengot 1e7เป็นทศนิยมช่วงใช้จำนวนเต็ม
Rohcana

จริงแท้แน่นอน. ไม่ได้คิดอย่างนั้น
Holloway

3

Perl, 97 ไบต์

print+($n=$_,$/)x(!/0/&(y///c==grep{2>eval"$n=~y/$_//"}/./g)&&y///c==grep!($n%$_),/./g)for 1..1e7

ใช้เวลาสักครู่ในการรัน แต่สร้างเอาต์พุตที่ต้องการเปลี่ยน1e3เป็นตัวอย่างที่รวดเร็วกว่า!


ผมไม่ได้อยู่ในฐานะที่จะลองนี้ในขณะนี้ แต่แทนที่จะy///c==grep{2>eval"$n=~y/$_//"}/./gคุณสามารถใช้สิ่งที่ตามสายของ!/(.).*\1/?
msh210

@ msh210 เกือบจะแน่นอน! ฉันคิดว่ามันจะเป็นค่าเริ่มต้นของฉันในตอนนี้ แต่การเปลี่ยนแปลงสิ่งนี้จะจบลงด้วยการทำให้มันใกล้เคียงกับคำตอบของสตีฟหรือJarmexซึ่งเหนือกว่ามาก! ขอบคุณสำหรับการดู!
Dom Hastings

3

MATLAB, 100

o=49;for n=2:1e7 a=num2str(n);if all([diff(sort(a)) a~=48 ~mod(n,a-48)]) o=[o ',' a];end;end;disp(o)

และในรูปแบบที่อ่านได้มากขึ้น:

o=49;  %1 is always in there, so add the ASCII value. This prevents there being a ',' prefixed.
for n=2:1e7 
    a=num2str(n);
    if (all([diff(sort(a)) a~=48 ~mod(n,a-48)]))
        o=[o ',' a];
    end
end
disp(o)

11×107

การตรวจสอบมีดังนี้:

  1. ตรวจสอบก่อนว่ามีรายการใด ๆ ซ้ำหรือไม่ โดยการเรียงลำดับอาร์เรย์ถ้าความแตกต่างระหว่างตัวเลขใด ๆ ที่ต่อเนื่องกันเป็นศูนย์แสดงว่ามีข้อมูลที่ซ้ำกัน

    diff(sort(a))
    
  2. ตรวจสอบว่ามีศูนย์ใด ๆ ASCII สำหรับ 0 คือ 48 ดังนั้นเราตรวจสอบว่าตัวเลขทั้งหมดไม่เท่ากับ

    a~=48
    
  3. ตรวจสอบว่ามันหารด้วยตัวเลขทั้งหมดหรือไม่ เราตรวจสอบว่าส่วนที่เหลือเมื่อหารด้วยตัวเลขแต่ละหลัก (แปลงจาก ASCII เป็นทศนิยมดังนั้น -48) จึงเป็นศูนย์

    ~mod(n,a-48)
    

ในที่สุดเราตรวจสอบให้แน่ใจว่าall()การตรวจสอบเป็นจริงและถ้าเป็นเช่นนั้นเราจะผนวกมันไปยังสตริงเอาท์พุทที่คั่นด้วยเครื่องหมายจุลภาค

MATLAB ไม่มี STDOUT ดังนั้นฉันจึงพิมพ์สตริงผลลัพธ์ที่ท้ายที่สุดโดยใช้ disp()


รหัสนี้ช้า! ฉันยังคงรันมันเพื่อให้แน่ใจว่ามันจะค้นหาหมายเลขจันทร์ได้อย่างถูกต้อง แต่มันก็ดูดีมาก

ปรับปรุง:

รหัสทำงานเสร็จแล้ว มันพิมพ์ต่อไปนี้:

1,2,3,4,5,6,7,8,9,12,15,24,36,48,124,126,128,132,135,162,168,175,184,216,248,264,312,315,324,384,396,412,432,612,624,648,672,728,735,784,816,824,864,936,1236,1248,1296,1326,1362,1368,1395,1632,1692,1764,1824,1926,1935,1962,2136,2184,2196,2316,2364,2436,2916,3126,3162,3168,3195,3216,3264,3276,3492,3612,3624,3648,3816,3864,3915,3924,4128,4172,4236,4368,4392,4632,4872,4896,4932,4968,6132,6192,6312,6324,6384,6432,6912,6984,8136,8496,8736,9126,9135,9162,9216,9315,9324,9432,9612,9648,9864,12384,12648,12768,12864,13248,13824,13896,13968,14328,14728,14832,16248,16824,17248,18264,18432,18624,18936,19368,21384,21648,21784,21864,23184,24168,24816,26184,27384,28416,29736,31248,31824,31896,31968,32184,34128,36792,37128,37296,37926,38472,39168,39816,41328,41832,42168,42816,43128,43176,46128,46872,48216,48312,61248,61824,62184,64128,68712,72184,73164,73248,73416,73962,78624,79128,79632,81264,81432,81624,81936,82416,84216,84312,84672,87192,89136,89712,91368,91476,91728,92736,93168,93816,98136,123648,123864,123984,124368,126384,129384,132648,132864,132984,134928,136248,136824,138264,138624,139248,139824,142368,143928,146328,146832,148392,148632,149328,149832,162384,163248,163824,164328,164832,167328,167832,168432,172368,183264,183624,184392,184632,186432,189432,192384,193248,193824,194328,194832,198432,213648,213864,213984,214368,216384,218736,219384,231648,231864,231984,234168,234816,236184,238416,239184,241368,243168,243768,243816,247968,248136,248976,261384,263184,273168,281736,283416,284136,291384,293184,297864,312648,312864,312984,314928,316248,316824,318264,318624,319248,319824,321648,321864,321984,324168,324816,326184,328416,329184,341928,342168,342816,346128,348192,348216,348912,349128,361248,361824,361872,362184,364128,364728,367248,376824,381264,381624,382416,384192,384216,384912,391248,391824,392184,394128,412368,413928,416328,416832,418392,418632,419328,419832,421368,423168,423816,427896,428136,428736,431928,432168,432768,432816,436128,438192,438216,438912,439128,461328,461832,463128,468312,469728,478296,478632,481392,481632,482136,483192,483216,483672,483912,486312,489312,491328,491832,493128,498312,612384,613248,613824,613872,614328,614832,618432,621384,623184,623784,627984,631248,631824,632184,634128,634872,641328,641832,643128,648312,671328,671832,681432,684312,689472,732648,732816,742896,746928,762384,768432,783216,789264,796824,813264,813624,814392,814632,816432,819432,823416,824136,824376,831264,831624,832416,834192,834216,834912,836472,841392,841632,842136,843192,843216,843912,846312,849312,861432,864312,873264,891432,894312,897624,912384,913248,913824,914328,914832,918432,921384,923184,927864,931248,931824,932184,934128,941328,941832,943128,948312,976248,978264,981432,984312,1289736,1293768,1369872,1372896,1376928,1382976,1679328,1679832,1687392,1738296,1823976,1863792,1876392,1923768,1936872,1982736,2137968,2138976,2189376,2317896,2789136,2793168,2819376,2831976,2931768,2937816,2978136,2983176,3186792,3187296,3196872,3271968,3297168,3298176,3619728,3678192,3712968,3768912,3796128,3816792,3817296,3867192,3869712,3927168,3928176,6139728,6379128,6387192,6389712,6391728,6719328,6719832,6731928,6893712,6913872,6971328,6971832,7168392,7198632,7231896,7291368,7329168,7361928,7392168,7398216,7613928,7639128,7829136,7836192,7839216,7861392,7863912,7891632,7892136,7916328,7916832,7921368,8123976,8163792,8176392,8219736,8312976,8367912,8617392,8731296,8796312,8912736,8973216,9163728,9176328,9176832,9182376,9231768,9237816,9278136,9283176,9617328,9617832,9678312,9718632,9723168,9781632,9782136,9812376,9867312

ซึ่งถ้าคุณเรียกใช้รหัสนี้โดยที่เป็นอินพุต:

nums = length(strsplit(stdout,','))

Yeilds 548


3

ทับทิม, 79

?1.upto(?9*7){|s|a=s.chars;a.uniq!||a.any?{|x|x<?1||0<eval([s,x]*?%)}||puts(s)}

โซลูชันที่น่าสนใจ แต่ยาวกว่าเล็กน้อยด้วย regex:

?1.upto(?9*7){|s|s[/(.).*\1|[0#{(1..9).map{|*x|x*eval([s,x]*?%)}*''}]/]||puts(s)}

ในแต่ละกรณีที่เรากำลังใช้ความสามารถของรูบี้ย้ำกว่าสตริงราวกับว่าพวกเขาเป็นจำนวนเต็มทศนิยม: เทียบเท่ากับ?1.upto(?9*7) 1.upto(9999999).map(&:to_s).eachเราเข้าร่วมสตริงกับตัวเลขที่ไม่ใช่ศูนย์แต่ละหลักโดยใช้โอเปอเรเตอร์แบบโมดูโลและประเมินผลลัพธ์เพื่อตรวจสอบการหาร

โซลูชันโบนัส Ruby 1.8 (ต้องการ-lแฟล็กสำหรับเอาต์พุตที่เหมาะสม):

'1'.upto('9'*7){|$_|~/(.).*\1|[0#{(1..9).map{|*x|x*eval("#$_%#{x}")}}]/||print}

1.8 อนุญาตให้ iterator บล็อกเป็นตัวแปรทั่วโลก การกำหนดให้$_เป็นผู้รับโดยนัยสำหรับการดำเนินการกับสตริง เรายังได้รับการอาร์เรย์สอดแทรกสอดแทรกเข้าไปในการแสดงออกปกติได้ง่ายขึ้นใน 1.8 ประเมิน/[#{[1,2]}]//[12]/


ตอนนี้ Ruby 2.4 มีdigitsฟังก์ชั่นเกี่ยวกับจำนวนเต็มคุณสามารถบันทึกไบต์จากการแฮ็ค eval ได้เนื่องจากคุณไม่ได้ใช้งานกับสตริงอีกต่อไป! 63 ไบต์
หมึกมูลค่า

3

Pip , 25 ไบต์

Fa,t**7Ia#=UQa&0=$+a%^aPa

ส่งออกแต่ละหมายเลขในบรรทัดของตัวเอง นี่ใช้งานได้ประมาณ 10 นาทีและสูงถึง 984312 แต่ฉันค่อนข้างแน่ใจว่าถูกต้อง (แก้ไข: สองสามชั่วโมงต่อมา ... รหัสเสร็จสร้างทั้งหมด 548 ของ 'em)

นี่คือการกระทำ Pseudocode ของ Python-esque:

for a in range(10**7):
  if lengthEqual(a, set(a)) and 0 == sum(a%d for d in digits(a)):
    print(a)

#=ประกอบการเปรียบเทียบสอง iterables โดยความยาว หากจำนวนของอักขระUni Que ในaเหมือนกันกับจำนวนอักขระในaจะไม่มีการทำซ้ำ

การตรวจสอบหารด้วยตัวเลขแต่ละหลักนั้นมาจากหนึ่งในโปรแกรมตัวอย่าง Pip ของฉัน ฉันเขียนหลังจากเห็นความท้าทายก่อนหน้านี้แต่ไม่ได้โพสต์ไว้ที่นั่นเพราะภาษานั้นใหม่กว่าคำถาม มิฉะนั้นที่ 8 ไบต์จะเป็นคำตอบที่ชนะสำหรับคำถามนั้น นี่คือคำอธิบายทีละขั้นตอน:

      ^a   Split num into an array of its digits
    a%     Take num mod each of those digits; if a digit is zero, the result will be nil
  $+       Sum the resulting list (note: summing a list containing nil results in nil!)
0=         Iff the sum equals 0, return 1 (true); otherwise (>0 or nil), return 0 (false)

นี่เป็นภาษาที่ค่อนข้างเรียบร้อย! ยินดีที่ได้เห็นสิ่งอื่นนอกเหนือจากการเล่นกอล์ฟแบบกองซ้อน
AdmBorkBork

1
@TimmyD หากคุณต้องการดูการเล่นกอล์ฟแบบไม่ซ้อนกันมีแนวโน้มที่จะมี Pyth อยู่รอบ ๆ
Reto Koradi

@RetoKoradi แต่ถ้าคุณต้องการดูการตีกอล์ฟแบบไม่ซ้อนกับผู้ให้บริการมัดๆ Pip เหมาะสำหรับคุณ ; ^)
DLosc

Couple hours laterมันเป็นสิ่งที่ดีที่ไม่ได้คำนึงถึง
Holloway

3

Javascript (ES6), 106 90 83 ไบต์

เด็ก ๆ อย่าลองทำที่บ้าน JS จะไม่พอใจกับความคาดหวังของการวนซ้ำทุกหลักของทุกจำนวนเต็มจากหนึ่งถึงสิบล้านด้วย regex

for(i=0;i<1e7;i++)/(.).*\1|0/.test(i)||+`${i}`.replace(/./g,j=>i%j)||console.log(i)

regex แรก (props to @Jarmex) จะส่งคืนtrueถ้าจำนวนนั้นมีตัวเลขหรือศูนย์ที่ซ้ำกัน ในกรณีนี้จะเปิดออกfalseย้ายโปรแกรมบนที่สองซึ่งแทนที่แต่ละหลักด้วยj i%jผลลัพธ์จะเป็นศูนย์ทั้งหมดถ้ามันหารด้วยหลักทั้งหมดในกรณีนี้มันจะไปconsole.log(i)ต่อ

ยินดีต้อนรับข้อเสนอแนะ!


3

JavaScript (ES6), 76

/* Answer below. For testing purpose, redirect consoloe.log */ console.log=x=>document.write(x+' ')

for(i=0;i++<1e7;)/0|(.).*\1/.test(i)||[...i+''].some(d=>i%d)||console.log(i)

การทดสอบ regexp สำหรับ 0 หรือตัวเลขซ้ำ จากนั้นตรวจสอบอาร์เรย์ของตัวเลขเพื่อหาโมดูโลที่ไม่ใช่ศูนย์สำหรับตัวเลขใด ๆ

นี่คือคำอธิบายของจำนวนสูงสุด 7 หลัก


3

ทับทิมขนาด 130 ไบต์

... ไม่นับพื้นที่ว่าง

ใหม่สำหรับการเขียนโปรแกรมต้องการเข้าร่วม

c=0
(0..10**7).each do |x| 
  a=x.to_s.split('')
  c+=1 if !a.include?('0')&& a.uniq!.eql?(nil)&&a.all?{|y| x.modulo(y.to_i).zero?} 
end
p c

2
ยินดีต้อนรับสู่ PPCG! ลองดูเคล็ดลับเพิ่มเติมสำหรับ Rubyเพื่อช่วยลดความยาวของรหัสลง
AdmBorkBork

3

C, 122 ไบต์

i,j,m,a;void f(){for(i=1;i<1e8;++i){for(m=0,j=i;j;j/=10){a=j%10;if(!a||m&(1<<a)||i%a)goto n;m|=1<<a;}printf("%d ",i);n:;}}

สวย:

i,j,m,a;
void f()
{
    for (i=1; i<1e8; ++i){
        for (m=0, j=i;  j;  j/=10) {
            a = j%10;
            if (!a || m&(1<<a) || i%a)
                goto n;
            m|=1<<a;
        }
        printf("%d ",i);
    n:;
    }
}

สำหรับผู้สมัครแต่ละคนiเราย้ำตัวเลขของมันaในการสั่งซื้อน้อย endian mการติดตามตัวเลขที่เห็นในบิตของ หากลูปเสร็จสมบูรณ์แล้วตัวเลขทั้งหมดเป็นปัจจัยของiและเราไม่เห็นเลขศูนย์หรือตัวเลขซ้ำดังนั้นให้พิมพ์มิฉะนั้นเราจะออกก่อนเพื่อดำเนินการต่อลูปด้านนอก


ดีต่อการใช้gotoคำสั่ง
Shaun Bebbers


2

Lua ขนาด 129 ไบต์

ฉันได้หลีกเลี่ยงวิธีการสตริงสำหรับการบดตัวเลขหลักที่บริสุทธิ์ซึ่งดูเหมือนว่าจะเร็วขึ้นและอาจช่วยฉันด้วยเช่นกัน (ฉันจะทดสอบทฤษฎีนั้น แต่การจัดการสตริง Lua ค่อนข้างละเอียดเมื่อเทียบกับภาษาอื่น ๆ )

for i=1,1e7 do t={[0]=1}j=i while j>0 do c=j%10 if t[c]or i%c>0 then break end t[c]=1 j=(j-c)/10 if j==0 then print(i)end end end

2

เหยี่ยว, 99 ไบต์

BEGIN{for(;8>(l=split(++i,a,_));printf f?f=_:i RS)for(j in a)f=i~0||i%(d=a[j])||i-d*10^(l-j)~d?1:f}

ฉันสามารถลดให้เหลือ 97 ถ้าฉันจะใช้ENDแทนBEGINแต่แล้วคุณจะต้องกด Ctrl-D เพื่อเริ่มการส่งออกที่เกิดขึ้นจริงส่งสัญญาณว่าจะไม่มีการป้อนข้อมูล

ฉันสามารถลดลงเหลือ 94 ถ้าฉันจะเขียนอะไรแทนBEGINหรือENDแต่จากนั้นคุณจะต้องกดปุ่มย้อนกลับหนึ่งครั้งเพื่อเริ่มมันซึ่งอาจนับเป็นอินพุต

มันจะไปเหนือตัวเลขของแต่ละหมายเลขและทดสอบว่าตรงตามเงื่อนไขหรือไม่

i ~ 0: ตัวเลขมี `0 ' -> ถังขยะ
i% (d = a [j]): ตัวเลขไม่สามารถหารด้วยตัวเลขปัจจุบันได้หรือไม่ -> ถังขยะ
id * 10 ^ (lj) ~ d: ฉันลบตัวเลขปัจจุบันออกจากตัวเลขแล้ว
                  : ยังมีอยู่ใช่ไหม -> ถังขยะ

ใช้เวลา 140 วินาทีในการยกเลิกใน Core 2 Duo ของฉัน


2

เยลลี่ 11 ไบต์

9œ!ṖẎgḌ$ƑƇḌ

สิ่งนี้ใช้œ!อะตอมอายุสองสัปดาห์ เร็วพอที่จะวิ่งบน TIO ได้จริง

ลองออนไลน์!

มันทำงานอย่างไร

9œ!ṖẎgḌ$ƑƇḌ  Main link. No arguments.

9            Set the return value to 9.
   R         Pop; yield [1, ..., 8].
 œ!          Promote 9 to [1, ..., 9] and generate all permutations of length k,
             each k in the right argument [1, ..., 8].
    Ẏ        Tighten; dump all digit lists in a single array.
         Ƈ   Comb; keep only digit lists for which the link to the left returns 1.
        Ƒ      Fixed; return 1 iff calling the link to the left returns its argument.
       $         Combine the two links to the left into a monadic chain.
      Ḍ            Undecimal; convert the digit list into an integer.
     g             Take the GCD of each digit and the integer.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.