Pazartesi Numaraları Oluştur


35

Pazartesi numaraları ile tanımlanan, Gamow'un içinde bu soruya şaşırtıcı üzerinde üzerinde pozitif tam sayılardır N aşağıdaki üç özelliklere sahip:

  • N'nin ondalık gösterimi 0 rakamını içermiyor
  • N'nin ondalık gösterimi iki kere herhangi bir rakam içermiyor
  • N , ondalık göstergesinde oluşan her D rakamıyla bölünebilir

Bunların alternatif olarak OEIS'de Lynch-Bell numaraları olarak bilindiğini unutmayın .

Örnekler:

  • 15Her iki bölünebilir olduğu gibi Pazartesi sayıdır 1ve 5ve tatmin diğer iki şart
  • 16değildir, çünkü bölünemez 6.
  • Sayı 22değildir, çünkü 1. ve 3. koşulları sağlasa da, 2. durumu başarısız olur.

İşte başlamanız için ilk 25 Pazartesi numarasının listesi (toplam 548 tane var):

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

Buradaki zorluk , 1'den 9867312'ye kadar olan Pazartesi sayılarının tam sırasını oluşturan en kısa kodu yazmaktır (bu sorunun mümkün olan en büyük olduğu kanıtlanmıştır).

Kodunuz giriş yapmamalı ve çıktı sınırlayıcı seçiminizle STDOUT veya eşdeğeri olmalıdır. Tüm normal kod golf kuralları uygulanır ve Standart Loopholes yasaktır.

Liderler Sıralaması



1
Lynch-Bell sayıları olarak da bilinir .
Geobits

@Geobits Teşekkürler - OEIS'te nedense bulamadım.
AdmBorkBork

8
Dün bu zorluğu
atmalıydın

2
@ mbomb007 olurdu - Gamow'un sorusunu bu sabaha kadar görmedim!
AdmBorkBork

Yanıtlar:


1

Jöle , 8 bayt

ȷ7Dg⁼QƲƇ

Yerel olarak sekiz dakikadan az bir sürede çalışır.

Çevrimiçi deneyin! (altı veya daha az basamaklı sayıları bulmak için değiştirildi)

Nasıl çalışır

