月曜日の番号を生成


35

この質問でパズリングについてGamowが定義した月曜日の数字は、次の3つのプロパティを持つ正の整数Nです。

  • Nの10進表現に数字0が含まれていません
  • Nの10進数表現に数字が2回含まれていない
  • Nは、その10進表現に現れるすべての数字Dで割り切れます。

これらは、OEISでLynch-Bell番号として代わりに知られていることに注意してください。

例:

  • 15は月曜日の数値であり、両方1で割り切れ5、他の2つの条件を満たします。
  • 16ではありません。なぜなら、それはで割り切れないから6です。
  • 22条件1と3を満たしているにもかかわらず、条件2に失敗するため、数値はそうではありません。

開始する月曜日の最初の25の番号のリストを以下に示します(合計548個あります)。

1 2 3 4 5 6 7 8 9 12 15 24 36 48124126128132135162168175175184216248

ここでの課題は、1から9867312までの月曜日番号の完全なシーケンスを生成する最短コード書くことです(その質問で可能な限り大きいことが証明されています)。

コードは入力を受け取らず、出力はSTDOUTまたは同等のもので、区切り文字を選択する必要があります。通常のすべてのコードゴルフ規則が適用され、標準の抜け穴は禁止されています。

リーダーボード




@Geobitsありがとう-何らかの理由でOEISで見つけられませんでした。
AdmBorkBork

8
昨日このチャレンジを投稿する必要がありました
...-mbomb007

2
@ mbomb007私は持っていただろう-しかし、今朝までGamowの質問を見なかった!
AdmBorkBork

回答:


1

ゼリー、8バイト

ȷ7Dg⁼QƲƇ

8分以内にローカルで実行されます。

オンラインでお試しください!(6桁以下の数字を検索するように変更)

使い方

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

リストを印刷します。

私は基本的に、以前の課題に対する私の答えの2つを組み合わせています。

条件を組み合わせることで1バイトのxsotを節約できました。


バイトを保存できます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を返します。

これらの2つのステートメントと出力を「or」で区切ることにより、最初の2つの条件のいずれかが> 0を返す場合、条件は一致し、式の後続の部分は評価されません。前の条件が両方とも0の場合にのみ、印刷が実行されます。この-lフラグにより​​、各印刷後に新しい行が追加されます。


非常に素晴らしい。あなたは、Perl 5.10それを作り、使用することによって、いくつかのバイトを保存することができますsayの代わりにprint+ -l:-)
xebtl

提案をありがとう!say 最初に明示的な宣言が必要だと思いましたか?
Jarmex

@Jarmex私はこの辺りで、use feature 'say'またはuse 5.012無料で伝統を始めたかもしれません。私はいつそれをするかについて常に言及し、誰もそれに挑戦したことはありません。私は他のいくつかが同じことをしているのを見ました:)
ホッブズ

2
@hobbs メタに関するこの回答は、「SOおよびこれまでのコンセンサスは、「必要に応じて-M5.010は無料」でした」と述べています。
xebtl

2
使用mapsayてこれを43に下げます
Xcali

10

ピス、22 21

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

1バイトの不要なフォーマットをオフにゴルフしてくれたJakubeに感謝します。

関連する質問に対するこのCWの回答に強く触発されました。

ここに結果のペーストがあり、改行で区切られて印刷されたときから、今ではPythonリストとして印刷されます。

7より小さい数字を使用しない限り、オンラインで試さないことをお勧めします。このリンクで2に設定しました。

必要なすべての値をカバー1するフィルター10^7-1。このバージョンでは、リストを作成できない場合、メモリエラーが発生する可能性がありますS^T7。これはlist(range(1,10**7))、Python 3の場合と似ています(ただし、私にとっては問題ありません)。もしそうなら、あなたは試すことができます:

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

