A parte simples: dada uma sequência de entrada contendo apenas caracteres ASCII imprimíveis (espaço - til), conte o número de ocorrências de cada caractere e retorne o resultado em qualquer formato conveniente. O resultado para uma string a%hda7a
deve ser algo como: a:3, %:1, h:1, 7:1, d:1
. A classificação é desnecessária, os delimitadores e os formatos são opcionais, mas deve ser facilmente entendido qual número corresponde a qual caractere. Você não deve incluir caracteres que não estejam na sequência de entrada ( a:3, b:0, c:0, d:1, ...
não está correto).
O verdadeiro desafio:
Converta todos os caracteres do seu código em um número binário de 8 bits (ou 16 bits se você estiver usando UTF-16 ou similar) e enumere todos os caracteres começando em 0
.
Para cada caractere ( i
é o enumerador), o i%7
-bit 1 deve ser 1
. Os bits são numerados da direita. Todos os outros bits podem ser o que você quiser.
Vamos usar o seguinte código como exemplo:
[f]-xif)#f
Convertendo isso para binário, obtemos a matriz abaixo. O primeiro número (representando [
tem um 1
na posição 0, de modo que um esteja OK. O segundo número (representando f
possui um 1
na posição 1, de modo que também esteja bem. Continue assim, e você verá que o código acima é válido.
C 76543210 Número do bit - -------- ---------- [0101101 1 0 - OK f 011001 1 0 1 - OK ] 01011 1 01 2 - OK - 0010 1 101 3 - OK x 011 1 1000 4 - OK i 01 1 01001 5 - OK f 0 1 100110 6 - OK ) 0010100 1 0 - OK # 001000 1 1 1 - OK f 01100 1 10 2 - OK
Se mudarmos o código para: ]f[-xif)#f
obteremos o seguinte início da sequência:
C 76543210 Bit number
- -------- ----------
] 01011101 0 <- OK
f 01100110 1 <- OK
[ 01011011 2 <- Not OK
- 00101101 3 <- OK
Como vemos, o terceiro caractere [
não possui um 1
na 2ª posição (indexado a zero) e, portanto, esse código não é válido.
Casos de teste:
Input:
This is a string containing some symbols: ".#!".#&/#
Output:
! " # & / : T a b c e g h i l m n o r s t y .
7 1 2 3 1 1 1 1 2 1 1 1 2 1 5 1 2 4 3 1 6 2 1 2
Qualquer formato de saída razoável está OK (o que for mais conveniente para você). Você poderia, por exemplo, ter: :7, !:1, ":2, #:3, &:1, /:1, T:1, a:2 ...
ou [ ,7][!,1][",2][#,3][&,1]...
. A saída é feita de qualquer maneira padrão (retorno da função, impresso em STDOUT etc.)
1i
módulo 7
.
Isso é código-golfe , então o código mais curto em bytes ganhará ref .
00001010
. Também pode ser útil! :)
n%7
ponto th> pastie.org/pastes/10985263/text