Gelöschte Fragen zum Stack Overflow sorgen manchmal für großartiges Golfmaterial.
Schreiben Sie eine Funktion, die eine nichtnegative Ganzzahl als Eingabe verwendet und true zurückgibt, wenn alle Ziffern in der Basis-10-Darstellung dieser Zahl eindeutig sind. Beispiel:
48778584 -> false
17308459 -> true
Die Zeichenanzahl umfasst nur die Funktion.
Wenn Sie in C oder C ++ antworten möchten: keine Makros, kein undefiniertes Verhalten; Implementierungsdefiniertes Verhalten und Compiler-Warnungen sind in Ordnung.
Antworten:
Golfscript,
87 Zeichen:`
- Fassen Sie das Argument zusammen..
- zweimal klonen&
- sich selbst schneiden (Duplikate entfernen)=
- auf Gleichheit prüfen.wenn die Funktion benannt werden muss (
109 Zeichen ):wenn ein Programm ausreicht (
54 Zeichen ):quelle
Python 2 (28)
(32)Die Backticks nehmen die Stringdarstellung an. Beim Konvertieren in eine Menge werden Duplikate entfernt, und es wird überprüft, ob dies die Länge verringert, indem 10 ^ d verglichen wird, was größer ist als alle d-stelligen Zahlen, aber keine (d + 1) -stelligen Zahlen.
Alter Code:
quelle
n
miti
f=lambda _:len(`_`)==len(set(`_`))
lambda n:max(map('n'.count,'n'))<2
(die einfachen Anführungszeichen sind Backticks), aber es sind zwei Zeichen länger.APL (6)
Eines der wenigen Male, bei denen der implizite Stil auch bei APL kürzer ist.
Es sind 8 Zeichen, um ihm einen Namen zu geben.
aber das ist nicht nötig um es zu benutzen:
quelle
Perl, 19 Zeichen
quelle
<>!~/(\d).*\1/
.\d
zu.
.Rebmμ (10 Zeichen)
Rebmus "Mushing" -Trick ist, dass die Groß- und Kleinschreibung nicht beachtet wird, sodass die Zeichen zusammenlaufen. Immer wenn ein Fallübergang getroffen wird, wird dieser zum nächsten Token aufgeteilt. Durch die Verwendung von Übergängen anstelle von CamelCase-Übergängen wird durch die einmalige Entscheidung, mit einem Großbuchstaben zu beginnen, ein "Set-Word" erstellt. (Während gesetzte Wörter in der symbolischen Programmierung für andere Zwecke verwendet werden können, werden sie standardmäßig als Zuweisungen ausgewertet.)
Das "entmuscht" also:
Der Platz wird benötigt, da Sie mit diesem Trick nach einer Reihe von Läufen abwechselnder Fälle nur dann ein festes Wort nach dem ersten erhalten können, wenn Sie einen neuen Lauf beginnen. Also
e?AtsAuqA
hättest du bekommene? a ts a uq a
... keine Zuordnung.(Anmerkung: Aus irgendeinem Grund bevorzuge ich es, Lösungen so zu überdenken, dass keine Leerzeichen entstehen, wenn die Anzahl der Zeichen gleich ist. Da Klammern, Klammern und Zeichenfolgen implizit ein Symbol beenden ... gibt es oft ein Fair Anzahl der Möglichkeiten dafür.)
Auf jeden Fall, wenn dem Rebol zugeordnet, dass es abkürzt:
Wirf ein paar Klammern ein, um den Kern der Bewertungsreihenfolge zu ermitteln:
Der Präfix-Gleichheitsoperator wird also auf zwei Argumente angewendet: Das erste ist das Ergebnis der Zuweisung
a
der String-Version von sich selbst und das zweite das Ergebnis derunique
Ausführung für diesen String. Es kommt also vor, dass unique die Elemente in der Reihenfolge zurückgibt, in der Sie sie übergeben haben. So ist zum Beispiel "3124" für "31214" eindeutig.Führen Sie es mit:
Es gibt auch einige Statistiken und Debug-Informationen:
Wenn die Anforderung besteht, dass eine benannte / wiederverwendbare Funktion definiert werden muss, können Sie eine "A-Funktion" erstellen, die implizit einen Parameter mit dem Namen a mitnimmt
a|
. (Eine B-Funktion würde mitb|
einem Parameter mit dem Namen A und einem mit dem Namen B erstellt werden.) Das würde also fünf weitere Zeichen hinzufügen ... Angenommen, Sie rufen die Funktion "f" auf."Du lachst! Sie haben über Einstein gelacht! Oder warten Sie ... oder? Ich ... weiß nicht."
quelle
Reb moo
, aber jetzt bin ich nicht sicher , ob es angenommen hat , seinRebum mew
oderReb mew
anders oder so etwas.Fa|[e? AtsAugA]
alsFalse? SomeGibberish
s
wirklich[
in Nethack?REBmu
ist wahrscheinlich besser. In jedem Fall ist der Bart eng ... es drückt. Schätze, du bekommst, wofür du zahlst.FRACTRAN -
5338 FraktionenVerwendet Division, um die Anzahl der Vorkommen jeder Ziffer zu zählen. Der Aufruf durch Setzen von n in Register 2 und Setzen von Register 5 auf 1 ergibt eine Ausgabe in Register 3 (0, wenn falsch, 1, wenn wahr). Stellen Sie außerdem sicher, dass der Rest Ihres Programms nur Register> 71 verwendet.
Bearbeiten 25/12/14: Es ist 7 Monate und wir haben seit Stapel Snippets bekommen, also hier ist man den Code zu testen (mit meinen könnte-sein-besser Dolmetscher hier ).
Ersetzen Sie
142857
durch eine andere Nummer. Die Ausgabe sollte3^1
wahr oder1 = 3^0
falsch sein. Dauert eine Weile für größere Nummern ( na ja , das ist FRACTRAN ...).quelle
JavaScript - 23 Zeichen
Als eine Funktion (ECMAScript 6):
Oder Eingaben über eine Eingabeaufforderung (25 Zeichen)
quelle
C #
736059Erstes Golfen für mich ...
Könnte durch KonvertierenAuf geht's ...uint
in ein anderes Zeichen entfernenint
, aber ich nehme die Aufgabe eher zu wörtlich als umgekehrt.quelle
i => (i + "").Distinct().SequenceEqual(i + "");
+""
,ToString()
unter der Haube zu telefonieren.Ruby (24 Bytes)
Verwenden Sie einen regulären Ausdruck, um "ein Zeichen, gefolgt von null oder mehr Zeichen, dann dasselbe Zeichen" abzugleichen.
Wenn wahrheitsgemäße oder falsche Werte akzeptiert werden und nicht wörtliche
true
oderfalse
, erhalten wir 20 Zeichen:quelle
C (87)
Da ich nicht gewinnen kann, werde ich mich um Effizienz bemühen.
Funktionscode:
quelle
Mathematica,
3525 Zeichen(27, wenn die Funktion einen Namen benötigt.)
BEARBEITEN: 8 Zeichen dank belisarius gespeichert!
quelle
Unequal @@ IntegerDigits@# &
tun, könnte ich denke≠
nicht benachbarte Elemente vergleichen würde). Danke, das verkürzt das sehr!Unequal@@IntegerDigits@#&
ist 25 Zeichen.R
53514834 BytesProbieren Sie es online!
In einen String konvertieren und teilen. Konvertiere in eine Tabelle mit Zählungen minus 1, summiere und negiereInspiriert von Häufigste Antwortnummer von Alex und Vorschlag von Hugh.Ein paar gerettet, dank @plannapus Ein weiteres von @Gregor Und ein paar davon, es zu einer anonymen Funktion zu machen
Jetzt mit wunderbarer Regex-Güte dank @ J.Doe. Dies sucht nach einem einzelnen Zeichen in der Zahl, die mit sich selbst übereinstimmt, wo in der Zeichenfolge. Der
grepl
Befehl gibt eine Logik zurück, die dann zurückgegeben wird. Regexes im Perl-Stil sind auf True gesetzt.quelle
paste0
anstelle vontoString
2 Zeichen auch in Zeichenfolgen konvertieren und diese speichern.paste
anstelle vonpaste0
ein weiteres Zeichen speichern.J (9)
Angenommen, der zu testende Wert ist eine Variable
b
(ich weiß, dass dies in eine Funktion umgewandelt werden kann, habe aber keine Ahnung, wie . J ist verwirrend. Jede Hilfe hierzu wird geschätzt.)Danke Marinus!Überprüft, ob die Länge der Zeichenfolgenwiederholung der Zahl mit allen entfernten Duplikaten der Länge der regulären Zeichenfolgenwiederholung entspricht.
quelle
(-:~.)@":
.R (
70,60,53, 52)Vielen Dank für die nützlichen Kommentare! Ihre Kommentare sind in der Antwort enthalten.
quelle
strsplit
warum nicht x zu einem Zeichen mit erzwingenc(x,"")
?f=function(x)all(table(strsplit(c(x,""),"")[[1]])<2)
ist 1 Zeichen kürzer :)Mathematica (
2019)(
2221 wenn die Funktion einen Namen braucht)oder
wo | wird eingegeben als [Esc] dividiert [Esc]
quelle
Brachylog , 1 Byte
Probieren Sie es online!
quelle
C99, 59 Zeichen
quelle
Groovy (36 Zeichen)
Getestet mit:
quelle
0>1
ist kürzer.!1
stattdessen @WillP, wie von MichaelEaster vorgeschlagen .Haskell:
quelle
Data.List
sowieso importierst, würde ich vorschlagennub
, dass Duplikate aus einer Liste entfernt werden.(\x->nub x==x).show
main = interact $ show . ap (==) nub . show
J (8)
Kompetent aus meiner vorherigen Antwort.
quelle
R,
6665 ZeichenTrennen Sie die Ziffern mit Integer Division und Modulo und prüfen Sie, ob es sich um Duplikate handelt.
Verwendung:
Oder, wie von @MickyT vorgeschlagen, für 63 Zeichen:
quelle
anyDuplicated
eher alssum
undduplicated
für 2 weitere verwendenC 58 Bytes
Kann eine Anzahl von bis zu 7 identischen Ziffern vor dem Überschlagen behalten.
im Testprogramm (es ist einfacher zu sehen, wie es mit der Konstanten im Oktal funktioniert)
Wenn Sie eine große Potenz von 2 zur Hand haben, kann die Konstante wie folgt berechnet werden
f&(1<<30)/7*6
quelle
int main(int)
in Ihrer Antwort nicht wirklich verwendet ...Haskell , 34 Bytes
Probieren Sie es online!
quelle
Javascript 73 Zeichen
quelle
Befunge 98, 17 Bytes
Dies ist eine nicht konkurrierende Antwort, da Befunge keine Funktionen hat.
Gibt ein aus,
1
wenn die Ziffern der Nummer alle eindeutig sind. Ansonsten endet es einfach.Dies funktioniert, indem auf eine Zelle im Funge-Bereich zugegriffen wird, deren
x
Koordinate der ASCII-Wert des eingegebenen Zeichens ist (Zeichen für Zeichen eingegeben) und dereny
Koordinate ist1
. Wenn die Ziffer noch nicht gesehen wurde, ist der Wert der Zelle32
(Leerzeichen). In diesem Fall setze ich den Wert auf 1.Als Bonus funktioniert dies auch für Nicht-Nummern.
quelle
PowerShell - 26
quelle
Perl 6 (19 Bytes)
.comb
teilt eine Zeichenfolge in Zeichen (zum Beispiel42.comb
gibt"4", "2"
)..uniq
Entfernt alle nicht eindeutigen Zeichen..comb
Zeichen in Zeichenfolge (ursprünglich habe ich verwendet.chars
, ist aber.comb
kürzer).==
konvertiert Listen in die Anzahl der darin enthaltenen Elemente und vergleicht die Zahlen. Wenn.
ohne Objekt verwendet wird,$_
wird der Standardfunktionsparameter angenommen.{}
sind Funktionsliterale.quelle
C 76
Dies ist nicht annähernd das Gewinnen, aber ich werde es trotzdem posten, nur um einen alternativen Ansatz zu zeigen.
Gibt bei false eine neue Zeile aus und bei true nichts.
quelle
int main(int, char **)
oderint main(void)
.int main(int)
ist ungültig.main()
ist das ok?main(void)
(wenn es in der Definition verwendet wird, deklariert es in der Deklaration eine Funktion mit unbekannter Parameterliste).POSIX sh und egrep (
47,43, 40)!
statt-z
mittest
- Dank DigitalTrauma`CODE`
anstelle von$(CODE)
- Dank DigitalTraumafold -1
anstelle vongrep -o .
1 - Danke DigitalTrauma.Wenn die POSIX-Konformität keine Rolle spielt,
echo PARAM |
können Sie<<<PARAM
die Funktionslänge auf 37 reduzieren :Verwendung:
1 In
fold -N
einigen Versionen von ist die Notation veraltetfold
.quelle
f()(! [ `fold -1<<<$1|sort|uniq -d` ])
nach meiner Zählung auf 38 gesunkentest
krächzt er, wennuniq -d
mehr als eine Zeile zurückgegeben wird. Die kürzeste Nicht-POSIX-Version hat also 40 Zeichen. Ich weiß über die[ !
Notation Bescheid , aber ich bin überrascht, dass das! [
auch funktioniert. Weißt du, warum das so ist?Java (
1315957)57 Zeichen:
^ und $ als @ n̴̖̋h̷͉̃ã̷͉h̷̭̿d̷̰̀ĥ̷̳ vorgeschlagen entfernt
59 Zeichen (funktioniert auch mit negativen Zahlen!):
7978 Zeichen (danke @ n̴̖̋h̷͉̃ã̷͉h̷̭̿d̷̰̀ĥ̷̳):Verwenden Sie die for-Schleife, um einige Zeichen zu speichern und int als boolesches Array zu verwenden.
Verwenden Sie & anstelle von &&, um 1 Zeichen zu speichern (es stellt sich heraus, dass Java dies zulässt).
131 Zeichen (gibt true für negative Zahlen zurück):
mit Kommentaren:
Und die Antwort ist technisch korrekt (die Anzahl der Zeichen enthält nur die Funktion, nicht die globalen Variablen), aber ich denke, es ist Betrug, 29 Zeichen:
m [] ist ein boolesches Array, das die richtigen Antworten für alle 32-Bit-Ganzzahlen enthält.
quelle
"^.*(.).*\\1.*$"
Sie können fallen^
und$
. Sie sind impliziert durchmatches()
return!
in der kürzesten Antwort entfernen , können Sie 56 Bytes erreichen.