Wir alle hören oft die Redewendung "durch das Array gehen", um "die Funktion über das folgende Array abbilden" zu bedeuten. Ich muss es jedoch tun (jetzt!), Also möchte ich, dass du rennst durch das Array.
Wie laufe ich?
Stellen Sie sich vor, es gibt ein wildes Rudel Wölfe hinter sich
Das Durchlaufen eines Arrays entspricht dem Durchlaufen eines Arrays, mit der Ausnahme, dass Sie Elemente überspringen können. Ja, es ist manchmal chaotisch, aber es funktioniert (im Allgemeinen). "Welche Elemente werden übersprungen?", Können Sie fragen. Nun, das geschieht zufällig. Lassen Sie uns durch das Array laufen!
- Sei
e
das aktuelle Element. - Lassen Sie
random
einen Zufallsgenerator einfließen[0,1)
. Wennrandom() < 0.5
ja, fahren Sie mit dem nächsten Element fort und fahren mit Schritt 1 fort. (Sie können eine Zahl auch auf andere Weise generieren, sofern dies eine (im Idealfall) gleiche Chance zum Überspringen und Verbleiben darstellt. Sie können beispielsweise ein Element aus a auswählen Zwei-Mitglieder-Set und Ausführen der Aktion basierend auf dem Ergebnis.) - Andernfalls führen Sie die Funktion
f
ause
.
Zielsetzung
Wenn Sie ein Array / eine Liste / eine Zeichenfolge wie A
eines oder eine Zahl haben K
, durchlaufen Sie das Array und fügen Sie K
jedem Mitglied, auf das zugegriffen wird , etwas hinzu . Dieses Array ausgeben / zurückgeben. A
wird nur nicht negative ganze Zahlen enthalten und K
wird immer nur eine nicht negative ganze Zahl sein. Dies ist ein Code-Golf , also gewinnt das kürzeste Programm in Bytes.
Testfälle (Beispiele)
K, A => possible K'
[1, 2, 3, 4], 0 => [1, 2, 3, 4]
[1, 2, 3, 4], 1 => [1, 3, 3, 5]
[0, 0, 0, 0], 2 => [2, 0, 0, 2]
quelle
[0,1)
Tippfehler? 2 mehr zu gehen ...x
so dass0 ≤ x < 1
.Antworten:
Pyth, 7
Probieren Sie es hier aus
Verwendet eine zufällige Auswahl anstelle eines Gleitkommavergleichs, sollte aber nicht unterscheidbar sein.
Erweiterung:
Fließkomma verwenden:
Probieren Sie es hier aus
quelle
Clojure,
4137 BytesEinige Bytes durch Multiplikation mit 0 oder 1 und Löschen des "if" abgeschlagen. Gutschrift an die meisten anderen Einreicher!
quelle
for
ist es kürzer alsmap
, siehe meine Antwort als Referenz :) Außerdem vermeidet es, eine innere anonyme Funktion zu haben, sodass(fn[a k]
Sie den Code nicht starten, sondern verwenden können#(
.Jelly,
987 BytesVon
8
zu7
dank @FryAmTheEggman .Probieren Sie es online!
Erläuterung
quelle
MATL , 11 Bytes
Verwendet Gleitkommazahlen.
Probieren Sie es online!
Erläuterung
quelle
Japt, 6 Bytes
Probier es aus
Erläuterung
Implizite Eingabe von Array
U
und GanzzahlV
. Ordnen Sie (®
) dem Array zu und addieren Sie zu jedem ElementV
multipliziert mitMq
, was entweder0
oder zufällig erzeugt1
. Implizite Ausgabe des resultierenden Arrays.quelle
Ruby, 28 Bytes
quelle
Julia,
332927 BytesDies ist eine anonyme Funktion, die ein Array mit einer inneren anonymen Funktion akzeptiert, die eine Ganzzahl akzeptiert und ein Array zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu und rufen Sie like auf
f(x)(k)
.Wir erzeugen ein Array mit der gleichen Länge wie das Eingangsarray, bestehend aus Nullen und Einsen, die mit gleicher Wahrscheinlichkeit zufällig ausgewählt werden. Wir multiplizieren dies mit der Eingabe-Ganzzahl und fügen diese dem Eingabe-Array hinzu.
Probieren Sie es online!
2 Bytes gespart dank Dennis!
quelle
Python 2,
6058 BytesDieses Programm hat sich als sehr einfach erwiesen. Es gibt nicht viele Golf-Tricks, abgesehen von dem offensichtlichen "
from module import*
", bei dem ein Lambda anstelle einer regulären Funktion verwendet wird, und dem allgemeinen Mangel an Leerzeichen. Davon abgesehen ist es eigentlich ziemlich idiomatisch. Wenn ich das wirklich schreiben würde, würde ich es wahrscheinlich auf sehr ähnliche Weise tun:Oder vielleicht etwas ausgefalleneres:
Aber das ist genug, um anzugeben :)
Dies ist die alte 60-Byte-Version, ab der ein Float für die Zufälligkeit benötigt wurde:
Fügen Sie für jedes Element der Liste hinzu
k*(random()<.5)
. Python-Boolesche Werte werden mit 0 und 1 ausgewertet. Dadurch wird allen Elementen, für die die Bedingung nicht erfüllt ist, 0 hinzugefügt.Pythons
random.random()
Renditen fließen ein[0, 1)
, darum musste ich mir keine Sorgen machen.quelle
e+choice([0,k])
JavaScript (ES6), 38 Byte
quelle
PowerShell v2 +, 34 Byte
Übernimmt die Eingabe
$a
und$k
, das Array bzw. das Int. Wir durchlaufen dann das Array und geben bei jeder Schleifeniteration das aktuelle Element plus die$k
Zeiten aus,(random 2)
die ausgeführt werdenGet-Random -Maximum 2
(dh entweder a0
oder a1
). Diese verbleiben alle in der Pipeline und werden implizit als Array ausgegeben.quelle
CJam, 10 Bytes
Erwartet das Array und die Nummer oben auf dem Stapel in dieser Reihenfolge und ersetzt sie durch das neue Array.
Teste es hier.
quelle
PHP 71 Bytes
quelle
k (12 Bytes)
z.B
Im Allgemeinen, wo
f
kann als Argument für 16 Zeichen übergeben werdenz.B
quelle
Python 3
15211098 BytesDies ist meine erste Code-Golf-Lösung, daher kenne ich keine Tricks. Ich habe dies mit einer Hauptfunktion mit Testfällen getestet. Die Dateigröße ist nur diese Funktion.
Vielen Dank an @ Cᴏɴᴏʀ O'Bʀɪᴇɴ für den Rat zum Entfernen von Leerzeichen. Zusätzliches Lob an @undergroundmonorail für Ratschläge, die 12 Byte einsparen.
quelle
import *
,a(x, y)
,x[ptr]=z+y
usw. Sie können auch die vier Räume mit einem einzigen Raum ersetzenx[ptr]=z+y
dieselbe Zeileif random()>0.5
einfügen, um 3 Bytes Leerzeichen zu sparen. In Python 20.5
kann geschrieben werden.5
, um ein Byte zu speichern, ich weiß jedoch nicht, ob dies in Python 3 zutrifft. Wenn Sie auf umbenennenptr
,p
sparen Sie insgesamt 6 Byte. Bist du auch auf Windows? Windows speichert Newlines als zwei Bytes, aber da es Python egal ist, ob die Newline ein oder zwei Bytes enthält, können Sie sie als 1 zählen, sodass Ihre aktuelle Lösung nur 103 Bytes umfasst. Übrigens, willkommen bei PPCG :)Clojure, 32 Bytes
Danke David für die
rand-int
Idee, definitiv kürzer als derif(>(rand)0.5)
Ansatz. Hierfor
schlägtmap
.quelle
Oktave, 28 Bytes
Probelauf auf ideone .
quelle
05AB1E , 10 Bytes
Code:
Probieren Sie es online! .
quelle
Java, 84 Bytes
Ungolfed
Anmerkungen
return A;
. Die Art Rückkehr müßte von geändert werden ,int[]
zuvoid
. Dies spart jedoch keine zusätzlichen Bytes, da zwischenvoid
und ein zusätzlicher Speicherplatz benötigt wirdr
.Kürzere Version (wie im Hinweis erwähnt), 75 Bytes
Ausgabe
quelle
Mathcad, Bytes
Es ist noch keine formale Byteanzahl als Mathcad-Zählprotokoll zu bestimmen.
quelle
Java
1081078582 BytesDank @TimmyD werden 14 Bytes gespeichert
quelle
main
,String[]
,int[]
und speichern Sie noch ein paar Bytes durch eine ÄnderungnextFloat()>0.5
annext(1)==0
.new java.util.Random().nextFloat()
zuMath.random()
, da es viel viel kürzer ist.s
, nur diei
Methode hat den Rückgabetyp,void
aber Sie versuchen zurückzugebenint[]
. Auch ein Semikolon fehlt danachreturn s
.Perl 5 , 30 + 1 (-a) = 31 Bytes
Probieren Sie es online!
quelle