Zielsetzung
Schreiben Sie ein Programm oder eine Funktion (oder eine gleichwertige Funktion), die den ungeraden Buchstaben in der Matrix zufälliger Größe aussortiert und zurückgibt.
Einzelheiten
Sie erhalten eine Matrix (als Zeichenfolge) als Eingabe für zufällige Dimensionen wie diese.
bbbbbbbbbb bbbbbdbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb
Ihre Aufgabe ist es, den Buchstaben zu finden, der nicht mit dem Rest übereinstimmt (in diesem Fall d
in Zeile 2, Spalte 6), und diesen Buchstaben als Ausgabe zurückzugeben. Die Matrix besteht aus Buchstaben A-Z
, a-z
Zeilenumbrüchen ( \n
nur an Zeilenenden ) und hat Abmessungen von 5 x 5 bis 10 x 10 (25 bis 100 Buchstaben).
Es gelten Standardlücken. Dies ist eine Code-Golf-Herausforderung. Eintrag mit Code der kleinsten Bytes gewinnt.
Eingang
Die Eingabe wird über die Standardeingabe als Zeichenfolge übergeben, wenn es sich um ein Programm handelt, oder als Argument, wenn es sich um eine Funktion (oder eine ähnliche Funktion) handelt.
Ausgabe
Ein einzelne Zeichen, das die „odd“ in der Matrix ist , oder None
, nil
, NUL
, oder die Zeichenfolge , "None"
wenn es kein „odd“ Charakter.
Mehr Beispiele
AAAAAAA AAAAAAA AAAAAAA AAAIAAA AAAAAAA
Antworten: I
vvqvvvvvvv vvvvvvvvvv vvvvvvvvvv vvvvvvvvvv vvvvvvvvvv
Antworten: q
puuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu
Antworten: p
Generator
Hier ist ein in Python geschriebener Zufallsmatrixgenerator, mit dem Sie Ihr Programm testen können. Hinweis: Es besteht eine geringe Wahrscheinlichkeit, dass ein Fehler gemacht und kein ungerader Buchstabe eingegeben wird.
Antworten:
Python 3 , 27 Bytes
Probieren Sie es online aus!
quelle
J ,
12 107 BytesProbieren Sie es online aus!
10-Byte-Version
Zischen ...
quelle
Brachylog ,
84 BytesProbieren Sie es online aus!
Erläuterung
Ich habe Brachylog noch nicht verwendet, daher ist dies möglicherweise nicht optimal.
quelle
∋≠
afterḅ
, um die Ergebnisse von Länge 1 zu erhalten, ist sehr klug. Sie sollten es auf jeden Fall in der Frage mit den Brachylog-Tipps veröffentlichen .K (oK) ,
76 BytesLösung
Probieren Sie es online aus!
Beispiel:
Erläuterung:
Es wurde ein etwas kürzerer Ansatz gefunden: Von rechts nach links bewertet:
Anmerkungen:
Obwohl ich erwarte, dass der Bonusaspekt dieser Herausforderung fallen gelassen wird, gibt diese Lösung das Zeilenumbruchzeichen zurück,
\n
wenn es kein ungerades Zeichen gibt:quelle
Prolog (SWI) , 46 Bytes
Probieren Sie es online aus!
Oder wenn die standardmäßige True- Ausgabe von Prolog-Abfragen nicht in Ordnung ist:
Prolog (SWI) , 48 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
C (gcc) ,
9392906662 BytesViel kürzer als eine Funktion
Probieren Sie es online aus!
Testcode
alte Version ist ein Programm
C 86 Bytes
Gibt das ungerade Zeichen oder nichts aus. lauf so;
quelle
gets()
in den Testtreiber zu setzen , da es die Eingabe bereinigt, indem die \ n Zeichen für Sie entfernt werden. Das macht einige Arbeit, damit Ihre Funktion nicht an der ursprünglichen Eingabe arbeitet.05AB1E ,
42 Bytes2 Bytes dank Adnan gespeichert
Probieren Sie es online aus!
Erläuterung
quelle
2x2
Matrizen umzugehen. Ich habe den Teil verpasst5x5
. Vielen Dank!nil
wenn es kein "ungerades" hat, nicht wahr?Netzhaut , 13 Bytes
Probieren Sie es online aus!
Erläuterung
Sortieren Sie alle Zeichen.
Entfernen Sie alle Zeichen, die mindestens zweimal vorkommen.
quelle
Schale , 2 Bytes
Probieren Sie es online aus!
Dies ist eine Funktion, die eine Zeichenfolge als Eingabe verwendet und ein Zeichen zurückgibt. Beim Vergleichen von Zeichen auf Gleichheit wird das Minimum der Eingabezeichenfolge verwendet (dh es wird das Zeichen zurückgegeben, das der geringsten Anzahl anderer Zeichen entspricht).
quelle
C 94 Bytes
Rückkehr mit dem Zeiger. Wenn keine, kehren Sie zurück
\0
.Dies führt zu Speicherlecks. Angenommen,
int
es sind 4 Bytes.Probieren Sie es online aus!
quelle
t
auf Null gesetzt wird, bevor jedes Mal nicht das erste Mal aufgerufen wird.Mathematica, 27 Bytes
Probieren Sie es online aus!
-1 Byte von Martin Ender
quelle
Bash ,
15 bis20 BytesProbieren Sie es online aus!
Erläuterung:
fold
s Die Eingabe des1
Zeichens pro Zeile,sort
s die Gruppierung in übereinstimmende Buchstaben und das Drucken nur der Zeilen, dieuniq
ue sind.Vielen Dank an @Nahuel Fouilleul , dass er ein Problem mit diesem Ansatz erkannt und behoben hat .
quelle
|sort|
aber es kann eine bessere Lösung gebengrep -oP '^(.)((?=(?!\1).){2}|.*\K(?!\1).)'
sort
Fix, danke. Sie können diese grep-Antwort jedoch jederzeit als Ihre eigene Antwort veröffentlichen, wenn Sie möchten.Pyth , 4 Bytes
Probieren Sie es hier aus!
quelle
.m/Q
ist auch 4 BytesPerl 5, 17 + 3 (-00p) -25% = 15 Bytes
Probieren Sie es online aus
quelle
Matlab, 25 Bytes
Die Eingabe "a", wobei "a" nicht der Modus von "a" ist. Gibt ein leeres Array ohne Oddball aus.
quelle
Haskell, 33 * 0,75 = 24,75 Bytes
Gibt eine leere Liste zurück, wenn kein ungerades Zeichen vorhanden ist.
Probieren Sie es online aus!
Erstellen Sie für jedes Zeichen
c
in der Matrix (als Zeichenfolge angegebens
) eine Zeichenfolge aller Zeichens
, die gleich sind,c
und behalten Sie die Zeichen der Länge 1 bei.quelle
JavaScript (ES6), 37 Byte
Gibt zurück,
null
wenn kein ungerader Buchstabe vorhanden ist.Testfälle
Code-Snippet anzeigen
quelle
Japt , 6 Bytes
Nimmt die Eingabe als mehrzeilige Zeichenfolge und gibt eine einzelne Zeichenfolge oder eine leere Zeichenfolge aus, wenn es keine Lösung gibt.
Versuch es
Erläuterung
Entfernen Sie die Zeichen, die truey (
k
) zurückgeben, wenn sie eine Funktion (@
) durchlaufen , dieè
die Vorkommen des aktuellen Elements (X
) in der Eingabe zählt ( ) und 1 (É
) subtrahiert .quelle
Common Lisp, 47 Bytes
Probieren Sie es online aus!
Gibt den ungeraden Buchstaben oder NIL zurück, wenn er nicht vorhanden ist.
quelle
Gelee , 4 Bytes
Probieren Sie es online aus!
Rückgabe
\n
(ein einzelner Zeilenumbruch), falls kein ungerades Zeichen vorhanden ist. Offensichtlich\n
ist kein druckbares Zeichen.Zufälligerweise ist dies genau der gleiche Algorithmus wie die Antwort von Mr.Xcoder Python. (Ich habe es mir unabhängig ausgedacht)
Erläuterung:
Das funktioniert, weil in einer
m×n
Matrix:m-1
Zeilenumbrüche, 1 ungerades Zeichen und einm×n-1
normales Zeichen und1 < m-1 < m×n-1
weil5 ≤ m, n ≤ 10
.m-1
Zeilenumbrüche undm×n
normale Zeichen undm-1 < m×n
.quelle
C # (.NET Core) , 54 Byte
Probieren Sie es online aus!
quelle
using
Anweisung in der Byteanzahl.C (gcc) ,
9186827971 BytesProbieren Sie es online aus!
Erläuterung:
Vergleichen Sie das aktuelle und das vorherige Zeichen, während Sie Zeilenumbrüche überspringen. Wenn anders, vergleiche mit dem nächsten Zeichen. Dies sagt uns, ob wir aktuelles oder vorheriges Zeichen zurückgeben. Die Funktion gibt den "ungeraden" Zeichenwert zurück, falls vorhanden, oder 0, wenn das Array nicht ungerade ist. Wir kommen mit dem "nächsten" Char-Check davon, weil vor dem
\0
Char immer eine neue Zeile steht . Wenn es kein ungerades Zeichen gibt, geben wir die \ 0 von der for-Schleife zurück.Älterer, sexier xor Code Erläuterung:
Erstellen Sie eine laufende xor-Maske aus den nächsten 3 Zeichenfolgenwerten. Wenn sie alle gleich sind, ist der Wert gleich einem der drei. Wenn sie unterschiedlich sind, heben sich die beiden identischen auf und lassen das Einzigartige zurück.
Muss / n vor dem xor faktorisieren oder es wird chaotisch. Außerdem müssen 2 Zeichen auf Ungleichung überprüft werden, falls s [0] der ungerade Wert ist. Dies kostet das extra || prüfen.
quelle
v;f(char*s){while(s[3]){s[2]==10?s+=3:0;v=*s^s[1]^s[2];if(v^*s++||v^*s)break;}}
v;f(char*s){while(s[2]==10?s+=3:0,v=*s^s[1]^s[2],s[3])if(v^*s++||v^*s)break;}
Ihr Siegerpferd ist jedoch das andere, wenn Sie ein wenig damitv;f(char*s){for(v=-1;*++s==10?s+=2,v--:0,*s;v=0)if(*s^s[-1])return s[v];}
s+=*++s-10?0:2
statt*++s==10?s+=2:0
Oktave ,
2625 Bytes1 Byte dank @Giuseppe gespeichert
Anonyme Funktion, die ein 2D-Zeichenarray als Eingabe verwendet und entweder den ungeraden Buchstaben oder eine leere Zeichenfolge ausgibt, falls diese nicht vorhanden ist.
Probieren Sie es online aus!
quelle
Alice , 16 * 75% = 12 Bytes
Probieren Sie es online aus!
Jabberwocky
Wird ausgegeben, wenn kein doppeltes Zeichen vorhanden ist.Erläuterung
Dies ist ein Framework für lineare Programme, die vollständig im Ordinalmodus (String-Verarbeitungsmodus) arbeiten. Der eigentliche Code wird im Zickzack ausgeführt und entfaltet sich zu:
Stattdessen
&-
könnten wir auchey
(Transliteration in eine leere Zeichenfolge) verwenden. Wenn Sie alternativ ein weiteres Zeichen für die Stapelmanipulation ausgeben, können Sie auch die Eingabe deduplizieren, mit der wir die unerwünschten Zeichen entfernen könnenN
, aber es ist immer noch dieselbe Byteanzahl:Alice , 13 Bytes
Probieren Sie es online aus!
Dies ist die Lösung ohne den Bonus, es fehlt einfach die
.n*
.quelle
Netzhaut , 22 Bytes
Probieren Sie es online aus! Benötigt nur Höhe und Breite von mindestens 3 statt 5.
quelle
APL + WIN, 16 Bytes
Fordert zur Bildschirmeingabe auf und gibt entweder einen ungeraden Buchstaben oder nichts aus, wenn kein ungerader Buchstabe vorhanden ist
quelle
a/⍨1=+/a∘.=a←,⎕
für ein BytePowerShell , 39 Byte
Probieren Sie es online aus!
Nimmt die Eingabe als Zeichenfolge mit Zeilenumbrüchen (wie in der Herausforderung angegeben) und konvertiert sie in ein
char
-array. Wir dannGroup-Object
die Zeichen, so dass Zeichen nach ihren Namen gruppiert werden, dannsort
basierend auf derc
Anzahl. Dies stellt sicher, dass der einsame Charakter an erster Stelle steht, also nehmen wir den[0]
Index und geben ihn aus.Name
.Wenn Newline für "nichts" akzeptabel ist, qualifiziert sich dies für den Bonus.
quelle
sort c*)[0]
, verkürzt werden zu können, aber ich hatte die gleiche Anzahl von Bytes? c* -eq 1)
.$args
. Dies ist auch genauer,([char[]]$args|group|? c* -eq 1).Name
da es genau zurückkehrt,null
wenn kein ungerades Zeichen vorhanden ist (anstelle einer neuen Zeile). In Bezug auf Bytes bringt Sie dies jedoch immer noch nicht unter 37.None
,nil
,NUL
, oder die Zeichenfolge ,"None"
wenn es kein „odd“ Charakter ist.) Es ist noch geändert werden soll. Newline ist nicht Teil der akzeptablen Antworten.Perl 6 ,
2724 -25% = 18 BytesProbier es aus
Probier es aus
Dies gibt einen undefinierten Wert zurück, wenn eine Eingabe gegeben wird, die kein ungerades Zeichen enthält.
Erweitert:
quelle
Brainfuck, 125 Bytes
Probieren Sie es online aus
Druckt den Buchstaben der Matrix, wenn es keinen ungeraden gibt
quelle
Java 8, 85 Bytes
Dies ist ein Lambda von
String
bisString
(zBFunction<String, String>
). Es ist im Wesentlichen eine Kopie von Lucas Lösung , aber ich habe die Sortierung der Zeichenfolgen etwas reduziert.Probieren Sie es online aus
quelle