ȷ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 bayt

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`)]

Bir liste yazdırır.

Temelde cevaplarımdan ikisini önceki zorluklara birleştiriyorum:

Koşulları daha iyi birleştirerek kaydedilen 1 baytlık xsot sayesinde.


Bir bayt kaydedebilirsiniz: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 bayt

46 bayt kodu + 1 bayt komut satırı parametresi.

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

Kullanımı:

perl -l entry.pl

açıklama

/(.).*\1|0/ Test edilen sayı yinelenen bir karakter veya 0 ise, 1 değerini döndürür.

s/./$_%$&/rgeher basamağı, basamağın% sındaki değerle değiştirir. Örneğin, 15 -> 00, 16 -> 04 (çünkü% 16 6 = 4). Bu, tüm rakamlarıyla bölünebilen herhangi bir girişin tüm 0'lardan oluşacağı, aksi takdirde> 0 basamak içereceği anlamına gelir. Bunu bir sayı olarak ele almak için, biz * 1, yani herhangi bir sayı altındaki test, tüm basamakları tarafından bölünebilir ise bu blok için 0 döndürür, aksi halde> 0 olur.

Bu iki ifadeyi ve baskıyı 'veya' ile ayırarak, ilk iki koşuldan herhangi birinin> 0 döndürmesi durumunda koşul eşleşir ve ifadenin sonraki bölümleri değerlendirmeye alınmaz. Eğer ve sadece önceki her iki koşul 0 ise, baskı daha sonra yürütülür. -lBayrak her baskı sonrası yeni bir satır eklemek için sağlar.


Çok hoş. Sen Perl 5.10 yapma ve kullanarak birkaç byte kaydedebilirsiniz sayyerine print+ -l:-)
xebtl

Önerin için teşekkürler! say Öncelikle açık bir bildirim gerektirdiğini düşündüm ?
Jarmex

@ Jarmex Buradaki geleneği alma use feature 'say'veya use 5.012ücretsiz olarak başlatmış olabilirim - Bunu yaparken her zaman bahsederim ve kimse buna meydan okumaz . Bir
kaçının

2
@ hobbs Meta üzerindeki bu cevap “Şimdiye kadar SO ve buradaki“ fikir birliği ”gerektiğinde -M5.010 ücretsizdi” diyor.
xebtl

2
Bunu kullanmak mapve say43'e düşürmek: Çevrimiçi deneyin!
Xcali

10

Pyth, 22 21

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

Gereksiz biçimlendirme 1 bayt golf kapalı Jakube için teşekkürler.

Ağır esinlenerek bu CW cevap ilgili soruya.

Burada sonucun bir pastası var , yeni satır ayrıldıktan sonra, şimdi bir pitonik liste olarak yazdırılıyor.

7'den küçük bir sayı kullanmazsanız çevrimiçi denememeyi tavsiye ederim ... Bu bağlantıyı 2 olarak ayarladım.

Filtreler 1için 10^7-1hangi tüm gerekli değerleri kapsar. O listeyi yapamaz, bu sürüm bir bellek hatası neden olabilir S^T7benzer, list(range(1,10**7))(Ancak, bu benim için para cezası çalışır) piton 3'te. Eğer öyleyse, deneyebilirsiniz:

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

Hangi ilk 548 Pazartesi numaralarını bulur. Bu 0, sayıları s ile kontrol etmek için başka bir yol gösterir , bunun yerine bunları .3bir try-catch bloğu kullanır. Bu sürüm için kredi tamamen Jakube'ye gidiyor. (Bunun çevrimiçi tercüman için hala yavaşlatacağını unutmayın)


1
İşte farklı bir çözüm: .f&.{`Z.x!s%LZjZT0548Döngü süresi yaklaşımınızdan biraz daha hızlı (4x - 5x) ve sadece 21 byte uzunluğunda.
Jakube

1
@ Jakube Backticks yorumlarda bir acı değil mi? : P Yine de çok teşekkürler!
FryAmTheEggman

Umm .. çözümünüz işe yaramadı gibi görünüyor .. TIO bağlantınız 100 ile 100 arasında değişiyor 55, 66, 77, 88, 99, tüm rakamları yinelenmiş rakamlarla gösteriyor ..
Kevin Cruijssen 10:18

