Biorąc pod uwagę ciąg 1
i 2
dowolnej długości, napisać trochę kodu (nie musi być funkcji już wszystko będzie dobrze), który oblicza, ile kroków to trzeba zmniejszyć ciąg do ostatecznej formie, w następstwie tego kryterium:
Jeśli łańcuch jest 112112
, oznacza to, że trzeba wydrukować 1, dwie 1s i 2, podobnie jak to:
1112
. Kiedy ponownie wykonasz operację, będziesz musiał wydrukować 1 i 2. Dostajesz 12
. Następnie drukujesz jeden 2, otrzymując 2
. To jest ostateczna forma, ponieważ ten ciąg nie będzie się już zmieniać. Twój kod wyświetli się 3
, ponieważ potrzebujesz 3 kroków, aby przejść do ostatecznego formularza.
Inne zasady
Jeśli ciąg ma nierówną długość, ostatni numer pozostaje nietknięty.
Każdy ciąg znaków, który nie może się już zmienić (jak
222222
), jest uważany za formę ostateczną.Nie możesz użyć żadnego zewnętrznego źródła.
Twój kod musi działać z każdym ciągiem
1
i2
.Wygrywa najkrótszy kod, ponieważ jest to golf golfowy.
Twój kod powinien być drukowany na każdym kroku.
Każda metoda wprowadzania będzie w porządku.
Przykłady
Input >> 122122122121212212
Your code has to print:
211222111111222
11222111222
122111222
2111222
111222
1222
222
Steps:7 (you can omit the "Steps")
---- ---- ---- ----
Input >> 22222221
Your code has to print:
22222211
2222221
2
---- ---- ---- ----
Input >> 2222
Your code has to print:
0
EDYCJA: Mocno edytowana. Bardzo mi przykro z tego powodu.
1 11 2
. Co dwie liczby są parą: pierwsza liczba pary mówi, ile razy ma być renderowana druga liczba w parze. Każda ostatnia cyfra nieparzysta bez partnera pary jest renderowana w stanie „jak jest”.Odpowiedzi:
Ruby 1.9+, 73 znaki
Widzę regułę no-regex jako głupią i arbitralną, więc oto złośliwerozwiązanie oparte na wyrażeniach regularnych:Testowe uruchomienie:
Ostatni wiersz to liczba kroków.
Edycja: Ograniczenia Regex zostały usunięte przez Vereos.
źródło
C -
156154Mój pierwszy golf golfowy tutaj!
Test:
Wynik:
źródło
GolfScript: 69 znaków
Każda iteracja wewnętrznej pętli znajduje pierwsze 2 liczby w ciągu i używa ich do utworzenia bloku formularza
{num1 num2 '' + *}
. Gdy ten blok jest oceniany, otrzymujemy pożądany odczyt tych liczb. Powtarzaj to, dopóki nie będzie więcej znaków. Następnie powtórz tę pętlę, śledząc liczbę iteracji i drukowania.Próba:
źródło
Python - 126
To nie drukuje wartości wejściowej. Jeśli to konieczne, przejdź
print s;
do wcześniejn="";
Uwaga: powiedziałeś „funkcja”, więc jest to funkcja. Oto wersja, która nie jest funkcją (127 znaków):
(Jeśli mogę zmusić użytkownika do wklejenia numeru, to 118 (wklej dane między cudzysłowami w pierwszym wierszu)):
Przykładowy przebieg:
Jako bonus, każde z tych rozwiązań działa dla ciągów zawierających większe liczby (do 9), ale niektóre ciągi dają coraz większe wyniki (na przykład
99
)źródło
JavaScript, 107
(wymaga obsługi funkcji strzałek, np. jak w Firefox)
s
jest łańcuchem wejściowymW każdej rundzie używamy wyrażenia regularnego,
.?.?
aby eksplodowaćs
w tablicy ciągów dwuznakowych, a następniemap
tych ciągów w postaci zredukowanej i skleić tablicę z powrotemr
przechowuje wynik bieżącej rundy do porównania z poprzedniąs
k
to okrągły licznikStrasznie nadużywamy
prompt
(alias dop
) jako mechanizmu wejściowego i wyjściowego, ponieważ może on przekazać wiadomość użytkownikowiźródło
Perl - 50 (+2) bajtów
Wymaga
-pl
przełączników wiersza poleceń.Przykładowe użycie:
źródło
PHP, 240
Przykład: http://skyleo.de/codegolf.php?i=211222111111222
Jestem trochę zły w codegolf ._. Może nie powinienem używać tylko Javy i PHP (i powinienem myśleć bardziej skomplikowany)
źródło
str_split
ponieważ możesz uzyskać dostęp do poszczególnych znaków w łańcuchu, tak jak tablica w PHP.R 158
Przykład:
źródło
MATEMATYKA, 117
źródło
POWERSHELL, 2
Na podstawie odpowiedzi Vereos „Możesz użyć dowolnej metody wprowadzania, która skraca kod” na moje pytanie w komentarzach PO, następujący skrypt osiąga wynik:
Przykład uruchomienia dla „122122122121212212”:
Oczywiście nie jest to poważny wpis - jego celem jest zilustrowanie mojej tezy, że zezwolenie na dowolną metodę wprowadzania danych może trywializować rzeczywisty kod potrzebny do uzyskania odpowiedzi. Dlatego metoda wprowadzania danych musi być bardziej rygorystycznie określona.
źródło
J, 41 znaków
Jako funkcja (ew parens! Niezbyt się z tego cieszę):
Widok rozstrzelony Przykładowy przebiegźródło
Perl, 107 znaków
Drugi kod perla wyraźnie to bije, ale tutaj warto. Użyłem przełącznika -l kosztem dodatkowego znaku:
Bardziej czytelna wersja tego:
źródło