Todos conhecemos a piada clássica do pai que é mais ou menos assim:
Alguém diz uma frase para se descrever (por exemplo,
I'm tired
ouI'm confused
).Um entusiasta da piada do pai aparece e responde
Hi <adjective>, I'm Dad!
, porque as apresentações seguem o mesmo formato (I'm Peter
segue o mesmo formato queI'm hungry
).
Seu trabalho é receber uma entrada na forma de um autodescritor e gerar o formulário de piada do pai apropriado, mas em vez de usar a palavra "Pai", você usará o nome da linguagem de programação que está programando no.
Casos de teste (suponha que eles estejam sendo analisados pelo 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!
Agora assuma que esses casos de teste estão sendo analisados pelo 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!
O desafio exato:
Pegue uma sequência no formato de auto-descritor (
I'm <adjective>
ouI'm a(n) <noun>
) usando entrada padrão ou através de uma função.Suponha que não há pontuação final.
Suponha que a palavra
I'm
seja usada e nãoI am
.
Converta-o para um formato de piada de pai - veja os exemplos acima para saber exatamente como isso deve ser.
Outras coisas:
Isso é código-golfe , e a menor contagem de bytes vence.
Siga as regras padrão das brechas - nenhuma delas, por favor.
Diverta-se!
Entre os melhores
Você pode visualizar o cabeçalho desta postagem expandindo o widget / snippet abaixo. Para que sua postagem seja incluída na classificação, você precisa de um cabeçalho ( # header text
) com as seguintes informações:
O nome do idioma (termine com vírgula
,
ou hífen-
), seguido por ...A contagem de bytes, como o último número a aparecer no seu cabeçalho.
Por exemplo, JavaScript (ES6), 72 bytes
é válido, mas Fortran, 143 bytes (8-bit)
é inválido porque a contagem de bytes não é o último número no cabeçalho (sua resposta será reconhecida como 8 bytes - não tire proveito disso).
<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>
fonte
Respostas:
V , 13 bytes
Experimente online!
Inspirado pela resposta do tsh
Isso tira vantagem do fato de que
I'm
é arrancado do início da string ao excluir o texto do início e o cola até o final com o<C-r>"
modo de inserção.fonte
I'm
para<C-O>p
em seguida, observe a sua resposta ...escape
tem 5 caracteres ???0x1B
, mas é mais fácil e mais óbvio o que significa se você escrever como<esc>
. O mesmo para<C-r>
, o que é realmente0x12
C (gcc) ,
594233 bytes-17 bytes graças a @Conor O'Brien notando que a importação não era necessária
-9 bytes graças a @tsh indicando uma maneira mais curta e UB de escrever a função
Experimente online!
Corta os 3 primeiros caracteres da entrada (remove
I'm
) e o envolve com o texto desejado.fonte
int
também é opcional.char*
, talvez ...; entãoa(x){printf("Hi%s, I'm C!",x+3);}
deve funcionarint
pode reter umchar*
sem truncá-lo), apesar do comportamento indefinido. No x86-64 gcc no Linux, sempre falha em um executável PIE (normalmente não há ponteiros nos 32 bits baixos do espaço de endereço virtual, e o gcc não copia os 32 bits altos ao calcular ax+3
partir da função arg em registro RDI). Porém, em um executável não PIE, os endereços estáticos estão com pouco espaço de endereçamento virtual em 31 bits; portanto, se o chamador passar um literal de seqüência de caracteres ou um buffer estático, isso funcionará.V , 13 bytes
Experimente online!
Novo no
V
. Só sabia disso há 30 minutos. De qualquer forma, esse idioma é escolhido apenas porque seu nome custa apenas 1 byte. Não tenho certeza de como enviar a<End>
chave no V. A maioria dos ambientes vim aceitaria<End>
como substituição<Esc>A
neste exemplo. Mas, você sabe, V é 2 caracteres menor que o vim. :)Graças a @Candy Gumdrop , economiza 1 byte.
fonte
c3l
paracE
.E
antes.cW
(o que parece diferente, mas na verdade é idêntico acE
) ou3s
. Bom trabalho! Eu estava prestes a postar quase exatamente essa resposta quando vi que já havia respostas em 2 V, o que foi uma surpresa agradável. Eu tentei várias abordagens diferentes, mas não tenho certeza se será possível obter <13 bytes.Stax , 13 bytes
Execute e depure
Descompactado, não jogado e comentado, parece com isso.
Mudei o comentário final para cima uma linha, pois nada pode seguir uma literal de seqüência não terminada.
Execute este
fonte
brainfuck, 164
Experimente online!
O "cérebro!" parte da string é gerada com essa ferramenta, provavelmente pode ser jogada ainda mais à mão.
fonte
Excel,
3633 bytes-3 bytes graças a Johan du Toit.
A entrada entra em A1.
Primeira tentativa:
fonte
="Hi "&MID(B13,4,99)&", I'm Excel"
34 bytesA1
em vez deB13
33 bytes.Python 3 ,
3534 bytesExperimente online!
-1 byte graças à Modalidade de Ignorância
Também 34 bytes, usando as novas seqüências de caracteres formatadas, graças a Gábor Fekete:
Experimente online!
fonte
lambda s:
e substituindo%s[3:]
com%input()[3:]
? (-4 bytes)print()
por mais 7 bytes, razão pela qual as respostas do Python geralmente usam lambdas.lambda s
, eu defini uma função (anônima). Se você olhar o cabeçalho e o rodapé no link TIO, nomeio essa funçãof
e a chamof("I'm whatever")
. Então a função retorna a saída esperada. Com seu snippet, você não imprime nem retorna de uma função - apenas possui um pouco de código que avalia o resultado correto, mas não faz nada com ele. Você pode executar programas várias vezes, pode chamar funções várias vezes, mas um trecho é apenas um trecho.R
454439 bytes@Giuseppe Edit
@AaronHayman Editar
Experimente online!
fonte
"(I'm )
por"(.* )
I'm a programmer
(muitos espaços) por causa da ganânciasub
to"I'm(.*)" and "Hi\\1, I'm R"
e 3 bytes usando a entrada stdin usandoscan
: Experimente on-linePHP ,
3432 bytesExperimente online!
Entrada via
STDIN
, chame com -F.fonte
x86 ,
37.36 bytesDesmontado:
Um programa executável independente do DOS. Entrada da linha de comando, saída para a tela.
Faça o download e teste o DAD.COM .
* O nome exato da "linguagem" aqui é um pouco ambíguo, pois o código da máquina da CPU não é realmente uma linguagem no sentido formal. Indo com "x86" como um nome geralmente aceito e aceito para a plataforma de destino.
fonte
Java, 36 bytes
Experimente online.
fonte
Espaço em branco , 267 bytes
Letras
S
(espaço),T
(tabulação) eN
(nova linha) adicionadas apenas como destaque.[..._some_action]
adicionado apenas como explicação.Como o espaço em branco insere um caractere de cada vez, a entrada deve conter uma nova linha à direita, para que ele saiba quando parar de ler os caracteres e a entrada está concluída.
Experimente online (apenas com espaços brutos, guias e novas linhas).
Explicação em pseudo-código:
Os caracteres de
", I'm Whitespace!"
são empurrados na ordem inversa e, em seguida, impressos em um loop. Todos os valores desses caracteres também são reduzidos em 102, que são adicionados ao loop antes da impressão para salvar bytes. Essa constante 102 para abaixar cada caractere é gerada com este programa Java . Além disso, em vez de empurrar o valor-70
para os dois espaços duas vezes, o segundo espaço"!ecapsetihW m'I ,"
é copiado do primeiro com o Copy incorporado para salvar alguns bytes.fonte
IBM / Lotus Notes Formula Language,
6162 bytes+1 porque eu não havia notado
!
o final da saída.Fórmula de campo computado que recebe sua entrada de um campo editável
i
. Seria um fracasso para "Eu sou um eu", mas como isso não faria nenhum sentido, estou assumindo que isso não acontecerá.Pena que, com 32 bytes, o nome do idioma seja mais da metade do comprimento total da fórmula!
Captura de tela abaixo mostrando um exemplo de entrada e saída:
fonte
Formula
como é referido na comunidade de desenvolvedores do Notes / Domino :-)Perl
como uma substituição paraPerl 5
ouPerl 5 -p
.sed (
-r
),312825 bytes-3 bytes graças a Shaggy -3 bytes porque
-r
não é necessário na saídaTIO
fonte
-r
mas valeria a pena fazer com que o Meta pesasse nela.Japonês , 18 bytes
Quando a biblioteca de compactação de string do Japt atinge uma taxa de compactação de 0% ...
Tente
Outra alternativa de 18 bytes:
fonte
Oitava , 35 bytes
Experimente online!
42 bytes:
Tentei recuperar o "Octave" de alguma forma, sem escrevê-lo, pois 6 caracteres são bastante comparados a alguns dos outros nomes de idiomas aqui. Infelizmente, só consegui encontrar
ver
, o que gera uma estrutura com campos separados por vírgula. Leva mais de 6 bytes. :(Experimente online!
fonte
Ruby
-p
,322726 bytes-5 bytes, aproveitando a resposta Jelly de Nick Kennedy .
-1 byte da divisão em um ponto diferente na string. Também percebi que meu antigo número de dígitos estava errado.
Explicação
Experimente online!
fonte
Ferrugem , 41 bytes
Experimente online!
fonte
Lote, 22 + 3 = 25 bytes
+3 bytes para nomear este arquivo
I'm
(com a.bat
extensão necessária para arquivos em lote). Invoque comoI'm hungry
, quando ecoaráHi hungry, I'm Batch!
.fonte
I'm
mas aqui está o nome do script, não sei se é válido ou a menos que seja o intérprete com o script no caminho atualCMD
, então isso me salvaria 2 bytes?Perl 6 ,
30 2827 bytesExperimente online!
fonte
Perl 5
-p
,3124 bytesCorte com base nos esclarecimentos do OP e em uma sugestão do @NahuelFouilleul.
Experimente online!
fonte
$^X $]
variáveis especiais possam ser usadas, no entanto, 5 é menor que$]
5
como parte do nome do idioma? ou seja, você poderia argumentar que o Perl 5 "se considera" como "Perl"? Esse foi o caso antes da existência do Perl 6, e as respostas do codegolf precisam apenas trabalhar em pelo menos uma implementação da linguagem, então escolha uma antiga?Perl
é suficiente. E que o uso da-p
opção não precisa ser considerado parte do nome do idioma.Geléia ,
1615 bytesUm programa completo que aceita um argumento de string (formatado em Python) que imprime o resultado.
Experimente online!
Quão?
Nota:
Ḋ⁾Hio...
funciona também.fonte
Geléia ,
2017 bytesExperimente online!
Um link monádico tomando a entrada como argumento e retornando uma sequência Jelly.
Explicação
fonte
VBA (Excel), 27
28bytesA entrada entra na célula A1 da Planilha Ativa no Excel, execute o código na Janela Imediata
Tira proveito do fato de que
"SomeString"SomeValue
eSomeValue"SomeString"
vai implicitamente concatenate, e que omitir o terceiro argumento daMID
função irá tomar todas as personagens do fim da entrada - transformando-o em um "dump caracteres iniciais" função(-1 byte graças a Shaggy, mas +1 quando OP confirmou que todas as respostas deveriam terminar com um ponto de exclamação)
(-1 byte graças a Taylor Scott, lembrando-me que a citação dupla final era opcional)
fonte
Hi
e substituí-lo5
por4
?"
desta solução e, ao usar a notação de avaliação (colchetes), deve marcar essa solução como sendo Excel VBA, pois essa notação está disponível apenas no ExcelJ , 22 bytes
Experimente online!
fonte
05AB1E ,
2321 bytesGuardado 2 bytes graças a Kevin Cruijssen
Experimente online!
Explicação
fonte
•äƵí•hR
é 1 byte menor que"05AB1E"
. :)•äƵí•hR
também, mas como você diz, infelizmente não salva nada aqui.QuadR , 22 bytes
Experimente online!
Isso substitui:
^...
três caracteres iniciaise
$
o final de linhacom
Hi
e
,I'm QuadR
respectivamente
fonte
⎕R
operador de APL não destinado ao golfe .Retina ,
2221 bytesExperimente online! O link inclui casos de teste. Não funciona no Retina 0.8.2, portanto, adapte a resposta QuadR do @ Adám. Explicação: O padrão está vazio, portanto, corresponde em todas as posições na sequência de entrada. Porém, só precisamos do terceiro (ou quarto funcionaria). A substituição é então aplicada a essa partida. Dentro dessa substituição,
$'
refere-se ao restante da cadeia e$`
refere-se ao início da cadeia.fonte
Retina 0.8.2 ,
262523 bytes-1 byte graças a @attinat .
-2 bytes, portando a resposta QuadR de @ Adám , por isso não deixe de votar nele !!
PS: @Neil postou uma resposta mais curta do Retina na nova versão , então mudei essa resposta para o Retina 0.8.2 explicitamente.
Experimente online.
Explicação:
Substitua os três primeiros caracteres por "Oi":
E depois acrescente um ", eu sou Retina!" (substituindo o final da sequência):
fonte
bash, 24 bytes
TIO
fonte
bash
por$0
para salvar alguns bytes$0
nome do script ou estava em execução,bash -c 'echo Hi ${@:2}, $1 $0!' bash $@
mas deveria contar em tamanho