1
@KevinCruijssen Maalesef, Pyth bu yazıyı yaptığımdan beri pek çok kez güncellendi, neyin değiştiğini bulamıyorum. Macun içerisinde bunun daha önce işe yaradığını açıkça görebilirsiniz. Bence .{değiştirilmiş olabileceğini düşünüyorum , çünkü değiştirilmesi çok {Iişe yarıyor.
FryAmTheEggman 10:18

@FryAmTheEggman Ah, macunu görmemiştim. Gerçekten de neredeyse üç yıl oldu, bu yüzden bir şeylerin değişmiş olabileceğine şaşmamalı. Bu durumda + 1, çünkü hamurun çalıştığını kanıtlar. :)
Kevin Cruijssen

9

GS2 , 20 19 bayt

gs2, yalnızca yazdırılabilir ascii karakterleri değil, çok çeşitli baytları kullanır. Çözümümü hex olarak sunacağım.

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

İşte bazı açıklamalar. gs2 yığın tabanlı bir dildir, bu nedenle değişken yoktur. (biri burada kullandığım 4 kayıt bir yana)

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 bayt

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 Pazartesi Numara var.


1
Yerine 1e8bile kullanabilir misiniz 9**9?
Dom Hastings

İçindeki boşluğu kaldırın '0' not. Ayrıca, i%int(k)==0muhtemelen olabilir i%int(k)<1?
mbomb007

Teşekkürler. Bunu geri eklemek istememiştim. @ Mbomb007
Zach Gates

Kullanabilirsiniz j=`i`.
mbomb007

Başka bir -6 kullanım içinif len(set(j))+2==len(j)+('0'in j)+all(i%int(k)<1 for k in j)
lirtosiast

7

APL, 44 39 37 bayt

{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

Moris Zucca sayesinde 7 bayt kaydedildi!


APL'yi seviyorum. Bu nedenle.
Conor O'Brien

Bence 5 trenle tasarruf ederek, trenleri kullanarak golf oynayabilirsin: {0 = + / (⊢ | ∘⍵, 0∘∊, ⍴∘⊢ ≠ ⍴∘∪) x ← ⍎¨⍕⍵: ⍵⋄⍬} ¨⍳ 1e7
Moris Zucca

@MorisZucca Awesome, öneri için teşekkürler!
Alex A.

Sadece bu formda x ← artık gerekli olmadığını gördüm, bu yüzden 2 bayt daha kaydedildi! :-)
Moris Zucca

@MorisZucca Siz APL golf makinesisiniz! Tekrar teşekkürler!
Alex A.

6

TI-BASIC, 60 59 bayt

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

∟Dmatematik ve randIntNoRep(komut kullanılarak oluşturulan basamakların listesidir ( arasındaki 1ve 1+int(log(Xdahil olan tüm tam sayıların rasgele geçirgenliği ). Tüm koşulların yerine getirilip getirilmediğini kontrol etmek için biraz karmaşık bir ifade zinciri kullanıyorum:

   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(

Tekrarlanan rakamları veya sıfır rakamları olan sayıları başarısızlığa uğratmak için sıfırlarla değiştiriyorum 2X, çünkü Xasla bölünemez 2X.

Özel durum için 1 ~ 9 (çünkü ΔList(bir eleman listesinde hatalar var) IfDördüncü satırdaki ifadeyi beşinci satırdaki kontrolü atlayıp Xall9 otomatik olarak göstererek kullanırım .

Çıkış numaraları yeni satırlarla ayrılmıştır.


5

Mathematica 105

l=Length;Cases[Range@9867312,n_ /;(FreeQ[i=IntegerDigits@n,0]&&l@i== l@Union@i&&And@@(Divisible[n,#]&/@i))]
  • IntegerDigitskırılır n, onun basamaklı bir liste halinde i.
  • FreeQ[i,0] Listede sıfır olup olmadığını kontrol eder.
  • Length[i]==Length[Union[i]] tekrarlanan rakam olmadığını kontrol eder.
  • And@@(Divisible[n,#]&/@i)Her hanenin bir bölen olduğunu kontrol eder n.

{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’e ait. 1395, 1632, 1692, 1764, 1824, 1926, 1935, 1962, 2136, 2184, 2196,2316, 2316, 2364, 2436, 2916, 3126, 3162, 3168, 3195, 3216, 3264, 3276, 3492, 3612, 3624’e ait. 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’e ait. 18264, 18432, 18624, 18936, 19368, 21384, 21648, 21784, 21864, 23184, 24168, 24816, 26184, 27384, 28416, 29736, 31248, 31824, 31896, 31968, 32184, 34128, 31824, 31896, 31968, 32184, 34128, 3179, 31896, 31968, 32184,34128,3679,3679,3678,368,21.37128, 37296, 37926, 38472, 39168, 39816, 41328, 41832, 42168, 42816, 43128, 43176, 46128, 46872, 48216, 48312, 61248, 61824, 62184, 64128, 68712, 7218, 71824,462. 73962, 78624, 79128, 79632, 81264, 81432, 81624, 81936, 82416, 84216, 84312, 84672, 87192, 89136, 89712, 91368, 91476, 91728, 92736, 93168, 93816 ... 124368, 126384, 129384, 132648, 132864, 132984, 134928, 136248, 136824, 138264, 138624, 139248, 139824, 142368, 143928, 146328, 146832, 148392, 148632, 149328, 149832, 162384, 148392, 148632, 149328, 149832, 162384, 16328, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 16328, 16328, 16298, 16298, 16384, 143832, 143832,153'lerde gösterilmektedir. 164.832, 167.328, 167.832, 168.432, 172368, 183.264, 183624, 184.392, 184.632, 186.432, 189.432, 192.384, 193.248, 193.824, 194.328, 194.832, 198.432, 213.648, 213.864, 213.984, 214.368, 216.384, 218.736, 219.384, 231.648, 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, 318264, 318624, 319248, 319824, 321648, 328264, 318264, 318624, 319248, 319824, 321648, 32806, 32806, 32806, 32806,29786; 326184, 328416, 329184, 341928, 342168, 342816, 346128, 348192, 348216, 348912, 349128, 361248, 361824, 361872, 362184, 364128, 364728, 367248, 372244, 364128, 364728, 367248,376824, 384168,364728,367248,376824,384168,364248,364248,367248; 391248, 391824, 392184, 394128, 412368, 413928, 416328, 416832, 418392, 418632, 419328, 419832, 421368, 423168, 423816, 427896, 428136,442. 438912, 439128, 461328, 461832, 463128, 468312, 469728, 478296, 478632, 481392, 481632, 482136, 483192, 483216, 483672, 483912, 486312, 489312, 491328, 483672, 483912, 486312, 489312, 491328, 49186, 49392, 483912, 486312, 489312, 491328, 49186, 49398, 483912, 486312, 486312, 49326, 49326, 49396, 4941.0, 484112, 486313, 486312, 492132, 49366; 613872, 614328, 614832, 618432, 621384, 623184, 623784,627.984, 631.248, 631.824, 632.184, 634.128, 634.872, 641.328, 641.832, 643.128, 648.312, 671.328, 671.832, 681.432, 684.312, 689.472, 732.648, 732.816, 742.896, 746.928, 762.384, 768.432, 783.216, 789.264, 796.824, 813.264, 813624, 814392, 814632, 816432, 819432, 823416, 824136, 824376, 831264, 831624, 832416, 834192, 834216, 834912, 836472, 841392; 873264, 891432, 894312, 897624, 912384, 913248, 913824, 914328, 914832, 918432, 921384, 923184, 927864, 931248, 931824, 932184, 934128, 941328, 941832, 94312, 934128, 934128, 941328, 9418 ... 1289736, 1293768, 1369872, 1372896, 1376928, 1382976, 1679328, 1679832, 1687392, 1738296, 1823976, 1863792, 1876392, 1923768, 1936872, 1982736, 2137968, 2138976, 2136 ... 2937816, 2978136, 2983176,3186792, 3187296, 3196872, 3271968, 3297168, 3298176, 3619728, 3678192, 3712968, 3768912, 3796128, 3816792, 3817296, 3867192,3869128, 3927168, 3928176, 3867192; 6893712, 6913872, 6971328, 6971832, 7168392, 7198632, 7231896, 7291368, 7329168, 7361928, 7392168, 7398216, 76139168, 7639128, 7829136; 8163796, 9176392, 8219736, 8312976, 8367912, 8617392, 8731296, 8796312, 8912736, 8973216, 9163728, 9176328, 9176832, 9182376, 9231768, 9237816, 9278 9812376, 9867312)6387192, 6389712, 6391728, 6719328, 6719832, 6731928, 6893712, 6913872, 6971328, 6971832, 7168392, 7198632, 7231896, 7291368, 7329168, 7361928, 7331696, 7291368, 7329168, 7198632, 7231896, 7291368, 7329168, 7, 719, 7, 7, 7, 7, 7, 7, 7, 7, 7, 797 787 7891632, 7892136, 7916328, 7916832, 7921368, 8123976, 8163792, 8176392, 8219736, 8312976, 8367912, 8617392, 8731296, 89, 712, 8912736, 8973216. 9617832, 9678312, 9718632, 9723168, 9781632, 9782136, 9812376, 9867312}6387192, 6389712, 6391728, 6719328, 6719832, 6731928, 6893712, 6913872, 6971328, 6971832, 7168392, 7198632, 7231896, 7291368, 7329168, 7361928, 7331696, 7291368, 7329168, 7198632, 7231896, 7291368, 7329168, 7, 719, 7, 7, 7, 7, 7, 7, 7, 7, 7, 797 787 7891632, 7892136, 7916328, 7916832, 7921368, 8123976, 8163792, 8176392, 8219736, 8312976, 8367912, 8617392, 8731296, 89, 712, 8912736, 8973216. 9617832, 9678312, 9718632, 9723168, 9781632, 9782136, 9812376, 9867312}8796312, 8912736, 8973216, 9163728, 9176328, 9176832, 9182376, 9231768, 9237816, 9278136, 9283176, 9617328, 9617832, 9678312, 9718632;8796312, 8912736, 8973216, 9163728, 9176328, 9176832, 9182376, 9231768, 9237816, 9278136, 9283176, 9617328, 9617832, 9678312, 9718632;

Length[%]

548


Matematikte büyük sayıları daha az bayt gibi, 9^9ya 1e8da başka bir şeyle
almayı bekliyorum

Mathematica'nın bunun için yerleşik bir özelliği olmadığı için şaşırdım ;-) UnionÇiftleri kontrol etmek için güzel bir numara .
AdmBorkBork

@FryAmTheEggman, 9 ^ 9 için izin veren Mathematica konusunda haklısın. Fakat bu 548 Pazartesi sayısından fazla vermez mi?
DavidC

Soruda belirtildiği gibi, üst sınır olarak verilen rakamdan daha büyük bir Pazartesi numarası yoktur.
FryAmTheEggman 29:15

5

Haskell, 77 bayt

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

Kullanım örneği (ilk 20 sayı):

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]

Nasıl çalışır: 1-9 ^ 9 arasındaki tüm sayıları yineleyin ve koşulları kontrol edin. Geçerli sayı x, show xkarakter listesi olarak üzerinde çalışmak için dizginin temsiline ( ) dönüştürülür.


5

R, 99 bayt

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,"")}

Biraz daha az golf oynadı:

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 bayt

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

1
Ahhh, dupe kontrolü için 1 numarayı kaçırdım güzel. Ne zaman bir ifade değiştirici ve bir üçlü baskı ile daha fazla tasarruf edebilirsiniz?
Dom Hastings

@DomHastings, önerinizi kullanarak şimdi daha çok golf oynadı
steve

Güzel, sana ihtiyacım yok gibi, hem de birkaç tane daha kurtarabilir miyiz ^ve $çevresinde 0Gözlerinde farklı grep, o kadar değiştirebileceğiniz &&önce s/./tek olan &ve geçen düşünüyorum |0sadece yukarı-test rağmen (gereksiz olduğunu 1e3. ..). Peki ve gerçekten puanımı düştü! :)
Dom Hastings

1
@DomHastings, golf ipuçlarınızla 70'e kadar teşekkür eder.
steve

Grepten kurtularak biraz daha golf oynadım (gereksiz - desen eşleşmesi grep olmadan halleder) ve gerisini haritaya yerleştirir: Çevrimiçi deneyin!
Xcali

4

CJam, 25 bayt

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

Çevrimiçi deneyin . Çevrimiçi bağlantının yalnızca 10.000’e çalıştığını unutmayın. Eğer yeterince sabırlı olursanız çevrimiçi ortamda bitip bitmeyeceğinden emin değilim. CJam'ın çevrimdışı sürümüyle test etmedi, ancak sona ermesini bekliyorum.

Açıklama:

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

Uzun zamandır golüm başladığından beri, büyük olasılıkla bayt sayısını düşürmek için birkaç numarayı unuttum. Onları düşündüğümde gelişecek ... Şimdilik:

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 olabilir mi?
lirtosiast

@ThomasKwa Evet, olabilir. Aslında. Teşekkürler!
RobIII

4

TI-BASIC, 55 53 bayt

Bu, Thomas Kwa'nın cevabının nispeten küçük bir düzenlemesidir , ancak yeni bir cevap olarak sunuyorum çünkü TI-BASIC cevaplarını golf oynamak için bir lütufta bulunduğunu duydum .

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

Benim asıl değişimdir gelen randIntNoRep(1,etmek randIntNoRep(0,anlamı orada olacak şimdi basamak her oluşturulan listesinde bir sıfır.

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

Artık her basamak kümesinde sıfır olduğu için, bu kalanların toplamını etkiler. Normalde kalanların toplamı 0'dır, fakat şimdi, ekstra bir sıfırın varlığı bölünebilirlik testimizin bir başarısızlığına neden olur.
Bunu önlemek için Değiştim 2Xnot(için Xnot(. 2 başlangıçta testi 0'da başarısız yapmak için vardı, ancak şimdi sıfıra geçti. Ancak, rakamlarında sıfır içeren sayılar, şimdilerde yine min(ΔList(∟Dsıfırdır (listelerinde 2 veya daha fazla sıfır olduğu için), bu değişiklik, testte herhangi bir ekstra sayının geçmesine neden olmaz.

Bu yöntemin yararı, 1-9 sayısından üretilen "iki hane" olduğundan, ΔList(fonksiyonun tek haneli sayılar için özel bir durumdan kurtulmamızı sağlayan bir hata üretmemesidir.


4

05AB1E , 30 22 21 18 14 13 12 9 bayt

@Enigma ve @ Mr.Xcoder'in yardımı ve teşviki sayesinde -9 bayt . Çoğunlukla kendimi çözmeme izin verdiğiniz için teşekkür ederiz, hala 30 yaşımdayken aklıma 12-byte bir çözüm bulmuş olsanız bile. Bu zorlukla 05AB1E hakkında çok şey öğrendim! @Grimy
sayesinde -3 bayt

7°LʒÐÑÃÙQ

Çevrimiçi deneyin ( 60 sn sonra bir zaman aşımını önlemek için yalnızca 10 7 yerine 10 3 altındaki sayıları verir ).

Açıklama:

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)

Önceki 12 bayt sürümü (ilk 05AB1E cevaplarımdan biri):
NOT: Sadece 05AB1E'nin eski sürümünde çalışır.

7°LʒÐSÖPsDÙQ*

Çevrimiçi deneyin ( 60 sn sonra bir zaman aşımını önlemek için yalnızca 10 7 yerine 10 3 altındaki sayıları verir ).

Açıklama:

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)

Cevabınız 297, Lynch-Bell sayıları sırasındaki değil, yazdırır .
Bay Xcoder

@ Mr.Xcoder Sigh .. Bir rakamın tüm rakamlarla bölünebilir olup olmadığını kontrol etmek için ilk başta daha uzun bir şey vardı, ancak bunun gibi bir zorluk olduğunu düşündüm. Bu cevabın bu yüzden de geçersiz olduğu anlaşılıyor . Ve burada ve Enigma , 12-15 baytlık cevaplardan bahsediyor, 30 baytlık cevabım bile işe yaramadı, lol. ; p
Kevin Cruijssen

1
9 bayt:7°LʒÐÑÃÙQ
Grimmy

@Grimy İlk 05AB1E cevaplarımdan biri. :) Güzel yaklaşım!
Kevin Cruijssen

3

Julia, 88 bayt

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

Bu sadece 1'den en büyük Lynch-Bell numarasına kadar tüm sayıları alır ve onları yalnızca Lynch-Bell numaralarına göre filtreler.

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 bayt

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`)]

printTercümandaki 96 değerini atlayabilirsiniz. 6**9En büyük pazartesi sayısı yalnızca 7 basamak iken 8 basamaktan beri kullanılır, bunun gibi bir şey 9**9uzun zaman alabilir, 6 ** 9 sadece yaklaşık 10 saniye sürer.


Birkaç soruya değinildiği gibi 1e7 her ikisinden de daha kısadır
Holloway

@Trengot 1e7bir şamandıra, aralık tamsayıları alıyor.
Rohcana

Çok doğru. Bunu hiç düşünmemiştim
Holloway

3

Perl, 97 bayt

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

Çalışması biraz zaman alıyor ancak gerekli çıktıları alıyor, 1e3daha hızlı bir örnek olarak değiştirin!


Şu anda bunu deneyecek durumda değilim ama bunun yerine y///c==grep{2>eval"$n=~y/$_//"}/./gçizgileri boyunca bir şeyler kullanabilir misiniz !/(.).*\1/?
msh210

@ msh210 Neredeyse kesinlikle! O şimdi benim varsayılan olacağını düşünüyorum, ancak bu değişen sadece yakın gitme şansını sona ereceğini steve en ya Jarmex en üstündür cevapları! Bir göz attığın için teşekkürler!
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)

Ve daha okunabilir bir biçimde:

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

Çekler aşağıdaki gibidir:

  1. Önce herhangi bir kopya olup olmadığını kontrol edin. Diziyi sıralayarak, herhangi bir ardışık hane arasındaki fark sıfırsa, o zaman yinelenenler olur.

    diff(sort(a))
    
  2. Sıfır olup olmadığını kontrol edin. 0 için ASCII, 48'dir, bu nedenle tüm rakamların buna eşit olmadığını kontrol ederiz.

    a~=48
    
  3. Tüm basamaklara göre bölünebilir olup olmadığını kontrol edin. Kalanların her bir basamağa bölünürken (ASCII'den ondalık değere dönüştürüldüğü, dolayısıyla -48) sıfır olduğunu kontrol ederiz.

    ~mod(n,a-48)
    

Sonunda all()kontrollerin doğru olduğundan emin oluruz ve öyleyse virgülle ayrılmış bir çıktı dizisine ekleriz.

MATLAB'ta STDOUT yoktur, bu yüzden sonuçta sonuç dizesini basarım disp()


Bu kod YAVAŞ! Hala tüm Pazartesi sayılarını doğru bulduğundan emin olmak için kullanıyorum, ancak şu ana kadar iyi görünüyor.

Güncelleştirme:

Kodun çalışması bitmiştir. Aşağıdakileri yazdırır:

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

Bu kodu giriş ile çalıştırırsanız:

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

Yeilds 548.


3

Ruby, 79

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

Bir regex ile daha ilginç ama biraz daha uzun bir çözüm:

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

Her durumda, Ruby'nin dizeler üzerinde yineleme yapma yeteneğini ondalık tam sayılarıymış gibi kullanıyoruz: ?1.upto(?9*7)eşittir 1.upto(9999999).map(&:to_s).each. Modulo operatörünü kullanarak sıfır olmayan her basamağa dizgiyi birleştiriyoruz ve bölünebilirliği kontrol etmek için sonucu değerlendiriyoruz.

Bonus Ruby 1.8 çözümü ( -luygun çıktı için bayrak gerektirir ):

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

1.8 blok yineleyicinin global bir değişken olmasına izin verdi. Atama $_, onu dize işlemleri için örtülü alıcı yapar. Ayrıca dizileri normal ifadeye daha kolay bir şekilde enterpolasyonluyoruz: 1.8'de /[#{[1,2]}]/değerlendirir /[12]/.


Artık Ruby 2.4 digitstamsayılar üzerinde bir işleve sahip olduğu için , artık dizelerde işlem yapmadığınız için değerlendirme hackinden baytları tasarruf edebilirsiniz! 63 bayt.
Value Ink

3

Pip , 25 bayt

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

Her sayıyı kendi satırına gönderir. Bu yaklaşık 10 dakikadan beri çalışıyor ve şimdiye kadar 984312'ye ulaştı, ancak bunun doğru olduğuna eminim. (Düzenleme: Birkaç saat sonra ... kod tamamlandı, 548'in hepsini oluşturdu.)

İşte bir Python-esque sözde kod sunumu:

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

#=Operatör uzunluğu iki Iterables karşılaştırır. Sayısı ise Uni Qde ue karakterlerin akarakter sayısı aynıdır a, hiçbir tekrarlar vardır.

Her basamak başına bölünebilir kontrol, Pip örnek programlarımdan birinden. Daha önceki mücadeleyi gördükten sonra yazdım , ancak dilini sorudan daha yeni olduğu için oraya göndermedim. Aksi takdirde, 8 bayt, bu sorunun kazanan cevap olurdu. İşte adım adım açıklama:

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

Bu oldukça temiz bir dil! Yığın tabanlı golf dışında bir şey görmek güzel.
AdmBorkBork,

1
@TimmyD Eğer yığın temelli olmayan golf oynamak istiyorsanız, çevresinde oldukça fazla Pyth olma eğilimi vardır.
Reto Koradi

@RetoKoradi Ancak , infix operatörleri ile yığın dışı golf oynamak istiyorsanız , Pip size göre. ; ^)
DLosc

Couple hours laterPerformansın dikkate alınmaması iyi bir şey.
Holloway

3

Javascript (ES6), 106 90 83 bayt

Çocuklar, bunu evde denemeyin; JS, bir regex ile her tamsayıdaki her rakamın bir ila on milyon arasında dolaşma ihtimalinden memnun olmayacaktır.

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

trueSayı, yinelenen rakamlar veya sıfırlar içeriyorsa, ilk regex (@Jarmex'e aittir) döner . Bu ortaya çıkarsa false, her rakamı değiştirir ikinci, üzerine programın hareket jile i%j. Sonuç, tüm rakamları tarafından bölünebiliyorsa, sıfırdır, bu durumda bu duruma devam eder console.log(i).

Önerilerinizi bekliyoruz!


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 testi 0 veya tekrarlanan rakamlar için. Ardından rakam dizisi, herhangi bir rakam için sıfır olmayan bir modulo aranıp kontrol edilir.

işte maks. 7 rakamın açıklaması.


3

Ruby, 130 bayt

... boşlukları saymıyor

Programlamada yeni, sadece katılmak istedim

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'ye Hoşgeldiniz! Kodun uzunluğunun azaltılmasına yardımcı olmak için Ruby için bazı ek İpuçları bölümüne bakın.
AdmBorkBork

3

C, 122 bayt

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:;}}

Daha güzel:

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:;
    }
}

Her aday için i, biz onun basamak yineleme abit görülen basamak takip, küçük endian sırayla m. Döngü tamamlanırsa, tüm basamaklar faktördür ive sıfır veya tekrarlanan rakam olmadığını gördük, bu nedenle yazdırın, aksi takdirde dış çevrime devam etmek için erken çıkarız.


gotoKullanılan komuta iyi .
Shaun Bebbers

2

CJam, 34 bayt

1e7{_:TAb___&=\{T\T)e|%}%:+!**},N*

2

Lua, 129 bayt

Biraz rakam gibi görünen ve muhtemelen bana bir kaç bayt kazandırdı. (Bu teoriyi test edeceğim, ancak Lua string kullanımı diğer dillere kıyasla oldukça ayrıntılı.)

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

gawk, 99 bayt

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}

Bunu kullanmak ENDyerine kullanırsam bunu 97'ye düşürebilirim BEGIN, ancak daha sonra giriş yapılmayacağına dair gerçek çıkışı başlatmak için Ctrl-D'ye basmanız gerekir.

Ben yerine bir şey yazmak olsaydı ben bile 94 bunu azaltabilir BEGINveya END, ama o zaman girdi olarak sayılabilir ki bunu başlatmak için bir kez Enter tuşuna basın etmesi gerekir.

Her sayının basamağından geçer ve ölçütlerin karşılanıp karşılanmadığını test eder.

i ~ 0: sayı `0` mı içeriyor? -> çöp
i% (d = a [j]): sayı geçerli basamak tarafından bölünemez mi? -> çöp
id * 10 ^ (lj) ~ d: Geçerli basamağı sayıdan henüz çıkardım
                  : hala içeriyor mu? -> çöp

Core 2 Duo cihazımda sonlandırmak 140 saniye sürüyor.


2

Jöle , 11 bayt

9œ!ṖẎgḌ$ƑƇḌ

Bu iki haftalık eski œ!atomu kullanır . Aslında TIO ile çalışacak kadar hızlı.

Çevrimiçi deneyin!

Nasıl çalışır

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.