Streszczenie: Biorąc pod uwagę wyniki uogólnionego programu FizzBuzz, zwróć listę czynników i słów użytych dla programu.
Opis wyzwania
Wyobraź sobie uogólniony program FizzBuzz, który pobiera jako listę listę czynników i słów do użycia oraz liczbę na początek. Na przykład, jeśli wejście tego programu było
3 2,Ninja 5,Bear 7,Monkey
Program będzie wydrukować numery od 3
celu 100
, zastępując liczb podzielnych przez 2
się Ninja
, liczb podzielnych przez 5
się Bear
, a liczba podzielna przez 7
z Monkey
. W przypadku liczb, które są podzielne, niż więcej niż jeden z tych terminów, program połączy słowa, drukując rzeczy takie jak NinjaBear
lub BearMonkey
lub NinjaMonkey
lub NinjaBearMonkey
. Oto wynik tego wejścia:
3
Ninja
Bear
Ninja
Monkey
Ninja
9
NinjaBear
11
Ninja
13
NinjaMonkey
Bear
Ninja
17
Ninja
19
NinjaBear
Monkey
Ninja
23
Ninja
Bear
Ninja
27
NinjaMonkey
29
NinjaBear
31
Ninja
33
Ninja
BearMonkey
Ninja
37
Ninja
39
NinjaBear
41
NinjaMonkey
43
Ninja
Bear
Ninja
47
Ninja
Monkey
NinjaBear
51
Ninja
53
Ninja
Bear
NinjaMonkey
57
Ninja
59
NinjaBear
61
Ninja
Monkey
Ninja
Bear
Ninja
67
Ninja
69
NinjaBearMonkey
71
Ninja
73
Ninja
Bear
Ninja
Monkey
Ninja
79
NinjaBear
81
Ninja
83
NinjaMonkey
Bear
Ninja
87
Ninja
89
NinjaBear
Monkey
Ninja
93
Ninja
Bear
Ninja
97
NinjaMonkey
99
NinjaBear
Pamiętaj, że ilekroć program musi łączyć słowa ze sobą, zawsze przechodzi od najniższej liczby do najwyższej liczby . Więc nie wydrukuje czegoś takiego MonkeyBear
(ponieważ Monkey jest wyższą liczbą niż Bear).
Twój program powinien podjąć w wyjściu z uogólnioną programu FizzBuzz jako wejście i wyjście na wejście podany do uogólnionego programu FizzBuzz. Innymi słowy, napisz „program wsteczny” dla uogólnionego programu FizzBuzz. Na przykład, biorąc pod uwagę powyższy blok kodu jako dane wejściowe, twój program powinien wypisać dane 3 2,Ninja 5,Bear, 7,Monkey
.
Istnieją pewne zasady, których słowa zawsze będą przestrzegać:
- Zawsze będzie można dokładnie powiedzieć, jakie czynniki i słowa pochodzą z danych wejściowych.
- Każde słowo rozpocznie się wielką literą i nie będzie zawierać żadnych innych wielkich liter ani cyfr.
- Każdy czynnik jest wyjątkowy.
Przykładowe wejścia i wyjścia
Wkład:
Calvins
7
Hobbies
9
10
11
Calvins
13
14
15
Hobbies
17
Calvins
19
20
21
22
23
CalvinsHobbies
25
26
27
28
29
Calvins
31
Hobbies
33
34
35
Calvins
37
38
39
Hobbies
41
Calvins
43
44
45
46
47
CalvinsHobbies
49
50
51
52
53
Calvins
55
Hobbies
57
58
59
Calvins
61
62
63
Hobbies
65
Calvins
67
68
69
70
71
CalvinsHobbies
73
74
75
76
77
Calvins
79
Hobbies
81
82
83
Calvins
85
86
87
Hobbies
89
Calvins
91
92
93
94
95
CalvinsHobbies
97
98
99
100
Wydajność:
6 6,Calvins 8,Hobbies
Wkład:
FryEggman
7
Am
Fry
The
11
FryAmEggman
13
14
FryThe
Am
17
FryEggman
19
AmThe
Fry
22
23
FryAmEggman
The
26
Fry
Am
29
FryTheEggman
31
Am
Fry
34
The
FryAmEggman
37
38
Fry
AmThe
41
FryEggman
43
Am
FryThe
46
47
FryAmEggman
49
The
Fry
Am
53
FryEggman
The
Am
Fry
58
59
FryAmTheEggman
61
62
Fry
Am
The
FryEggman
67
Am
Fry
The
71
FryAmEggman
73
74
FryThe
Am
77
FryEggman
79
AmThe
Fry
82
83
FryAmEggman
The
86
Fry
Am
89
FryTheEggman
91
Am
Fry
94
The
FryAmEggman
97
98
Fry
AmThe
Wydajność:
6 3,Fry 4,Am 5,The 6,Eggman
Wkład:
DeliciousTartApplePie
DeliciousCreamPancakeStrawberry
DeliciousProfiterole
DeliciousCream
DeliciousPancake
DeliciousCreamStrawberryTart
Wydajność:
95 1,Delicious 2,Cream 3,Pancake 4,Strawberry 5,Tart 19,Apple 95,Pie 97,Profiterole
Możesz pobrać kod, którego użyłem do wygenerowania danych wejściowych tutaj .
Odpowiedzi:
Pyth, 73 bajty
To było z pewnością trudne. Myślę, że omówiłem wszystkie najważniejsze przypadki, w tym wszystko w przykładzie @ MartinBüttner i przykład braku powtarzania czynników.
NinjaBearMonkey , Deliciousness
Na wysokim poziomie program najpierw znajduje wszystkie słowa, dzieląc ciągi alfabetyczne na wielkie litery.
Następnie wiersze są odwzorowywane na to, czy każdy ciąg pojawia się w wierszu, i każdy możliwy czynnik jest testowany, aby sprawdzić, czy daje to to samo uporządkowanie. Jeśli tak, czynnik jest dodawany do listy gobal, która sprawdza, czy czynnik był już obecny. Jeśli nie był jeszcze obecny, używany jest współczynnik. Ciągi są uporządkowane według pierwszego pojawienia się na wejściu, co niejednoznacznie porządkuje ciągi, które pojawiają się tylko raz w tym samym wierszu.
Potem to tylko formatowanie i drukowanie.
źródło
Scala, 350 znaków
nie wygrywa ... ale miłe pytanie.
przetestowane wyniki:
źródło
Python 2,
366340331 bajtówTen program odbiera dane wejściowe przez standardowe wejście.
Nowe podejście:
Oblicz współczynnik tylko jednego słowa wystąpienia według odległości od końca linii. Na przykład (z ostatniej próby):
DeliciousTartApplePie
Pie jest obliczyć jako:[95,19,5,1][0]
a Apple jest:[95,19,5,1][1]
.Stare podejście:
Stosowanie:
Objaśnienie (starego podejścia):
[(0, []), (1, ['Ninja']), (2, ['Bear']), ...]
.źródło