Ojciec założyciel rock and rolla Chuck Berry niestety dzisiaj zmarł.
Zastanów się nad refrenem jego słynnej piosenki „ Johnny B. Goode ”:
Go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Johnny B. Goode
(Istnieją inne sposoby interpunkcji, ale powyższe będą służyć do celów wyzwania).
Wyzwanie
Biorąc pod uwagę niepuste, małe litery alfabetu, wypisz refren „Johnny B. Goode” ze wszystkimi wystąpieniami Go
lub go
zastąpiony przez ciąg wejściowy, pisany wielkimi literami w ten sam sposób.
Końcowy znak nowej linii może opcjonalnie nastąpić. Nic innego w refrenie nie powinno się zmienić.
Na przykład , jeśli wejście jest
code
wyjściem, musi być dokładnieCode, code Code Johnny code, code Code Johnny code, code Code Johnny code, code Code Johnny code, code Johnny B. Codeode
opcjonalnie następuje nowa linia.
Zauważ, że wielkie litery wszystkich słów pasują do oryginalnego refrenu i (pomimo braku rytmu) Go
in Goode
jest zamieniany, a także pojedyncze słowa Go
i go
.
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
"input"
output
"go"
Go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Johnny B. Goode
"code"
Code, code
Code Johnny code, code
Code Johnny code, code
Code Johnny code, code
Code Johnny code, code
Johnny B. Codeode
"a"
A, a
A Johnny a, a
A Johnny a, a
A Johnny a, a
A Johnny a, a
Johnny B. Aode
"johnny"
Johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny B. Johnnyode
"fantastic"
Fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Johnny B. Fantasticode
an
,c
,cath
Odpowiedzi:
Idź, 123 bajty
Idź Johnny, idź !
Wypróbuj online!
źródło
90
bajtów.VIM,
5449 Klawisze (zapisane 1 naciśnięcie klawisza z Kritixi Lithos )Zacznij od słowa w wierszu pliku z kursorem na pierwszym znaku, a to zastąpi wszystko tekstem Objaśnienie
Wypróbuj online! (Dzięki DJMcMayhem !)
źródło
Y
zamiast,yy
a może nawetG
zamiast2j
<CR>
zamiast<esc>o
hD
Działa również zamiastdiw
Pure Bash,
6976 bajtówWypróbuj online!
źródło
code
małe litery, nie uzyskasz wymaganej wielkiej litery.05AB1E , 37 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Partia, 207 bajtów
źródło
JavaScript, 98
Nadużywa szeregowania tablic do ciągów, aby tworzyć przecinki. Tworzy tablicę formularza:
I łączy to z ciągiem formularza
", go\nJohnny B. Goode"
:źródło
JavaScript (ES6),
10410199 bajtówPoprzednia wersja:
Jak to działa:
Jest to anonimowa funkcja, która przyjmuje dane wejściowe jako parametr
i
Definiuje zmienną
u
jako wejściei
z pierwszą literą wielkimi literami (zauważ, że zakłada to, że dane wejściowe nie są puste, co jest OK)Wystarczy bezpośrednio skonstruować ciąg, który zostanie zwrócony z tych dwóch zmiennych.
Powtarzanie ciągu
"go, \nGo Johnny go"
cztery razy zamiast powtarzania"Go Johnny go, go"
zapisuje jeden bajt.Edycja 1: Zapomniałem zagrać w średnik, haha !! Również błędnie policzyłem bajty, początkowo było to 102, a nie 104. Dzięki apsillers .
Edycja 2: Zamiast tego
.repeat(4)
, umieszczając ten ciąg w zmiennejx
i wykonywaniex+x+x+x
pozwala na zapisanie dwóch bajtów.Testowy fragment kodu
Pokaż fragment kodu
źródło
V ,
41, 38 bajtówWypróbuj online!
Idealne wyzwanie dla V!
Wyjaśnienie:
źródło
Pyth - 52 bajty
Pakiet testowy .
źródło
C,
156151 bajtówźródło
main()
który faktycznie wywołuje funkcję, działa ...Python 3, 88 bajtów
Łańcuch o prostym formacie z argumentami pozycyjnymi.
źródło
len("\n".__repr__()[1:-2])
ma 2. Nie pamiętam__repr__()
przy pomiarze długości programu."""
znakami zamiast"
znaków.Siatkówka , 65 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
źródło
Galaretka , 41 bajtów
Wypróbuj online!
źródło
Python, 94 bajty
źródło
C #,
219211212146122 bajtówWdrożono wiele sugestii z komentarzy z dodatkową optymalizacją Oto Endresult:
Wypróbuj online!
Wyjaśnienie:
Dane wyjściowe dla przypadków testowych:
Edycja: Podziękowania dla weston za sugestię użycia funkcji
źródło
^32
. To krócej niż&~32
używany. Ponadto port mojej odpowiedzi w języku Java 7 wydaje się być krótszy:string x(string a){string x=(char)(a[0]^32)+a.Remove(0,1),n=a+"\n",c=", ",r=n+x+" Johnny "+a+c;return x+c+r+r+r+r+n+"Johnny B. "+x+"ode";}}
( 139 bajtów ) Wypróbuj tutaj.string x(string a)
->(a)=>
, -13 bajtów), tylko 1 bajt za mną;)Func<string, string>
, możesz po prostua=>
nie potrzebować()
.MATLAB / Octave ,
133111 bajtówTo poczatek. Mam nadzieję, że można go jeszcze bardziej zmniejszyć.
Zasadniczo jest to anonimowa funkcja, która pobiera ciąg znaków, a następnie używa wyrażenia regularnego do utworzenia wymaganego wyniku.
Przykład:
Można rodzaj Spróbuj online! . Kod nie do końca działa z Octave, ponieważ stają się wszystkie wielkie litery${upper($0)}
, podczas gdy w MATLAB jest to konwertowane na rzeczywistą wielką literę.Biorąc pod uwagę, że dane wejściowe są gwarantowane jako
a-z
(małe litery), mogę zapisać 22 bajty, używając prostego odejmowania 32, aby przekonwertować pierwszą literę w ciągu na dużą, zamiast używania wyrażenia regularnego zupper()
funkcją.W rezultacie kod działa teraz również z Octave, więc możesz teraz wypróbować online!
źródło
Rubinowy,
89888679 bajtówMoje pierwsze zgłoszenie do gry w golfa:
Bardzo dziękuję @manatwork za jego niesamowity komentarz: 7 bajtów mniej!
źródło
?
zapisem; nawias wokół ostatnich.gsub
parametrów nie jest potrzebny. pastebin.com/6C6np5DfNova , 105 bajtów
Ponieważ Nova ( http://nova-lang.org ) jest bardzo wczesną wersją beta (i zawiera błędy), istnieją pewne oczywiste utrudnienia, które uniemożliwiają wykorzystanie jeszcze mniej bajtów.
Na przykład, mógłbym zapisać wielką funkcję (która jest wywoływana 3 razy) w zmiennej lokalnej, takiej jak ta:
co spowodowałoby odliczenie bajtu do 89 bajtów . Powód, dla którego to teraz nie działa, można winić za kolejność oceny argumentów w języku C, ponieważ Nova jest kompilowana do C. (Kolejność oceny argumentów zostanie ustalona w przyszłej aktualizacji)
Co więcej, mógłbym wprowadzić właściwość „title” w klasie String (i zrobię to po tym lol), aby zmniejszyć liczbę wywoływanych funkcji wywołania wielką literą:
i to uwolniłoby 7 bajtów do nowej łącznie 82 bajtów .
Ponadto (i jeszcze dalej), po dodaniu wnioskowania o typie zmiennej lambda, byłoby to prawidłowe:
Liczba ta może zostać zmniejszona do 72 bajtów .
Nawiasem mówiąc, jest to mój pierwszy golfowy kod, więc prawdopodobnie przegapiłem jeszcze więcej optymalizacji, które można było wprowadzić. I to bycie centric non-golf , ogólnego przeznaczenia, język, myślę, że to całkiem imponujące.
Pierwszy 105-bajtowy kod działa w bieżącej wersji Nova Beta v0.3.8 dostępnej na stronie http://nova-lang.org
wyjścia:
Dziękuję za wysłuchanie mojej bezwstydnej reklamy języka ogólnego Nova (znajdującego się na stronie http://nova-lang.org ... pobierz teraz !!)
źródło
Brainfuck, 352 bajtów
Wypróbuj online!
Zawsze lubię wyzwania w Brainfuck, więc było fajnie. Prawdopodobnie można grać bardziej w golfa, ale gra w golfa Brainfuck jest dość długa.
źródło
PHP, 86 bajtów
źródło
Java 8,
151147146130 bajtówWyjaśnienie:
Wypróbuj tutaj.
źródło
Skumulowane , 64 bajty
Wypróbuj online!
źródło
C # ,
159130128 bajtówGrał w golfa
Nie golfił
Nieczytelny czytelny
Pełny kod
Prasowe
- 2 bytes
- Zamieniono(i)=>
nai=>
, dzięki komentarzowi TheLetalCoder .-29 bytes
- Dzięki ostatniej aktualizacji Sir Bitesalot , który mnie zapamiętał, mogłem edytować ciąg przed formatowaniem.159 bytes
- Wstępne rozwiązanie.Notatki
Tytuł zawiera link do strony z kodem i przypadkami testowymi. Wystarczy nacisnąć Go, a wynik zostanie wydrukowany poniżej kodu.
źródło
()
omawiania argumentu „Func
tylko zrób”i=>
. Prawdopodobnie możesz również użyć interpolowanych ciągów z C # 6 i stracić,string.Format
chociaż nie za bardzo patrzyłem na kod, aby zobaczyć, jak to powinno być (trywialne).()
, ale wątpię, czy mogę użyć interpolowanych ciągów bez zwiększania rozmiaru kodu, z powodu zastąpienia, które zdarza się, aby zwinąć powtórzenie.JavaScript -
72106 bajtówEdycja: Ups !! Nie zwracałem uwagi na zasady kapitalizacji! Po pewnym czasie będzie dłużejEdycja 2: Powinieneś teraz przestrzegać zasad!
Prawdopodobnie można by grać w golfa więcej
Użyty jako:
źródło
Excel VBA,
137121112898784 bajtówAnonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe typu
Variant/String
z komórki[A1]
i danych wyjściowych poprzez wydrukowanie bezpośredniego okna VBE-16 Bajtów do konwersji do funkcji okna natychmiastowego
-9 Bajtów do użycia
[PROPER(A1)]
-23 Bajty za zrzucanie
For ...
pętli i nadużywanie?
instrukcji-2 bajtów do wymiany
" Johnny "&[A1]&", "&[A1]
z[" Johnny "&A1&", "&A1]
-3 Bajty za użycie
+
w&
celu konkatenacji ciągu znaków i pozostawienie łańcucha końcowego niezamkniętegoPrzykładowa sprawa
źródło
Debug.?s
skutecznieDebug.Print
? Jak to działa??
,i=1To
i&c
są trawione w bardziej dokładnymi ale czytelnych kategoriach, takich jakPrint
,i = 1 To
i& c
. Społeczność zdecydowała, że skompresowana wersja kodu w językach jest akceptowalna dla odpowiedzi (patrz codegolf.meta.stackexchange.com/questions/10258/… )?
, uważam, że jest to pozostałość ze starej wersji Excela (4.0 i niżej), w której Arkusze Makro były używane zamiast VBA za pośrednictwem VBE, gdzie był używany jako słowo kluczowe do drukowania ciągu dostarczonego po nim do wskazany plik tekstowy. Samo?
słowo kluczowe jest nadal bardzo przydatne do gry w golfa, ponieważPrint
słowo kluczowe jest używane do zapisywania ciągów do pliku tekstowego w aktualnych wersjach VBA. Uwaga, tracę pamięć z jednym, więc weź to z odrobiną soli.CJam , 50 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Pyke , 43 bajty
Wypróbuj online!
Konstruuje i drukuje pierwszą linię, a następnie wstawia
Johnny go
przed przecinkiem i powiela to 4 razy. Wreszcie konstruuje ostatnią część.źródło
johnny
. tio.run/nexus/…Python, 258 bajtów
źródło
t
ponieważ jest ona wywoływana tylko raz.Java 6,
258242 bajtówNajdłuższą częścią jest format printf. Występują problemy z danymi wejściowymi innymi niż ciąg od
a
doz
(tak, wiem, że nie muszę obsługiwać niczego innego).Niegolfowany z komentarzami:
EDYCJA: Gra w golfa 16 bajtów dzięki Weston
źródło
"Johnny"
zawsze następuje spacja.b[0]^=32;
będzie również wielkie litery bez potrzeby(char)
rzucania.Mathematica, 83 bajty
Funkcja anonimowa. Pobiera ciąg jako dane wejściowe i zwraca ciąg jako dane wyjściowe. Prawdopodobnie można by dalej grać w golfa.
źródło