Ciąg nie zawiera kwadratów, jeśli nie zawiera podłańcuchów dwa razy z rzędu.
Możliwe jest dowolne długie słowo bez kwadratów za pomocą 3-literowego alfabetu.
Napisz program, który akceptuje dodatnią liczbę całkowitą n ze standardowego wejścia i drukuje każdą kwadratem długości słowa n, przy użyciu znaków A
, B
i C
.
Najkrótszy kod wygrywa.
exec"x+=[1-y for y in x];"*n
oszczędza 6 znaków kosztem wydajności - ale hej, to jest golf!Python,
129125119Przy użyciu metody Johna Leecha opisanej na połączonej stronie wiki.
źródło
'ABCBCACABBCAABCCABBCACABABCBCACABBCAABC'[ord(t)%5::3]
while s[:n]==s:
oszczędza jeszcze 1Python2 - 112 znaków
To jest dość nieefektywne. Generuje o wiele znacznie dłuższy ciąg znaków niż jest to wymagane, a następnie go obcina. Na przykład wartość pośrednia
s
dlan=7
wynosi 62748517 (13 n ) znakówźródło
Mathematica
159 140134Edycja : Całkowite przepisanie przy użyciu rekurencji (
NestWhile
). Znacznie szybciej i bez marnowania wysiłku.Kod
Stosowanie
Wygenerowanie trójskładnikowego wolnego słowa z milionem znaków zajmuje około 1/40 sekundy.
Weryfikacja
f
sprawdzi, czy łańcuch nie zawiera kwadratów.Sprawdzanie powyższych wyników i jednego przypadku, w którym pojawia się ciąg „CC”.
źródło