Wir sagen, eine Zeichenfolge ist nicht diskriminierend, wenn jedes Zeichen der Zeichenfolge gleich oft und mindestens zweimal vorkommt.
Beispiele
"aa!1 1 !a !1"
ist nicht diskriminierend , weil jedes der Zeichen!
,a
und1
dreimal erscheinen."abbaabb"
ist nicht nicht diskriminierend, weilb
es öfter auftritt alsa
."abc"
ist auch nicht diskriminierend, da die Zeichen nicht mindestens zweimal vorkommen.
Aufgabe
Schreiben Sie ein nicht diskriminierendes Programm oder eine nicht diskriminierende Funktion, die einen Wahrheitswert zurückgibt , wenn eine bestimmte Zeichenfolge nicht diskriminierend ist , und ansonsten einen falschen Wert.
Das heißt, das auf seinem eigenen Quellcode ausgeführte Programm sollte einen Wahrheitswert zurückgeben.
Jede Einreichung muss in der Lage sein, nicht leere Zeichenfolgen zu verarbeiten, die druckbares ASCII enthalten , sowie alle Zeichen, die im Quellcode der Einreichung erscheinen.
Testfälle
Wahrheit:
<your program's source code>
"aaaa"
"aa!1 1 !a !1"
"aabbccddeeffgg"
"1Q!V_fSiA6Bri{|}tkDM]VjNJ=^_4(a&=?5oYa,1wh|R4YKU #9c!#Q T&f`:sm$@Xv-ugW<P)l}WP>F'jl3xmd'9Ie$MN;TrCBC/tZIL*G27byEn.g0kKhbR%>G-.5pHcL0)JZ`s:*[x2Sz68%v^Ho8+[e,{OAqn?3E<OFwX(;@yu]+z7/pdqUD"
Falsch:
"a"
"abbaabb"
"abc"
"bQf6ScA5d:4_aJ)D]2*^Mv(E}Kb7o@]krevW?eT0FW;I|J:ix %9!3Fwm;*UZGH`8tV>gy1xX<S/OA7NtB'}c u'V$L,YlYp{#[..j&gTk8jp-6RlGUL#_<^0CCZKPQfD2%s)he-BMRu1n?qdi/!5q=wn$ora+X,POzzHNh=(4{m`39I|s[+E@&y>"
Antworten:
Brachylog , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
Java 8,
198192186174168165160 Bytes (Zeichenanzahl65)Probieren Sie es online aus.
Der Code, der zum Überprüfen des Vorkommens der Zeichen verwendet wurde , war meine Antwort auf diese Herausforderung .
-5 Bytes danke an @ OlivierGrégoire , indem du den Kommentar loswerdest und ein Durcheinander machst . ;)
Alte 168-Byte-Antwort (Zeichenanzahl 6) :
Probieren Sie es online aus.
Code, der zum Überprüfen des Vorkommens der Zeichen ohne Kommentar verwendet wurde. Dies war meine Antwort auf diese Herausforderung .
-6 Bytes dank @ OliverGrégoire entfernen,
<
indem Sie die Schecks auf>
.Erklärung des Basis-Golfprogramms (98 Bytes):
Probieren Sie es online aus.
Einige Dinge, die ich getan habe, um die Anzahl der verwendeten Zeichen zu reduzieren:
o
,w
,u
,f
,r
, unde
wurden absichtlich gewählt , um wieder zu verwenden Charaktere , die wir bereits haben (aber nicht mehr als 6).2222
wird anstelle von verwendet256
.e>0&u!=e|u<2
zu!(e<2|u==e)|u<2
6x zu entfernen&
.f
, und wir gaben zurück, ob es am Ende immer noch 0 ist (dies bedeutete, dass ich das 6xby
vonbyte
jetzt entfernen konnte, das wir nurn
inint
6-mal anstelle von 8 verwenden).e<2
undu<2
geändert zu2>e
und2>u
um 6x zu entfernen<
.Was ich getan habe, um die Zeichenanzahl von 6 auf 5 zu reduzieren:
int
bisbyte
so ist die verwendete Mengen
4 statt 6.x[0]
anstelle einer neuen Variablen verwendet,f=0
sodass=
5 anstelle von 6 verwendet werden.2222
zu:3333
Die verwendete Menge2
ist 2 statt 6.f
undr
wieder sind sie auch nicht mehr 6.Was @ OlivierGrégoire getan hat, um den Kommentar und damit die 5x loszuwerden
/
:,i,fe,fi,w;
.s:w:no0r3sswwyyy:
.|2>2
{}
von for-Schleifen und ifs und Hinzufügen eines nicht verwendeten{}
-Blocks.!
zu!!!
.|
zu||
.333
,+333-3|2
um übrig gebliebene arithmetische Operatoren+-|
und die loszuwerden2
.!(x[0]>0)
zu!!(0>--x[0])
.quelle
<
ingeändert>
.Jelly ,
18161210 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Brachylog ,
1412 BytesProbieren Sie es online!
Erläuterung
Alternative 12-Byte-Lösung, die wiederverwendet wird
t
anstelle vonᵐ
:quelle
T-SQL, 320 Byte (je 32 Zeichen x 10)
Die Eingabe erfolgt über bereits bestehende Tabelle
FILL
mit Varchar FeldSTEW
, je unseren IO - Standards .Ich war noch nie so erfreut und doch entsetzt über ein Stück Code.
Muss auf einem Server oder einer Datenbank ausgeführt werden, bei denen zwischen Groß- und Kleinschreibung unterschieden wird. Es gibt jeweils 10 von 32 verschiedenen Zeichen, einschließlich Groß- und Kleinbuchstaben
E
(bei SQL-Befehlen wird die Groß- und Kleinschreibung nicht berücksichtigt, daher werden einige nach Bedarf umgedreht), Leerzeichen und Tabulatoren (Tabulatoren werden im obigen Code zur besseren Lesbarkeit als Zeilenumbrüche angezeigt).Ich habe Möglichkeiten gefunden, 10 der anderen Symbole
+ = ,
in den Code aufzunehmen, konnte dies aber leider nicht tun<
, sodass ich das Kommentarzeichen hinzufügen musste-
.Hier ist der formatierte Code, bevor ich den gesamten zusätzlichen Füllstoff eingepfercht habe:
Die oberste Zeile ist ein rekursiver CTE, der eine Zahlentabelle generiert
b
, die wir mit der Quellzeichenfolge verknüpfen, um sie nach Zeichen zu trennen. Diese Zeichen werden gruppiert und gezählt, und dieIIF
Anweisung gibt 0 oder 1 zurück, je nachdem, ob die Eingabezeichenfolge nicht diskriminierend ist.quelle
C (gcc) ,
333.168BytesDanke an Kevin Cruijssen für das Speichern von 9 Bytes und danke an Laikoni für das Speichern von 45 Bytes!
Probieren Sie es online!
C 333 Bytes
Auch das bytecount ist nicht diskriminierend!
Probieren Sie es online!
quelle
128
in ändern ,222
damit der8
Wert gelöscht werden kann.i
,v
,S
,s
undL
zu Zeichen , die bereits in den Schlüsselwörtern erscheinenchar
,for
undreturn
: Versuchen Sie es online!05AB1E ,
20181614 BytesProbieren Sie es online!
Das Programm ist im Wesentlichen in zwei Teile unterteilt, wobei das Ziel des ersten Teils darin besteht, die eigentliche Aufgabe zu erledigen, und das Ziel des zweiten Teils darin, dieselben Funktionen wie im ersten Teil zu verwenden, ohne das Ergebnis zu verändern.
Erklärung (erster Teil)
Erklärung (zweiter Teil)
quelle
{γ€gDË*P≠qq{γ€gDË*P≠
ist eine andere für 20;).¢
... gute Idee Mann, auch ich bin froh zu sehen, dass≠
es so nützlich war, wie ich dachte, es könnte sein, haha!Schale , 14 Bytes
Probieren Sie es online!
Erläuterung
Die beiden kurzen Zeilen sind No-Ops, da die Hauptfunktion sie niemals aufruft.
quelle
m
kommt auch zweimal vor: in der ersten Zeile und in der zweiten Zeile. Die Erklärung enthält die beiden kurzen Zeilen nicht, da sie das Verhalten des Programms nicht beeinflussen.Python 2 ,
7569 BytesDie Ausgabe erfolgt über das Vorhandensein oder Fehlen eines Fehlers. Der Fehler ist entweder ein ValueError (ein oder mehrere Zeichen kommen nur einmal vor) oder ein NameError (die Zeichenanzahl ist ungleich).
Probieren Sie es online!
quelle
{{e.dil:-tu,r.dil:-tu,}}
Guter Herr, was ist das?a
und alles ist kaputt gegangen. Könnten Sie das bitte näher erläutern?or
. Ich werde eine Erklärung hinzufügen, wenn ich an einem Computer bin.Brachylog v2, 8 Bytes (in Brachylogs Zeichensatz)
Probieren Sie es online!
Sieht so aus, als ob in Brachylog ein Golfkrieg um diese Frage ausgetragen wurde, und ich dachte, ich würde mitmachen und ein paar Bytes für die nächstbeste Antwort einsparen.
Dies ist ein vollständiges Programm, das Eingaben als Liste von Zeichencodes akzeptiert. (Dies liegt zum Teil daran, dass Brachylog einige sehr bizarre Fehler im Zusammenhang mit Backslashes in Zeichenfolgen aufweist, und zum Teil daran, dass der
\
Befehl nicht für Listen von Zeichenfolgen funktioniert.)Erläuterung
Das
koḅ
am Ende ist irrelevant;k
wird immer ein Element haben, auf das man einwirken kann,o
undḅ
kann nicht fehlschlagen, wenn man eine Liste als Eingabe erhält.Der Grund für den Start
oḅ
sollte klar sein; es partitioniert die eingabeliste nach wert,[1,2,1,2,4,1]
würde zB werden[[1,1,1],[2,2],[4]]
. Damit jedes Zeichen gleich oft vorkommt, muss jede dieser Listen gleich lang sein, dh die resultierende Liste ist ein Rechteck. Wir können diese Rechteckigkeit mit behaupten\
, die als Nebeneffekt auch die Zeilen und Spalten transponiert.Wir haben jetzt einen aktuellen Wert, der aus mehreren Kopien des Zeichensatzes besteht, zB wenn die Eingabe
[4,2,1,2,4,1]
der aktuelle Wert wäre[[1,2,4],[1,2,4]]
. Wenn wir eine Kopie löschen, ist die resultierende Matrix immer noch rechteckig, sodass wir sie mit zurückdrehen können\
. Wenn jedoch der Grund die Matrix rechteckig ist , dass alle eingegebenen Zeichen waren eindeutig, die resultierende Matrix wird keine Elemente verlassen hat und\
sie nicht eine „0 × 0“ Matrix als rechteckig behandeln (besser gesagt, es scheitert). Es wird alsooḅ\k\
effektiv behauptet, dass jedes Zeichen, das in der Eingabe erscheint, gleich oft vorkommt und dass diese Anzahl nicht 1 ist.Das ist die gesamte Funktionalität unseres Programms (als vollständiges Programm erhalten wir,
true
wenn keine Assertionsfehler aufgetreten sind,false
wenn einige aufgetreten sind ). Wir haben die Quelle Layout Einschränkung zu gehorchen, obwohl, so habe ich ein zusätzliches ,koḅ
die keinen Zweck hat , aber das kann nicht umhin , ( im Gegensatz zu\
,o
undḅ
ist glücklich über leere Listen zu handeln).quelle
Python 2 ,
8480 BytesProbieren Sie es online!
quelle
JavaScript (Node.js) ,
144...10096 BytesProbieren Sie es online!
24 verschiedene Zeichen * jeweils 6 Mal28 verschiedene Zeichen * 5 mal27 verschiedene Zeichen * 5 mal27 verschiedene Zeichen * 4 mal26 verschiedene Zeichen * jeweils 4 Mal25 verschiedene Zeichen * jeweils 4 Mal24 verschiedene Zeichen * 4 mal
Erläuterung
quelle
PowerShell , 104 Byte
Probieren Sie es online!
Das hat Spaß gemacht, Golf zu spielen. Die Einschränkung war
$
, dass wir mindestens vier benötigen (eine für die Eingabe$args
, eine für die Zuweisung des Berechnungsergebnisses$qe
, eine für die Prüfung des letzten Zeichens$qe[-1]
und eine für die Prüfung des ersten Zeichens$qe[0]
, so dass die maximale Anzahl von Zeichen funktioniert.Von da an war es eine Frage des Golfspiels (und nicht des Golfspiels, wie wenn man einen aus zwei Buchstaben bestehenden Variablennamen hat), um das Programm gut durch vier teilbar zu machen. Beachten Sie, dass wir einen kleinen Kommentar haben (alles nach dem
#
), um einige fehlende Elemente zu erklären, aber ich habe versucht, den Kommentar so klein wie möglich zu halten.quelle
Haskell,
907572 BytesJeder Buchstabe erscheint 6mal. Die Eingabezeichenfolge wird als Singleton-Liste verwendet .
Probieren Sie es online!
Als Referenz alte Versionen:
75 Bytes, jeweils 5 Zeichen
Probieren Sie es online!
90 Bytes, jedes Zeichen 3 mal:
Probieren Sie es online!
quelle
Python 2 ,
1081049288 Bytes-12 Bytes dank Rod
-4 Bytes dank Kevin Cruijssen
Probieren Sie es online!
quelle
s=input();c=s.count;print[all(c(s[[]>[1]])>=c(o)>1. for o in s)];aaafffillpprrtuu=1.>1.;
88 Bytes, indem Sie den Kommentar entfernen.aaabb
scheint nachzugebenTrue
MATL , 12 Bytes
Die Eingabe ist eine Zeichenfolge in einfachen Anführungszeichen. Einfache Anführungszeichen in der Zeichenfolge werden durch Duplizieren maskiert.
Die Ausgabe ist eine nicht leere Matrix, die wahr ist, wenn sie keine Nullen enthält, und falsch ist, wenn sie mindestens eine Null enthält.
Probieren Sie es online! Oder überprüfen Sie alle Testfälle , einschließlich des Standardtests auf Richtigkeit und Falschheit.
Wie es funktioniert
Mit gekennzeichnete Aussagen
(*)
sind weder notwendig noch schädlich und wurden nur aufgenommen, um den Quellcode nicht zu diskriminieren.quelle
Perl 5 ,
-p
57 BytesJeder Buchstabe erscheint 3mal. Nur ein Single
1
macht nichtsEiner einfachen 45-Zeichen-Lösung werden 12 Bytes hinzugefügt, um die Unterscheidung zu erleichtern
Probieren Sie es online!
quelle
R , 90 Bytes
Probieren Sie es online!
Ausgaben
TRUE
für eine nicht unterscheidende Zeichenfolge undFALSE
für eine unterscheidende Zeichenfolge. Ich habe viel hässlichen Code für Herausforderungen auf dieser Site geschrieben, aber ich denke, dass dies der hässlichste ist, den es bisher gibt.45 Zeichen, jeweils zweimal verwendet (einschließlich einiger Zeichen in einem Kommentar). Die bisher beste R-Antwort war 116 Byte , wobei 29 Zeichen jeweils viermal verwendet wurden. Ich poste dies separat, da es wesentlich anders ist.
Der Code ist äquivalent zu
Diese Methode konvertiert die Eingabe in einen Ganzzahlvektor, berechnet eine Kontingenztabelle
y
der Werte und prüft dann, ob alle Zählungen in dieser Tabelle mit der ersten Zählung übereinstimmen und ob die erste Zählung größer als 1 ist.Die anfängliche Schwierigkeit bestand darin, nur zwei Klammerpaare zu verwenden. Dies wird durch die Neudefinition der monadischen Funktionen erreicht
!
und?
zu seinutf8ToInt
undprod
jeweils. (Ich kann nicht verwenden,all
weil ich das brauchea
). Es gibt vier Zuordnungen: zwei mit=
und zwei mit<-
. Dies bedeutet, dass die Gleichheitsprüfung zwischeny
undz
nichty==z
noch verwenden kanny-z
;y%in%z
kommt zur Rettung.Das Definieren dieser Funktionen verbraucht alle möglichen Anführungszeichen: zwei doppelte Anführungszeichen, zwei einfache Anführungszeichen, und ich brauche die beiden Backticks im nächsten Absatz, also musste ich
readLines()
stattdessen darauf zurückgreifenscan(,"")
. (Die anderen Optionen, wiescan(,letters)
oderscan(,month.abb)
alle verwendeten ein kostbares,t
das ich nicht verschonen konnte.)Zu diesem Zeitpunkt hatte ich die meisten der Bausteine:
utf8ToInt
,prod
,table
,readLines
,%in%
. Drei Zeichen erscheinen dreimal in diesem Namen:ent
. Zuerst entdeckte ich, dasstable(foo)
das gleichbedeutend ist mit demxtabs(~foo)
Speichern dere
. Ich kann dasn
und dast
mit dem Hex / Oktal-Code- Trick retten ; Die golferischste Lösung ist die Verwendungu\164f8ToI\x6Et
(in Backticks) fürutf8ToInt
.quelle
NA
Hilfsoperators ), aber leider wird es nicht als wahrer Wert angesehen (in R, wenn (NA) x sonst y einen Fehler verursacht,NA
ist dies weder wahr noch falsch )Brachylog , 18 Bytes
Probieren Sie es online!
Leider kann ich die Zeilenvorschübe nicht entfernen, da
ḅ
bei einer Nummer ein Fehler ausgelöst wird.quelle
Ruby ,
8778 Bytes26 Zeichen werden jeweils dreimal wiederholt
Probieren Sie es online!
quelle
gets
und;
. Geändert, es ist sowieso kürzer als ein LambdaR
132116 BytesEs enthält auch keine Kommentare oder überflüssigen Zeichenfolgen, obwohl dies wahrscheinlich das einzige Mal ist, dass ich im Codegolf eine Funktion aufrufe
crudcardounenforceableuploads
.Es gibt wahrscheinlich irgendwo ein tolles Anagramm für den Funktionsnamen!Vielen Dank an John Dvorak für den Hinweis auf einen schönen Anagramm-Löser, den ich für den Namen verwendet habe.Zeichentabelle:
Beispiele:
quelle
>
s entfernen , indem wir den Vergleich mit umschaltenf
. Kann auch=
anstelle von verwenden<<-
.strsplit
ist wahrscheinlich unvermeidlich, was die Quelle der meisten anderen Charaktere ist.utf8ToInt
stattstrsplit
, aber nicht sicher , ob das helfen wird. Vielleicht auch einen Link zu TIO?.
scheint überflüssig zu sein.BASH 144 Bytes
Diese Codezeile verwendet eine stdin-Zeichenfolge als Eingabe. "grep -o." setzt jedes Zeichen in eine neue Zeile. "uniq -c" zählt die Verwendung jedes Zeichens. Das awk-Skript erstellt ein Array mit jeder Verwendung als anderes Element und gibt true aus, wenn nur 1 Arrayindex vorhanden ist und der Wert mindestens 2 beträgt. Jedes Zeichen wird viermal verwendet, sodass diese Quelle true zurückgibt
quelle
Stax ,
262418 BytesProbieren Sie es online!
Kürzeste Lösung, die bisher nur druckbare ASCIIs verwendet, die von MATLgeschlagen wurden.Ich schätze, ich bin falsch an das Problem herangegangen. Einen Arbeitsblock zu wiederholen ist weder golfen noch interessant. Jetzt sieht es wenigstens besser aus ...
Erläuterung
:u{m*
erzeugt etwas Müll, der sich nicht auf die Ausgabe auswirkt.quelle
#
und zwei:
, hast du meine Antwort in der zweiten Zeile gelesen? Haben Sie gerade den ersten Absatz in meiner "Erklärung" übersprungen?Pip , 22 Bytes
Probieren Sie es online!
Erläuterung
Jeder Buchstabe kommt zweimal vor.
Alternative 22-Byte-Version mit weniger No-Ops:
quelle
SmileBASIC,
164152148140 Bytes35 verschiedene Charaktere, jeweils 4-mal wiederholt.
Es wurden keine Kommentare verwendet (der Ausdruck danach
neXT
wird jedoch nie ausgewertet)Skript zur Überprüfung der Antworten:
Code-Snippet anzeigen
quelle
Retina 0.8.2 ,
16890 BytesDie Ausgabe ist leer, wenn sie falsch ist, oder nicht leer, wenn sie wahr ist.
Probieren Sie es online aus
Kernprogramm (39 Bytes)
Erläuterung
Das gesamte Kernprogramm befindet sich in einer stillen Schleife. Die erste Stufe sortiert die Eingabe. In der zweiten Stufe wird die aktuelle Zeichenfolge gedruckt, wenn sie aus aufeinanderfolgenden Paaren verschiedener Zeichen besteht. Die dritte Stufe entfernt das letzte Vorkommen jedes Zeichens (Entfernen eines jeden Zeichens in der Zeichenfolge).
Über den Müll an der Spitze: Die Reihenfolge ist wichtig. Ein Semikolon muss nicht nur syntaktisch gültig sein, sondern auch nach den Sternchen und vor den Backticks stehen, solange
*
es in der Konfigurationszeichenfolge enthalten ist, damit es nicht gedruckt wird.quelle
CoffeeScript 1 ,
969390 BytesProbieren Sie es online!
Ich habe mit meiner ES6-Antwort angefangen , bin aber zur Verwendung zurückgekehrt
Array.every
.323130 Token zu je 3quelle
Pyth, 30 Bytes
Führende Leerzeichen erforderlich.
Probieren Sie es online!
Das eigentliche Programm ist eben
&q1lJ{hMrSz8<1hJ
. Ich habe die Zeichenfolge nur vorangestellt"&8<MQSlqr{"
, um sie nicht zu diskriminieren. Damit sich die Zeichenfolge jedoch nicht von selbst druckt, musste ich ein Leerzeichen hinzufügen, also habe ich zwei Leerzeichen hinzugefügt.length_encode
here (r <any> 8
) nimmt eine Sequenz und gibt die Länge jedes Laufs desselben Zeichens aus, z."aaabbcc"
wird[[3, "a"], [2, "b"], [2, "c"]]
.Dies nimmt also die Eingabe, sortiert sie, um sie in Längencodierung zu setzen, und nimmt das erste Element jeder Liste in der resultierenden Liste (z. B. würde das frühere Beispiel werden
[3, 2, 2]
). Dies gibt an, wie oft Zeichen vorkommen. Dann wird es dedupliziert (das frühere Beispiel würde[3, 2]
), und J wird darauf gesetzt.Dann wird geprüft, ob die Länge 1 ist, dh, es gibt nur 1 eindeutige Häufigkeit, mit der ein Zeichen vorkommt, und ob dies> 1 ist, dh> = 2.
Es könnte eine integrierte in sein zu ersetzen
rSz8
oderhMrSz8
aber ich kann nicht finden.quelle
C (gcc) 153 Bytes
Probieren Sie es online!
Gibt die Adresse des Strings als Wahrheitswert und Null als Falsch zurück.
quelle
Perl 6 ,
5857 BytesProbieren Sie es online!
Es stellt sich heraus, dass die dreistellige Version etwas kürzer ist als die zweistellige.
quelle