Napisz program w dowolnym języku, który odczytuje dane wejściowe ze standardowego wejścia i wysyła nieco zmodyfikowane dane wyjściowe na standardowe wyjście. Program powinien pożyczyć niektóre znaki z wejścia i wyjścia tak duży, jak to możliwe, *language-name* is awesome!
a następnie nowy wiersz, a następnie resztę z wejścia.
- Dane wejściowe nie zawierają wielkich liter.
- Jeśli pierwszy znak nazwy języka nie jest obecny w ciągu, należy pożyczyć tylko znak nowej linii.
- Jeśli na wejściu nie ma znaku nowej linii, wypisz dane wejściowe w niezmodyfikowany sposób.
- Nie ma znaczenia, którą z dostępnych postaci pożyczysz.
Używam \n
jako znaku nowej linii ( 0x0a
), aby zaoszczędzić miejsce podczas pisania. Prawdziwy program powinien dbać tylko o prawdziwy znak nowej linii, a nie o \n
ciąg znaków.
Przykład: python.
Wejście: abcdefghijklmnopqrstuvwxyz\n0123456789
Wyjście: python\nabcdefgijklmqrsuvwxz0123456789
Ponieważ wejście nie ma żadnych spacji, nie możemy kontynuować chociaż mamy wystarczającą ilość znaków do następnego słowa: is
.
Przykład: C.
input: i don't see anything!
output: i don't see anything!
C nie znaleziono w łańcuchu, więc nie było możliwości modyfikacji. Ponadto nie ma znaku nowej linii.
Przykład: C ++.
input: i don't\nsee anything!
output: \ni don'tsee anything!
C nie został znaleziony w ciągu, więc nie było możliwości modyfikacji.
Przykład: Obj-C.
input: objectively, clojure is amazing.\nq.e.d.
output: obj\nectively, clojure is amazing.q.e.d.
Dane wejściowe zawierają wystarczającą liczbę znaków do napisania, obj
ale -
brakuje.
Liczba bajtów kodu źródłowego minus liczba bajtów nazwy twojego języka, zakodowana w utf-8 (jeśli to możliwe), jest twoim wynikiem; najniższe wygrane!
i don't\nsee anything!
jako przypadek testowy?Odpowiedzi:
Pyth, 37 bajtów
Kod źródłowy ma 41 bajtów . Wypróbuj online.
Jak to działa
źródło
Python, 186 - 6 = 180
Wypróbuj online
źródło
Python, 146 bajtów
źródło
Cejlon, 235 - 6 = 229
void a(){variable value i="";variable value r="\nceylon is awesome!";while(exists l=process.readLine()){i=i+"\n"+l;}i=i.rest;for(j->c in r.indexed){if(c in i){i=i.replaceLast(c.string,"");}else{r=r[0:j];break;}}print(r.rest+r[0:1]+i);}
Oto sformatowana i skomentowana wersja:
Używa
replaceLast
zamiast tego,replaceFirst
ponieważ jest krótszy.Niektóre przykładowe dane wejściowe i wyjściowe w tym samym formacie co w pytaniu:
abcdefghijklmnopqrstuvwxyz\n0123456789
→ceylon\nabdfghijkmpqrstuvwxz0123456789
i don't see anything!
→i don't see anything!
i don't\nsee anything!
→\ni don't see anything!
objectively, closure is amazing.\nq.e.d.
→ceylon is a\nobjectivel, sureiamzng.\q..d.
źródło
JavaScript (ES6) 90 (100-10)
Jako funkcja zwraca żądany wynik. Trudno go wdrożyć za pomocą I / O, ponieważ zwykłym zamiennikiem STDIN jest to
prompt()
, że nie akceptuje nowego wiersza w ciągu wejściowym.Jako funkcja z rzeczywistym wyjściem (używaniem
alert
) liczba bajtów wynosi 107Przetestuj uruchomienie poniższego fragmentu w przeglądarce zgodnej z EcmaScript 6 (implementacja operatora rozkładania i funkcji strzałek - używam FireFox)
źródło
Perl, 72–4 = 68 bajtów
Zawiera 2 przełączniki.
Objaśnienie : Dla każdego znaku w ciągu
"\nperl is awesome"
usuń odpowiedni znak z ciągu wejściowego ($_
), dopóki nie znajdziemy znaku, którego nie ma w$_
. Przechowywane są pasujące znaki, w$p
których jest przedrostek,$_
a następnie drukowane.-0
Przełącznik odczytuje w pełnym wejściu zamiast linii po linii i-p
przełącznik umożliwia wejście czytanie i drukowanie wyjście niejawny.źródło
JavaScript (ES7),
101107–10 = 97Było wcześniej krócej, a nawet działało na wszystkich czterech testowych przypadkach, ale najwyraźniej nie przestrzegałem żadnej reguły, więc ...
Działa poprawnie w Firefoksie 42. Początkowo miał on 119 bajtów, ale sztuczka z odpowiedzi @ edc65 pomogła go znacznie skrócić. Myślę, że jest jeszcze miejsce na ulepszenia. Jak zawsze sugestie mile widziane!
źródło
obj
->job
, nie powinien być modyfikowany (reguła 3)is awesome
i nadal działałby poprawnie na wszystkich czterech. Naprawię to jak najszybciej.