XKCD: anomalias de mash de teclado


16

Outra competição inspirada pelo XKCD . Este é baseado no Keyboard Mash .

Dada uma sequência de entrada, identifique os caracteres anômalos, assumindo que a maioria foi digitada em uma única linha do teclado QWERTY padrão dos EUA . As strings de entrada podem conter pressionamentos de tecla deslocados, mas não conterão retornos de carro (Enter), caracteres, espaços, guias e backspaces afetados por CTRL / ALT (porque isso seria bobo). O teclado numérico não será considerado como parte do teclado para este desafio.

O desafio é gerar os caracteres que não estão na mesma linha do teclado que a maioria dos caracteres individuais na sequência única. A saída deve conter cada caractere anômalo apenas uma vez e nenhum outro caractere.

No caso de uma contagem igual de caracteres anômalos em duas ou mais linhas, o desempate é determinado nesta ordem:

  • Lista única mais curta
  • Linha mais alta

Entrada

Uma string através de STDIN, ARGV ou um parâmetro de função

Resultado

Uma sequência para STDOUT ou um retorno de função. Ele deve ter cada caractere anômalo apenas uma vez, mas não precisa ser ordenado.

Exemplos

Entrada: FJAFJKLDSKF7KFDJ
Saída: 7

Entrada: ASDF11111
Saída: ASDF

Entrada: lkjrhsDdftkjhrksRjd
Saída: rtR

Entrada: } * 3% e 2098 @ $ 2k234 # @ $ M
Saída: }

Lista de linhas superior retornada
Entrada: ASD! @ #
Saída Vcx:! @ #

Lista exclusiva mais curta retornada
Entrada: ASdf1233qwER
Saída: 123

Lista mais curta mais curta retornada
Entrada: 12334QWTTSDFDSXVVBBX
Saída: QWT

Este é o código de golfe, e a entrada mais curta ganha.

Respostas:


8

CJam, 111 89 88 86 84 83 bytes

la9*~"{}qwertyuiop ;':asdfghjkl ,./<>?zxcvbnm"{_32^}%_'ÿ,^a\S%+{[f&s\e|__|]:,}$0=&

Experimente online no intérprete CJam .

Como funciona

la9*~     e# Push the input 9 times on the stack.

"{}qwertyuiop ;':<STX>asdfghjkl ,./<>?zxcvbnm"

{_32^}%   e# XOR a copy of each character with 32.
_'<DEL>,^ e# Push a string of all ASCII characters that are missing.
a\        e# Wrap it in an array.
S%+       e# Split the string at spaces and concatenate with the array.
{         e# Sort the chunks according to the following:
  [       e#
    f&s   e# Push the string of characters from the input that are in this chunk.
    \e|   e# If the result is empty, replace it with the input.
    __|   e# Push a copy with duplicates removed.
  ]       e# Collect both strings in an array.
  :,      e# Replace each string with its length.
}$        e#
0=        e# Retrieve the minimum.
&         e# Intersect it with the input.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.