Angespornt durch diese Frage heute möchte ich interessante Möglichkeiten sehen, wie verschiedene Programmiersprachen einen Nummernblock in Wahrscheinlichkeiten verwandeln können. In kachelbasierten Spielen können Sie in der Regel mit einem Nummernblock in eine beliebige Richtung navigieren, je nachdem, wo sich Ihr Charakter gerade befindet. Wenn eine KI für diese Spiele Math.random() * 8
nicht ausreicht, musste ich ein wenig kreativ werden, damit die Bewegung etwas natürlich aussieht und sich anfühlt.
Ein Nummernblock ist wie folgt definiert:
7 | 8 | 9
- - - - -
4 | x | 6
- - - - -
1 | 2 | 3
Bitte beachten Sie, dass 5 eine ungültige Zahl ist, da Sie nicht auf sich selbst übergehen können.
In allen Beispielen werden diese Wahrscheinlichkeiten verwendet: [50, 40, 30, 20, 10]
Wenn ich Wahrscheinlichkeiten generieren wollte 8
, würde das so aussehen:
40 | 50 | 40
-- | -- | --
30 | xx | 30
-- | -- | --
20 | 10 | 20
Die Ausgabe wäre [20, 10, 20, 30, 30, 40, 50, 40]
(mit 5 weggelassen) oder [20, 10, 20, 30, null, 30, 40, 50, 40]
(mit 5 vorhanden)
Wenn ich sie generieren wollte 1
, würde das so aussehen:
30 | 20 | 10
-- | -- | --
40 | xx | 20
-- | -- | --
50 | 40 | 30
Die Ausgabe wäre [50, 40, 30, 40, 20, 30, 20, 10]
(mit 5 weggelassen) oder [50, 40, 30, 40, null, 20, 30, 20, 10]
(mit 5 vorhanden)
Sie können ein vollständiges Programm schreiben, das die Eingabe auf jede übliche Weise (Befehlszeile, stdin) übernimmt und die Ausgabe ausgibt, oder Sie können eine Funktion mit einem Zahlenargument schreiben, das die Ausgabe ausgibt oder zurückgibt. Ihr Programm oder Ihre Funktion sollte eine Zahl akzeptieren - die Position, um die herum generiert werden soll. Sie sollten diese Wahrscheinlichkeiten verwenden: [50, 40, 30, 20, 10]
(Sie müssen nicht fest codiert sein).
Kürzester Code in Bytes gewinnt. Standardlücken sind nicht zulässig. Antworten, die im verlinkten Thread gepostet wurden, sind nicht zulässig. Nachgestellte oder führende Leerzeichen sind zulässig. Sie können die Position 4
je nach Wunsch als abwesend oder leer behandeln . Ich bin nicht zu wählerisch im Ausgabeformat - drucken Sie es als durch Kommas getrennte Zeichenfolgen oder als Array aus.
(Dies ist meine erste Frage, schont mich!)
Python - 115
a
ist ein Array mit den Werten in der Reihenfolge um den Nummernblock (gegen den Uhrzeigersinn von 1) undb
ordnet die Zahlen auf dem Nummernblock den Positionen um ihn herum zu. Basierend auf der Anzahl der Leerzeichen um das Nummernfeld für die eingegebene Nummer (bestimmt mitb
) erstellt es ein Array mit so vielen Elementen, die von der Vorderseitea
bis zum Ende verschoben wurden , undb
ordnet die Elemente dann erneut so an, dass sie den Nummernfeldnummern entsprechen.quelle
/10
und dann eine*10
in Ihre Schleife einfügen.(a[c:]+a[:c])[e]
gleicha[(c+e)%8]
odera[c+e-8]
? Und dannc
vereinfacht das Einstecken den Ausdruck.Pyth - 38 Bytes
Verwendet die gleiche Technik wie die Python-Antwort, mit Ausnahme der Basiskomprimierung für die beiden Arrays.
Probieren Sie es hier online .
quelle
Java, 190
String v
hält die Wahrscheinlichkeiten (geteilt durch 10) im Uhrzeigersinn, wobei input = 1 der Standardwert 50 ist.int[]i
Übersetzt die Eingabe in einen Index in v. Zum Beispielv.charAt(i[1])
ist5
. Die Eingaben 0 und 5 sind ungültig, sodass sowohl i [0] als auch i [5] einen Platzhalterwert von 8 haben, der der Index für '\ 0' am Ende von v ist.Ich drehe die Zahlen in v um den Wert i [n] nach rechts und drucke dann die Wahrscheinlichkeiten als durch Kommas getrennte Zeichenfolgen.
quelle