В стандартной библиотеке C имена заголовков заканчиваются .h
суффиксом:
stdio.h
В C ++ эти имена заголовков доступны в альтернативной форме с c
префиксом:
cstdio
Напишите функцию, которая преобразует первую форму во вторую. Вы можете выполнить преобразование на месте или оставить исходную строку без изменений и вернуть новую строку. Все, что кажется естественным на вашем языке выбора.
Код должен быть скомпилирован / интерпретирован без ошибок. Предупреждения компилятора приемлемы.
Вот ваше базовое решение C. Он имеет 70 символов и выдает предупреждение о strlen
:
void f(char*h){int i=strlen(h);h[--i]=0;while(--i)h[i]=h[i-1];*h='c';}
Самое короткое решение (измеряется количеством символов) выигрывает.
Обновление: если выбранный вами язык не поддерживает функции, также допустимы целые программы.
Обновление: Как предлагает FUZxxl, вот полный список заголовочных файлов в стандартной библиотеке C:
assert.h
ctype.h
errno.h
float.h
limits.h
locale.h
math.h
setjmp.h
signal.h
stdarg.h
stddef.h
stdio.h
stdlib.h
string.h
time.h
В частности, нет заголовков с несколькими точками в них.
источник
Питон: 19 символов
источник
CJam, 6 байтов
Это полная программа, которая читает строку через STDIN
Пояснение :
Попробуйте это онлайн здесь
источник
-2
так хорошо, какW(
?Java 8 - 25 символов
источник
брейкфук -
2523 байтаЭто целая программа, которая принимает данные от STDIN.
источник
>
в начале.Haskell - 23 персонажа
Haskell - 16 символов, как предложено Ними
источник
init.init
вместо взятия всех до первого.
экономит несколько байтов.С, 38
См на идеоне
s
является указателем на входную строку иo
является местом, куда вывод должен быть записан.Я нашел способ злоупотреблять
snprintf
. Выходная строка обычно оказывается на один символ короче входной, и максимальная длина записываемой строки наsnprintf
1 меньшеn
аргумента, поэтому она обрезает.h
. Примечание: этот метод не будет работать с реализацией Microsoft, потому что он делает неправильные вещи и не может завершить строку нулем.источник
Пакетный файл Windows 11
Первый переданный параметр - это% 1. Модификатор ~ n возвращает только имя файла без расширения.
Если также допустимо выводить расширенную команду на экран, то начальный @ можно удалить.
источник
Архитектура узла TIS Тип T21 - 85 байт
Этот ответ просто для удовольствия; язык появился после того, как этот вызов был написан, и поэтому я не могу победить с ним. (Не то чтобы я собирался.)
Хорошо, я немного повеселился с этим. Мне, наверное, стоит просто назвать язык «TIS-100», но зачем ломать символ? : D
TIS-100 - игра о программировании компьютера с совершенно уникальной и причудливой архитектурой. Я написал специальную головоломку для этой задачи, которая позволяет мне принимать входные данные и сравнивать их с известной правильной «строкой». К сожалению, нет способа обрабатывать строки или символы, поэтому эта программа просто использует значение ASCII каждого символа для ввода и вывода.
Если вы хотите увидеть его в действии, вы можете использовать этот эмулятор или просто посмотреть, как я запускаю его в настоящей игре здесь . Обратите внимание, что в видео последняя строка первого узла
D:MOV UP NIL
. Закончив видео, я понял, что могу сыграть в гольфD:ADD UP
. Функционально нет никакой разницы, потому что значение ACC в любом случае немедленно перезаписывается.Это строка, которую я использовал для подсчета байтов:
Это текст каждого непустого узла, разделенного символами новой строки (фактически добавляя 1 байт для каждого узла, используемого после первого, отражая наше правило о коде в нескольких файлах).
источник
Dyalog APL (8 символов)
Это решение точно такое же, как и решение J, которое я представил, но использует на один символ меньше, потому что
↓
оно на один символ меньше}.
.источник
J (9 знаков)
|y
это величина изy
(также называемой абсолютной величины)x }. y
бросает|x
предметы изy
; предметы сбрасываются с фронта, еслиx
положительный, с конца, еслиx
отрицательный.x , y
добавляетx
иy
.'c' , _2 }. y
выполняет преобразование, которое вы хотите; в молчаливом обозначении это может быть выражено как'c' , _2 }. ]
.источник
Страус 0.6.0 , 8 символов
)
является оператором "правильных вариантов". Применительно к строке она превращается, например,`foo`
в`fo` `o`
.;
используется для удаления лишнего символа, и это делается снова.Затем
"c
толкается. Это просто сокращение для`c`
.\+
Меняет местами два верхних элемента стека и объединяет их.источник
Пит (
9x11 = 998X11 = 88)еще одна попытка (2x37 = 74)
Трудно сделать его намного меньше, поскольку ему нужно сгенерировать 99 ('c') и 46 ('.'), И это занимает место в пите.
источник
/dev/null
качестве исходного кода.F # -
39373131 - Потому что типизация в F # рулит!
37
39
источник
гема, 6
( Gema - неясный макроязык.)
источник
Баш, 18
Выход:
источник
GNU sed -r, 14
У sed на самом деле нет никакого понятия о функциях, так что вместо этого вот полная программа sed:
Выход
-r
Была включена в счет , как один дополнительный характер.источник
s/\(.*\)\.h/c\1/
.-r
что передается в sed. Как и в обычном код-гольфе, мне нужно считать это дополнительным баллом.-r
это не стандартная опция и недоступная вне GNU sed. Вы можете изменить название языка на GNU sed, чтобы отразить это.\.h
может быть сокращено до..
Прелюдия , 31 персонаж
Поскольку полные представления программы, по-видимому, приемлемы, вот программа, которая читает заголовок в стиле C из STDIN и печатает заголовок в стиле C ++ в STDOUT:
Это требует стандартного интерпретатора, который печатает вывод в виде кодов символов. Если вы используете интерпретатор Python, вам нужно установить
NUMERIC_OUTPUT = False
.Также требуется, чтобы на STDIN не было завершающей новой строки.
объяснение
В Prelude все строки выполняются параллельно, по одному столбцу за раз. Каждая строка имеет свой собственный стек, инициализированный бесконечным количеством
0
s.Это самое короткое, что я мог придумать, чтобы получить
99
верхний стек (код символаc
). Сначала я складываю18
верхний стек и помещаю9
в нижний стек. Затем нижняя часть ведет обратный отсчет0
в цикле, а верхний стек добавляет больше9
s. Это добавляет к99
верхнему стеку, и нижний стек0
снова остается с s. Обратите внимание, что все+9+
является частью цикла, так что фактически на одну итерацию приходится две операции сложения, но это не проблема, благодаря бесконечному количеству0
s снизу.Теперь
(?)
читает STDIN, по одному символу за раз и помещает в верхний стек. Цикл заканчивается в конце ввода, когда?
толкает ноль.###
избавляется от этого нуля,h
и.
. Теперь следующий цикл извлекает числа из верхнего стека и копирует их в нижний стек. Это существенно меняет стек. Обратите внимание, что открывающая и закрывающая скобки находятся на разных строках - это не проблема, потому что вертикальное положение не)
имеет значения в Prelude, но это экономит мне байт в первой строке.Наконец,
(!)
печатает все символы, пока стек не станет пустым.источник
Pyth, 7 символов
Объяснение:
Попробуй это:
на онлайн компилятор / исполнитель Pyth
Если полные программы были разрешены:
Pyth, 6 символов
источник
PPb
вместо<b_2
C ++ 14, 41 символов
Вдохновлен этим другим ответом. Я сделал это отдельным ответом, потому что здесь я использую функцию, новую в c ++ 14, обобщенную лямбду .
Смотрите это в действии здесь .
источник
T-SQL - 58 символов
Запустите как EXEC Q (ваша строка здесь)
источник
Perl - 20 символов
Обратите внимание, как
c
это голое слово и как таковое требует отсутствияuse strict
. Это должно быть использовано как выражение, а не как утверждение.источник
Марбелоус, 24
Принимает ввод через STDIN, выводит в STDOUT.
Это работает путем проверки каждого байта с помощью
.
(0x46
). Так как0x46
не может поместиться в одну цифру base-36, мы вычитаем 35 (Z
) перед сравнением и добавляем обратно перед выводом.Каждый мрамор дублируется
3W
(трехсторонний дубликатор, но левая сторона сбрасывается со стороны доски). Мрамор, отправленный вниз, получает следующий байт от STDIN. Мрамор справа проверяется.
, затем выводится или отправляется!!
, что завершает программу.Программа начинается с прохода
c
(0x63
) через, который будет выводиться в STDOUT.Попробуйте это онлайн здесь. Библиотеки должны быть включены, цилиндрические доски должны быть отключены.
источник
С, 64
Слегка короче, чем c ссылка:
Вероятно, больше игры в гольф будет сделано с этим.
C, 48 (libc hack)
На
strcpy
man-странице прямо сказано: «Строки не должны перекрываться». Однако я обнаружил, что используемая мной библиотека libc, похоже, кодируется безопасно для правильной обработки. Это библиотека GNU C (Ubuntu EGLIBC 2.19-0ubuntu6.4) в Ubuntu 14.04.источник
-std=c89
. codegolf.stackexchange.com/a/2204/11259int
.JavaScript (ES6) 20
Не могу поверить, что ES6 все еще отсутствует
источник
Perl, 15 (14 + -p)
источник
мк, 34 символа
mk (1) - это замена Plan 9 для make. Просто для удовольствия, этот mkfile преобразует имена заголовков C в имена заголовков C ++:
Существует одна вкладка до
:
иecho
. Используйте как это:источник
CoffeeScript - 16
источник
TI-BASIC 83/84, 15
источник
Р, 33
Эта функция использует регулярные выражения.
Пример использования:
источник