Betrachten Sie das folgende Dreieck.
1 23 456 7891 01112 131415 1617181 92021222 324252627 2829303132 33343536373 839404142434 4454647484950 51525354555657 585960616263646 5666768697071727 37475767778798081
Wie Sie wahrscheinlich bemerkt haben, hat die erste Zeile die Länge 1, und jede Zeile danach ist 1 Stelle länger als die vorherige und enthält die Ziffern der zusammengesetzten positiven ganzen Zahlen.
Sie erhalten eine ganze Zahl gegeben N . Ihre Aufgabe ist es, die Summe der Ziffern zu finden, die in der N- ten Zeile des obigen Dreiecks liegen.
Regeln
Sie können zwischen 0 und 1 Indizierung wählen. Bitte geben Sie dies in Ihrer Antwort an.
Es gelten Standardlücken .
Sie können Eingaben und Ausgaben nach jedem Standard und in jedem vernünftigen Format vornehmen.
Dies ist OEIS A066548 , und diese Sequenz ist das Dreieck selbst (mit der Ausnahme, dass wir keine führenden Nullen entfernen).
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes (in jeder Sprache). Viel Spaß beim Golfen!
Testfälle
Input | Output
0 | 1
1 | 5
2 | 15
3 | 25
4 | 5
5 | 15
6 | 25
7 | 20
8 | 33
9 | 33
10 | 43
11 | 46
12 | 64
Beachten Sie, dass die oben genannten Werte 0-indiziert sind. Wenn Sie nach 1-indizierten Testfällen suchen, erhöhen Sie die Eingabe um 1.
Ganz unabhängig davon habe ich kürzlich mein Profilbild geändert, und das hat mich dazu inspiriert, diese Herausforderung zu schreiben.
n**2
istn*n
.sum(range(n)) = ~-n*n/2 = (n - 1) * n / 2
Haskell , 57 Bytes
Probieren Sie es online!
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
-1 danke an Emigna .
1-Indizierung.
quelle
S
wenn Sie ersetzenJ
mitS
.Perl 6 ,
474542 BytesProbieren Sie es online!
1-indiziert
quelle
Mathematica, 96 Bytes
Probieren Sie es online! (Um in der Mathematik zu arbeiten, muss "Tr" durch "Total" ersetzt werden)
quelle
Jelly , 11 Bytes
Probieren Sie es online!
Verwendet 1-basierte Indizierung.
Erläuterung
quelle
Haskell,
6964 BytesProbieren Sie es online aus.
5 Bytes dank Laikoni gespart !
Hier ist die weniger Golf Version:
quelle
n%x=sum[read[d]|d<-take n x]:(n+1)%drop n x
ist einige Bytes kürzer.splitOn
würde Bytes sparen.R
1191091089388 BytesGolf beginnen .... 1-indiziert
danke @Zachary. Ihre Vermutung ist richtig :) rasiert 1 Byte TNX an @ Andrius und 15 weitere TNX an @ User2390246
@ Giuseppe - TNX für die Strtoi. neu für mich. 5 Bytes runter :)
quelle
y=
, noch die Elternn*(n-1)/2+1
, und der Name der Sprache ist vermutlich nicht[R]
.as.integer
mitas.double
x
, VerwendungF
wie dies bereits initialisiert auf 01:n+a-1
gibt das gleiche wiea:(a+n-1)
. In diesem Fall müssen Sie nichta
im Voraus definieren , sondern können es einfach direkt in denfor
Ausdruck einfügen. Auf diese Weise können Sie auch + 1 / -1 ausgleichen.substring
anstelle von "substr
da" verwendet. Dies ist nur eine Summe über den Indizes des Teilstrings. Außerdem ist es immer gut, einen TIO-Link für Ihre Lösungen einzuschließen :) +1, großartige Arbeit.Emojicode , 182 Bytes
Definiert eine Methode namens ©, die ein 🚂 annimmt und ein 🚂 zurückgibt. 1-indiziert.
Probieren Sie es online!
Erläuterung:
Hinweis: Viele Emojis machen in Emojicode 0.5 wenig Sinn. Immerhin ist es 0.x. 0.6 behebt das Problem. Wenn Sie dies also lernen möchten (denn wer möchte das nicht?), Empfehle ich, einen Moment zu warten.
Emojicode ist eine objektorientierte Programmiersprache mit Generika, Protokollen, Optionen und Closures. Dieses Programm verwendet jedoch keine Closures und alle Generika und Protokolle können als implizit betrachtet werden.
Das Programm arbeitet nur mit wenigen Typen: 🚂 ist der Integer-Typ und 🔡 ist der String-Typ. Außerdem werden ins in Bedingungen angezeigt, die einen Wert von 👍 (true) oder 👎 (false) annehmen können.
Derzeit gibt es in Emojicode keine Operatoren. Daher werden Additionen, Vergleiche und andere Operationen, die normalerweise Operatoren sind, als Funktionen implementiert, sodass die Ausdrücke die Präfixnotation verwenden . Betreiber sind auch in 0.6 geplant.
© nimmt einen 🚂 angerufen
a
und gibt ein 🚂 zurück.Deklarieren Sie eine eingefrorene ("Konstante")
l
, die der a-ten Dreieckszahl entspricht (Formel in Präfixnotation). Dies ist die Länge der zu generierenden Zahlenfolge.Weisen Sie der Variablen eine leere Zeichenfolge zu
t
.Zuweisen
i = 0
.Während das
l
größer ist als die Länge vont
i += 1
Fügen Sie die Textdarstellung von
i
in Basis 10 ant
.Schleife beenden
Zuordnen
s = 0
Nehmen Sie eine Teilzeichenfolge, die mit der Länge a ( der dreieckigen Zahl)
t
beginnt , und iterieren Sie über alle Zeichenl - a
a - 1
Konvertieren Sie das Zeichen in eine Zeichenfolge, analysieren Sie die Ganzzahl in der Basis 10, entpacken Sie das optionale Zeichen (es wird nichts zurückgegeben, wenn die Zeichenfolge keine Zahl ist) und fügen Sie es der
s
Variablen hinzu.Schleife beenden
Kehrt zurück
Methode beenden.
quelle
PHP, 66 + 1 Bytes
Laufen Sie als Pipe mit
-nR
oder probieren Sie es online aus .benötigt PHP 5.4 oder neuer zur Indizierung des Ausdrucks.
quelle
Pyth, 24 Bytes
Versuchen Sie es hier: http://pyth.herokuapp.com/
quelle
APL,
282625 BytesVerwendet 1-basierte Indizierung
Probieren Sie es online!
Wie?
⍳⍵×⍵
, 1 durch den Eingang zum Quadrat⍕¨
verwandle jedes Element in einen String∊,/
, verketten sie zusammen(+/⍳⍵)↑
, nimm die Zeilen bis zum Eingang⍵↑⌽
, nimm die gewünschte Reihe⍎¨
verwandle jedes Element in eine Zahl+/
, Summequelle
Clojure v1.8, 154 Bytes
1-indiziert
Probieren Sie es online!
Erläuterung
quelle
Java 8,
11698 Bytes1-indiziert
-18 Bytes dank @Nevay
Erläuterung:
Probieren Sie es hier aus.
quelle
n->{String r="";int i=0,x=0;for(;x++<n*n;r+=x);for(x=0;x<n;)i+=r.charAt(x+++~-n*n/2)-48;return i;}
.R,
99,105, 97 Bytes1-indiziert
ungolfed version
Probieren Sie es hier aus!
danke an @ Giuseppe für das Speichern von 8 Bytes
quelle
strtoi
Perl 6 , 44 Bytes
Probier es aus
Erweitert:
quelle
Gelee , 16 Bytes
Probieren Sie es online!
1-indiziert.
quelle
SOGL V0.12 ,
1513 BytesProbieren Sie es hier aus!
1-indiziert.
Während ich daran arbeitete, behebte ich einen Fehler, der dazu führte, dass
∑
Zahlenarrays und dergleichen nicht funktioniertenm
fälschlicherweise implizite Eingaben .Erläuterung:
quelle
C ++, 180 Bytes
-17 Bytes dank Zacharý
Index beginnt um 1
quelle
int s(int n){++n;std::string t;int i=0,p=0;for(;i<=n;)p+=i++;for(i=0;t.size()<p;t+=std::to_string(++i));t=t.substr(0,p);t=t.substr(t.size()-n);i=0;for(auto&a:t)i+=a-48;return i;}
++n;
"0" identifier is unknown
in Visual Studio. Gleiches fürto_string
undsize
. Sie können es sehen, wenn Sie den Code in Notepad ++ kopieren, einfügen und die Codierung in ANSI konvertieren. Sie werden einige??
im Editor sehenPyth ,
15 1413 BytesProbieren Sie es hier aus! oder Schauen Sie sich die Testsuite an.
Alternativen mit 13 Bytes :
Wie?
quelle
> <>, 141 + 2 Bytes
1-indiziert
+ 2b für -v Flag
Tio.run scheint meine> <> Programme in letzter Zeit nicht wirklich zu mögen ... Sie können sie jedoch auf https://fishlanguage.com überprüfen . Die Eingabe erfolgt im 'Initial Stack'.
Bearbeiten: Es stellt sich heraus, dass tio.run es nicht mag, weil es '[' und ']' anders behandelt als fishlanguage.com. fishlanguage.com kehrt den Stapel um, wenn ein neuer Stapel erstellt oder entfernt wird, tio.run jedoch nicht.
quelle
Perl 5 , 62 + 1 (-p) = 63 Bytes
Probieren Sie es online!
Ergebnis ist 1 indiziert.
Wie?
Verketten Sie mehr als genug Ziffern miteinander und überspringen Sie dann die irrelevanten am Anfang (die Länge des Überspringens ist die Summe der ganzen Zahlen von 1 bis
n-1
). Nehmen Sie die nächstenn
Ziffern, setzen Sie ein+
vor jede und werten Sie diese Gleichung aus.quelle
JavaScript (ES6),
7865 Bytes1-indiziert. Bearbeiten: 13 Bytes dank @tsh gespeichert.
quelle
n=>eval([...(g=n=>n?g(n-1)+n:'')(n*n)].join<+>.substr(~-n*n-1,2*n))
join`+`
am Ende zu setzen ...