Wszyscy znamy klasyczny żart taty, który brzmi mniej więcej tak:
Ktoś mówi zdanie, aby opisać siebie (np.
I'm tired
LubI'm confused
).Pojawia się entuzjasta tatusia i odpowiada
Hi <adjective>, I'm Dad!
, ponieważ prezentacje mają ten sam format (I'm Peter
ten sam format coI'm hungry
).
Twoim zadaniem jest wprowadzenie danych wejściowych w postaci samo deskryptora i wypisanie odpowiedniego formularza tata-żart, ale zamiast słowa „tata” użyjesz nazwy języka programowania, który programujesz w.
Przypadki testowe (załóżmy, że są one analizowane przez Python):
I'm amazing Hi amazing, I'm Python!
I'm tired Hi tired, I'm Python!
I'm hungry Hi hungry, I'm Python!
I'm fat Hi fat, I'm Python!
Załóżmy teraz, że te przypadki testowe są analizowane przez Golfscript:
I'm a programmer Hi a programmer, I'm Golfscript!
I'm a question-writer Hi a question-writer, I'm Golfscript!
I'm a Stack-Overflow-er Hi a Stack-Overflow-er, I'm Golfscript!
Dokładne wyzwanie:
Weź ciąg znaków w formacie samo deskryptora (
I'm <adjective>
lubI'm a(n) <noun>
) przy użyciu standardowego wejścia lub funkcji.Załóżmy, że nie ma końca interpunkcji.
Załóżmy, że słowo
I'm
jest używane, a nieI am
.
Przekształć go w format tata-żart - zobacz powyższe przykłady, aby dokładnie zobaczyć, jak to powinno wyglądać.
Inne rzeczy:
To jest golf golfowy , więc wygrywa najkrótsza liczba bajtów.
Przestrzegaj standardowych zasad dotyczących luk - proszę nie stosować żadnej z nich.
Baw się dobrze!
Tabela liderów
Możesz wyświetlić tabelę wyników dla tego postu, rozwijając widżet / fragment kodu poniżej. Aby Twój post znalazł się w rankingu, potrzebujesz nagłówka ( # header text
) z następującymi informacjami:
Nazwa języka (zakończ go przecinkiem
,
lub myślnikiem-
), a następnie ...Liczba bajtów, jako ostatnia liczba wyświetlana w nagłówku.
Na przykład JavaScript (ES6), 72 bytes
jest poprawny, ale Fortran, 143 bytes (8-bit)
jest nieprawidłowy, ponieważ liczba bajtów nie jest ostatnią liczbą w nagłówku (twoja odpowiedź zostanie rozpoznana jako 8 bajtów - nie wykorzystuj tego).
<iframe src="https://ozewski.github.io/ppcg-leaderboard/?id=185872" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
źródło
Odpowiedzi:
V , 13 bajtów
Wypróbuj online!
Zainspirowany odpowiedzią tsh
Wykorzystuje to fakt, że
I'm
podczas usuwania tekstu od początku szarpany jest od początku i wkleja go do końca za pomocą<C-r>"
trybu wstawiania.źródło
I'm
się<C-O>p
i następnie zauważyć odpowiedź ...escape
zajmuje 5 znaków?0x1B
, ale łatwiej i bardziej oczywiste, co to znaczy, jeśli napiszesz go jako<esc>
. To samo dotyczy<C-r>
, co jest naprawdę0x12
C (gcc) ,
594233 bajtów-17 bajtów dzięki @Conor O'Brien zauważając, że import nie był konieczny
-9 bajtów dzięki @tsh wskazując krótszy, UB sposób pisania funkcji
Wypróbuj online!
Odcina pierwsze 3 znaki wejścia (usuwa
I'm
) i otacza je pożądanym tekstem.źródło
int
jest również opcjonalne.char*
, może ...; taka(x){printf("Hi%s, I'm C!",x+3);}
powinno działaćint
może pomieścićchar*
bez obcinania go), pomimo niezdefiniowanego zachowania. Na x86-64 gcc w systemie Linux zawsze zawiedzie w pliku wykonywalnym PIE (zwykle nie ma wskaźników w 32 bitach wirtualnej przestrzeni adresowej, a gcc nie skopiuje wysokich 32 bitów podczas obliczaniax+3
z funkcji arg w rejestr RDI). Ale w pliku wykonywalnym innym niż PIE, adresy statyczne znajdują się w 31 bitach wirtualnej przestrzeni adresowej, więc jeśli dzwoniący przejdzie literał ciągu lub bufor statyczny, to zadziała.V , 13 bajtów
Wypróbuj online!
Nowy na
V
. Znałem to około 30 minut temu. W każdym razie ten język jest wybrany tylko dlatego, że jego nazwa kosztuje tylko 1 bajt. Nie jestem pewien, jak wysłać<End>
klucz w V. Większość środowisk vima zaakceptowałoby<End>
zastąpienie<Esc>A
w tym przykładzie. Ale wiesz, V jest o 2 znaki krótsze niż vim. :)Dzięki @Candy Gumdrop oszczędza 1 bajt.
źródło
c3l
nacE
.E
.cW
(co wydaje się inne, ale w rzeczywistości jest identycznecE
) lub3s
. Dobra robota! Właśnie miałem opublikować prawie taką dokładną odpowiedź, kiedy zobaczyłem, że były już odpowiedzi 2 V, co było miłą niespodzianką. Wypróbowałem kilka różnych podejść, ale nie jestem pewien, czy będzie możliwe uzyskanie <13 bajtów.Stax , 13 bajtów
Uruchom i debuguj
Rozpakowane, niepolowane i skomentowane, wygląda to tak.
Przesunąłem ostatni komentarz w górę o jedną linię, ponieważ nic nie może następować po nieokreślonym dosłownym łańcuchu znaków.
Uruchom ten
źródło
pieprzenie mózgu, 164
Wypróbuj online!
„Kurwa mózgu!” część struny jest generowana za pomocą tego narzędzia, prawdopodobnie można ją dalej zagrać w golfa ręcznie.
źródło
Excel,
3633 bajtów-3 bajty dzięki Johan du Toit.
Dane wejściowe trafiają do A1.
Pierwsze podejscie:
źródło
="Hi "&MID(B13,4,99)&", I'm Excel"
34 bajtyA1
zamiastB13
tak naprawdę 33 bajty.Python 3 ,
3534 bajtówWypróbuj online!
-1 bajt dzięki Embodiment of Ignorance
Również 34 bajty, przy użyciu nowszych sformatowanych ciągów, dzięki Gáborowi Fekete:
Wypróbuj online!
źródło
lambda s:
i zastępowanie%s[3:]
z%input()[3:]
? (-4 bajty)print()
kolejne 7 bajtów, dlatego odpowiedzi Python zwykle używają lambdas.lambda s
zdefiniowałem funkcję (anonimową). Jeśli spojrzysz na nagłówek i stopkę w łączu TIO,f
nazywam tę funkcję , a następnie wywołuję jąf("I'm whatever")
. Następnie funkcja zwraca oczekiwane wyjście. Za pomocą fragmentu kodu nie drukujesz ani nie wracasz z funkcji - masz tylko trochę kodu, który ocenia poprawny wynik, ale nic z tym nie robi. Możesz uruchamiać programy wiele razy, możesz wywoływać funkcje wiele razy, ale urywek jest tylko urywkiem.R
454439 bajtów@Giuseppe Edit
@AaronHayman Edit
Wypróbuj online!
źródło
"(I'm )
z"(.* )
I'm a programmer
(wiele przestrzeni) z powodu chciwościsub
się"I'm(.*)" and "Hi\\1, I'm R"
i 3 bajty według biorąc wejściowe ze standardowego wejścia używającscan
: Spróbuj go w InterneciePHP ,
3432 bajtyWypróbuj online!
Wprowadź przez
STDIN
, zadzwoń z -F.źródło
x86 ,
3736 bajtówNiezmontowane:
Samodzielny wykonywalny program DOS. Wejście z wiersza poleceń, wyjście na ekran.
Pobierz i przetestuj DAD.COM .
* Dokładna nazwa „języka” tutaj jest trochę dwuznaczna, ponieważ kod maszynowy procesora tak naprawdę nie jest językiem w sensie formalnym. Używanie „x86” jako ogólnie rozumianej i akceptowanej nazwy platformy docelowej.
źródło
Java, 36 bajtów
Wypróbuj online.
źródło
Biała spacja , 267 bajtów
Litery
S
(spacja),T
(tab) iN
(nowa linia) dodane tylko jako wyróżnienia.[..._some_action]
dodano tylko jako wyjaśnienie.Ponieważ białe znaki wprowadzają po jednym znaku na raz, dane wejściowe powinny zawierać końcowy znak nowej linii, aby wiedział, kiedy przestać czytać znaki i wprowadzanie zostało zakończone.
Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Objaśnienie w pseudo-kodzie:
Znaki
", I'm Whitespace!"
są wypychane w odwrotnej kolejności, a następnie drukowane w pętli. Wszystkie wartości tych znaków są również zmniejszane o 102, które są dodawane w pętli przed drukowaniem w celu zaoszczędzenia bajtów. Ta stała 102 służąca do obniżania każdego znaku jest generowana w tym programie Java . Ponadto zamiast-70
dwukrotnego wypychania wartości dla obu spacji, druga spacja"!ecapsetihW m'I ,"
jest kopiowana z pierwszej z wbudowanym Copy, aby zaoszczędzić kilka bajtów.źródło
IBM / Lotus Notes Formula Language,
6162 bajtów+1, ponieważ nie zauważyłem
!
na końcu wyniku.Obliczona formuła pola, która pobiera dane wejściowe z pola edytowalnego
i
. Nie udałoby się to w przypadku „I'm am I'm”, ale ponieważ nie miałoby to żadnego sensu, zakładam, że tak się nie stanie.Szkoda, że przy 32 bajtach nazwa języka stanowi ponad połowę całkowitej długości formuły!
Zrzut ekranu poniżej pokazujący przykładowe dane wejściowe i wyjściowe:
źródło
Formula
mówił poważnie, prawdopodobnie po prostu nazwałbym to tak jest nazywane w społeczności programistów Notes / Domino :-)Perl
jako zamiennik dlaPerl 5
lubPerl 5 -p
.sed (
-r
),312825 bajtów-3 bajty dzięki Shaggy -3 bajtów, ponieważ
-r
nie są potrzebne w danych wyjściowychTIO
źródło
-r
, ale warto byłoby uzyskanie Meta zważyć na to.Japt , 18 bajtów
Gdy biblioteka kompresji ciągów Japt osiąga współczynnik kompresji 0% ...
Spróbuj
Kolejna 18-bajtowa alternatywa:
źródło
Oktawa , 35 bajtów
Wypróbuj online!
42 bajty:
Próbowałem w jakiś sposób odzyskać „Octave”, nie wypisując go, ponieważ 6 znaków to całkiem sporo w porównaniu z niektórymi innymi nazwami języków tutaj. Niestety, mogłem tylko znaleźć
ver
, która wyświetla strukturę z polami oddzielonymi przecinkami. Zajmuje znacznie więcej niż 6 bajtów. :(Wypróbuj online!
źródło
Rubin
-p
,322726 bajtów-5 bajtów, wykorzystując odpowiedź galaretki Nicka Kennedy'ego .
-1 bajt od podziału na inny punkt ciągu. Uświadomiłem sobie również, że mój stary bytecount był nieprawidłowy.
Wyjaśnienie
Wypróbuj online!
źródło
Rdza , 41 bajtów
Wypróbuj online!
źródło
Partia, 22 + 3 = 25 bajtów
+3 bajty do nazwania tego pliku
I'm
(z wymaganym.bat
rozszerzeniem dla plików wsadowych). Wywołaj jakoI'm hungry
, kiedy będzie echoHi hungry, I'm Batch!
.źródło
I'm
ale tutaj jest nazwa skryptu, nie wiem, czy jest poprawny, lub chyba, że jest to interpreter ze skryptem w bieżącej ścieżceCMD
, więc czy rzeczywiście zaoszczędzi mi to 2 bajty?Perl 6 ,
30 2827 bajtówWypróbuj online!
źródło
Perl 5
-p
,3124 bajtówOgranicz w oparciu o wyjaśnienia z OP i sugestię @NahuelFouilleul.
Wypróbuj online!
źródło
$^X $]
można również zastosować specjalne zmienne, jednak 5 jest krótsze niż$]
5
jako część nazwy języka? tzn. czy możesz argumentować, że Perl 5 „myśli o sobie” jako „Perl”? Tak było przed istnieniem Perla 6, a odpowiedzi codegolfa muszą działać tylko na co najmniej jednej implementacji języka, więc wybierz starą?Perl
to wystarczy. I że użycie tej-p
opcji nie musi być uważane za część nazwy języka.Galaretka ,
1615 bajtówPełny program akceptujący argument (sformatowany w języku Python), który wypisuje wynik.
Wypróbuj online!
W jaki sposób?
Uwaga:
Ḋ⁾Hio...
też działa.źródło
Galaretka ,
2017 bajtówWypróbuj online!
Monadyczny link przyjmujący dane wejściowe jako argument i zwracający ciąg galaretki.
Wyjaśnienie
źródło
VBA (Excel), 27
28bajtówDane wejściowe trafiają do komórki A1 aktywnego arkusza w programie Excel, uruchom kod w oknie natychmiastowym
Wykorzystuje fakt, że
"SomeString"SomeValue
iSomeValue"SomeString"
niejawnie konkatenuje oraz że pominięcie trzeciego argumentuMID
funkcji spowoduje pobranie wszystkich znaków z końca danych wejściowych - zamieniając je w funkcję „zrzutu początkowych znaków”(-1 bajt dzięki Shaggy, ale +1, gdy OP potwierdził, że wszystkie odpowiedzi powinny kończyć się wykrzyknikiem)
(-1 bajt dzięki Taylor Scott przypominając mi, że końcowe podwójne cytowanie było opcjonalne)
źródło
Hi
i zastąpić5
je4
?"
z tego rozwiązania, a gdy używasz notacji oceniającej (nawiasy kwadratowe), powinieneś oznaczyć to rozwiązanie jako Excel VBA, ponieważ notacja ta jest dostępna tylko w ExceluJ , 22 bajty
Wypróbuj online!
źródło
05AB1E ,
2321 bajtówZaoszczędzono 2 bajty dzięki Kevinowi Cruijssenowi
Wypróbuj online!
Wyjaśnienie
źródło
•äƵí•hR
jest o 1 bajt krótszy niż"05AB1E"
. :)•äƵí•hR
, ale jak mówisz, niestety nie oszczędza to tutaj.QuadR , 22 bajty
Wypróbuj online!
Zastępuje to:
^...
trzy początkowe znakii
$
koniec liniiz
Hi
i
,I'm QuadR
odpowiednio
źródło
⎕R
operatora APL nieprzeznaczonego do gry w golfa .Siatkówka ,
2221 bajtówWypróbuj online! Link zawiera przypadki testowe. Nie działa w Retina 0.8.2, więc zamiast tego dostosuj odpowiedź QuadR @ Adám. Objaśnienie: Wzór jest pusty, więc pasuje do każdej pozycji ciągu wejściowego. Potrzebujemy jednak tylko trzeciego (lub czwartego by działało) dopasowania. Podstawienie jest następnie stosowane do tego dopasowania. W ramach tego podstawienia
$'
odnosi się do reszty łańcucha i$`
odnosi się do początku łańcucha.źródło
Retina 0.8.2 ,
262523 bajtów-1 bajt dzięki @attinat .
-2 bajty przez przeniesienie odpowiedzi QuadR @ Adáma , więc pamiętajcie o tym!
PS: @Neil opublikował krótszą odpowiedź Retina w nowej wersji , więc wyraźnie zmieniłem tę odpowiedź na Retina 0.8.2.
Wypróbuj online.
Wyjaśnienie:
Zamień pierwsze trzy znaki na „Cześć”:
A potem dołącz końcowe „Jestem Retina!” (zastępując koniec łańcucha):
źródło
bash, 24 bajty
TIO
źródło
bash
z$0
zaoszczędzić kilka bajtów$0
wypisze nazwę skryptu lub uruchomi,bash -c 'echo Hi ${@:2}, $1 $0!' bash $@
ale powinien liczyć się z rozmiarem