XKCD: Keyboard Mash Anomalien

16

Ein weiterer von XKCD inspirierter Wettbewerb. Dieser basiert auf Keyboard Mash .

Identifizieren Sie bei einer vorgegebenen Eingabezeichenfolge die anomalen Zeichen, vorausgesetzt, die Mehrheit wurde in einer einzelnen Zeile der Standard-US-QWERTZ-Tastatur eingegeben . Eingabezeichenfolgen können Umschalttastenanschläge enthalten, sie enthalten jedoch keine Zeilenumbrüche (Eingabetaste), STRG / ALT-Zeichen, Leerzeichen, Tabulatoren und Leerzeichen (da dies dumm wäre). Der Nummernblock wird für diese Herausforderung nicht als Teil der Tastatur betrachtet.

Die Herausforderung besteht darin, die Zeichen auszugeben, die sich nicht in derselben Tastaturzeile befinden wie die meisten einzelnen Zeichen in der einzelnen Zeichenfolge. Die Ausgabe sollte jedes anomale Zeichen nur einmal und keine anderen Zeichen enthalten.

Bei einer gleichen Anzahl von anomalen Zeichen in zwei oder mehr Zeilen wird der Verbindungsabbruch in dieser Reihenfolge bestimmt:

  • Kürzeste eindeutige Liste
  • Oberste Reihe

Eingang

Eine Zeichenfolge über STDIN, ARGV oder einen Funktionsparameter

Ausgabe

Eine Zeichenfolge für STDOUT oder eine Funktionsrückgabe. Es sollte jedes anomale Zeichen nur einmal haben, muss aber nicht bestellt werden.

Beispiele

Eingabe: FJAFJKLDSKF7KFDJ
Ausgabe: 7

Eingabe: ASDF11111
Ausgabe: ASDF

Eingabe: lkjrhsDdftkjhrksRjd
Ausgabe: rtR

Eingabe: } * 3% & 2098 @ $ 2k234 # @ $ M
Ausgabe: }

Oberste zurückgegebene Zeilenliste
Eingabe: ASD! @ # Vcx
Ausgabe :! @ #

Kürzeste zurückgegebene eindeutige Liste
Eingabe: ASdf1233qwER
Ausgabe: 123

Zurückgegebene Liste mit der höchsten kürzesten Anzahl
Eingaben: 12334QWTTSDFDSXVVBBX Ausgaben
: QWT

Dies ist Code Golf, also gewinnt der kürzeste Einstieg.

MickyT
quelle

Antworten:

8

CJam, 111 89 88 86 84 83 Bytes

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

Probieren Sie es online im CJam-Interpreter aus .

Wie es funktioniert

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
quelle
8

CJam, 90 88 86 84 83 Bytes

Dies ist nur eine einfache Implementierung.

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

Probieren Sie es hier online aus . Pastebin

Optimierer
quelle