Мы все знаем классическую шутку папы, которая выглядит примерно так:
Кто-то произносит предложение, чтобы описать себя (например,
I'm tired
илиI'm confused
).Приходит любитель папы-шутки и отвечает
Hi <adjective>, I'm Dad!
, потому что вступления следуют тому же формату (I'm Peter
следует тому же формату, что иI'm hungry
).
Ваша работа состоит в том, чтобы взять ввод в форме самоописателя и вывести соответствующую форму «папа-шутка», но вместо слова «папа» вы будете использовать название языка программирования, который вы программируете. в.
Тестовые случаи (предположим, что они анализируются 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!
Теперь предположим, что эти тестовые случаи анализируются 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!
Точная задача:
Возьмите строку в формате самоописателя (
I'm <adjective>
илиI'm a(n) <noun>
), используя стандартный ввод или функцию.Предположим, нет конечной пунктуации.
Предположим, слово
I'm
используется и нетI am
.
Преобразуйте его в формат «папа-шутка» - посмотрите, как это выглядит, в приведенных выше примерах.
Другие вещи:
Это код-гольф , поэтому выигрывает самый короткий байт.
Следуйте стандартным правилам лазейки - ни одно из них, пожалуйста.
Веселиться!
Leaderboard
Вы можете просмотреть список лидеров этого поста, развернув виджет / фрагмент ниже. Чтобы ваше сообщение было включено в рейтинг, вам нужен заголовок ( # header text
) со следующей информацией:
Название языка (заканчивайте его запятой
,
или тире-
), а затем ...Количество байтов, как последнее число в заголовке.
Например, JavaScript (ES6), 72 bytes
допустимо, но Fortran, 143 bytes (8-bit)
недопустимо, потому что число байтов не является последним числом в заголовке (ваш ответ будет распознан как 8 байтов - не используйте это в своих интересах).
<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>
источник
Ответы:
V , 13 байт
Попробуйте онлайн!
Вдохновленный ответом ТШ
Это использует тот факт, что
I'm
при удалении текста с начала извлекается из начала строки и вставляется в конец,<C-r>"
находясь в режиме вставки.источник
I'm
чтобы<C-O>p
и обратите внимание на то ваш ответ ...escape
занимает 5 символов ???0x1B
, но это проще и более очевидно, что это значит, если вы напишите это как<esc>
. То же самое<C-r>
, что на самом деле0x12
C (gcc) ,
594233 байта-17 байт благодаря @Conor O'Brien, заметившему, что импорт не нужен
-9 байт благодаря @tsh, указывающему более короткий, UB способ написания функции
Попробуйте онлайн!
Отбирает первые 3 символа ввода (удаляет
I'm
) и окружает его нужным текстом.источник
int
это также необязательно.char*
, может быть ...; такa(x){printf("Hi%s, I'm C!",x+3);}
должно работатьint
может содержать achar*
без его усечения), несмотря на неопределенное поведение. На x86-64 gcc в Linux он всегда будет неуспешным в исполняемом файле PIE (обычно указатели не находятся в младших 32 битах виртуального адресного пространства, и gcc не будет копировать старшие 32 бита при вычисленииx+3
из функции arg в регистр RDI). Но в исполняемом файле, отличном от PIE, статические адреса находятся в младших 31 битах виртуального адресного пространства, поэтому, если вызывающий передал строковый литерал или статический буфер, это могло бы сработать.V , 13 байт
Попробуйте онлайн!
Новый для
V
. Просто знал это около 30 минут назад. В любом случае, этот язык выбран только потому, что его имя стоит всего 1 байт. Я не уверен, как отправить<End>
ключ в V. Большинство окружения vim в этом примере приняли бы<End>
в качестве замены<Esc>A
. Но, вы знаете, V на 2 символа короче, чем vim. :)Благодаря @Candy Gumdrop , сохраняет 1 байт.
источник
c3l
наcE
.E
раньше.cW
(что кажется другим, но на самом деле идентичноcE
) или3s
. Хорошая работа! Я как раз собирался опубликовать почти этот точный ответ, когда увидел, что уже есть ответы на 2 В, что было приятным сюрпризом. Я пробовал несколько разных подходов, но я не уверен, что удастся получить <13 байт.Stax , 13 байт
Запустите и отладьте его
Распакованный, размазанный и прокомментированный, это выглядит так.
Я переместил последний комментарий на одну строку, так как ничто не может следовать за неопределенным строковым литералом.
Запустите этот
источник
бред, 164
Попробуйте онлайн!
"Мозговой!" с помощью этого инструмента генерируется часть струны , которую, вероятно, можно играть в гольф дальше вручную.
источник
Excel,
3633 байта-3 байта благодаря Йохану дю Туа.
Ввод идет в А1.
Первая попытка:
источник
="Hi "&MID(B13,4,99)&", I'm Excel"
34 байтаA1
а неB13
так на самом деле 33 байта.Python 3 ,
3534 байтаПопробуйте онлайн!
-1 байт благодаря варианту невежества
Также 34 байта, используя более новые отформатированные строки, благодаря Габору Фекете:
Попробуйте онлайн!
источник
lambda s:
и замены%s[3:]
на%input()[3:]
? (-4 байт)print()
на 7 байтов, поэтому в ответах Python обычно используются лямбда-выражения.lambda s
я определил (анонимную) функцию. Если вы посмотрите на верхний и нижний колонтитулы в ссылке TIO, я назову эту функциюf
, а затем вызвал ее с помощьюf("I'm whatever")
. Затем функция возвращает ожидаемый результат. С вашим фрагментом вы не печатаете и не возвращаете из функции - у вас просто есть немного кода, который оценивает правильный результат, но ничего с ним не делает. Вы можете запускать программы несколько раз, вы можете вызывать функции несколько раз, но фрагмент - это просто фрагмент.R
454439 байт@Giuseppe Править
@AaronHayman Править
Попробуйте онлайн!
источник
"(I'm )
на"(.* )
I'm a programmer
(много пробелов) из-за жадностиsub
to"I'm(.*)" and "Hi\\1, I'm R"
и 3 байта, взяв ввод от stdin, используяscan
: Попробуйте онлайнPHP ,
3432 байтаПопробуйте онлайн!
Ввод через
STDIN
, вызов с -F.источник
х86 ,
3736 байтразобранное:
Автономная исполняемая программа DOS. Ввод из командной строки, вывод на экран.
Скачайте и протестируйте DAD.COM .
* Точное название «языка» здесь немного неоднозначно, поскольку машинный код процессора на самом деле не является языком в формальном смысле. Переход от "x86" в качестве общепринятого и общепринятого названия целевой платформы.
источник
Java, 36 байт
Попробуйте онлайн.
источник
Пробел , 267 байт
Буквы
S
(пробел),T
(табуляция) иN
(новая строка) добавляются только как подсветка.[..._some_action]
добавлено только в качестве объяснения.Поскольку пробел вводит по одному символу за раз, ввод должен содержать завершающий символ новой строки, чтобы он знал, когда прекратить чтение символов, и ввод завершен.
Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Объяснение в псевдокоде:
Символы
", I'm Whitespace!"
выталкиваются в обратном порядке, а затем печатаются в цикле. Все значения этих символов также уменьшены на 102, которые добавляются в цикл перед печатью для сохранения байтов. Эта константа 102 для понижения каждого символа генерируется с помощью этой Java-программы . Кроме того, вместо-70
двойного нажатия значения для обоих пробелов второй пробел в"!ecapsetihW m'I ,"
копируется из первого с помощью встроенной функции копирования, чтобы сохранить несколько байтов.источник
IBM / Lotus Notes Formula Language,
6162 байта+1, потому что я не заметил
!
в конце вывода.Формула вычисляемого поля, которая получает данные из редактируемого поля
i
. Это потерпит неудачу из-за «я есть я», но так как это не имеет никакого смысла, я предполагаю, что этого не произойдет.Жаль, что при 32 байтах название языка составляет более половины общей длины формулы!
Снимок экрана ниже показывает пример ввода и вывода:
источник
Formula
как он упоминается в сообществе разработчиков Notes / Domino :-)Perl
в качестве заменыPerl 5
илиPerl 5 -p
.sed (
-r
),312825 байт-3 байта благодаря Shaggy -3 байта, потому что
-r
не нужны в выводеTIO
источник
-r
но стоило бы заставить Meta взвесить его.Japt , 18 байт
Когда библиотека сжатия строк Japt достигает скорости сжатия 0% ...
Попробуй
Еще одна 18-байтовая альтернатива:
источник
Октава , 35 байт
Попробуйте онлайн!
42 байта:
Я попытался как-то извлечь «Octave», не выписывая его, так как 6 символов довольно много по сравнению с некоторыми другими названиями языков здесь. К сожалению, я мог только найти
ver
, который выводит структуру с разделенными запятыми полями. Занимает более 6 байтов. :(Попробуйте онлайн!
источник
Рубин
-p
,322726 байт-5 байт, используя ответ Желе Ника Кеннеди .
-1 байт от разделения на другую точку в строке. Также понял, что мой старый bytecount был не прав.
объяснение
Попробуйте онлайн!
источник
Ржавчина , 41 байт
Попробуйте онлайн!
источник
Пакетный, 22 + 3 = 25 байт
+3 байта для именования этого файла
I'm
(с необходимым.bat
расширением для пакетных файлов). Вызвать какI'm hungry
, когда это будет эхоHi hungry, I'm Batch!
.источник
I'm
но здесь это имя сценария, не знаю, является ли он действительным, или если это не интерпретатор со сценарием в текущем путиCMD
, так что это на самом деле сэкономит мне 2 байта?Perl 6 ,
30 2827 байтовПопробуйте онлайн!
источник
Perl 5
-p
,3124 байтаСокращение на основе разъяснений от ОП и предложения от @NahuelFouilleul.
Попробуйте онлайн!
источник
$^X $]
можно использовать специальные переменные, однако 5 короче, чем$]
5
как часть названия языка? то есть, вы могли бы утверждать, что Perl 5 «думает о себе» как «Perl»? Так было до появления Perl 6, и ответы Codegolf должны работать как минимум над одной реализацией языка, так что выберите старую?Perl
достаточно. И что использование этой-p
опции не должно рассматриваться как часть названия языка.Желе ,
1615 байтПолная программа, принимающая строковый аргумент (в формате Python), который печатает результат.
Попробуйте онлайн!
Как?
Примечание:
Ḋ⁾Hio...
работает тоже.источник
Желе ,
2017 байтПопробуйте онлайн!
Монадическая ссылка, принимающая входные данные в качестве аргумента и возвращающая строку Jelly.
объяснение
источник
VBA (Excel), 27
28байтВвод идет в ячейку A1 Активного листа в Excel, запускайте код в Немедленном окне
Использует тот факт, что
"SomeString"SomeValue
иSomeValue"SomeString"
будет неявно объединяться, и что если пропустить третий аргумент изMID
функции, будут взяты все символы с конца ввода - превращение его в функцию «сбросить начальные символы»(-1 байт благодаря Shaggy, но +1, когда OP подтвердил, что все ответы должны заканчиваться восклицательным знаком)
(-1 байт благодаря Тейлору Скотту, напомнившему мне, что окончательная двойная кавычка была необязательной)
источник
Hi
и заменить5
на4
?"
из этого решения, и, поскольку вы используете оценочную нотацию (квадратные скобки), вы должны пометить это решение как Excel VBA, так как эта нотация доступна только в ExcelJ , 22 байта
Попробуйте онлайн!
источник
05AB1E ,
2321 байтСохранено 2 байта благодаря Кевину Круйссену
Попробуйте онлайн!
объяснение
источник
•äƵí•hR
как на 1 байт короче, чем"05AB1E"
. :)•äƵí•hR
, но, как вы говорите, это, к сожалению, здесь не спасает.QuadR , 22 байта
Попробуйте онлайн!
Это заменяет:
^...
три начальных символаи
$
конец строкис участием
Hi
и
,I'm QuadR
соответственно
источник
⎕R
оператора APL, не предназначенного для игры в гольф .Сетчатка ,
2221 байтПопробуйте онлайн! Ссылка включает в себя тестовые случаи. Не работает в Retina 0.8.2, поэтому вместо этого адаптируйте ответ @ Adám QuadR. Объяснение: Шаблон пуст, поэтому он совпадает в каждой позиции входной строки. Нам нужен только третий (или четвертый сработает) матч. Подстановка затем применяется к этому совпадению. В рамках этой замены
$'
относится к остальной части строки и$`
относится к началу строки.источник
Сетчатка 0.8.2 ,
262523 байта-1 байт благодаря @attinat .
-2 байта, портируя ответ @ Adám QuadR , так что убедитесь, что проголосовали за него !!
PS: @Neil опубликовал более короткий ответ Retina в новой версии , поэтому я явно изменил этот ответ на Retina 0.8.2.
Попробуйте онлайн.
Объяснение:
Замените первые три символа на «Привет»:
А затем добавить завершающий "Я Retina!" (заменив конец строки):
источник
Баш, 24 байта
TIO
источник
bash
на,$0
чтобы сохранить пару байтов$0
напечатал бы имя сценария или выполнялся,bash -c 'echo Hi ${@:2}, $1 $0!' bash $@
но должен был бы иметь размеры