Eingang:
Eine Liste von ganzen Zahlen (die niemals eine Null enthalten werden)
Ausgabe:
Eine Liste mit der gleichen Größe, deren Anzahl auf den folgenden Angaben basiert:
- Wenn das aktuelle Element negativ ist: Sehen Sie sich alle Elemente vor diesem Element an und zählen Sie, wie oft die Ziffern in diesen anderen Zahlen vorgekommen sind
- Wenn das aktuelle Element stattdessen positiv ist: Sehen Sie sich alle Elemente nach diesem Element an und zählen Sie, wie oft die Ziffer in diesen anderen Zahlen vorgekommen ist
Es gibt eine Wendung: Wenn die Größe der Liste gerade ist, zählen wir jede Zahl nur einmal (auch wenn sie mit mehreren Ziffern übereinstimmt), und wenn die Größe ungerade ist, zählen wir jede Ziffer der Zahlen für jede Ziffer des aktuellen Elements (dupliziert) Ziffern werden mehrfach gezählt).
Lassen Sie uns einige Beispiele geben, um dies ein wenig zu verdeutlichen:
Beispiel mit gerader Liste:
Input: [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2, 4, 1, 2, 1, 1, 5 ]
Die Größe der Liste ist gerade , daher zählen wir jede Zahl nur einmal.
4
: Es ist positiv, also freuen wir uns. Es gibt drei Zahlen enthalten , die Ziffer4
(42
,-942
,8374
). Also fangen wir mit a an3
.10
: Es ist positiv, also freuen wir uns. Es gibt zwei Zahlen, die entweder die Ziffer1
und / oder0
(-10
,-200
) enthalten. Die zweite Ausgabe ist also2
.42
: Wieder positiv, also vorwärts. Es gibt vier Zahlen , die entweder die Ziffer4
und / oder2
(-942
,8374
,728
,-200
). Die dritte Ausgabe ist also4
.-10
: Dieses Mal ist es negativ, also schauen wir zurück. Es gibt nur eine Ziffer mit der Ziffer1
und / oder0
(wir ignorieren das Minuszeichen) (10
). Die vierte Ausgabe ist also1
.- etc.
Beispiel mit ungerader Liste:
Input: [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13, 2, 2, 4, 8, 3, 0, 11, 6 ]
Die Größe der Liste ist ungerade , daher zählen wir jede Ziffer.
382
: Es ist positiv, also freuen wir uns. Es gibt eine3
in den anderen Zahlen (381
), sechs8
in den anderen Zahlen (-82, -8, 381, 228, 28, -28
) und sechs2
in den anderen Zahlen (-82, 228, 28, -28, 2
). Also fangen wir mit a an13
.-82
: Es ist negativ, also rückwärts. Es gibt eins3
in der anderen Nummer (382
) und eins8
in der anderen Nummer (382
). Die zweite Ausgabe ist also2
.- ...
228
: Es ist positiv, also vorwärts. Es gibt drei2
's in den anderen Zahlen (28
,-28
,-2
) und drei weiteren2
' s, und zwei8
‚s in den anderen Zahlen (28
,-28
). Also diese Ausgabe ist8
.- etc.
Herausforderungsregeln:
- Sie können davon ausgehen, dass die Eingabe niemals
0
als Element enthalten wird , da sie weder positiv noch negativ ist. - Sie können davon ausgehen, dass die Eingabeliste immer mindestens zwei Elemente enthält.
- I / O ist flexibel. Eingabe / Ausgabe kann ein Array / eine Liste von ganzen Zahlen, eine durch Trennzeichen getrennte Zeichenfolge, eine Ziffern- / Zeichenmatrix usw. sein.
- Wenn die erste Zahl in der Liste eine negative Zahl oder die letzte Zahl in der Liste eine positive Zahl ist, wird sie in der resultierenden Liste 0 sein.
- Bei ungeraden Listen werden Zahlen, die dieselbe Ziffer mehrfach enthalten, mehrfach gezählt, wie
228
im obigen ungeraden Beispiel, was zu8
(3 + 3 + 2) anstelle von5
(3 + 2) führt.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
Input: [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2, 4, 1, 2, 1, 1, 5 ]
Input: [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13, 2, 2, 4, 8, 3, 0, 11, 6 ]
Input: [10, -11, 12, -13, 14, -15, 16, -17, 18, -19]
Output: [9, 1, 7, 3, 5, 5, 3, 7, 1, 9 ]
Input: [10, -11, 12, -13, 14, -15, 16, -17, 18, -19, 20]
Output: [11, 2, 8, 4, 5, 6, 3, 8, 1, 10, 0 ]
Input: [88, 492, -938, 2747, 828, 84710, -29, -90, -37791]
Output: [8, 9, 3, 9, 3, 4, 5, 4, 12 ]
Input: [-1, 11, 11, 1]
Output: [0, 2, 1, 0]
Input: [1, 11, 11, -1]
Output: [3, 2, 1, 3 ]
Input: [-1, 11, 1]
Output: [0, 2, 0]
Input: [1, 11, -1]
Output: [3, 2, 3 ]
δ¢
, noch nie gesehen Doppelvektor gut verwendet, schön.Python 2 ,
149148121116111107 BytesProbieren Sie es online!
quelle
Java (JDK 10) , 204 Byte
Probieren Sie es online!
Credits
quelle
[1,11,-1]
sollte zurückkehren[3,2,3]
. Es ist eine ungerade Liste, also zählen alle Ziffern. Erstens1
: Schauen Sie nach vorn, drei1
s insgesamt:11,-1
. Zweitens11
: Freuen Sie sich auf jede Ziffer: eins1
+ eins1
. Drittens-1
: Schauen Sie nach hinten, drei1
s insgesamt:-1,11
. (Bei ungeraden Listen sollten Sie sich jede Ziffer ansehen, auch die gleiche. Ich werde dies in der Herausforderung klarstellen, aber das ungerade Beispiel mit der Zahl228
verdeutlicht dies ein wenig.),t
undi+(a[i]>0?1:-1)
zui+(t=a[i]>0?1:-1)
wechselt und sie dann einfachj+=t
anstelle von verwendetj+=a[i]>0?1:-1
.Perl 6 ,
10085 BytesProbieren Sie es online!
Verwendet den Baggy-Multiplikationsoperator ⊍.
quelle
Perl 5
-n
, 92 BytesProbieren Sie es online!
quelle
JavaScript (Node.js) ,
164,158,140139 BytesProbieren Sie es online!
quelle
Ruby , 126 Bytes
Probieren Sie es online!
quelle
Jelly ,
4342 BytesProbieren Sie es online!
quelle