Gra w Siódemki przebiega w następujący sposób: n
gracze siedzą w kręgu i zaczynają liczyć od 1, przechodząc w lewo (lub od gracza A
do gracza B
).
Gdy liczba, p
która zawiera 7
OR, jest podzielna, 7
zostanie osiągnięty, wówczas gracz, który wypowiedział numer p-1
, po tym, jak następny gracz powie p
, musi powiedzieć, p+1
a kolejność mówienia zmienia się. Na przykład, jeśli gracz B
mówi 6
, gracz C
mówi 7
, B
mówi 8
, a gracz A
mówi 9
.
Uwaga: dla tych, którzy chcą grać w prawdziwym życiu, jeśli dana osoba zapomni liczbę (lub w wersji, w której sevens
nie podano, przypadkowo mówi a seven
), zostaną wyeliminowani z kręgu, ale pomijamy ten szczegół w tym wyzwaniu.
Samo wyzwanie polega na wydrukowaniu liczb, które każdy gracz powinien wypowiadać w idealnej grze Sevens, aż do wkładu m
dla n
graczy wejściowych .
Jako przykład, w którym pięć osób, A
, B
, C
, D
, i E
są do gry aż dotrą 30
. Grają w ten sposób
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
gdzie sevens
są oznaczone *
. Pamiętaj, że w 27
i 28
cofamy się dwukrotnie, a gra jest kontynuowana „normalnie” od D
do E
.
Należy pamiętać, że dane wyjściowe nie muszą być w powyższym formacie. Po prostu wydrukowałem to w ten sposób dla większej przejrzystości.
Zasady
Dane wejściowe to dwie liczby całkowite w dowolnej kolejności,
m
reprezentujące ostatnią liczbę do powiedzenia,n
reprezentującą liczbę graczy.Wyjściem może być kilka tablic lub kilka ciągów, po jednym dla każdego odtwarzacza. Jeśli używasz ciągów znaków, nie musisz używać separatorów (jeśli jednak możesz dodać trochę w testach kodu, będziemy wdzięczni za czytelność). Jeśli rzeczywiście możesz wydrukować je w kółko, jest to również do przyjęcia i byłoby też całkiem fajne.
Dane wyjściowe nie muszą określać, którzy gracze są tymi, którzy mówią (to całkiem oczywiste, że pierwszy gracz jest tym, który mówi
1
), chociaż jeśli wynik nie zostanie posortowany z jakiegokolwiek powodu, należy wyjaśnić, który gracz mówi, który zestaw liczb . Pominięcie graczy, którzy nic nie mówią, jest również dozwolone, jeśli jasno określisz, którzy gracze mówią. Poniżej dodam kilka przykładów możliwych wyników.To jest kod golfowy, więc wygrywa najmniejsza liczba bajtów.
Jak zawsze, jeśli problem jest niejasny, daj mi znać. Powodzenia i dobrej gry w golfa!
Przykłady
>>> 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
). Nie twierdzę, że jest to lepsze lub gorsze pod względem wyzwania: po prostu byłoby bardziej przydatne w prawdziwym świecie.Odpowiedzi:
Pyth, 38 bajtów
Wypróbuj online. Zestaw testowy.
Zasadniczo port mojej odpowiedzi w Pythonie; jest prawdopodobnie lepszy sposób. Pobiera na wejściu liczbę do zliczenia
n
i liczbę graczyp
na osobnych liniach, zwraca wynik jako dwuwymiarową tablicę.źródło
Haskell, 151 bajtów
źródło
mod n 7<1
zamiastmod n 7==0
is<$>[1..]
zamiastmap s[1..]
? A dlaczego nieprint[]
zamiastmapM_ print[]
?Python 3, 155 bajtów
Używa grafiki żółwia do drukowania w kółku, tak że liczby wypowiadane przez tego samego gracza znajdują się w tym samym promieniu. Promień koła zwiększa się, gdy kierunek jest odwrócony lub gdy sekwencja owija się wokół koła, więc poprzednie liczby nie są nadpisywane.
Przykładowe dane wyjściowe dla
f(22,6)
źródło
Python 2,
103102101 bajtówDefiniuje funkcję,
S(n,p)
która bierze liczbę do zliczenian
i liczbę graczyp
i wypisuje wynik jako tablicę ciągów.źródło
Python 2,
919087 bajtówDrukuje listę krotek. Przetestuj na Ideone .
źródło
Galaretka ,
2725 bajtów (niekonkurujących)Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
źródło
Dyalog APL,
504735 bajtówWyświetla liczby podane przez każdego gracza jako tabelę, w której w pierwszej kolumnie wymieniono graczy. Rzędy są wypełnione 0 s dla tej samej długości, a rzędy bez numerów są pomijane.
Weryfikacja
Zauważ, że w ostatnim przykładzie 7 i 8 zostały pominięte, ponieważ ci gracze jeszcze nic nie powiedzieli.
źródło
Ruby, 81
Dość prosta implementacja. Zwraca brzydki łańcuch glommed (możesz dodać spację, aby zrobić
"#{k+=1} "
... no cóż, łańcuch z odstępami). Zastanawiam się, czy istnieje jakiś algorytm matematyczny.źródło
Współczynnik 172
Udało mi się to zrobić dłużej niż Haskell i tak czytelny jak APL! Czy dostaję ciasteczko?
Jest to cytat (funkcja anonimowa), który generuje cykliczną sekwencję wektorów. Każdy wektor zaczyna się od numeru gracza, a następnie liczb odpowiadających temu graczowi.
Zacząłem od tego:
co nie jest dobrym kodem czynnikowym, ale o wiele bardziej jasne (tak, używam liczb jako nazw zmiennych, nie patrz tak na mnie!).
źródło
SYMBOL:
wiele lepiej: nazwy jednej litery i pozbywanie sięset
iget
!JavaScript (ES6) 100
Zwracany wynik jako tablica ciągów, bez separatorów
Lub bardziej czytelny, dla 3 bajtów więcej, zwracający wynik jako tablicę tablic
Przetestuj za pomocą nowej wspaniałej funkcji konsoli Snippets stosu
źródło
J,
6360595856 bajtówWeryfikacja
źródło