Das Spiel von Sevens wird wie folgt gespielt: Die n
Spieler sitzen in einem Kreis und zählen von 1 nach links (oder von Spieler A
zu Spieler B
).
Wenn eine Zahl erreicht ist p
, die ein 7
ODER enthält, das durch teilbar 7
ist, muss der Spieler, der die Nummer gesprochen hat p-1
, nach dem nächsten Spieler p
sagen, p+1
und die Reihenfolge der sprechenden Personen wird umgekehrt. Zum Beispiel, wenn der Spieler B
spricht 6
, C
sagt der Spieler 7
, B
sagt 8
und A
sagt der Spieler 9
.
Hinweis: Wenn eine Person eine Zahl vergisst (oder in der Version, in der sevens
nicht gesagt wird, versehentlich a seven
), werden sie aus dem Kreis gestrichen, aber wir werden dieses Detail bei dieser Herausforderung weglassen.
Die Herausforderung selbst besteht darin, die Zahlen zu drucken, die jeder Spieler in einem perfekten Sevens-Spiel sagen sollte, bis eine Eingabe m
für eine Eingabe erfolgtn
.
Als ein Beispiel, in dem fünf Menschen, A
, B
, C
, D
, und E
sind zu spielen , bis sie erreichen 30
. Sie spielen auf diese Weise
A: 1 6 8 13 15 19 23 30
B: 2 7* 12 16 18 24
C: 3 11 17* 25
D: 4 10 21* 26 28*
E: 5 9 14* 20 22 27*29
wo sevens
sind mit gekennzeichnet *
. Beachten Sie, dass bei 27
und 28
, wir Umkehr zweimal, und das Spiel geht weiter „normal“ aus D
zu E
.
Bitte beachten Sie, dass die Ausgabe nicht im obigen Format erfolgen muss. Ich habe es aus Gründen der Klarheit einfach so ausgedruckt.
Regeln
Die Eingabe besteht aus zwei Ganzzahlen in beliebiger Reihenfolge,
m
die die letzte zu sagenden
Zahl darstellen und die Anzahl der Spieler darstellen.Die Ausgabe kann aus mehreren Arrays oder mehreren Zeichenfolgen bestehen, eine für jeden Player. Wenn Sie Zeichenfolgen verwenden, müssen Sie keine Trennzeichen verwenden (wenn Sie jedoch einige in Ihren Codetests hinzufügen könnten, wären wir für die Lesbarkeit dankbar). Wenn man sie tatsächlich irgendwie im Kreis drucken kann, ist das auch akzeptabel, und es wäre auch ziemlich cool.
Die Ausgabe muss nicht angeben, welche Spieler welche sind (es ist ziemlich offensichtlich, dass der erste Spieler derjenige ist, der sagt
1
). Wenn die Ausgabe jedoch aus irgendeinem Grund nicht sortiert ist, sollten Sie klarstellen, welcher Spieler welchen Satz von Zahlen spricht . Das Weglassen von Spielern, die nichts sagen, ist auch zulässig, wenn Sie klar machen, welche Spieler sprechen. Ich werde im Folgenden einige weitere Beispiele für mögliche Ausgaben hinzufügen.Das ist Codegolf, also gewinnt die kleinste Anzahl von Bytes.
Wie immer, wenn das Problem unklar ist, lassen Sie es mich bitte wissen. Viel Glück und gutes Golfen!
Beispiele
>>> sevens_string(30, 5, " ")
'1 6 8 13 15 19 23 30'
'2 7 12 16 18 24'
'3 11 17 25'
'4 10 21 26 28'
'5 9 14 20 22 27 29'
>>> sevens_string(42, 5)
'16813151923303539'
'27121618243140'
'31117253241'
'410212628333742'
'591420222729343638'
>>> sevens_array(20, 3)
[1, 4, 7, 10, 13, 15, 19]
[2, 5, 9, 12, 16, 18]
[3, 6, 8, 11, 14, 17, 20]
>>> sevens_array(18, 10)
[1, 13, 15]
[2, 12, 16, 18]
[3, 11, 17]
[4, 10]
[5, 9]
[6, 8]
[7]
[]
[]
[14]
1 2 3 4 1 2 3 2 1 4 3 2 1 4 1
.) Ich sage nicht, dass das in Bezug auf die Herausforderung besser oder schlechter ist: Nur, dass es in der realen Welt nützlicher wäre.Antworten:
Pyth, 38 Bytes
Probieren Sie es online aus. Testsuite.
Grundsätzlich ein Port meiner Python-Antwort; Es gibt wahrscheinlich einen besseren Weg. Nimmt als Eingabe die Zahl, bis zu
n
der gezählt werden soll, und die Anzahl der Spielerp
in separaten Zeilen, gibt das Ergebnis als zweidimensionales Array aus.quelle
Haskell, 151 Bytes
quelle
mod n 7<1
stattmod n 7==0
unds<$>[1..]
stattmap s[1..]
? Warum auch nichtprint[]
stattmapM_ print[]
?Python 3, 155 Bytes
Verwendet Schildkrötengrafiken, um in einem Kreis zu drucken, sodass sich die vom selben Spieler gesprochenen Zahlen im selben Radius befinden. Der Radius des Kreises wird vergrößert, wenn die Richtung umgekehrt wird oder wenn die Sequenz um den Kreis herum verläuft, sodass vorherige Zahlen nicht überschrieben werden.
Beispielausgabe für
f(22,6)
quelle
Python 2,
103102101 BytesDefiniert eine Funktion
S(n,p)
, die die zu zählende Zahln
und die Anzahl der Spieler verwendetp
und das Ergebnis als Array von Zeichenfolgen ausgibt.quelle
Python 2,
919087 BytesGibt eine Liste mit Tupeln aus. Teste es auf Ideone .
quelle
Jelly ,
2725 Bytes (nicht konkurrierend)Probieren Sie es online! oder überprüfen Sie alle Testfälle .
quelle
Dyalog APL,
504735 BytesDies zeigt die Zahlen, die jeder Spieler gesagt hat, als Tabelle an, wobei die erste Spalte die Spieler auflistet. Die Zeilen werden mit gepolsterten 0 s auf die gleiche Länge, und Zeilen ohne Zahlen weggelassen.
Nachprüfung
Beachten Sie, dass im letzten Beispiel 7 und 8 weggelassen werden, da diese Spieler noch nichts gesagt haben.
quelle
Ruby, 81
Ziemlich unkomplizierte Implementierung. Gibt eine hässliche glommed Zeichenfolge zurück (Sie können ein Leerzeichen hinzufügen, um es
"#{k+=1} "
... nun, eine Zeichenfolge mit Abstand zu machen ). Ich frage mich, ob es da draußen einen mathematischeren Algorithmus gibt.quelle
Faktor 172
Ich habe es länger geschafft als Haskell und so lesbar wie APL! Bekomme ich ein cookie
Es ist ein Zitat (anonyme Funktion), das eine kreisförmige Folge von Vektoren ausgibt. Jeder Vektor beginnt mit der Nummer des Spielers und dann mit den Nummern, die diesem Spieler entsprechen.
Ich habe damit angefangen:
das ist kein guter faktor code, aber viel klarer (ja, ich benutze da nummern als variablennamen, sieh mich nicht so an!).
quelle
SYMBOL:
viel besser: Ein-Buchstaben-Namen, und loswerdenset
undget
!JavaScript (ES6) 100
Ergebnis als String-Array ohne Trennzeichen zurückgeben
Oder lesbarer, für 3 Bytes mehr, Ergebnis als Array von Arrays zurückgeben
Testen Sie die neue wundervolle Konsolenfunktion der Stack-Snippets
quelle
J,
6360595856 BytesNachprüfung
quelle