これにより、最初の548の月曜日の番号が見つかります。これ0は、数値のs を確認する別の方法も示してい.3ます。これをtry-catchブロックを使用して置き換えるのではありません。このバージョンの功績は完全にジャクベにあります。(これは、オンライン通訳者にとってはまだかなり遅いことに注意してください)


1
別のソリューションを次に.f&.{`Z.x!s%LZjZT0548示します。while-loopアプローチよりもかなり高速(4x-5x)であり、長さも21バイトしかありません。
ジャクベ

1
@Jakube Backticksはコメントの苦痛ではありませんか?:Pどうもありがとう!
FryAmTheEggman

うーん...あなたのソリューションは、100までの範囲でごTIOリンクで..動作するようには思えない、それが示す55, 66, 77, 88, 99、重複桁のすべての数字...
ケビンCruijssen

1
@KevinCruijssen残念ながら、この投稿を行ってからPythは何度も更新されていますが、何が変わったのかわかりません。ペーストを見ると、これが以前は明らかに機能していたことがわかります。.{それを置き換えると{Iうまくいくようだから、変更されたのではないかと思う 。
FryAmTheEggman

@FryAmTheEggmanああ、私はペーストを見ていませんでした。実際、ほぼ3年が経過しているため、状況が変わったのも不思議ではありません。その場合、+ 1は、ペーストが機能したことを証明するためです。:)
ケビンクルーッセン

9

GS220の 19バイト

gs2は、印刷可能なASCII文字だけでなく、幅広いバイトを使用します。解決策を16進数で示します。

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

ここにいくつかの説明があります。gs2はスタックベースの言語であるため、変数はありません。(4つのレジスタは別として、そのうちの1つはここで使用します)

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か?
ドムヘイスティングス

のスペースを削除します'0' not。また、i%int(k)==0おそらくすることができますi%int(k)<1か?
mbomb007

ありがとう。私はその中でバックを追加することを意味するものではありませんでした@ mbomb007。
ザック・ゲイツ

を使用できますj=`i`
mbomb007

別の-6使用if len(set(j))+2==len(j)+('0'in j)+all(i%int(k)<1 for k in j)
リルトシアスト

7

APL、44 39 37バイト

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

ゴルフをしていない:

{
 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のおかげで7バイト節約できました!


APLが大好きです。これが理由です。
コナーオブライエン

ファンクショントレインを使用して、5バイト節約してゴルフできると思います:{0 = + /(⊢|∘⍵、0∘∊、⍴∘⊢≠⍴∘∪)x←⍎¨⍕⍵:⍵⋄⍬}¨⍳ 1E7
モリスズッカ

@MorisZucca素晴らしい、提案をありがとう!
アレックスA.

この形式ではx←はもう必要ないので、さらに2バイト節約できました。:-)
モリスズッカ

@MorisZuccaあなたはAPLゴルフマシンです!再度、感謝します!
アレックス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(コマンドを使用して生成されます(その間の整数11+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ことXができないため、ゼロをに置き換え2Xます。

ΔList(1要素のリストエラーのため)1〜9を特殊なケースにするにIfは、4行目のステートメントを使用して、5行目のチェックをスキップし、すべての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))]
  • IntegerDigitsn数字のリストに分割され、iます。
  • 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、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、231384、231384、231384、231384、231384、231384 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、324816、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、384216、384216 391248、391824、392184、394128、412368、413928、416328、416832、418392、418632、419328、419832、421368、423168、423816、427896、428136、428736、431928、432168、432768、432816、436128、438192、438192、438192、438192、438192、438192 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、813264、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、2931768、2930 2937816、2978136、2983176、2 69 8163792、8176392、8219736、8312976、8367912、8617392、8731296、8796312、8912736、8973216、9163728、9176328、9176832、9182376、9231768、9237816、9278136、9283176、9617328、9617832、9678312、9718632、9723168、9781632、9781632、9781632、9781632、9781632,782 9812376、9867312}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、7861392、78631392、78631392、78631392、7863136 7891632、7892136、7916328、7916832、7921368、8123976、8163792、8176392、8219736、8312976、8367912、8617392、8731296、8796312、8912736、8973216、9163728、9176328、9176832、9182376、9231768、9237816、9278136、9283176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9283176、928328、9683176、928328、9683176、928328、9683176、9283176、9228328 9617832、9678312、9718632、9723168、9781632、9782136、9812376、9867312}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、7861392、78631392、78631392、78631392、7863136 7891632、7892136、7916328、7916832、7921368、8123976、8163792、8176392、8219736、8312976、8367912、8617392、8731296、8796312、8912736、8973216、9163728、9176328、9176832、9182376、9231768、9237816、9278136、9283176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9683176、9283176、928328、9683176、928328、9683176、928328、9683176、9283176、9228328 9617832、9678312、9718632、9723168、9781632、9782136、9812376、9867312}8796312、8912736、8973216、9163728、9176328、9176832、9182376、9231768、9237816、9278136、9283176、9617328、9617832、9678312、9718632、9723168、9781632、9782136、9812376、9867312}8796312、8912736、8973216、9163728、9176328、9176832、9182376、9231768、9237816、9278136、9283176、9617328、9617832、9678312、9718632、9723168、9781632、9782136、9812376、9867312}

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

やや少ないゴルフ:

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トリックを逃した、いいね。ステートメント修飾子と3進プリントでさらに節約できますか?
ドムヘイスティングス

@DomHastingsに感謝します。あなたの提案を使用してさらにゴルフをしました
スティーブ

あなたが必要としないようニースは、私はあなたにもいくつかのより多くを救うことができると思う、^$周りの0あなたの中にgrep、あなたは置き換えることができます&&前に、s/./単一で&、私は最後は思う|0だけアップにテストしたものの(不要です1e3。 ..)。まあ本当に本当に私のスコアを打ちました!:)
ドムヘイスティングス

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

ゴルフをしていない:

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,8642,176,162,182,136,136,182,136,136,136,136,136,136,136,136,136,136,136,136,136,136,1636 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,2983176768 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,6719328,6719832,6731928,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,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ですか?
リルトシアスト

@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ですが、現在、余分なゼロが存在すると、分割可能性テストが1回失敗します。
これに対抗するために、私はに変更2Xnot(しましたXnot(。2は元々、テストを0で失敗させるためにそこにありましたが、現在はゼロで合格します。ただし、数字にゼロが含まれる数字はmin(ΔList(∟D(リストにゼロが2つ以上あるため)とにかくゼロになっているため、この変更により余分な数字がテストに合格することはありません。

この方法の利点は、1〜9の数字から「2桁」が生成されるため、ΔList(関数がエラーを生成せず、1桁の数字の特別な条件を取り除くことができることです。


4

05AB1E30 22 21 18 14 13 12 9 バイト

@Enigma@ Mr.Xcoderの助けと励ましに感謝します。私がまだ30歳のときに12バイトのソリューションを念頭に置いていたとしても、ほとんど自分でそれを理解させてくれてありがとう。このチャレンジから05AB1Eについて多くを学びました!@Grimyの
おかげで-3バイト

7°LʒÐÑÃÙQ

オンラインで試してください(60秒後のタイムアウトを防ぐため、10 7ではなく10 3未満の数値のみを出力します)。

説明:

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バイトバージョン(最初の05AB1Eの回答の1つ):
注:05AB1Eのレガシーバージョンでのみ機能します。

7°LʒÐSÖPsDÙQ*

オンラインで試してください(60秒後のタイムアウトを防ぐため、10 7ではなく10 3未満の数値のみを出力します)。

説明:

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 Sigh ..数字がすべての数字で割り切れるかどうかを確認するために、最初はもっと長いものを持っていましたが、そのような課題が存在していました。そうです、この答えは、したがって、無効な..ですそして、ここであなたとエニグマは私の30バイトの答えはないでも仕事、笑...チュートリアルの任意の場所はありますんしながら、12〜15バイトの答えについて話していますか?; p
ケビンクルーイッセン

1
9バイト:7°LʒÐÑÃÙQ
グリムミー

@Grimy最初の05AB1Eの答えの1つ。:)素敵なアプローチ!
ケビンクルーイッセン

3

ジュリア、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番号のみにフィルタリングします。

ゴルフをしていない:

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最大の月曜日の数は7桁であるのに8桁である9**9ため、6 ** 9にかかる時間はおそらく10秒程度です。


いくつかの質問で指摘されているように、1e7は両方よりも短い
Holloway

@Trengot 1e7はfloatで、範囲は整数です。
ローカナ

本当です。それを考えていなかった
ホロウェイ

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ほぼ間違いなく!今はそれが私のデフォルトになると思いますが、これを変更すると、スティーブまたはジャーメックスの答えにはるかに近くなり、はるかに優れています!見てくれてありがとう!
ドムヘイスティングス

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. ゼロがないか確認してください。0のASCIIは48なので、すべての数字がそれに等しくないことを確認します。

    a~=48
    
  3. すべての数字で割り切れるかどうかを確認します。各桁(ASCIIから10進数に変換されるため、-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)}

より興味深いが、正規表現を使用したわずかに長いソリューション:

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

それぞれのケースで、我々は、彼らが十進整数であるかのように文字列を反復処理するRubyの能力を使用していること:?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では、ブロック反復子をグローバル変数にすることができました。に割り当てると$_、文字列操作の暗黙的なレシーバーになります。また、配列をより簡単に正規表現に補間することもできます。1.8では、と/[#{[1,2]}]/評価され/[12]/ます。


Ruby 2.4にはdigits整数に関する関数があるので、文字列を操作しなくなったため、evalハックからバイトを節約できます!63バイト。
バリューインク

3

ピップ、25バイト

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

各番号を独自の行に出力します。これは約10分間実行され、これまで984312に到達しましたが、それが正しいと確信しています。(編集:数時間後...コードが完成し、548個すべてが生成されました。)

Python風の擬似コードレンディションを次に示します。

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

#=オペレータは、長さで2つのイテラブルを比較します。多くの場合U、NI QにおけるUEの文字はa中の文字の数と同じであるa、ない繰り返しはありません。

各桁ごとに分割できるチェックは、私のPipサンプルプログラムの1つによるものです。以前のチャレンジを見た後に書きましたが、質問よりも言語が新しいため、そこに投稿しませんでした。それ以外の場合、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が存在する傾向があります。
レトコラディ

@RetoKoradiただし、中置演算子を使用した非スタックベースのゴルフを見たい場合は、Pipが最適です。; ^)
DLosc

Couple hours laterパフォーマンスが考慮されないのは良いことです。
ホロウェイ

3

Javascript(ES6)、106 90 83バイト

子供たち、家でこれを試さないでください。JSは、正規表現で100万から1,000万までのすべての整数のすべての数字をループ処理する見込みに満足していません。

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

最初の正規表現(@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)

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

候補ごとにiaリトルエンディアンの順序でその数字を反復し、のビットで見た数字を追​​跡しますm。ループが完了すると、すべての数字が要因とiなり、ゼロまたは繰り返し数字が表示されなかったため、それを出力します。


goto使用されているコマンドに適しています。
ショーンビバーズ


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

gawk、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ができますが、入力としてカウントできるリターンキーを1回押す必要があります。

各数値の数字を単純に調べて、基準が満たされているかどうかをテストします。

i〜0:数値に「0」が含まれていますか?->ごみ
i%(d = a [j]):現在の数字で割り切れない数値?->ごみ
id * 10 ^(lj)〜d:数字から現在の数字を削除しました
                  :まだ含まれていますか?->ごみ

Core 2 Duoで終了するのに140秒かかります。


2

ゼリー、11バイト

9œ!ṖẎgḌ$ƑƇḌ

これは、2週間前のœ!アトムを使用します。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.