Biorąc pod uwagę ten tekst
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore i dolore magna aliqua. Ut enim ad minim veniam, quis nostrud Exercitation ullamco laboris nisi ut aliquip ex ea commodo konsekat. Duis aute irure dolor in reprezenthenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
napisz najkrótszy program, który tworzy ten sam tekst, wyjustowany 80 znakami. Powyższy tekst musi wyglądać dokładnie tak:
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
Zasady:
- słowa nie wolno wycinać
- należy dodać dodatkowe spacje
- po kropce.
- po przecinku
- po najkrótszym słowie (od lewej do prawej)
- wynik nie może mieć więcej niż 2 kolejne spacje
- ostatnia linia nie jest uzasadniona.
- linie nie mogą zaczynać się przecinkiem ani kropką.
- podać dane wyjściowe swojego programu
zwycięzca: najkrótszy program.
Uwaga: Łańcuch wejściowy jest dostarczany na STDIN jako jeden wiersz (bez przesunięcia wiersza lub powrotu karetki)
aktualizacja:
Łańcuch wejściowy może być dowolnym tekstem o rozsądnej długości słowa (tj. Nie więcej niż 20 ~ 25 znaków), takim jak:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing, gdzie indziej niesklasyfikowane, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, konsekwencja w, pretium a, enim. Kongres Pellentesque. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Liczba całkowita id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis Vehicle. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus i et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, i ultricies lacus lorem varius purus. Curabitur eu amet.
źródło
Odpowiedzi:
Perl, 94 znaki
Uruchom z
perl -nM5.01
. (Jestn
to uwzględnione w liczbie znaków.)Powyższy kod jest najkrótszym, jaki udało mi się zrobić, który mógł obsłużyć dowolne rzucone przez niego kulki (takie jak słowa jednoliterowe na początku linii, linie wejściowe o długości dokładnie 80 znaków itp.) Dokładnie według specyfikacji:
(Z przeprosinami dla Garetha za wykorzystanie jego komentarza jako dodatkowego wkładu testowego.)
Następująca 75-znakowa wersja działa wystarczająco dobrze, aby wygenerować przykładowy wynik z przykładowego wejścia, ale może się nie powieść w przypadku innych danych wejściowych. Ponadto pozostawia dodatkowy znak spacji na końcu każdej linii wyjściowej.
Obie wersje zapętlą się na zawsze, jeśli napotkają dane wejściowe, których nie mogą poprawnie uzasadnić. (W dłuższej wersji zastąpienie
until
gountil$i>80||
poprawiłoby to kosztem siedmiu dodatkowych znaków).źródło
Quantifier in {,} bigger than 32766 in regex; marked by <-- HERE in m/^(.*?\.|.*?,|(.*? )??\S{ <-- HERE 32767}) \b/
drugi tekst.$i>80
czek, to rozwija 11. liniępede pellentesque fermentum. Maecenas adipiscing ante non diam sodales
, która ma tylko 78 znaków, a następnie poddaje się, ponieważ po każdym słowie (oprócz ostatniego) występują dwie spacje.Ruby, 146 znaków
Drukuje dokładnie pożądany wynik (patrz poniżej), jeśli podany tekst jest wprowadzany do STDIN.
Edycja: Zaraz po przesłaniu pierwszego rozwiązania zauważyłem w komentarzach, że wymagany jest dowolny ciąg wejściowy. Poprzednia odpowiedź składała się tylko z 95 znaków, ale nie spełniała tego wymagania:
źródło