XKCD: anomalies de la purge du clavier

16

Un autre concours inspiré de XKCD . Celui-ci est basé sur Keyboard Mash .

Étant donné une chaîne d'entrée, identifiez les caractères anormaux, en supposant que la majorité a été tapée sur une seule ligne du clavier QWERTY américain standard . Les chaînes d'entrée peuvent contenir des traits de touche décalés, mais ils ne contiendront pas de retours chariot (Entrée), des caractères affectés par CTRL / ALT, des espaces, des tabulations et des espaces arrière (car ce serait idiot). Le pavé numérique ne sera pas considéré comme faisant partie du clavier pour ce défi.

Le défi est de sortir les caractères qui ne sont pas sur la même ligne de clavier que la majorité des caractères individuels dans la chaîne unique. La sortie ne doit contenir chaque caractère anormal qu'une seule fois et aucun autre caractère.

Dans le cas d'un nombre égal de caractères anormaux sur deux lignes ou plus, le bris d'égalité est déterminé dans cet ordre:

  • Liste unique la plus courte
  • Ligne la plus haute

Contribution

Une chaîne via STDIN, ARGV ou un paramètre de fonction

Production

Une chaîne vers STDOUT ou un retour de fonction. Il ne doit avoir chaque caractère anormal qu'une seule fois, mais n'a pas besoin d'être commandé.

Exemples

Entrée: FJAFJKLDSKF7KFDJ
Sortie: 7

Entrée: ASDF11111
Sortie: ASDF

Entrée: lkjrhsDdftkjhrksRjd
Sortie: rtR

Entrée: } * 3% & 2098 @ $ 2k234 # @ $ M
Sortie: }

La liste des lignes les plus élevées a renvoyé
Entrée: ASD! @ # Vcx
Sortie :! @ #

Liste unique la plus courte renvoyée
Entrée: ASdf1233qwER
Sortie: 123

Liste la plus courte la plus courte renvoyée
Entrée: 12334QWTTSDFDSXVVBBX
Sortie: QWT

C'est le golf de code, donc l'entrée la plus courte gagne.

MickyT
la source

Réponses:

8

CJam, 111 89 88 86 84 83 octets

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

Essayez-le en ligne dans l' interpréteur CJam .

Comment ça fonctionne

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.
Dennis
la source
8

CJam, 90 88 86 84 83 octets

Il s'agit simplement d'une implémentation simple.

" qwertyuiop[] asdfghjkl;': zxcvbnm<>?,./"_32f^.\_'¦,^\+S%qf{_@--}{},{__&]:,}$0=_&

Essayez-le en ligne ici . Pastebin

Optimiseur
la source