Todos conocemos el clásico chiste de papá que dice algo así:
Alguien dice una oración para describirse a sí mismo (p . Ej.
I'm tired
OI'm confused
).Aparece un entusiasta de bromas de papá y responde
Hi <adjective>, I'm Dad!
, porque las presentaciones siguen el mismo formato (I'm Peter
sigue el mismo formato queI'm hungry
).
Su trabajo es tomar una entrada en forma de autodescriptor y generar el formulario de broma de papá apropiado, pero en lugar de usar la palabra "papá", usará el nombre del lenguaje de programación que está programando en.
Casos de prueba (suponga que Python los está analizando):
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!
Ahora suponga que Golfscript analiza estos casos de prueba:
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!
El desafío exacto:
Tome una cadena en el formato de autodescripción (
I'm <adjective>
oI'm a(n) <noun>
) usando la entrada estándar o mediante una función.Suponga que no hay puntuación final.
Suponga que la palabra
I'm
se usa y noI am
.
Conviértalo a un formato de broma de papá: vea los ejemplos anteriores para saber exactamente cómo debería verse.
Otras cosas:
Este es el código de golf , por lo que gana el conteo de bytes más corto.
Siga las reglas estándar de lagunas legales, ninguna de ellas, por favor.
¡Que te diviertas!
Tabla de clasificación
Puede ver la tabla de clasificación para esta publicación expandiendo el widget / fragmento a continuación. Para que su publicación se incluya en las clasificaciones, necesita un encabezado ( # header text
) con la siguiente información:
El nombre del idioma (finalícelo con una coma
,
o guión-
), seguido de ...El recuento de bytes, como el último número que aparece en su encabezado.
Por ejemplo, JavaScript (ES6), 72 bytes
es válido, pero Fortran, 143 bytes (8-bit)
no es válido porque el recuento de bytes no es el último número en el encabezado (su respuesta se reconocerá como 8 bytes; no aproveche esto).
<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>
fuente
Respuestas:
V , 13 bytes
Pruébalo en línea!
Inspirado por la respuesta de tsh
Esto aprovecha el hecho de que
I'm
se arranca desde el inicio de la cadena al eliminar el texto desde el principio y se pega al final con el<C-r>"
modo de inserción.fuente
I'm
a<C-O>p
y luego nota que su respuesta ...escape
tiene 5 caracteres?0x1B
, pero es más fácil y más obvio lo que significa si lo escribes como<esc>
. Lo mismo para<C-r>
, que es realmente0x12
C (gcc) ,
594233 bytes-17 bytes gracias a @Conor O'Brien al notar que la importación no era necesaria
-9 bytes gracias a @tsh que señala una forma UB más corta de escribir la función
Pruébalo en línea!
Corta los primeros 3 caracteres de la entrada (los elimina
I'm
) y los rodea con el texto deseado.fuente
int
también es opcional.char*
, tal vez ...; así quea(x){printf("Hi%s, I'm C!",x+3);}
debería funcionarint
puede contener unchar*
sin truncarlo), a pesar del comportamiento indefinido. En x86-64 gcc en Linux, siempre fallará en un ejecutable PIE (normalmente no hay punteros en los 32 bits bajos del espacio de direcciones virtuales, y gcc no copiará los 32 bits altos mientras se calcula ax+3
partir de la función arg en El registro RDI). Pero en un ejecutable que no es PIE, las direcciones estáticas están en los 31 bits bajos del espacio de direcciones virtuales, por lo que si la persona que llama pasó un literal de cadena o un búfer estático, funcionaría.V , 13 bytes
Pruébalo en línea!
Nuevo a
V
. Lo supe hace unos 30 minutos. De todos modos, este idioma se elige solo porque su nombre solo cuesta 1 byte. No estoy seguro de cómo enviar la<End>
clave en V. La mayoría de los entornos vim aceptarían<End>
como reemplazo<Esc>A
en este ejemplo. Pero, ya sabes, V es 2 caracteres más corto que vim. :)Gracias a @Candy Gumdrop , ahorra 1 byte.
fuente
c3l
acE
.E
antes.cW
(que parece diferente, pero en realidad es idéntico acE
) o3s
. ¡Buen trabajo! Estaba a punto de publicar casi esta respuesta exacta cuando vi que ya había respuestas de 2 V, lo que fue una agradable sorpresa. He intentado varios enfoques diferentes, pero no estoy seguro de si será posible obtener <13 bytes.Stax , 13 bytes
Ejecutar y depurarlo
Desempaquetado, sin golf y comentado, se ve así.
Moví el comentario final una línea hacia arriba ya que nada puede seguir un literal de cadena sin terminar.
Ejecute este
fuente
brainfuck, 164
Pruébalo en línea!
El "brainfuck!" parte de la cadena se genera con esta herramienta, probablemente puede jugarse más a mano.
fuente
Excel,
3633 bytes-3 bytes gracias a Johan du Toit.
La entrada entra en A1.
Primer intento:
fuente
="Hi "&MID(B13,4,99)&", I'm Excel"
34 bytesA1
en lugar deB13
hacerlo en realidad 33 bytes.Python 3 ,
3534 bytesPruébalo en línea!
-1 byte gracias a Encarnación de la ignorancia
También 34 bytes, utilizando las nuevas cadenas formateadas, gracias a Gábor Fekete:
Pruébalo en línea!
fuente
lambda s:
y reemplazar%s[3:]
con%input()[3:]
? (-4 bytes)print()
7 bytes más, por lo que las respuestas de Python generalmente usan lambdas.lambda s
, he definido una función (anónima). Si observa el encabezado y el pie de página en el enlace TIO, nombro esa funciónf
y luego la llamo conf("I'm whatever")
. Entonces la función devuelve la salida esperada. Con su fragmento, no imprime ni regresa de una función; solo tiene un código que evalúa el resultado correcto, pero no hace nada con él. Puede ejecutar programas varias veces, puede llamar a funciones varias veces, pero un fragmento es solo un fragmento.R
454439 bytes@Giuseppe Editar
@AaronHayman Editar
Pruébalo en línea!
fuente
"(I'm )
con"(.* )
I'm a programmer
(muchos espacios) debido a la codiciasub
a"I'm(.*)" and "Hi\\1, I'm R"
y 3 bytes de entrada mediante la adopción de la entrada estándar usandoscan
: Pruébelo en líneaPHP ,
3432 bytesPruébalo en línea!
Entrada vía
STDIN
, llamada con -F.fuente
x86 ,
3736 bytesDesmontado:
Un programa DOS ejecutable independiente. Entrada desde la línea de comando, salida a la pantalla.
Descargue y pruebe DAD.COM .
* El nombre exacto del "idioma" aquí es un poco ambiguo ya que el código de máquina de la CPU no es realmente un idioma en un sentido formal. Ir con "x86" como un nombre generalmente entendido y aceptado para la plataforma de destino.
fuente
Java, 36 bytes
Pruébalo en línea.
fuente
Espacio en blanco , 267 bytes
Se agregaron letras
S
(espacio),T
(tabulación) yN
(nueva línea) solo como resaltado.[..._some_action]
agregado solo como explicación.Dado que el espacio en blanco ingresa un carácter a la vez, la entrada debe contener una nueva línea final para que sepa cuándo detener la lectura de caracteres y se realiza la entrada.
Pruébelo en línea (solo con espacios en bruto, pestañas y nuevas líneas).
Explicación en pseudocódigo:
Los caracteres de
", I'm Whitespace!"
se empujan en orden inverso y luego se imprimen en un bucle. Todos los valores de estos caracteres también se reducen en 102, que se agregan en el bucle antes de imprimir para guardar bytes. Esta constante 102 para bajar cada carácter se genera con este programa Java . Además, en lugar de presionar el valor-70
para ambos espacios dos veces, el segundo espacio"!ecapsetihW m'I ,"
se copia del primero con la copia incorporada para guardar algunos bytes.fuente
Lenguaje de fórmulas IBM / Lotus Notes,
6162 bytes+1 porque no me había dado cuenta
!
al final de la salida.Fórmula de campo calculada que toma su entrada de un campo editable
i
. Fracasaría para "I'm an I'm", pero dado que eso no tendría ningún sentido, supongo que no sucederá.¡Lástima que con 32 bytes, el nombre del idioma es más de la mitad de la longitud total de la fórmula!
Captura de pantalla a continuación que muestra un ejemplo de entrada y salida:
fuente
Formula
Perl
como sustitución dePerl 5
oPerl 5 -p
.sed (
-r
),312825 bytes-3 bytes gracias a Shaggy -3 bytes porque
-r
no es necesario en la salidaTIO
fuente
-r
pero valdría la pena que Meta lo considerara.Japt , 18 bytes
Cuando la biblioteca de compresión de cadenas de Japt alcanza una tasa de compresión del 0% ...
Intentalo
Otra alternativa de 18 bytes:
fuente
Octava , 35 bytes
Pruébalo en línea!
42 bytes:
Intenté recuperar "Octave" de alguna manera, sin escribirlo, ya que 6 caracteres es bastante en comparación con algunos de los otros nombres de idiomas aquí. Desafortunadamente, solo pude encontrar
ver
, que genera una estructura con campos separados por comas. Toma más de 6 bytes. :(Pruébalo en línea!
fuente
Ruby
-p
,322726 bytes-5 bytes aprovechando la respuesta Jelly de Nick Kennedy .
-1 byte de división en un punto diferente en la cadena. También me di cuenta de que mi antiguo bytecount estaba equivocado.
Explicación
Pruébalo en línea!
fuente
Óxido , 41 bytes
Pruébalo en línea!
fuente
Lote, 22 + 3 = 25 bytes
+3 bytes para nombrar este archivo
I'm
(con la.bat
extensión requerida para archivos Batch). Invocar comoI'm hungry
, cuando hará ecoHi hungry, I'm Batch!
.fuente
I'm
pero aquí está el nombre del guión, no sé si es válido, o a menos que sea el intérprete con el guión en la ruta actualCMD
, entonces ¿eso realmente me ahorraría 2 bytes?Perl 6 ,
30 2827 bytesPruébalo en línea!
fuente
Perl 5
-p
,3124 bytesReducción basada en aclaraciones de OP y una sugerencia de @NahuelFouilleul.
Pruébalo en línea!
fuente
$^X $]
podrían usarse variables especiales, sin embargo 5 es más corto que$]
5
como parte del nombre del idioma? es decir, ¿podría argumentar que Perl 5 "se considera" como "Perl"? Ese fue el caso antes de que existiera Perl 6, y las respuestas de codegolf solo necesitan trabajar en al menos una implementación del lenguaje, ¿entonces elegir una antigua?Perl
es suficiente. Y que el uso de la-p
opción no tiene que considerarse parte del nombre del idioma.Jalea ,
1615 bytesUn programa completo que acepta un argumento de cadena (con formato Python) que imprime el resultado.
Pruébalo en línea!
¿Cómo?
Nota:
Ḋ⁾Hio...
también funciona.fuente
Jalea ,
2017 bytesPruébalo en línea!
Un enlace monádico que toma la entrada como argumento y devuelve una cadena Jelly.
Explicación
fuente
VBA (Excel), 27
28bytesLa entrada va en la celda A1 de la hoja activa en Excel, ejecute el código en la ventana Inmediato
Se aprovecha del hecho de que
"SomeString"SomeValue
eSomeValue"SomeString"
implícitamente concatenar, y que omitiendo el tercer argumento de laMID
función se llevará a todos los caracteres desde el final de la entrada - convirtiéndolo en un "vertedero caracteres iniciales" función(-1 byte gracias a Shaggy, pero +1 cuando OP confirmó que todas las respuestas deberían terminar con un signo de exclamación)
(-1 byte gracias a Taylor Scott recordándome que la cita doble final era opcional)
fuente
Hi
y reemplazarlo5
con4
?"
de esta solución, y a medida que usa la notación de evaluación (los corchetes) debe marcar esta solución como Excel VBA, ya que esa notación solo está disponible en ExcelJ , 22 bytes
Pruébalo en línea!
fuente
05AB1E ,
2321 bytesGuardado 2 bytes gracias a Kevin Cruijssen
Pruébalo en línea!
Explicación
fuente
•äƵí•hR
es 1 byte más corto que"05AB1E"
. :)•äƵí•hR
también, pero como dices, desafortunadamente no guarda ninguno aquí.QuadR , 22 bytes
Pruébalo en línea!
Esto reemplaza:
^...
tres caracteres inicialesy
$
el final de líneacon
Hi
y
,I'm QuadR
respectivamente
fuente
⎕R
operador APL .Retina ,
2221 bytesPruébalo en línea! El enlace incluye casos de prueba. No funciona en Retina 0.8.2, así que adapta la respuesta QuadR de @ Adám en su lugar. Explicación: El patrón está vacío, por lo que coincide en cada posición en la cadena de entrada. Sin embargo, solo necesitamos el tercer partido (o el cuarto funcionaría). La sustitución se aplica a ese partido. Dentro de esa sustitución, se
$'
refiere al resto de la cadena y$`
al principio de la cadena.fuente
Retina 0.8.2 ,
262523 bytes-1 byte gracias a @attinat .
-2 bytes portando la respuesta QuadR de @ Adám , ¡así que asegúrate de votarlo!
PD: @Neil publicó una respuesta Retina más corta en la nueva versión , así que he cambiado esta respuesta a Retina 0.8.2 explícitamente.
Pruébalo en línea.
Explicación:
Reemplace los primeros tres caracteres con "Hola":
Y luego agregue un final "¡Soy Retina!" (reemplazando el final de la cadena):
fuente
bash, 24 bytes
TIO
fuente
bash
con$0
para guardar un par de bytes$0
imprimiría el nombre del script o se ejecutaría,bash -c 'echo Hi ${@:2}, $1 $0!' bash $@
pero debería contar en tamaño