SPECYFIKACJA
Biorąc pod uwagę m
zmienne, utwórz każdą kombinację według kolejności n
. Na przykład,
Dane wyjściowe mapowania dwóch zmiennych ( a
i b
) na kolejność 1
byłyby następujące:
- za
- b
- ab
Dane wyjściowe mapowania dwóch zmiennych ( a
i b
) na kolejność 2
byłyby następujące:
- za
- a 2
- b
- b 2
- ab
- a 2 b
- ab 2
- a 2 b 2
Dane wyjściowe mapowania dwóch zmiennych ( a
i b
) na kolejność 3
byłyby następujące:
- za
- a 2
- a 3
- b
- b 2
- b 3
- ab
- a 2 b
- a 3 b
- a 3 b 2
- ab 2
- ab 3
- a 2 b 3
- a 2 b 2
- a 3 b 3
Wyjście odwzorowania trzy zmienne ( a
, b
i c
), w celu 1
to:
- za
- b
- do
- ab
- pne
- ac
- ABC
Dane wyjściowe m
zmiennych odwzorowujących na zamówienie n
to:
- itp.
WYGRANE KRYTERIA
Wyprowadzaj każdą możliwą kombinację, jak opisano powyżej. Porządek nie ma znaczenia. Gdzie w kodzie drukujesz na ekranie, nie ma to znaczenia. Liczy się tylko to, co pojawia się w twoich wynikach.
code-golf
arithmetic
code-golf
code-golf
string
chemistry
code-golf
code-golf
code-golf
string
code-golf
string
parsing
code-golf
counting
użytkownik1873073
źródło
źródło
^
?m
jest większy niż 26? czy musimy wspierać tak wysokie wartości?given m variables
sugeruje podanie listy zmiennych. Jeśli podana jest tylko liczba zmiennych, a 0,1,2,3..27,28,29 podniesione do potęg ^ 0, ^ 1, ^ 2 itd. Jest akceptowalnym wyjściem (jak wywnioskowałem z twojego ostatniego komentarza), to daje rzeczy łatwiejsze.Odpowiedzi:
Brachylog , 6 bajtów
Pobiera dane wejściowe jako para, zawierające listę zmiennych i kolejność. Dane wyjściowe to lista list zmiennych, w których moc reprezentowana jest przez zmienne powtarzane. (np. „a²b” to [„a”, „a”, „b”])
Wypróbuj online!
j₎
łączy się z pierwszym wejściem tyle razy, ile wskazuje drugie wejście.o
porządkuje uzyskaną listę, a następnie⊇ᵘ
wyszukuje wszystkie unikalne podzbiory tej uporządkowanej listy. Wreszcie usuwamy pierwszy element za pomocąb
, ponieważ zawsze będzie to pusta odpowiedź, która nie jest rozważana przez wyzwanie.źródło
L A T E X, 354 bajtów
Kiedy to zobaczyłem, wiedziałem, że trzeba to zrobić w lateksie. Równania po prostu wyglądają tak ostro i czysto w lateksie i nie mogę znieść używania
^
mocy.Wyjaśnienie
Działają tutaj trzy główne siły,
\typein
co pozwala nam pobierać dane z wiersza poleceń,intcalc
pakiet, który pozwala nam wykonywać obliczenia na podstawie naszych zmiennych orazequation
środowisko lateksowe .Po wprowadzeniu danych zaczynamy pętlę
\intcalcPow{\b+1}{\a}
razy, zapętlamy raz dla każdego wyniku, który chcemy wydrukować. W każdej pętli uruchamiamyequation
środowisko i przeglądamy alfabet, śledząc\y
bieżącą literę i\i
bieżącą liczbę przebiegów. Jeśli\i
jest większy lub równy\a
, w ogóle nic nie drukujemy (zgodnie ze specyfikacją nie jest to absolutnie konieczne, jednak Latex przepełni się dla wartości większych niż 1, jeśli tego nie zrobimy). Następnie drukujemy\y
do naszego równania i podnosimy je do potęgiCały ten bałagan oznacza po prostu zabranie
\i
cyfry th\x
w bazie\b+1
. Zapewnia to prawidłowe dekodowanie mocy.Przykładowe dane wyjściowe:
Oto wynik dla 3, 2
źródło
Mathematica,
5150 bajtówZakłada, że „podane
m
zmienne” oznaczają, że pierwszym wejściem jest lista zmiennych.Jeśli pierwszym wejściem jest liczba całkowita, 69 bajtów
Zmienne są w formie
$<integer>
(np.$5
)źródło
PowerRange
to rzecz! Zgadzam się z interpretacją twojego pierwszego zgłoszenia btwHaskell,
71585453 bajtówZwraca listę ciągów znaków i używa formatu wyjściowego
"aabbb"
dla"a^2 b^3"
.Przykład użycia:
3 # "ab"
->["b","bb","bbb","a","ab","abb","abbb","aa","aab","aabb","aabbb","aaa","aaab","aaabb","aaabbb"]
. Wypróbuj online! .Wiele bajtów jest wydawanych na formatowanie wyjściowe. Bardziej elastyczny wynik, np. Pary (zmienna, moc) ->
[('a',2),('b',3),('c',1)]
dla,"a^2 b^3 c^1"
znacznie by zaoszczędził.Jak to działa
Z maksymalną elastycznością, tzn. Formatem wyjściowym jako pary (zmienna, moc) i obejmującym moce zerowe (
"a^0 b^0 c^0"
), sprowadza się doHaskell, 25 bajtów:
Przykład użycia
f 2 "ab"
:Upuszczenie wszystkie zera uprawnień kosztuje 5 bajtów dla w sumie 30:
f n=tail.mapM((<$>[0..n]).(,))
.źródło
[('a',0),('b',0)]
nie powinien znajdować się w danych wyjściowych ...a^0 b^0
kosztuje 5 bajtów. Dodam kolejną notatkę.Galaretka ,
2017 bajtówDwójkowym związek (funkcja), które przyjmuje się listę nazwy zmiennych * oraz w celu maksymalnej (całkowita) i zwraca listy, na której każda pozycja jest w pełni rozszerzona przedstawienie mnożenia (np bla 0 pasek 3 BOF 2 byłoby
['bar', 'bar', 'bar', 'bof', 'bof']
.* nazwy zmiennych mogą być ciągiem unikatowych znaków (ciągi stają się listami znaków).
Wypróbuj online! - stopka wywołuje łącze jako diadę, a następnie oddziela wynikową listę list według linii i każdego wpisu spacjami, aby ułatwić czytanie.
Uwaga: zawiera zamówienie 0 (pusty produkt)
Ḋ
, można tutaj wstawić dequeue,...ŒPḊç...
aby tego uniknąć.W jaki sposób?
13-bajtowa wersja, która będzie działać tylko dla jednego ciągu unikatowych znaków (lub listy unikalnych znaków):
Spróbuj
źródło
JavaScript (propozycja ES), 142 bajty
Wymaga przeglądarki z obsługą obu
**
ipadStart
, więc wypróbuj Firefox 52 lub Chrome 57.źródło
Matematyka 100 bajtów
Z pewnością istnieje bardziej skuteczny sposób na osiągnięcie tego!
Dwie zmienne do zamówienia 4:
źródło
Bash + sed, 60
Inne, krótsze podejście do mojej poprzedniej odpowiedzi.
Dane wejściowe jako parametry wiersza polecenia -
m
podano jako listę nazw zmiennych oddzieloną przecinkami orazn
jako liczbę całkowitą:Wypróbuj online .
Poprzednia odpowiedź:
Bash + coreutils, 91
Witamy w piekle eval-escape-brace. Czasami skrypt powłoki naprawdę daje właściwe narzędzie do pracy. W tym przypadku tak nie jest , ale działa.
Dane wejściowe jako parametry wiersza polecenia -
m
podano jako listę nazw zmiennych oddzieloną przecinkami in
jako liczbę całkowitą. Dane wyjściowe są zapisywane ręcznie - np.a^2
Faktycznie są zapisywaneaa
. Jest to dopuszczalne zgodnie z tym komentarzem .Mogą to być krótsze sposoby.
Wypróbuj online .
Wyjaśnienie
printf -vc {%$[$2-1]s}
przypisuje zmiennąc
do łańcucha, np.{ }
gdzie liczba spacji jest rzędun
- 1, więc jeślin
= 1, wynikiem jest{}
, jeślin
= 2, wynikiem jest{ }
itd.${a[$1]}
używam
jako indeksu do tablicya
, więc jeślim
wynosi 3, to wynikiem jestc
\{{a..${a[$1]}}${c// /,}\\,}
to wieloczęściowe rozszerzenie nawiasu klamrowego:\{
- dosłowny{
{$1}
to a to nawias klamrowy listym
, np.{a,b,c}
luba b c
${c// /,}
zastępuje spacje$c
przecinkami, np.{,,}
dlan
= 3, co jest również rozwinięciem nawiasu, który skutecznie powtarza każdy element{a..c}
n
razy\\\,}
- dosłowny,}
m
= "a, b" in
= 2, to rozwija się do{a,} {a,} {b,} {b,}
printf
usuwa przestrzenie{a,}{a,}{b,}{b,}
, które dają , co samo w sobie jest rozszerzeniem nawiasu klamrowegoaabb aab aab aa abb ab ab a abb ab ab a bb b b
printf
stawia każdy z tych elementów na osobnej liniisort -u
usuwa duplikatytr -d {}
Ma na sobie sprawę, gdyn
= 1. W tym przypadku, zmiennac
będzie{}
nie jest ekspansja klamra, lecz dosłownym znaki są włożone.tr
Usuwa je.eval
s i\
ucieczki są umieszczane bardzo ostrożnie, aby zapewnić, że wszystkie rozszerzenia występują w niezbędnej kolejności.źródło
Röda ,
494846 bajtówWypróbuj online!
Myślę, że to prawda. Nie używa żadnego separatora między zmienną a jej kolejnością. Poprzednia wersja była używana
!
, ale zdałem sobie sprawę, że nie jest to absolutnie wymagane.Wyjaśnione:
źródło
Python, 112 bajtów
Stosowanie:
Wynik:
Ładniejszy format w 115 bajtach :
Wyjście (to samo użycie):
Jeszcze ładniej w 125 bajtach :
Wynik:
Ostatnie 4 bajty (
[1:]
) służą do usunięcia pustego produktu.Działa to zarówno w Pythonie 2, jak i 3.
źródło
C ++ 14,
146140 bajtów-6 bajtów dla prostszego formatu wyjściowego.
Nienazwana lambda, przy założeniu, że dane wejściowe
s
takie jakstd::string
io
jakostd::ostream
:Użycie i wyjaśnienie:
Wynik:
źródło