En la biblioteca estándar de C, los nombres de encabezado terminan con un .h
sufijo:
stdio.h
En C ++, esos nombres de encabezado están disponibles en una forma alternativa, con un c
prefijo en su lugar:
cstdio
Escribe una función que convierta la primera forma en la segunda. Puede realizar la conversión en el lugar, o dejar la cadena original intacta y devolver una nueva cadena. Cualquier cosa que se sienta natural en su idioma de elección.
El código debe compilarse / interpretarse sin errores. Las advertencias del compilador son aceptables.
Aquí está su solución de línea de base C. Tiene 70 caracteres y genera una advertencia sobre strlen
:
void f(char*h){int i=strlen(h);h[--i]=0;while(--i)h[i]=h[i-1];*h='c';}
La solución más corta (medida en número de caracteres) gana.
Actualización: si su idioma de elección no admite funciones, también se aceptan programas completos.
Actualización: según lo sugerido por FUZxxl, aquí hay una lista completa de los archivos de encabezado en la biblioteca estándar de 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
Específicamente, no hay nombres de encabezado con múltiples puntos en ellos.
fuente
Python: 19 caracteres
fuente
CJam, 6 bytes
Este es un programa completo que lee la cadena a través de STDIN
Explicacion :
Pruébalo en línea aquí
fuente
-2
es tan bueno comoW(
?Java 8 - 25 caracteres
fuente
brainfuck -
2523 bytesEste es un programa completo que recibe información de STDIN.
fuente
>
al principio.Haskell - 23 caracteres
Haskell - 16 caracteres, como lo sugiere nimi
fuente
init.init
lugar de llevarlos todos al primero, se.
guardan algunos bytes.C, 38
Ver en Ideone
s
es un puntero a la cadena de entrada yo
es donde se debe escribir la salida.Encontré una manera de abusar
snprintf
. La cadena de salida es convenientemente un carácter más corto que la entrada, y la longitud máxima de la cadena escrita porsnprintf
1 es menor que eln
argumento, por lo que corta el.h
. Nota: esta técnica no funcionará con la implementación de Microsoft porque hace lo incorrecto y no puede anular la cadena.fuente
Archivo por lotes de Windows 11
El primer parámetro pasado es% 1. El modificador ~ n devuelve solo el nombre de archivo sin extensión.
Si es aceptable hacer eco del comando expandido en la pantalla también, entonces la @ inicial podría eliminarse.
fuente
Arquitectura de tipo de nodo TIS T21 - 85 bytes
Esta respuesta es solo por diversión; el lenguaje surgió después de que se escribió este desafío y, por lo tanto, no puedo ganar con él. (No es que fuera a hacerlo).
De acuerdo, me divertí un poco con este. Probablemente debería llamar al lenguaje "TIS-100", pero ¿por qué romper el carácter? :RE
TIS-100 es un juego sobre la programación de una computadora con una arquitectura totalmente única y extraña. Escribí un rompecabezas personalizado para este desafío, que me permite tomar datos y verificar resultados con una "cadena" conocida y correcta. Desafortunadamente, no hay forma de manejar cadenas o caracteres, por lo que este programa simplemente usa el valor ASCII de cada carácter para entrada y salida.
Si desea verlo en acción, puede usar este emulador , o simplemente verme ejecutarlo en el juego real aquí . Tenga en cuenta que en el video, la línea final del primer nodo es
D:MOV UP NIL
. Después de terminar el video, me di cuenta de que podía jugar golfD:ADD UP
. Funcionalmente no hay diferencia, porque el valor de ACC se sobrescribe inmediatamente de todos modos.Esta es la cadena que utilicé para mi recuento de bytes:
Ese es el texto de cada nodo no vacío, separado por líneas nuevas (agregando efectivamente 1 byte por cada nodo usado más allá del primero, reflejando nuestra regla sobre el código en múltiples archivos).
fuente
Dyalog APL (8 caracteres)
Esta solución es exactamente la misma que la solución J que presenté pero usa un carácter menos debido a que
↓
es un carácter menor que}.
.fuente
J (9 caracteres)
|y
es la magnitud dey
(también llamado valor absoluto)x }. y
deja caer|x
objetos dey
; los elementos se dejan caer desde el frente six
es positivo, desde el final six
es negativo.x , y
Anexax
yy
.'c' , _2 }. y
hace la transformación que quieres; en notación tácita esto se puede expresar como'c' , _2 }. ]
.fuente
Avestruz 0.6.0 , 8 caracteres
)
es el operador de "descompresión correcta". Cuando se aplica a una cadena, se convierte, por ejemplo,`foo`
en`fo` `o`
.;
se usa para extraer el carácter adicional, y esto se hace nuevamente.Entonces,
"c
es empujado. Esto es simplemente una abreviatura de`c`
.\+
intercambia los dos elementos superiores de la pila y los concatena.fuente
piet (
9x11 = 998X11 = 88)otro intento (2x37 = 74)
Es difícil hacerlo mucho más pequeño ya que necesita generar un 99 ('c') y un 46 ('.'), Y eso toma espacio en piet.
fuente
/dev/null
como código fuente.F # -
39373131 - ¡Porque la diferencia de tipos en rocas F #!
37
39
fuente
gema, 6
( Gema es un lenguaje macro oscuro).
fuente
Bash, 18
Salida:
fuente
GNU sed -r, 14
sed realmente no tiene ningún concepto de funciones, así que aquí hay un programa sed completo:
Salida
El
-r
ha sido incluido en la partitura como un personaje extra.fuente
s/\(.*\)\.h/c\1/
.-r
se pasa a sed. Según el código de golf habitual , necesito contar eso como un punto extra.-r
no es una opción estándar y no está disponible fuera de GNU sed. Es posible que desee cambiar el nombre del idioma a GNU sed para reflejar eso.\.h
se puede acortar a..
Preludio , 31 caracteres
Dado que las presentaciones completas del programa son aparentemente aceptables, aquí hay un programa que lee el encabezado de estilo C de STDIN e imprime el encabezado de estilo C ++ en STDOUT:
Esto requiere un intérprete compatible con el estándar que imprima los resultados como códigos de caracteres. Si está utilizando el intérprete de Python , deberá configurarlo
NUMERIC_OUTPUT = False
.También requiere que no haya una nueva línea final en STDIN.
Explicación
En Preludio, todas las líneas se ejecutan en paralelo, una columna a la vez. Cada línea tiene su propia pila, inicializada en una cantidad infinita de
0
s.Este es el más corto que se me ocurrió para obtener un
99
en la pila superior (el código de carácter dec
). Primero sumo18
en la pila superior y empujo a9
en la pila inferior. La parte inferior luego cuenta hacia atrás0
en un bucle, mientras que la pila superior agrega más9
s. Esto se suma a99
la pila superior, y la pila inferior se deja con0
s nuevamente. Tenga en cuenta que todo+9+
es parte del ciclo, por lo que en realidad hay dos operaciones de suma por iteración, pero eso no es un problema, gracias al suministro infinito de0
s debajo.Ahora
(?)
lee STDIN, un personaje a la vez y empuja a la pila superior. El bucle termina al final de la entrada, cuando?
empuja un cero.###
se deshace de ese cero, elh
y el.
. Ahora el siguiente ciclo muestra los números de la pila superior mientras los copia en la pila inferior. Esto esencialmente invierte la pila. Tenga en cuenta que los paréntesis de apertura y cierre están en diferentes líneas; esto no es un problema, porque la posición vertical de la)
es irrelevante en Preludio, pero me ahorra un byte en la primera línea.Por último,
(!)
imprime todos los caracteres hasta que la pila esté vacía.fuente
Pyth, 7 caracteres
Explicación:
Prueba esto:
en el compilador / ejecutor de Pyth en línea
Si se permitieran programas completos:
Pyth, 6 caracteres
fuente
PPb
lugar de<b_2
C ++ 14, 41 caracteres
Inspirado por esta otra respuesta. Hice una respuesta por separado porque aquí uso una función que es nueva en c ++ 14, lambda genérico .
Véalo en acción aquí .
fuente
T-SQL - 58 caracteres
Ejecutar como EXEC Q (su cadena aquí)
fuente
Perl - 20 caracteres
Tenga en cuenta cómo
c
es una palabra simple y, como tal, esto requiere una falta deuse strict
. Esto debe usarse como una expresión, no como una declaración.fuente
Marbelous, 24
Toma entrada a través de STDIN, salidas a STDOUT.
Esto funciona comprobando cada byte con
.
(0x46
). Como0x46
no puede caber dentro de un solo dígito base-36, restamos 35 (Z
) antes de comparar y lo sumamos nuevamente antes de generar.Cada canica está duplicada por
3W
( duplicador de tres vías, pero el lado izquierdo se descarta del lado del tablero). El mármol enviado hacia abajo recupera el siguiente byte de STDIN. La canica a la derecha se verifica y.
luego se envía o se envía a!!
, lo que finaliza el programa.El programa comienza pasando
c
(0x63
) a través, que se enviará a STDOUT.Pruébelo en línea aquí. Las bibliotecas deben estar habilitadas, las placas cilíndricas deben estar deshabilitadas.
fuente
C, 64
Un poco más corto que la referencia c:
Probablemente más golf para hacer con esto.
C, 48 (hack de libc)
La página de
strcpy
manual indica explícitamente "Las cadenas no pueden superponerse". Sin embargo, descubrí que la libc que estoy usando parece estar codificada de manera segura para manejar esto correctamente de todos modos. Esta es la Biblioteca GNU C (Ubuntu EGLIBC 2.19-0ubuntu6.4) en Ubuntu 14.04.fuente
-std=c89
. codegolf.stackexchange.com/a/2204/11259int
.JavaScript (ES6) 20
No puedo creer que ES6 todavía faltara
fuente
Perl, 15 (14 + -p)
fuente
mk, 34 caracteres
mk (1) es el reemplazo del Plan 9 para make. Solo por diversión, este archivo mk convierte los nombres de encabezado C en nombres de encabezado C ++:
Hay una sola pestaña antes
:
yecho
. Usar así:fuente
CoffeeScript - 16
fuente
TI-BASIC 83/84, 15
fuente
R, 33
Esta función usa expresiones regulares.
Ejemplo de uso:
fuente