Напишите программу на любом языке, которая читает входные данные из стандартного ввода и выводит слегка измененные выходные данные в стандартный вывод. Программа должна заимствовать некоторые символы из ввода и вывода как можно большего префикса, за *language-name* is awesome!
которым следует новая строка, а затем то, что осталось от ввода.
- Ввод не содержит прописных букв.
- Если в строке отсутствует первый символ имени языка, следует заимствовать только символ новой строки.
- Если во вводе нет символа новой строки, выведите ввод без изменений.
- Неважно, какого из доступных персонажей вы заимствуете.
Я использую \n
в качестве символа новой строки ( 0x0a
), чтобы сэкономить место при записи. Настоящая программа должна заботиться только о настоящем символе новой строки, а не о\n
строке.
Пример: питон.
вход: abcdefghijklmnopqrstuvwxyz\n0123456789
выход: python\nabcdefgijklmqrsuvwxz0123456789
Так как входные данные не имеют каких - либо пробелов, мы не можем продолжать , даже если у нас есть достаточное количество символов для следующего слова: is
.
Пример: C.
input: i don't see anything!
output: i don't see anything!
C не найден в строке, поэтому изменение невозможно. Также нет символа новой строки.
Пример: C ++.
input: i don't\nsee anything!
output: \ni don'tsee anything!
C не найден в строке, поэтому никакая модификация невозможна.
Пример: Obj-C.
input: objectively, clojure is amazing.\nq.e.d.
output: obj\nectively, clojure is amazing.q.e.d.
вход содержит достаточно символов для записи, obj
но-
отсутствует.
Количество байтов в вашем исходном коде за вычетом количества байтов в названии ваших языков, в кодировке utf-8 (если возможно), является вашим счетом; самые низкие победы!
i don't\nsee anything!
в качестве теста?Ответы:
Pyth, 37 байт
Исходный код имеет длину 41 байт . Попробуйте онлайн.
Как это устроено
источник
Питон, 186 - 6 = 180
Попробуйте онлайн
источник
Python, 146 байт
источник
Цейлон, 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);}
Вот отформатированная и закомментированная версия:
Он использует
replaceLast
вместо того,replaceFirst
потому что он короче.Некоторые примеры входов и выходов в том же формате, что и в вопросе:
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.
источник
JavaScript (ES6) 90 (100-10)
Как функция, возвращающая запрошенный вывод. Это сложно реализовать с помощью ввода-вывода, поскольку обычная замена STDIN заключается в том
prompt()
, что он не принимает перевод строки внутри входной строки.Как функция с реальным выводом (используя
alert
) счетчик байтов равен 107Протестируйте приведенный ниже фрагмент кода в браузере, совместимом с EcmaScript 6 (реализует оператор распространения и функцию стрелки - я использую FireFox)
источник
Perl 72 - 4 = 68 байт
Включает 2 переключателя.
Объяснение : Для каждого символа в строке
"\nperl is awesome"
удалите соответствующий символ из входной строки ($_
), пока мы не найдем символ, отсутствующий в$_
. Сохраняются совпадающие символы, в$p
которых указывается префикс,$_
который затем печатается.-0
Переключатель считывает в полном вводе , а не строка за линией , а-p
переключатель ввода делает чтение и печать на выходе неявным.источник
JavaScript (ES7),
101107 - 10 = 97Раньше он был короче и даже работал на всех четырех тестах, но, видимо, я пропустил правило, так что ....
В Firefox 42 работает должным образом. Первоначально он занимал 119 байт, но уловка из ответа @ edc65 помогла значительно сократить его. Я думаю, что есть еще место для улучшения. Как всегда, предложения приветствуются!
источник
obj
->job
, не следует изменять (правило 3)is awesome
и это все равно будет работать должным образом на всех четырех из них. Я исправлю это как можно скорее.