Präfixteilbarkeit
Bei einer positiven ganzen Zahl \$1 \le n \le 9\$, alle positiv ausgeben \$n\$-digit integers \$i\$ für die Folgendes gilt:
- Jede Ziffer von \$1\$zu \$n\$erscheint genau einmal in \$i\$. Daher \$i\$Die Ziffern sind eine Permutation der Ziffern von \$1\$zu \$n\$.
- \.$i\$ist teilbar durch \$n\$
- Entfernen der am weitesten rechts stehenden Ziffer aus \$i\$ergibt eine andere ganze Zahl \$i_{\text{trunc}(1)}\$das ist teilbar durch \$n-1\$
- Entfernen der am weitesten rechts stehenden Ziffer aus \$i_{\text{trunc}(1)}\$ergibt eine andere ganze Zahl \$i_{\text{trunc}(2)}\$das ist teilbar durch \$n-2\$
- Und so weiter, bis \$i_{\text{trunc}(n-1)}\$, die durch 1 teilbar ist.
Zum Beispiel für \$n = 3\$ist eine solche ganze Zahl \$321\$, als \$321\$ist teilbar durch \$3\$, \$32\$von \$2\$und \$3\$ um 1.
Für \$n = 4, 5, 7\$gibt es keine solchen ganzen Zahlen. In diesem Fall können Sie die Ausgabe alles , was mit einem möglichen Ausgang (zB damit verwechselt werden können 0, []nichts, etc.). Für \$n = 3, 6\$können Sie die beiden Zahlen in einem beliebigen Format ausgeben, in dem die beiden Zahlen klar voneinander getrennt sind.
Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes.
Wenn Sie eine Nachschlagetabellenmethode verwenden, zeigt Brownie Points \${}^\dagger\$ werden vergeben, wenn Sie auch eine Version hinzufügen, die die korrekte Ausgabe berechnet.
\.${}^\dagger\$Brownie-Punkte können in Form einer Gegenstimme vorliegen oder nicht
Testfälle
Diese Fälle sind erschöpfend, sodass Sie niemals eine Eingabe erhalten (oder bearbeiten müssen), die hier nicht enthalten ist.
n -> i
1 -> [1]
2 -> [12]
3 -> [123, 321]
4 -> []
5 -> []
6 -> [123654, 321654]
7 -> []
8 -> [38165472]
9 -> [381654729]
Antworten
05AB1E , 8 Bytes
LœJʒηāÖP
Kommentiert :
L # push [1..n]
œ # push all permutations
J # join each permutation into a number
ʒ # filter those numbers on:
η # each prefix ...
Ö # ... is divisible ...
ā # ... by its index
P # take the product (all)
Python 2 , 68 Bytes
lambda n:[`s`[:n]for s in 321654,381654729,123654][380712>>n*2&3::2]
Gibt eine Liste und Zeichenfolgen aus.
71 Bytes
lambda n:[0,1,12,[123,321],0,0,[123654,321654],0,38165472,381654729][n]
Nur ein langweiliger gerader Hardcode. Gibt eine einzelne Zahl oder eine Liste mit zwei Zahlen oder 0 für keine Ausgabe aus.
Keine der anderen Methoden, die ich ausprobierte, schien kürzer zu sein. Eine Idee ist zum Beispiel, Zahlen als Präfixe einer einzelnen Zahl zu generieren und wie zu generieren 123654/10**(6-i).
Eine Objektmethode gibt die gleiche Länge an. Leider können wir das nicht viel kürzer verwenden, .popda es die Funktion nicht wiederverwendbar macht, da es die Liste bei jedem Aufruf ändert.
[0,1,12,[123,321],0,0,[123654,321654],0,38165472,381654729].__getitem__
Das Aliasing der längsten Konstante ergibt ebenfalls die gleiche Länge:
lambda n,c=381654729:[0,1,12,[123,321],0,0,[123654,321654],0,c/10,c][n]
J , 42 37 Bytes
Berechnet die Zahlen.
0({:#~0=[:+/#\|])@|:i.@!10&#.\@A.1+i.
1+i.1… ni.@!…@A.alle möglichen Permutationen von 1… n10&#.\Konvertieren Sie jedes Präfix einer Permutation in eine Zahl0(…)@|:transponiere die Matrix und…#\|]1… n mod die Präfixe, z1 2 3 | 1 12 1230=[:+/summiere das Ergebnis; ist es 0?{:#~Nehmen Sie dann das letzte Präfix der Permutation (die Permutation selbst).
Scala, 81 80 Bytes
| =>1.to(|).mkString.permutations.filter{i=>1 to|forall(r=>i.take(r).toInt%r<1)}
Erläuterung:
| => //n, the input
1.to(|) //Range to n
.mkString //Turn it into a string
.permutations //Get all permutations
.filter{ i => //Filter them
1 to | forall(r => //For every r from 1 to n
i.take(r).toInt //The number made from i's first r digits
% r < 1 //Should be divisible by r
)
}
Holzkohle , 25 Bytes
NθΦEXχθIι⬤…·¹θ›№ιIλ﹪I…ιλλ
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Zu langsam für n>5TIO. Erläuterung:
Nθ
Eingabe n.
ΦEXχθIι
Listen Sie alle Ganzzahlen ibis auf 10ⁿ, so dass ...
⬤…·¹θ
... für jede ganze Zahl lvon 1bis n...
›№ιIλ﹪I…ιλλ
list eine Ziffer von iund das l-Zeichenpräfix von iist teilbar durch l.
Etwas schnellere 28-Byte-Version:
NθΦEX⊕θθ⍘ι⊕θ⬤…·¹θ›№ιIλ﹪I…ιλλ
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung: Erzeugt die Ziffern in der Basis n+1anstelle der Basis 10und ermöglicht so die Vervollständigung n=6auf TIO.
Schnellste 29-Byte-Version mit einer komprimierten Nachschlagetabelle:
§⪪”)‴a3HSGS⸿Dπ¬Z⦄O<ε≔<πUθ8”0N
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes.
Wolfram Language (Mathematica) , 78 Bytes
(f=FromDigits)/@Select[Permutations@Range[s=#],f@#[[;;k]]~Mod~k~Sum~{k,s}<1&]&
-8 Bytes von @att
C (gcc) -lm, 67 101 96 Bytes
34 Bytes hinzugefügt, um einen Fehler zu beheben, auf den xnor freundlicherweise hingewiesen hat .
5 Bytes dank Ceilingcat gespart !!!
f(n){write(1,"321654",n-3&&n-6?0:n);n=n<4?123/exp10(3-n):n>7?381654729/exp10(9-n):n-6?0:123654;}
Total Lookup-basierte Lösung. Wenn es zwei Lösungen gibt: Gibt eine an aus stdoutund gibt die andere zurück. Wenn es nur eine Antwort gibt, wird sie einfach zurückgegeben. Gibt \ zurück$0\$ wenn es keine Antwort gibt.
Bonusrunde für Brownie-Punkte
C (gcc) , 232 212 Bytes
Dank Ceilingcat satte 20 Bytes gespart !!!
p;m;j;char b[9],c[9];d;i;f(n){for(d=0,i=n;i;)d+=9*d+i--;for(sprintf(c,"%d",d);d/++i;)if(sprintf(b,"%d",i),qsort(b,n,1,L"\xf06be0f\xd02917beǃ"),!strcmp(b,c)){for(p=0,m=n,j=i;j;j/=10)p|=j%m--;p||printf("%d ",i);}}
Berechnet die korrekten Zahlen durch Berechnung und gibt sie an aus stdout. Gibt nichts aus, wenn keine Antwort vorliegt. Zeitüberschreitung bei TIO für \$n=9\$aber macht sie alle 3m36.499sauf meinem Laptop.
Gelee , 11 10 Bytes
-1 dank caird coinheringaahing !
Dies ist eine naive Methode, es könnte eine knappere geben.
Œ!JḍḌƤẠƲƇḌ
Ein monadischer Link, der \ akzeptiert$n\$was ergibt, 0wenn keine gefunden werden oder eine Liste gültiger Zahlen.
Probieren Sie es online aus! Oder sehen Sie sich die Testsuite an .
Wie?
Œ!JḍḌƤẠƲƇḌ - Link: n
Œ! - all permutations of [1..n]
Ƈ - filter keep those (p for p in Œ!) for which:
Ʋ - last four links as a monad f(p):
J - range of length = [1..n]
Ƥ - apply to prefixes (of p):
Ḍ - un-decimal
ḍ - divides? (vectorises)
Ạ - all truthy?
Ḍ - un-decimal
Perl 5 , 64 Bytes
sub{grep"@_"==y///c,1,12,123,321,123654,321654,$x=38165472,$x.9}
JavaScript (V8) , 97 Byte
Eine rekursive Funktion, die die übereinstimmenden Ganzzahlen berechnet und druckt.
f=(n,s='987654321'.slice(-n),d,p)=>p%d?0:s?[...s].map(v=>f(n,s.replace(v,''),-~d,[p]+v)):print(p)
JavaScript (ES6), 59 Byte
Die Hardcodierung ist offensichtlich kürzer.
n=>[,1,12,[321,123],,,[321654,123654],,q=38165472,q+[9]][n]
Wolfram Language (Mathematica) , 71 Bytes
f[s_:0,l_:0]=0!=##2&&l∣s&&If[l<#,##~f[10s+i,l+1]~i~Do~{i,#},Print@s]&
Rufen Sie an als f[][n]. Druckt die Ergebnisse.
Excel, 64 Bytes
=CHOOSE(A1,1,12,"123,321",,,"123654,321654",,38165472,381654729)
Eingabe ist in A1. Die fest codierte Antwort ist kürzer als die Berechnung.