Minęło kilka trudnych miesięcy w pracy i mam ochotę krzyczeć wprost na twarz mojego szefa. Nie jestem jednak osobą, która bezpośrednio konfrontuje ludzi, z którymi mam problem. Nie chcę też stracić pracy.
Oto pomysł: chcę go obrażać, bez jego wiedzy. I zdałem sobie sprawę z idealnego sposobu: potrzebuję jakiegoś oprogramowania, które koduje zniewagę wewnątrz doskonale doskonałej wiadomości. I widząc, jak wiadomo, że nie widzi lasów dla drzew, myślę, że wiem po prostu, jak:
Napisz do mnie program, który przyjmuje jako dane wejściowe ciąg o nieznanej długości, ale nie zawierający podziałów linii. To będzie nieprzetworzona wiadomość, którą chcę wysłać.
Jeśli to możliwe, zwróć ciąg sformatowany w taki sposób, aby komunikat „DIE IN A GREASE FIRE” stanowił całą lewą kolumnę. Z nowymi akapitami, w których powinny się znajdować spacje między wyrazami. Teraz, ponieważ jestem bardzo zły, równie ważne jest, aby każda litera była pisana wielkimi literami.
Nie możesz modyfikować łańcucha w żaden inny sposób, tzn. Nie możesz zamieniać całego łańcucha na wielkie litery.
Jeśli danego ciągu nie można sformatować w ten sposób, należy zwrócić oryginalny ciąg. Odczytaj wejście ze standardowego wejścia.
Obowiązują normalne zasady: brak żądań HTTP, brak konsultacji z Marvinem z THGTTG itp.
Przykładowe dane wejściowe:
Drogi Szefie, jak się sprawy mają? Zwróciłem uwagę, że całą winę za nieszczęście w zeszły piątek. Nie tylko większość. W każdym calu tego. Czy błędem jest myślenie, że reszta zespołu była przynajmniej częściowo odpowiedzialna? W końcu cała szóstka z nas była zaangażowana od samego początku. Nie dlatego, że myślę, że powinienem stać bez winy. Ani trochę. Mówię tylko: staram się. Staram się. Ciągle się poprawiam. I ciągle biorę odpowiedzialność. Ogólnie rzecz biorąc, nie mam nic przeciwko ponoszeniu pełnej odpowiedzialności za swoje działania. Ale po tej wiosny wydaje się, że dostaję więcej, niż zasłużyłem. Pamiętasz umowę Flakenhauser? Wszystko poszło tak gładko, jak można się było spodziewać. Tak przynajmniej się początkowo wydawało. W ostatniej chwili wszystko się rozpadło. Cały zespół zgodził się, że bardziej przypomina dziwny wypadek niż niechlujne planowanie lub źle zarządzane zasoby. Mimo to ja - sam - ponosiłem za to winę. Chociaż wtedy nic nie powiedziałem, mój poziom tolerancji dla wzięcia na siebie winy poważnie się pogorszył. Od tego momentu uważałem za konieczne, aby zawsze starać się dwa razy bardziej, aby uniknąć kontroli. A jednak znów tu jesteśmy. Pomimo wszystkich moich osiągnięć. Właśnie tam, gdzie zawsze wydaje się, że kończymy. Każdy pojedynczy projekt. To staje się nie do zniesienia. tylko po to, by uniknąć kontroli. A jednak znów tu jesteśmy. Pomimo wszystkich moich osiągnięć. Właśnie tam, gdzie zawsze wydaje się, że kończymy. Każdy pojedynczy projekt. To staje się nie do zniesienia. tylko po to, by uniknąć kontroli. A jednak znów tu jesteśmy. Pomimo wszystkich moich osiągnięć. Właśnie tam, gdzie zawsze wydaje się, że kończymy. Każdy pojedynczy projekt. To staje się nie do zniesienia.
Przykładowe dane wyjściowe:
Drogi Szefie, jak się sprawy mają?
Zwróciłem uwagę, że całą winę za nieszczęście w zeszły piątek. Nie tylko większość.
W każdym calu tego.Czy błędem jest myślenie, że reszta zespołu była przynajmniej częściowo odpowiedzialna? W końcu cała szóstka z nas była zaangażowana od samego początku.
Nie dlatego, że myślę, że powinienem stać bez winy. Ani trochę.Mówię tylko: staram się. Staram się. Ciągle się poprawiam. I ciągle biorę odpowiedzialność.
Ogólnie rzecz biorąc, nie mam nic przeciwko ponoszeniu pełnej odpowiedzialności za swoje działania. Ale po tej wiosny wydaje się, że dostaję więcej, niż zasłużyłem.
Pamiętaj o umowie Flakenhauser.
Wszystko poszło tak gładko, jak można się było spodziewać. Tak przynajmniej się początkowo wydawało. W ostatniej chwili wszystko się rozpadło.
Cały zespół zgodził się, że bardziej przypomina dziwny wypadek niż niechlujne planowanie lub źle zarządzane zasoby.
Mimo to ja - sam - ponosiłem za to winę.
Chociaż wtedy nic nie powiedziałem, mój poziom tolerancji dla wzięcia na siebie winy poważnie się pogorszył.Od tego momentu uważałem za konieczne, aby zawsze starać się dwa razy bardziej, aby uniknąć kontroli. A jednak znów tu jesteśmy.
Pomimo wszystkich moich osiągnięć.
Właśnie tam, gdzie zawsze wydaje się, że kończymy.
Każdy pojedynczy projekt. To staje się nie do zniesienia.
To jest kod golfowy. Najkrótszy kod wygrywa.
Odpowiedzi:
CJam,
5653 bajtówWypróbuj online!
Jak to działa
źródło
Perl - 60 bajtów
Licząc shebang jako jeden.
To rozwiązanie używa najbardziej wewnętrznego ciągu do utworzenia następującego wyrażenia regularnego:
który jest podobny do wyrażenia regularnego używanego w rozwiązaniu m.buettner . Wygenerowany regex jest następnie dopasowywany do danych wejściowych. W kontekście listy zwróci tablicę zawierającą każdą z grup dopasowań, które są połączone nową linią (powodem grup „nic nie dopasowuj”
(\.*)
jest wstawienie dodatkowej nowej linii). Jeśli nie ma dopasowania, zamiast tego wyprowadzany jest oryginalny ciąg.Perl - 73 bajty
Licząc shebang jako dwa.
To dzieli łańcuch przy odpowiednich ogranicznikach i zbiera elementy w tablicy. Jeśli któryś z nich nie pasuje, separator rekordu wyjściowego (który został ustawiony na nową linię z
-l
opcją) jest nieuzbrojony, a zatem ciąg znaków jest niezmodyfikowany.źródło
./script.pl
, najprawdopodobniej tak. Jeśli zostanie wywołany jakoperl script.pl
, to nie..
poI
wstawi dodatkowe przełamane przedI
(ponieważ pasuje ponownie w tym samym miejscu). Być może nieco sprzeczne z intuicją.-M
opcję do shebang, który umrze z fatalnym błędem:Too late for "-M" option at line 1.
Ale głównym powodem, dla którego go tam umieściłem, ja również unikam konieczności wyjaśniania, że należy go uruchomić, ponieważperl -pl script.pl
- w obecnej formie, działa jak jest.GolfScript, 53 bajty
Wygląda na to, że Dennis i ja wymyśliliśmy równolegle całkiem podobne rzeczy ... Ale oto moja próba.
Kliknij łącza przed każdym blokiem kodu, aby wypróbować go online. Niestety, interpreter online nie pozwala na uruchomienie kodu większego niż 1024 znaki, więc musiałem wykonać ... kompresję danych wejściowych testu. Ale nadal działa.
Wersja skrócona
Niewykonana, skomentowana wersja
Punkt podniesiony przez Dennisa: wszystkie programy GolfScript drukują automatyczną końcową nową linię. Nie wiem, czy to powinno unieważnić moje obecne rozwiązanie. Sądzę, że stłumienie ostatniego nowego wiersza kosztowałoby 4 znaki, dodając
"":n
gdzieś pod koniec.źródło
Rubin - 140
Brak wyrażeń regularnych w tym . Jednocześnie podąża za znakami na wejściu ARGV [0], a ciąg zawierający znaki, które musimy przełamać, aby wysłać wiadomość z lewej kolumny. Pierwotnie zamierzał wstawiać spacje po literach, które muszą mieć nowy wiersz, ale stwierdził, że nieco trudniej było na stałe zakodować indeksy, w których wstawiono podział wiersza.
Gdy wszystko zostanie powiedziane i zrobione, sprawdza, czy
i
indeks zwiększył się wystarczająco dużo razy, aby przejść przez każdą literę, która wymagała złamania. Jeśli nie, po prostu drukujemy oryginalny ciąg. Jeśli tak, dajemy im sformatowany.n-[i]!=n
była fajną sztuczką do zapisywania znaków podczas sprawdzania, czy bieżący indeks wymagał dodatkowego podziału wiersza (w porównaniu don.include? i
). Zapisano także niektóre znaki, używając{}
s zamiastdo/end
bycia blokiem wielowierszowym, i zastosowano warunek trójskładnikowy na końcowych putach, aby zapisać znaki podczas określania, który z nich wyprowadzić.Nie najkrótszy, ale pomyślałem, że dobrze byłoby obejść się bez wyrażeń regularnych.
źródło
Perl, 184 bajty
Nie jest to spektakularny wynik dla Perla, ale oto proste rozwiązanie wyrażenia regularnego
źródło
print($_)
==print
. +1 punkt za czytelność: niezwykle łatwo jest zobaczyć, co się dzieje, co nie jest dokładnie tak w przypadku innych rozwiązań.JavaScript 116
Implementacja Javascript pomysłu m-buettner
Testowy fragment kodu
źródło
FIFA
teście (komentarze OP)From that FIFA point on
. To stawia nową linię przedFA
i przed spacją przedFI
.Python3 (
166138)Gra w golfa:
Niegolfowane:
Chociaż użycie lambda nieco mnie cieszy, ta masowa liczba użytych zmiennych i nieco niechlujny rozwój ma odwrotny skutek. Regex mógł być również dobrym pomysłem. Hay ho, przynajmniej działa :).
Edycja: zastąpiono zmienną lambda
count
wbudowanym i skrócono instrukcję split.źródło
Python3 (165)
Nie golfił
Wyjaśnienie
chunk
rekurencyjnie dzieli koniec wiadomości zawierającej ostatni nagłówek i umieszcza go na liście.Zastrzeżenie: to nie zadziała, jeśli między dwoma proponowanymi nagłówkami w liście nie ma żadnych spacji, ale wydaje się to mało prawdopodobne w liście do szefa.
źródło
Ruby 115
Ruby 95
źródło
J -
110103 bajtówDlaczego J nie ma dobrych funkcji do obsługi ciągów, a jedynie funkcje tablicowe? Skoryguję to, jeśli wymyślę coś mądrego.
Edycja: Skrócone i naprawione dane wyjściowe (wcześniej były spacje) i sprawdzanie. Poprawiłem także wyjaśnienie.
Wyjaśnienie:
Przykłady (za długie?):
źródło
JavaScript (ES6),
93115 bajtówKiedyś
replace
przechodziłem przez łańcuch, dopasowując/\b./g
go, aby znaleźć tylko znaki, które albo poszły za spacją albo rozpoczęły łańcuch. Następnie sprawdziłem każdy znak, aby sprawdzić, czy pasuje on do bieżącego indeksu w tablicy, której szukałem, i dodałem przed nim nowy wiersz, jeśli tak, i zwiększyłemi
.EDYCJA: Pominięto potrzebę tworzenia nowych linii między słowami. Zrobiłem to teraz, co prowadzi do 115.
źródło
PHP, 328 bajtów
Biorąc pod uwagę plik o nazwie „G” zawierający nieprzetworzony tekst do „enmessage”
Objaśnienie (~ niepoznany i skomentowany kod):
źródło
PHP, 136 bajtów
jeśli można znieść całą zniewagę; drukuje zmodyfikowany ciąg z wiodącą spacją lub podziałem wiersza; puste wyjście, jeśli nie. Uruchom z
-r
.awaria
źródło
Python - 190 bajtów
Nie golfił
To moja pierwsza próba gry w golfa :) Chcąc nauczyć się kilku świetnych technik kodowania, niezależnie od tego, po prostu skupiłem się na użyciu find, a następnie na łączeniu ciągów znaków w celu znalezienia odpowiednich znaków i sformatowania wyniku.
Zmienne -
lr = l ma przypisane znaki, których będziemy używać jako naszego przewodnika do tworzenia nowego sformatowanego akapitu. r przypisuje nam nowy znak wiersza w odstępach nowego wyniku.
k, p = akapit wejściowy. K służy do przywracania oryginału, ponieważ nie jest on ponownie przypisywany podczas wykonywania skryptu. Sprawdzam względem x, aby wiedzieć, kiedy dodać podwójną nową linię w celu uzyskania odstępów.
y, i = y jest swego rodzaju „kursorem”, śledzi ostatnią pozycję, w której znaleziono znak, więc poprawnie znajdujemy akapit w celu splicingu, i sprawdzam poczytalność, jeśli nie trafimy wszystkich naszych znaków, przywróć akapit (zmienną p) do pierwotnego wejścia za pomocą zmiennej k.
h = długość wejściowa, której używamy w łączeniu.
x = Pozycja bieżącego znaku reprezentowanego przez C, również używana do splicingu.
c = Znaki wl do iteracji i wyszukiwania.
Poniższy kod został przeredagowany i usunięty z oryginalnego kodu, aby był czytelny tak, jak to się dzieje:
Byłbym wdzięczny za Twoją opinię! Szukam się uczyć.
źródło
x<0
sięi
. W pythonie prawda jest taka sama jak 1, a fałsz równa się 0. Więc jeśli x wynosi -1, dodaje 1, a w przeciwnym razie 0.i+=
jest takie samo jaki=i+
True == 1
daje. :)