Dada uma cadeia de entrada contendo apenas os personagens A-Z
, a-z
e espaços, remova todas as ocorrências das versões maiúsculas e minúsculas do primeiro caractere da string (se o primeiro caractere é A
remover todos os A
s e a
s, se o primeiro personagem é (espaço) remove todos os espaços) e imprima a saída.
Casos de exemplo:
Testing Testing One Two Three
->esing esing One wo hree
Programming Puzzles and Code Golf
->rogramming uzzles and Code Golf
How much wood would a woodchuck chuck if a woodchuck could chuck wood
->ow muc wood would a woodcuck cuck if a woodcuck could cuck wood
{space}hello world
->helloworld
welcome to WATER WORLD
->elcome to ATER ORLD
Este é o código-golfe , o código mais curto em bytes vence!
Notas:
- A entrada sempre terá 2 ou mais caracteres válidos.
- A saída nunca será uma sequência vazia.
Respostas:
Pitão, 7 bytes
Experimente on-line: Demonstration or Test Suite
Agradável. O novo operador de bifurcação (com apenas 8 dias) ajuda aqui a economizar um caractere. Eu acho que este é o primeiro código, que usa esse recurso.
Explicação
fonte
brainfuck, 219 bytes
(Requer fita que permita que o ponteiro vá para os negativos ou faça um loop até o fim, se tentar. Também exige
,
retornar 0 no EOF. Na minha experiência, a maioria dos intérpretes atende a esses requisitos por padrão.)Isso acabou sendo bastante fácil! Eu não ficaria surpreso se fosse jogável (tenho uma idéia de onde pode haver bytes desperdiçados, mas não tenho muita certeza se isso ocorrerá). Ainda assim, fazê-lo funcionar não foi realmente um desafio.
Esse código trata tudo com um valor ASCII abaixo de 97 como um caractere maiúsculo. Se o primeiro caractere for espaço, ele tentará remover quaisquer ocorrências de um "espaço em minúsculas" (ou
chr(32+32)
seja@
) da string. Tudo bem, porque apenas letras e espaços estarão presentes.Com comentários:
fonte
Perl, 13 bytes
Contando o shebang como um, a entrada é obtida de stdin.
Uso da amostra
fonte
substr
mas é claro que você criou uma maneira muito melhor!perl -p script.pl
. As opções de linha de comando costumam ser contadas como um byte cada, pelo menos neste site.CJam, 8 bytes
Experimente online no intérprete CJam .
Como funciona
fonte
~
embora.)Pitão, 8 bytes
Experimente online
Usa a versão do Pyth
str.title
para converter uma string da primeira letra duas vezes no formulário"<Upper><Lower>"
. Em seguida, ele remove cada elemento da entrada que está nessa sequência. Os espaços funcionam bem porque não são afetadosstr.title
.fonte
MATLAB, 28 bytes
fonte
JavaScript (ES6),
3836 bytesIsso não depende do
flags
parâmetro específico do Mozilla.CoffeeScript,
3937 bytesPela primeira vez, é mais curto em JS do que em CoffeeScript!
fonte
new
é opcional, eRegExp(x[0],'gi')
é mais curto.PHP, 41 bytes
Leva um argumento de linha de comando . Tags abertas curtas precisam ser ativadas para PHP <5.4.
fonte
$argv[1]
:<?=str_ireplace(($a=$argv[1])[0],'',$a);
Perl, 27 bytes
Este é um programa completo, embora seja baseado apenas em 2 regexes que provavelmente poderiam ser copiados em um programa Retina para salvar bytes na E / S.
Edit: Parece que isso já foi espancado com alguém usando a
-p
opção. Ah, e usando em$&
vez de$1
.fonte
#!perl -p
ainda é dois bytes menor que$_=<>;print
.-p
opção faz. Não há realmente nenhuma edição que eu possa fazer na minha resposta sem torná-la idêntica à sua.Tamanho 0.9 ,
2333 bytesDe jeito nenhum isso vai ganhar, mas eh, é divertido!
Experimente aqui.
Explicação
(Isso pode falhar em alguns casos extremos, como se o primeiro caractere fosse um símbolo.)
fonte
TECO ,
1514 bytesEditando texto? Em caso de dúvida, use o Editor de texto e o controlador!
Após muitas tentativas e erros (principalmente erros), acho que este é o programa TECO genérico mais curto que fará o trabalho.
Ou, de forma legível por humanos
$
representa a tecla de escape e^E
representa a sequênciaCTRL
+E
. Dependendo do sabor do TECO que você está usando, ele pode reconhecer essas substituições ASCII ou não.De acordo com o manual, alguns dialetos do TECO aceitam esta versão de 13 bytes (usando um comando find-and-delete em vez de comandos "find" e "delete" separados):
fonte
Pip, 8 bytes
Toma a string como argumento da linha de comando (precisará ser citado se contiver espaços). Explicação:
Esta solução tem a vantagem adicional de trabalhar em seqüências contendo quaisquer caracteres ASCII imprimíveis. (O
X
operador faz uma barra invertida - escapa qualquer coisa que não seja alfanumérica.)fonte
Python, 66 caracteres
fonte
Julia, 34 bytes
Isso cria uma função sem nome que aceita uma string e retorna uma string. Ele constrói uma expressão regular que não diferencia maiúsculas de minúsculas do primeiro caractere na entrada e substitui todas as ocorrências disso por uma sequência vazia.
fonte
Mathematica, 47 bytes
fonte
R, 43 bytes
Este é um programa completo que lê uma linha de STDIN e grava o resultado modificado em STDOUT.
Ungolfed:
fonte
Ruby, 25 bytes
Função anônima:
Prgram completo, 29 bytes:
fonte
Python, 61 bytes (muitos)
Imagino que exista uma maneira melhor de fazer isso, mas não consigo encontrá-lo. Alguma idéia sobre como remover o
"".join(...)
?fonte
x[0]+x[0].swapcase()
.(x[0]*2).title()
,.lambda x:x.replace(x[0].upper(),'').replace(x[0].lower(),'')
- 60 bytesOuroboros , 61 bytes
Ei, é mais curto que C ++! Ha.
Em Ouroboros, cada linha do programa representa uma cobra com o rabo na boca. O fluxo de controle é realizado ao comer ou regurgitar seções da cauda, com uma pilha compartilhada para sincronizar entre cobras.
Cobra 1
i.
lê um caractere da entrada e o duplica..91<\64>*32*
empurra32
se o caractere for uma letra maiúscula,0
caso contrário.+
Isso significa que o caractere converte letras maiúsculas em minúsculas, mantendo as letras minúsculas e os espaços inalterados. Tudo isso está ocorrendo na pilha da cobra 1, então agora transferimos o valor para a pilha compartilhada (m
) para a cobra 2 processar. Finalmente,1(
come o último caractere do rabo da cobra 1. Como é aí que está o ponteiro das instruções, a cobra morre.Cobra 2
)
não tem efeito na primeira vez.L!34*
empurra34
se a pilha compartilhada estiver vazia,0
caso contrário. Em seguida,.
enganamos e(
comemos tantos personagens.(
que acabamos de executar. Portanto, o controle volta ao início da linha, onde)
regurgita os caracteres que acabamos de comer (depois de enviar uma cópia extra de34
) e repita o teste de tamanho da pilha.0
e a execução continua:Si
alterna para a pilha compartilhada e insere outro caractere..1+!24*
empurra24
se esse caractere for -1 / EOF,0
caso contrário. Um de,(
engole 24 caracteres - incluindo o IP - e a cobra morre. Caso contrário, a execução continuará.Y
puxa uma cópia do topo da pilha compartilhada (o personagem que acabamos de ler) na própria pilha de 2 para uso futuro. Em seguida,.@@.@=@.@32-=\@+2*
calcula se o novo caractere é igual ao primeiro caractere ou ao primeiro caractere menos 32, pressionando2
se sim e0
não. Nós.
duplicar e(
comer que muitos personagens:(
regurgitamos os 2 caracteres que acabamos de comer e a execução prossegue com o próximo personagem.y
o personagem da pilha de snake 2,o
utilizamos e depois fazemos o loop.Veja em ação
Mostrar snippet de código
fonte
C, 60 bytes
n,c,d;main(){for(;read(0,&c-n,1);n=2)d-c&31&&n&&putchar(d);}
Edit: Corrigido um bug que fazia com que um byte nulo fosse impresso no início
fonte
Python 2, 43
Isso é um pouco baseado na minha resposta Pyth, mas também está relacionado a alguns comentários de ThomasKwa e xnor daqui . Principalmente postando porque eu queria que essa resposta existisse.
fonte
Vim, 30 pressionamentos de tecla
Desculpe desenterrar, mas não vejo nenhuma resposta Vim D:
Explicação:
If<Right>xh@x.<Esc>
Escreva uma macro (recursiva) ao redor do primeiro caractere É necessário
mover para a esquerda (
h
) para permanecer à esquerda do próximo caractere não lido.Adicionando qualquer caractere (
.
) no final, caso o segundo precise ser removido."xy0
Copie a macro no registrox
7|
Mover para o sétimo caractere@x
Execute a macro dex
2|~
Alterne entre maiúsculas e minúsculas (primeiro na segunda posição)0"xd7|
Cortar a macro no registrox
@x
Execute a macro dex
0x
Retire o marcador.
fonte
:D
Eu sempre votei no vim!Haskell, 52 bytes
fonte
r(h:s)=[c|c<-s,t c/=t h]
.TI-BASIC, 164 bytes
Para calculadoras gráficas da série TI-83 + / 84 +.
O TI-BASIC é claramente a ferramenta errada para o trabalho.
Não tenho 100% de certeza, mas passei mais de seis horas nisso e parece ser a solução mais curta possível.
Para testar isso com entradas não maiúsculas (ou digitá-lo na sua calculadora), crie um programa diferente com o conteúdo
AsmPrgmFDCB24DEC9
e execute-o usandoAsm([whatever you named it]
para ativar o modo de digitação em minúsculas.fonte
Lua,
9378 bytesfonte
Lisp comum, 77
Amaldiçoe esses nomes de função longos (e parênteses (mas eu ainda os amo mesmo assim (: 3))).
fonte
C,
65bytesCompila com avisos. Lê a string de
argv[1]
. Exemplo onlinefonte
main(int c,char**v)
paramain(c,v)char**v;
e(**v-c)%32
para**v-c&31
.C ++,
1009998 bytesApenas mais um byte para ficar abaixo de 100.
getchar()
retorna-1
quando lê o final do fluxo, é por isso que o ciclo~
está emfor
andamento. (~-1 == 0
)Ungolfed
fonte
&&putchar(c)
vez de?putchar(c):0
?f-c&31
como na resposta C?AppleScript,
209201 bytesMeu único consolo é que venci Brainfuck.
Como isso funciona é que eu passo a entrada
a
, obtenho o comprimentoa
e o marco comon
, e defino uma variável de saídao
. Para cada caractere que considero que não contém o primeiro caractere de a (a's character 1
), concateno-o parao
. A linha final é impressao
.Nota: Isso suporta automaticamente todos os Unicode. c:
fonte
My only consolation is that I beat Brainfuck.
parece que é melhor eu jogar golfe;) #Retina , 16 bytes
Salve o código com um avanço de linha à direita e execute-o com o
-s
bandeira.Como funciona: o avanço de linha à direita faz deste um estágio de substituição, de forma que quaisquer correspondências do regex especificado sejam substituídas por uma sequência vazia. As
i
voltas no modo case-insensitive que também faz case-insensitive backreferences. Por fim, a regex simplesmente corresponde e captura um único caractere e, em seguida, verifica se o primeiro caractere da sequência é o mesmo (conforme o caso) usando uma referência anterior.fonte