O desafio é remover as vogais (a, e, i, o, u) da string do STDIN (sim, eu sei, simples). Você pode esperar que seu programa não seja executado com nenhum argumento argv
.
Exemplo:
This program will remove VOWELS.
So we can now speak without them.
É alterado para:
Ths prgrm wll rmv VWLS.
S w cn nw spk wtht thm.
Existe uma pegadinha. A entrada vencedora é decidida com base no número de bytes diferentes. Por exemplo, a ab
tem três bytes diferentes ( a
, b
e espaço). Se duas ou mais entradas tiverem a mesma quantidade de bytes diferentes, o fallback será feito no número de bytes dessas entradas.
code-challenge
string
Konrad Borowski
fonte
fonte
Renée’s naïveté
? Despojadas de vogais, é claro que isso deve serRn’s nvt
o resultado. Parece que essas abordagens são bastante ingênuas se você me perguntar. :)Respostas:
Espaço em branco binário (2 caracteres distintos, 324 caracteres totais)
TTSSSTTSSSSTTTSTTTSSSSSSTTSSSTSSSSSSTSTTSSSTSSSSTSSTSTTSSSTSSSTSSSTSTTSSSTSSSTSTSTSTSTTSSSTSSTSSTSSTSTTSSSTSTSSSSSTSTTSSSTSTSSSTSSTSTTSSSTSTSSTSSSTSTTSSSTSTSSTSTSTSTSTTSSSTSTSTSSTSSTSTTTTSSSTSTTSTTSTTTSSTSTTSSSSTTTSTSTSTSSSTSTTTSSTTTTSTTSTSTTTTSSTTTTTSSSTTTTSTTTTTTSSTSTTSSSSTTTSTSTSSTTSTTTSSSSTTTSTTSSTTSTTSTTTTSSSSTTTTTTTT
onde S, T, L denota espaço, tabulação, avanço de linha, respectivamente. (Obtido descaradamente convertendo a resposta de espaço em branco por "breadbox" em espaço em branco binário - essa postagem provavelmente deve ser um comentário para a resposta dele, mas é muito longa.)
Espaço em branco binário é um espaço em branco convertido em um idioma de código de prefixo usando TS em vez de T e TT em vez de L; por exemplo, a instrução do BWS para inserir -5 na pilha é SSTSTSSTSTT em vez de SSTTSTL, etc. Link: Um tradutor de ambos os lados para uma linguagem arbitrária de três símbolos e suas versões binárias de prefixo-código .
NB: Seria simples projetar um verdadeiro intérprete bit a bit para programas de espaço em branco binário considerados como sequências de bits , em vez de sequências de caracteres (por exemplo, usando valores de 0,1 bits em vez de caracteres S, T, respectivamente). O acima seria um programa de 324 bits que requer 41 bytes de armazenamento.
fonte
Brainfuck, 8 distintos (2121 total)
Os personagens distict:
<>+-[],.
. Funciona com intérpretes que usam-1
paraEOF
.fonte
Renée’s naïveté
paraRń’s n̈vt́
, então? Isso não parece certo para mim, mas se você diz. Como você não pode assumir nenhuma normalização, é perfeitamente razoável queRenée’s naïveté
seja realmente"Rene\N{COMBINING ACUTE ACCENT}e\N{RIGHT SINGLE QUOTATION MARK}s nai\N{COMBINING DIAERESIS}vete\N{COMBINING ACUTE ACCENT}"
- ou se você prefere números mágicos"Rene\x{301}e\x{2019}s nai\x{308}vete\x{301}"
,. Se você remover as vogais sem os diacríticos correspondentes, você obtém extrema bobagem. Bem-vindo ao admirável novo milênio! :)1.166921663690E+1824
bytes para armazená-lo (eu carreguei o número exato para pastebin, ele não caberia neste comentário). Gostaria de saber quanto tempo levaria para enviá-lo para este site.Espaço em branco, 3 pontos (218 caracteres)
Você sabia que estava chegando.
(_ = espaço, ⇥ = tabulação, ↲ = nova linha)
Aqui está o script codificado em base64:
E aqui está o programa escrito em forma visível de montador:
fonte
LSSSLSSSLTLTSSSSLSSSTSSSSSTLSSSTSSSTSTLSSSTSSTSSTLSSSTSSTTTTLSSSTSTSTSTLSSSTTSSSSTLSSSTTSSTSTLSSSTTSTSSTLSSSTTSTTTTLSSSTTTSTSTLLSSSTLSLSLTSTLSSSLTTTTSSTLTSLLSLSTLLSSLLTSSLLSLLLSSTLSSSLTTTSLSLTSSSLTLSSLSLSLLSSSSLLLL
. Parece que dois problemas (entre outros) são que você está tentando inserir um 0 na pilha usando emSSSL
vez deSSSSL
e também tentando definir um rótulo "vazio" usandoLSSL
forskip
.SED (10 bytes distintos, 13 no total)
Uso da amostra:
saídas:
fonte
I
maiúsculas? Funciona bem quando osI
caracteres são minúsculos.I
personagem é reutilizado.ö
eï
sou mal utilizado no seu exemplo e os outros dois são consoantes. Ainda assim, acho que você tem razão. Mas, dessa forma, podemos acabar apoiando ò̟̣̱͉̙t̝͔͖͇͙̦̝h̵̩e͎r͓̥ ̱̼̞̰̠͔k̞̝̮̕i̴̘̟̬̠n̻͜d̦̰̼̰͔s͈̺̝̭ ̫̺͔̠̭̖o̼f̲͘ ͓̮v̳̙͔̝o͔̭̫͕͢ẃ̜͉̪̩̗e̻͔̺̬̣ĺs͖̭̮; talvez até ,, slǝʍoʌ uʍop ǝpısdn ,, :-)ö
eï
já foram encontrados em inglês, embora quase tenham desaparecido agora.C,
222019 caracteres distintos.Cartas necessárias para
main
,putchar
,getchar
= 12.Pontuação -
(){};
= 5.Operadores -
&-
= 2.main
chama comportamento indefinido (muito--
em uma linha).Não me importo com o valor da expressão e ele diminui
ii
o número certo de vezes.Pode ser corrigido facilmente, separando os decrementos com
;
. Mas é muito melhor do que é.Versão antiga, 20 caracteres: na
verdade 21, porque não notei que alguns espaços são significativos e devem ser contados, mas podem ser substituídos por parênteses com facilidade.
Talvez possa ser melhorado ainda mais, compilando
gcc -nostartfiles
e renomeandomain
para_start
.min
são removidos (após renomear algumas variáveis),_s
adicionados. Mas então eu preciso usarexit()
, o que adiciona 3 caracteres.Em vez de
_start
, qualquer nome pode ser usado e funciona no Linux. Isso permite diminuir para 18 caracteres, mas é muito fora do padrão.fonte
Perl: 8 ou 10 caracteres distintos
s///
solução: 10 distintas, 13 totaisA técnica (suposta; veja abaixo) sed sempre funciona em perl também e produz o número do nome de caracteres distintos (10):
Por exemplo:
São 10 caracteres distintos, pois isso prova:
O problema com a solução sed é que a sua
/i
é não parte de POSIX sed, e, portanto, não é portátil:Isso está sendo executado em um sistema OpenBSD. Por outro lado, como
/i
sempre faz parte do perl padrão, é possível contar com ele sempre lá. Ao contrário do sed.Se você deseja incluir "y" na lista de vogais, é claro que será uma maior se você usar a mesma técnica:
E agora são 14 caracteres no total.
tr[][]
solução: 8 distintas 10 no totalVocê também pode usar
tr///
para remover qualquer coisa que corresponda. O Perl pode até usar oy///
alias do sed paratr
:agora com 8 caracteres distintos, mas não funciona em maiúsculas. Você acaba tendo que adicionar mais 5 caracteres para lidar com os mapas de caso:
e é claro que agora são 15 no total.
No entanto, adicionar "y" à mistura como vogal não aumenta o número de caracteres distintos, como ocorreu com a
s///
versão:Portanto, ainda são apenas os 8 originais distintos do total de 11:
EDIT : Contabilidade para diacríticos
E quanto a entradas como
Renée’s naïveté
? A saída correta, obviamente, deve serRn’s nvt
. Veja como fazer isso, usando o/r
sinalizador da v5.14 paras///
:São 27 caracteres distintos:
Você pode apará-lo para 26 se puder garantir que está executando pelo menos a v5.10 trocando o
print
por umsay
:E você pode reduzi-lo para 22 se não se importar de mover os diacríticos em vez de removê-los:
O que é ... interessante de se ver, para dizer o mínimo. :) Aqui está sua contagem distinta:
Boa sorte em conseguir que qualquer outro idioma lide corretamente com diacríticos usando menos caracteres do que isso!
fonte
"ɢᴏᴏᴅ ᴘnt αβουτ dcrtcs y gt thr, bvt hw bt stff lk THS"
, ou"\N{LATIN LETTER SMALL CAPITAL G}\N{LATIN LETTER SMALL CAPITAL O}\N{LATIN LETTER SMALL CAPITAL O}\N{LATIN LETTER SMALL CAPITAL D} \N{LATIN LETTER SMALL CAPITAL P}nt \N{GREEK SMALL LETTER ALPHA}\N{GREEK SMALL LETTER BETA}\N{GREEK SMALL LETTER OMICRON}\N{GREEK SMALL LETTER UPSILON}\N{GREEK SMALL LETTER TAU} dcrtcs y gt thr, bvt hw bt stff lk THS"
.ø
.Renée’s naïveté
deve darRné’s nïvté
.GolfScript (7 bytes distintos, 103 total)
Uma melhoria suficiente em relação à resposta de w0lf , que eu acho que se qualifica como separada:
12 bytes distintos, 13 total:
fonte
Golfscript (8 bytes distintos, 837 total)
Explicação:
[97 101 105 111 117 65 69 73 79 85]
(correspondente aos códigos ASCII dea,e,i,o,u,A,E,I,O,U
). Cada número é representado pressionando na pilha o valor9
, seguido pelo número necessário de)
(operadores de incremento). Por exemplo, o número67
é obtido usando9
e 58)
s''+
, o array é convertido na string"a,e,i,o,u,A,E,I,O,U"
, representando todas as vogaisOs 8 personagens únicos que foram usados:
[
,]
,9
,)
,+
,-
,'
e(space)
fonte
Ilegível (2 distintos, 2666 total)
Como todo mundo está postando lonas de Turing, pensei em usar este. Não é muito conhecido, mas existe ( http://esolangs.org/wiki/Unreadable ) e possui apenas dois caracteres.
fonte
VBA -
2522 bytes distintos (120 total)Eu sei que isso não vai ganhar com tantos bytes diferentes, mas aqui está no VBA.
(space)
,(newline)
,"
,,
,(
,)
,=
,a
,b
,c
,d
,e
,E
,I
,l
,n
,O
,p
,R
,S
,u
,1
*
,,,1
permite ignorar o caso. (1
representa a constantevbTextCompare
)fonte
E
noEnd Sub
. Mas muito bom, considerando que é básico.E
, e eu corrigi. Eu acho que estava muito preocupado com a carne do Sub. ;-)e
ouE
?Replace(Replace(Replace(Replace(Replace(cells(1,1),"u","",,,1),"O","",,,1),"I","",,,1),"e","",,,1),"a","",,,1)
com a minha contagem de 18 Bytes distintos?Replace(s1,)"uOI
e 111 bytes no totalPython 3.x, 19 caracteres distintos, total de 62
fonte
Renée’s naïveté
, você sabe.J, 21 caracteres (18 distintos)
fonte
K, 29. (18 bytes distintos)
bytes distintos: {@ & ~ (: 0) em _, "AEIOU}
fonte
ASM - 6 caracteres distintos 520 caracteres de origem (MsDOS .com)
Montado usando A86
fonte
MATL, 8 bytes (todos distintos)
Experimente no MATL Online
Apenas um jogo de golfe direto, não encontrou nenhum truque para reutilizar personagens para reduzir o número de bytes único.
13Y2
é um literal que contémaeiouAEIOU
.Faça uma duplicata
t
da string de entrada, faça uma matriz lógica (booleana) indicando quais letras da entrada não são (~
)m
brasas desse literal e indexe ()
) nesses locais, para retornar uma matriz apenas de caracteres que não sejam vogais.fonte
PHP - 30 bytes distintos
fonte
/[aeiou|AEIOU]/
para/[aeiou]/i
? Além disso, seu código também faz|
com que desapareça.festança 26 distinta, 37 total
classificados:
Resultado (preserva os feeds de linha):
Para tr, não está claro como contar: '-d aeiouAEIOU' como 10 ou 13:
fonte
tr -d aeiouAEIOU
para 15.Python (23)
Alguém tinha que fazer isso.
fonte
F #
105 12191 caracteresfonte
Fórmula do Excel - 19 bytes distintos (total de 196)
=
,S
,B
,T
,(
,)
,,
,"
,a
,e
,i
,o
,u
,A
,E
,I
,O
,U
,1
* Na verdade, existem muitas funções aninhadas para funcionar no Excel 2003, mas o conceito está lá.A divisão das fórmulas em duas células alcançou o efeito desejado. - O resultado está em C1.
fonte
Noether, 16 bytes individuais (17 no total)
Experimente online!
Usa a regex
para remover as vogais da string de entrada.
fonte
K (oK) , 16 bytes, 14 distintos
Solução:
Experimente online!
Explicação:
Use except (
^
) para filtrar as vogais.fonte