Wejście
Nieujemna liczba całkowita n
i niepusty ciąg s
zawierający tylko znaki alfanumeryczne i podkreślenia _
. Pierwsza postaćs
nie jest _
. Podkreślenia s
są interpretowane jako puste miejsca, które można wypełnić innymi znakami.
Definiujemy nieskończoną sekwencję „nieskończonych ciągów” w następujący sposób. Ciąg jest powtarzany nieskończenie wiele razy. Dla wszystkich ciąg jest uzyskiwany z wypełnienia pustych miejsc znakami , dzięki czemu pierwszy z nich jest zastąpiony przez , drugi z itd. Ponieważ pierwsza litera nie jest , każda pusta spacja zostaje ostatecznie wypełniona, a my oznaczamy nieskończonym ciągiem znaków, w którym każdy został zastąpiony jego ostateczną wartością.s1 = s s s...
s
k > 1
sk+1
sk
s1
_
sk
s1[0]
s1[1]
s
_
s∞
_
Wynik
Pierwsze n
znaki jako ciąg.s∞
Przykład
Rozważ dane wejściowe n = 30
i s = ab_c_
. Mamy
s1 = ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_...
Zastępując puste , mamys1
s1
s2 = abacbab_ccab_caabbc_abcc_abacbab_cc...
Ponownie podstawiamy puste pola, co powodujes1
s3 = abacbabaccabbcaabbc_abcccabacbab_cc...
Jeszcze jedna zmiana:
s4 = abacbabaccabbcaabbcaabcccabacbabbcc...
Z tego możemy już wywnioskować pierwsze 30 znaków , które sąs∞
abacbabaccabbcaabbcaabcccabacb
To jest poprawny wynik.
Zasady
Możesz napisać pełny program lub funkcję. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone. Awarie przy nieprawidłowym wprowadzaniu danych są dopuszczalne.
Przypadki testowe
0 "ab__" -> ""
1 "ab__" -> "a"
3 "ab__" -> "aba"
20 "ab" -> "abababababababababab"
20 "ab__" -> "abababababababababab"
20 "ab_" -> "abaabbabaabaabbabbab"
30 "ab_c_" -> "abacbabaccabbcaabbcaabcccabacb"
50 "ab_a_cc" -> "abaabccabaaaccabbacccabcaaccabbaaccabaaaccabcaccca"
50 "abc____" -> "abcabcaabcbcaaabcbcbcabcaaababccbcbabccabcabcaaaba"
Odpowiedzi:
Pyth, 17 lat
Dane wejściowe należy podać w pierwszym wierszu z ciągiem znaków, a w drugim - na STDIN. Na przykład:
Wypróbuj tutaj.
Wyjaśnienie:
źródło
APL
2928jest używany w następujący sposób:
Wyjaśnienie:
Tryapl.org
źródło
⍣≡
to fajny pomysł. Może powinienem spróbować przenieść to na J ...CJam,
262420 bajtów4 bajty zapisane dzięki Peterowi.
Sprawdź to tutaj. Pobiera ciąg pierwszy i
n
drugi na STDIN.Możesz uruchomić wszystkie przypadki testowe, wklejając je do danych wejściowych takimi, jakie są (włączając
-> output
jeśli chcesz) i używając następującej wiązki testowej (która odwraca kolejność kodu):Wyjaśnienie
Wynik jest drukowany automatycznie na końcu programu.
Uwaga na temat
[\]
: Zasadniczo[
zapamiętuje aktualny rozmiar stosu i]
zbiera wszystko do ostatniego zapamiętanego rozmiaru w tablicy. Jeśli jednak rozmiar tablicy spadnie poniżej zapamiętanego rozmiaru pomiędzy, wówczas odpowiednio dostosuje się początek tablicy. Teraz możesz pomyśleć, że zamiana dwóch górnych elementów tablicy wcale nie wpływa na rozmiar tablicy, ale w\
rzeczywistości wyskakuje dwie wartości, a następnie przesuwa je w odwrotnej kolejności. To spycha początek tablicy o dwa. Dlatego[\]
jest to najkrótszy sposób na zawinięcie dwóch górnych elementów stosu w tablicę. Czasami efekt uboczny ich zbierania w odwrotnej kolejności jest dość irytujący, ale w tym przypadku jest to dokładnie to, czego potrzebuję.źródło
_'_#)
g
zI*
. Działa dla mnie w GolfScript.Python 3, 110 bajtów
Potrzebuje trochę więcej gry w golfa, ale oto szaleństwo. Wczytuje
n
następnies
ze STDIN.Zabawne jest to, że w zadaniu pętli kopiujemy
b
, a następnie zaczynamy wyskakiwaćb
podczas czytania listy . Gdyby zadanie było odwrotnie, nie działałoby!źródło
k, 30
źródło
Java - 162
174Nie codziennie używam pętli do / while podczas gry w golfa w Javie: D
To tylko iteruje i wypełnia puste pola. Po prostu idzie dalej, dopóki nie będzie już
_
rezultatu.Z podziałami linii:
źródło
Java 8, 238
Mniej golfa:
źródło
Ruby, 60 lat
Łączy czasy z
s
sobąn
, a następnie generujen
kopie kodu, który zastępuje podkreślenias
, ocenia te kopie i zwraca pierwszen
znaki wyniku. Ponieważ w każdej pętli usuwany jest co najmniej jedenn
znak podkreślenia, gwarantujemy, że otrzymamy znaki bez znaku podkreślenia.źródło
f
i uruchomićputs f[10,"ab_"]
, pojawia się następujący błąd:in 'eval': undefined method 'next' for #<Array:...
. Wydaje się jednak, że działa, gdy w ciągu nie ma podkreślników.String#chars
zmieniło się zachowanie między Ruby 1.9.3 i Ruby 2.0; w Ruby 1 zwraca moduł wyliczający, gdy nie ma bloku, w Ruby 2 tablica. Może być niewrażliwy na wersję, zmieniającchars
naeach_char
, kosztem 4 dodatkowych bajtów netto kodu.Python 2, 75
To oczekuje wejścia jak
(30,"ab_c_")
.W Pythonie ciągi nie pozwalają na przypisanie. Tak więc zastąpienie pustych miejsc pożądaną postacią jest trudne. Można to obejść, konwertując na listę iz powrotem, ale znalazłem krótsze, aby wygenerować ciąg wyjściowy od zera, dodając pożądane znaki pojedynczo.
Powstaje wyjście
S
, które zaczyna się puste. Przechodzimy przez znaki wejściowes
kopiowane wiele razy, aby symulować okrąg. Sprawdzamy, czy jest to pusty przez wartość logicznąb
. Sprawdzamy równośćx=='_'
zamiast porównania, ponieważ podkreślenie leży między dużymi i małymi literami.Jeśli postać nie jest pusta, po prostu dodajemy ją
S
. Jeśli jest puste, dodajemy następną nieużywaną literę dotychczasowego wynikuS
. Śledzimy używane litery za pomocą wskaźnika indeksuc
który zaczyna się od 0 i jest zwiększany za każdym razem, gdy napotykamy spację.Na koniec wypisujemy pierwsze
n
znaki wynikowego ciąguS
.Musimy użyć
S[c:c+b]
zamiast krótszego,b*S[c]
ponieważ ten drugi powoduje błąd przekroczenia granicy, gdyS
zaczyna się pusty ic
wynosi 0. To nigdy nie ma znaczenia, ponieważ gwarantujemy pierwszą postaćs
jest niepusty, więcS[c]
nigdy nie jest potrzebny, ale kod tego nie wie. Przełączenie naor
zwarcie może również rozwiązać ten problem, ale kosztuje więcej postaci.Python 2, 83
Port Pyth-to-Python rozwiązania isaacg , który używa
split
izip
wykonuje zamianę:Okazało się to dłużej, ponieważ, o dziwo, nazwane metody są długie w Pythonie. Ale być może można to poprawić poprzez riffling
s
is.split('_')
razem w krótszy sposób.źródło
Haskell
(93)67Od jakiegoś czasu nie pisałem żadnego Haskella,
więc prawdopodobnie można go znacznie skrócić.ale było tak dobrze, że musieliśmy go skrócić i ulepszyć!Stosowanie:
źródło
Partia - 425
Czy przegrywam
Partia ma ograniczenia - akceptuję to. Na przykład; Musiałem użyć pętli for, aby uzyskać pojedynczą zmienną w użytecznym formacie ze względu na ograniczenia składni parsowania zmiennych.
for %%b in (!c!)do...
po prostu istnieje, więc mogę używać%%b
zamiast,!c!
więc mogę faktycznie manipulować ciągiem!s:~%%b,1!
i mieć zmienne rozwinięte we właściwym czasie.Jest kilka podstawowych rzeczy, które mógłbym zrobić, aby zagrać w golfa dalej, ale prawdopodobnie nie poniżej 400 bajtów. Niedługo będę miał kolejny crack.
źródło
ECMAScript 6, 78
Zaczyna się od pustego łańcucha i przy każdym wystąpieniu podkreślenia zastępuje go znakiem przy następnym indeksie bieżącego łańcucha.
źródło
Python 2 -
9997 bajtówPonieważ 4 zapytania oparte na pythonie nie wystarczą ...
Przykład:
źródło
ECMAScript 6,
9391Ogolono 2 znaki z pierwszej wersji.
źródło
C # - 162
Ukradłem rozwiązanie Geobits i zmieniłem na C #
1 char lepiej, więc możesz ulepszać Geobity;)
źródło