Sekwencja „Patrz i mów” lub „Powiedz, co widzisz” to ciąg liczb, w których każda opisuje ostatnią.
1
11 (one one)
21 (two ones)
1211 (one two, one one)
111221 (one one, one two, two ones)
312211 (three ones, two twos, one one)
i tak dalej ... https://oeis.org/A005150
W każdym razie jest to zwykłe wyzwanie golfowe (wygrywa najmniej bajtów), aby stworzyć program, który przyjmuje dwa argumenty, liczbę początkową i liczbę iteracji. Na przykład, jeśli podłączysz „1” i „2”, wynikiem będzie „21”. Jeśli podłączysz „2” i „4”, wynikiem będzie „132112”. Baw się dobrze!
Odpowiedzi:
Pyth,
108 bajtów-2 bajty autorstwa @FryAmTheEggman
Wyjaśnienie:
Wypróbuj tutaj .
źródło
ussrG8Qz
CJam, 8 bajtów
Format wejściowy to pierwsza liczba początkowa, a druga iteracje oddzielone spacją.
Sprawdź to tutaj.
Wyjaśnienie
Tablica jest również spłaszczana przed wydrukowaniem, więc wynik jest tylko wymaganą liczbą.
źródło
JavaScript, 57 bajtów
Rekursja działa dobrze w przypadku tego problemu. Pierwszy parametr to liczba początkowa jako ciąg, a drugi to liczba iteracji.
źródło
b=>F=a=>b--?F(a.replace(/(.)\1*/g,c=>c.length+c[0])):a
Odkryłem, że podczas gry w golfa moja odpowiedź, zanim zdałem sobie sprawę, że jest prawie identyczna z twoją;)MATL , 9 bajtów
Dane wejściowe to: liczba iteracji, liczba początkowa.
Wypróbuj online!
źródło
R, 87 bajtów
Niegolfowane i wyjaśnione
źródło
Perl 6, 63 bajtów
To jest tak krótkie, jak tylko mogłem to zdobyć, mogą istnieć pewne podstępne flagi, które mogłyby to zmniejszyć, nie jestem pewien
źródło
Ruby, 63 bajty
Pełny program, ponieważ wydaje się, że pytanie o to pyta. Pobiera dane wejściowe jako argumenty wiersza poleceń.
Nie,
gsub!
nie można użyć, ponieważ ciągi w$*
są zamrożone: /źródło
-p
flagi do zapisania bajtów? Jeśli go użyjesz,gsub
działa tak jak na STDIN$_.gsub!
. Następnie argument wiersza poleceń to iteracjen,=$*
, a inne dane wejściowe są odczytywane ze STDIN.Siatkówka ,
464527 bajtówMartin zrobił wiele, aby pomóc w golfa.
Wypróbuj online
Pobiera dane wejściowe w formacie:
<start>
jest liczbą początkową.<count>
jest jednoargumentowy, wszystkie podkreślenia i określa liczbę wykonanych iteracji.Pojedyncza iteracja,
2016 bajtów:źródło
Haskell , 62 bajty
Wypróbuj online!
źródło
JavaScript ES6, 71 bajtów
Pobiera dane wejściowe jako ciąg i liczbę.
źródło
('1',2)
daje mi12
, kiedy powinno być21
. Twoja długość powinna pojawić się przed postacią w zastępstwie.Perl 5, 50 bajtów
Argumenty są w odwrotnej kolejności (liczba iteracji następnie seed). Przykład:
źródło
$_
zamiastsay
, jak sądzę, ale go nie przetestowałem. Obecne rozwiązanie to program.05AB1E , 9 bajtów ( niekonkurencyjny )
Poprawione z powodu komentarzy Emigny, patrz poniżej / edycja.
Wypróbuj online!
źródło
F
na początku i przyjąć argumenty jakoiterations,initialNo
Dgs
gogy
.y
robi w tym kontekście?R ,
6157 bajtów-4 dzięki @JayCe, kiedy byłem pewien, że nie da się tego zrobić łatwiej!
Wypróbuj online!
źródło
t(sapply(z,c))
połączenie jest sprytne.Mathematica,
8173 bajtówźródło
Galaretka , 6 bajtów (niekonkurencyjna)
Wypróbuj online!
źródło
Stax , 10 bajtów
Uruchom i debuguj online!
Wydano zbyt wiele bajtów na odpowiedni format IO ...
Wyjaśnienie
Używa rozpakowanej wersji do wyjaśnienia.
Zasadniczą częścią jest
D|R{rm:f
(8 bajtów).Jeśli pierwsze wejście można traktować jako tablicę cyfr, cały program można zapisać w 9 bajtach: Uruchom i debuguj online!
źródło
Python 3, 138 bajtów
Zastosowałem podejście rekurencyjne.
Funkcja akceptuje dwie liczby całkowite
a
ib
zgodnie z opisem.Jestem zdumiony, jak zwięzłe są tutaj wpisy! Może ktoś przyjdzie też z lepszą metodą Pythona.
źródło
Perl, 38 + 2 bajty
Wymaga
-p
flagi:Dane wejściowe to ciąg wielu linii:
Jeśli wszystkie kroki są również wymagane, możemy zmienić to na następujące, czyli 44 + 2 bajty:
źródło
Pylony , 11
Jak to działa:
źródło
SmileBASIC,
10098 bajtówDrukuje wszystkie kroki.
T/T
jest tam, aby zakończyć program, gdy T wynosi 0.źródło
APL (Dyalog Classic) , 22 bajty
Wypróbuj online!
źródło
Siatkówka , 27 bajtów
Wypróbuj online!
źródło
K (ngn / k) , 30 bajtów
Wypróbuj online!
źródło
Python 3.6,
1009893 bajtówWypróbuj online!
Zauważ, że tworzy to lambda, która pobiera ciąg i liczbę całkowitą i zwraca ciąg. Przykład:
f('1', 5) == '312211'
Znajduje wszystkie powtarzające się znaki (
((.)\2*)
regex), tworzy ciąg f na podstawie ich długości i samego znaku (r'{len("\1")}\2'
), a następnie ocenia go. Używa rekurencji na counter (n and ...f(s,n-1)... or s
), aby uniknąć konieczności definiowania właściwej funkcji i pętli.źródło