Ihre Herausforderung besteht darin, die glatteste Zahl in einem bestimmten Bereich zu finden. Mit anderen Worten, finde die Zahl, deren größter Primfaktor der kleinste ist.
Eine glatte Zahl ist eine Zahl, deren größter Primfaktor klein ist. Zahlen dieses Typs sind nützlich für den schnellen Fourier-Transformationsalgorithmus, die Kryptoanalyse und andere Anwendungen.
Über den Bereich 5, 6, 7, 8, 9, 10
ist beispielsweise 8 die glatteste Zahl, da der größte Primfaktor von 8 2 ist, während alle anderen Zahlen einen Primfaktor von 3 oder mehr haben.
Eingabe: Die Eingabe besteht aus zwei positiven Ganzzahlen, die einen Bereich definieren. Die minimal zulässige Ganzzahl im Bereich ist 2. Sie können wählen, ob der Bereich inklusive, exklusiv, semi-exklusiv usw. ist, solange ein beliebiger Bereich innerhalb der Grenzen Ihrer Sprache angegeben werden kann. Sie können die Zahlen über die Funktionseingabe, stdin, das Befehlszeilenargument oder eine entsprechende Methode für Ihre Sprache eingeben. Keine Kodierung zusätzlicher Informationen in der Eingabe.
Ausgabe: Gibt eine oder mehrere Ganzzahlen im Eingabebereich zurück, druckt sie aus oder entspricht ihnen, die maximal glatt sind (minimaler größter Faktor). Die Rückgabe mehrerer Ergebnisse ist optional. Wenn Sie sich jedoch dafür entscheiden, müssen die Ergebnisse klar abgegrenzt werden. Das native Ausgabeformat eignet sich für mehrere Ergebnisse.
Bitte geben Sie in Ihrer Antwort an, wie Sie Inputs aufnehmen und Outputs liefern.
Wertung: Code Golf. Zählen Sie nach Zeichen, wenn Sie in ASCII geschrieben sind, oder nach 8 * Bytes / 7, wenn Sie nicht in ASCII geschrieben sind.
Testfälle:
Hinweis: Dies sind Bereiche im Python-Stil, einschließlich des unteren Endes, aber nicht des oberen Endes. Ändern Sie nach Bedarf Ihr Programm. Es ist nur ein Ergebnis erforderlich.
smooth_range(5,11)
8
smooth_range(9,16)
9, 12
smooth_range(9,17)
16
smooth_range(157, 249)
162, 192, 216, 243
smooth_range(2001, 2014)
2002
quelle
Antworten:
CJam - 13
Versuchen Sie es unter http://cjam.aditsu.net/
Beispiel Eingabe:
2001 2014
Beispiel Ausgabe:
2002
Erläuterung:
q~
Liest und wertet die Eingabe aus. Durch Drücken der 2 Zahlen auf dem Stapel (z. B. min und max),
wird ein Array [0 1 ... max-1] erstellt,>
das das Array ab min schneidet, was zu [min ... max-1] führt.{…}$
sortiert das Array mithilfe des Blocks, um den Sortierschlüssel zu berechnen. Ruftmf
ein Array mit allen Primfaktoren einer Zahl ab, umW=
das letzte Element des Arrays zu erhalten (W = -1), wodurch der größte Primfaktor erhalten wird, der als ein verwendet werden soll Sortierschlüssel0=
erhält das erste Element des (sortierten) Arraysquelle
mfW
jemand hat es in 13 Zeichen gelöst.Regex (
.NETPCRE-Version),183129 BytesVersuchen Sie das nicht zu Hause!
Dies ist nicht wirklich ein Anwärter auf den Sieg. Aber Eric Tressler schlug vor, dieses Problem nur mit einer Regex zu lösen, und ich konnte nicht widerstehen, es auszuprobieren. Dies
könntemöglich ist , in PCRE als auch (und sogar noch kürzer, siehe unten), aber ich wählte .NET , weil meine Lösung mit beliebiger Länge Lookbehinds benötigt. Auf geht's:Die Eingabe wird als ein durch Kommas getrennter Bereich codiert, in dem beide Zahlen in unärer Notation mit
1
s angegeben werden. Die Übereinstimmung ist die nachfolgendeS
1, wobeiS
die glatteste Zahl im Bereich ist. Krawatten werden zugunsten der kleinsten Zahl gebrochen.Das zweite Beispiel aus der Frage wäre also die folgende Zeichenfolge (Übereinstimmung unterstrichen)
Es basiert auf der (mittlerweile bekannten) Prime-Checking-Regex , deren Variationen sage und schreibe sechsmal eingebettet sind.
Hier ist eine Version mit freien Abständen und Kommentaren für diejenigen, die wissen wollen, was los ist.
Sie können es online testen hier . Versuche es aber nicht mit zu großen Eingaben, ich übernehme keine Garantie für die Leistung dieses Monsters.
Bearbeiten:
Am Ende habe ich dies auf PCRE portiert (was nur zwei Schritte erfordert) und den regulären Ausdruck um fast ein Drittel verkürzt. Hier ist die neue Version:
Dies ist im Wesentlichen dasselbe, mit zwei Änderungen:
MIN
Gruppe erstellt habe1
).PCRE
Unterstützt jedoch, dass\K
der Beginn der Übereinstimmung auf die aktuelle Cursorposition zurückgesetzt wird. Somit(?<=^(1+),.*)
wird^(1+),.*?\K
, was schon zwei Bytes spart.(?n)
, um die Gruppen
erneut abzugleichen, ähnlich wie bei einem Unterprogrammaufruf. Da der ursprüngliche reguläre Ausdruck den Code zum zweimaligen Ermitteln des größten Primfaktors einer Zahl enthielt, konnte ich den gesamten Hauptteil des zweiten durch einen einfachen ersetzen(?2)
.quelle
3
oder7
) tatsächlich Primzahl ist. Dies setzt voraus, dass nach der ersten Erfassung eine weitere Kopie des Faktors vorhanden ist, was bei Primzahlen nicht der Fall wäre. Während ich das in .NET umgehe, indem ich irgendwo einen Lookbehind einsetze, so dass ich mich zur Überprüfung etwas zurückziehen könnte, wäre dies in der kürzeren PCRE-Version aufgrund des Fehlens von Lookbehinds mit variabler Länge nicht möglich. Wahrscheinlich ist möglich , dass etwas zu verkürzen, aber ich glaube nicht , nur die Änderung+
zu*
Werke.(.*),.*?\K(?=(..+)((?=((?(R)\6|\2))*$).*(?=\4$)(?!(..+)\5+$)))(?!.+(?=\1)(?=(..+)(?3)).*(?!\2)\6).+
Ergebnis : 99 Bytes in PCRE. Außerdem bin ich auf viele Ihrer Arbeiten auf dieser Website gestoßen und bin ein großer Fan: D Ich freue mich auf einen Regex-Kampf in der Zukunft!\4$
indem Sie den Lookahead herausnehmen und nach dem negativen Lookahead aufkleben, aber dies beeinträchtigt die Leistung erheblich (jede Untergruppe von Ziffern <= \ 4 wird nicht nur auf \ 4 selbst, sondern auch auf Kompositität geprüft und schlägt bei längeren Eingaben fehl.Regex (PCRE-Geschmack), 66 (65🐌) Bytes
Inspiriert davon, dass sowohl Martin Ender als auch Jaytea , zwei Regex-Genies, Regex-Lösungen für diesen Code-Golf geschrieben haben, habe ich meine eigenen von Grund auf neu geschrieben. Der berühmte reguläre Ausdruck für die Erstprüfung kommt in meiner Lösung nirgendwo vor.
Lesen Sie dies nicht, wenn Sie nicht möchten, dass unäre Regex-Magie für Sie verwöhnt wird. Wenn Sie versuchen möchten, diese Magie selbst herauszufinden, empfehle ich dringend, zunächst einige Probleme in ECMAScript regex zu lösen:
(Die von mir geschriebene Regex-Engine kann hilfreich sein, da sie bei unären mathematischen Regexen sehr schnell ist und einen unären numerischen Modus enthält, mit dem Bereiche natürlicher Zahlen getestet werden können. Sie verfügt jedoch auch über einen Zeichenfolgenmodus, mit dem nicht-unäre oder unäre Regexe ausgewertet werden können Standardmäßig ist es ECMAScript-kompatibel, verfügt jedoch über optionale Erweiterungen (mit denen selektiv Teilmengen von PCRE oder sogar molekularer Lookahead hinzugefügt werden können, was keine andere Regex-Engine hat).
Lesen Sie andernfalls weiter und lesen Sie auch diesen GitHub Gist (Warnung, viele Spoiler), der den Weg des Drängens von ECMAScript-Regex auf natürliche Zahlenfunktionen mit zunehmendem Schwierigkeitsgrad aufzeichnet (beginnend mit Teukon's Puzzlesatz, nicht alle mathematisch), der dies ausgelöst hat Reise).
Wie bei den anderen regulären Ausdrücken für dieses Problem wird die Eingabe als zwei unäre Zahlen angegeben, die durch ein Komma getrennt sind und einen einschließenden Bereich darstellen. Es wird nur eine Nummer zurückgegeben. Der reguläre Ausdruck könnte so modifiziert werden, dass alle Zahlen, die den gleichen kleinsten und größten Primfaktor haben, als separate Übereinstimmungen
\K
zurückgegeben werden. Dies erfordert jedoch einen Lookbehind mit variabler Länge und das Einfügen eines Lookahead oder das Zurückgeben des Ergebnisses als Erfassung anstelle einer Übereinstimmung.Die hier angewandte Technik der wiederholten impliziten Division durch den kleinsten Primfaktor ist identisch mit derjenigen, die in den Match-Zeichenfolgen verwendet wird, deren Länge eine vierte Potenz der Antwort ist, die ich vor einiger Zeit veröffentlicht habe.
Ohne weiteres:
((.+).*),(?!.*(?=\1)(((?=(..+)(\5+$))\6)*)(?!\2)).*(?=\1)\K(?3)\2$
Sie können es hier ausprobieren.
Und die Freiraumversion mit Kommentaren:
Der Algorithmus kann einfach nach ECMAScript portiert werden, indem der Unterprogrammaufruf durch eine Kopie des Unterprogramms ersetzt und die Übereinstimmung als Erfassungsgruppe zurückgegeben wird, anstatt \ K zu verwenden. Das Ergebnis ist 80 Byte lang:
((x+)x*),(?!.*(?=\1)((?=(xx+)(\4+$))\5)*(?!\2)).*(?=\1)(((?=(xx+)(\8+$))\9)*\2$)
Probieren Sie es online!
Beachten Sie, dass
((.+).*)
dies geändert werden kann((.+)+)
, indem die Größe um 1 Byte (von 66 auf 65 Byte ) verringert wird, ohne dass die korrekte Funktionalität verloren geht. Der reguläre Ausdruck explodiert jedoch exponentiell in der Langsamkeit.Probieren Sie es online! (79 Byte ECMAScript Exponential-Slow-Down-Version)
quelle
Python 2, 95
Ermittelt die Glätte der Zahlen durch Versuchsdivision, bis die Zahl 1 ist.
i
Speichert die kleinste Glätte, die bisher erreicht wurde, undj
speichert die Zahl, die diese Glätte ergab.Vielen Dank an @xnor für die Golfplätze.
quelle
if/else
muss verkürzbar sein. Mein erster Gedanke istb=a%p<1;p+=1-b;a/=p**b
. Oder ein Exec, der einen der beiden Befehle in einer verschachtelten Zeichenfolge ausführt. Funktioniert vielleicht auchwhile~-a
.s,p=a,2
,i,j=p,s
, @ xnor Ideen, redundante Vertiefung entfernt und die während der Block in einer Zeile ergibt 95 Zeichen setzen. Nicht sicher, wie Sie auf 98 gekommen sind ...J,
22 2019 ZeichenZ.B
(Funktionen, die zwei Argumente annehmen, sind in J angefügt.)
quelle
(#~ (= <./)@:(i:"1&1)@:*@:(_&q:))@:([ + i.@-~)
{:
ist das gleiche wie>./
und spart 1 Byte.Haskell,
9694938680 ZeichenNutzung über GHCi (eine Haskell-Shell):
EDIT: jetzt ein viel einfacherer Algorithmus.
Diese Lösung enthält beide Zahlen im Bereich (also
8 # 9
und7 # 8
sind beide 8)Erläuterung:
Die (%) Funktion akzeptiert zwei Parameter, x und y. Wenn y 2 ist, gibt die Funktion die Glätte von x zurück.
Der Algorithmus von hier ist einfach: Ermittelt die kombinierte Liste aller Glättungen von Zahlen in der Eingabe, wobei jede Glättung einen Verweis auf ihre ursprüngliche Nummer speichert, sortiert dann, um die kleinste zu erhalten, und gibt die referenzierte Nummer zurück.
Hier ist eine ungolfed Javascript-Version mit dem gleichen Algorithmus:
quelle
m l=minimum l
Mathematica,
614539 ZeichenSehr einfache Implementierung der Spezifikation als unbenannte Funktion.
quelle
Lua - 166 Zeichen
Ich
nichthabe (noch!) Genug Ruf zu kommentieren AndoDaan Lösung , aber hier sind einige Verbesserungen an seinem CodeÄnderungen :
n%d==0
durchn%d<1
die in diesem Fall äquivalent ist ,table.insert(f,d)
durchf[#f+1]=d
(#f
ist die Anzahl der Elemente von f)quelle
Bash + Coreutils, 56 Bytes
Die Eingabe stammt von genau zwei Befehlszeilenargumenten (Danke @ nyuszika7h !!!). Die Ausgabe ist ein einzelnes Ergebnis, das an STDOUT ausgegeben wird.
seq
Liefert den Zahlenbereich (eine pro Zeile) aus den Befehlszeilenargumenten.factor
Liest diese Zahlen und gibt jede Zahl aus, gefolgt von einem Doppelpunkt und der sortierten Liste der Primfaktoren dieser Zahl. Der größte Primfaktor steht also am Ende jeder Zeile.sed
entfernt den Doppelpunkt und alle bis auf den letzten / größten Primfaktor, sodass eine Liste mit jeder Zahl (Spalte 1) und ihrem größten Primfaktor (Spalte 2) verbleibt.sort
numerisch in aufsteigender Reihenfolge durch die Spalte 2.sed
Übereinstimmung mit Zeile 1 (Nummer, deren größter Primfaktor der kleinste in der Liste ist) entfernt alles, einschließlich und nach dem ersten Leerzeichen, und wird dann beendet.sed
druckt das Ergebnis dieser Ersetzung vor dem Beenden automatisch aus.Ausgabe:
Hinweis Bereiche sind in diesem Zusammenhang einschließlich der beiden Endpunkte.
quelle
seq $@
ist 3 Bytes kürzer, wenn Sie davon ausgehen können, dass es nur zwei Argumente gibt.Python 2, 67
Das Nachdenken über ein anderes Golfspiel brachte mich auf die Idee, einen neuen Algorithmus zur Überprüfung der Glätte zu entwickeln, daher die späte Antwort.
Die Primfaktorisierung der Fakultät
i!
umfasst höchstens genau die Primzahleni
. Wennn
es sich also um ein Produkt mit unterschiedlichen Primzahlen handelt, ist seine Glätte (der größte Primfaktor) der kleinste,i
für denn
ein Teiler von isti!
. Um wiederholte Primfaktoren zu berücksichtigenn
, können wir stattdessen eine ausreichend hohe Potenz von verwendeni!
. Insbesondere(i!)**n
genügt.Der Code versucht, die Fakultäten zu erhöhen
F=i!
und aktualisiert sie rekursiv. Wir filtern nach den Teilern vonF
im Eingabebereich und geben sie aus, falls vorhanden, und gehen ansonsten zu über(i+1)!
.Testfall:
quelle
C
149,95Bearbeitete Antwort:
Ich kann für diese Lösung keine Gutschrift verlangen. Diese aktualisierte Antwort leiht die schöne Methode aus, die isaacg in seiner Python-Lösung verwendet. Ich wollte sehen , ob es möglich war , es als verschachtelte in C zu schreiben
for
/while
Schleife ohne geschweifte Klammern, und es ist!Erläuterung:
R(a,b,n,q,p,m)
durchsucht den Bereicha
bisb-1
und gibt die erste gefundene glatte Zahl zurück. Invocation erfordert die Einhaltung der folgenden Form:R(a,b,a,b,2,0)
so daß die Variablen innerhalb der Funktion effektiv initialisiert werden , wie folgt:n=a;q=b;p=2;m=0;
.Ursprüngliche Antwort :
Dies war meine ursprüngliche Antwort ...
Erläuterung:
P(n,f,p)
prüft den Wertn
auf Primalität und gibt true (ungleich null) zurück, wennn
es sich um eine Primzahl handelt, oder false (null), wennn
es sich nicht um eine Primzahl handelt.f
undp
müssen beide als 1 übergeben werden.G(n,f)
liefert den größten Primfaktor vonn
.f
muss als übergeben werdenn
.R(a,b,p,n)
durchsucht den Bereicha
bisb-1
und gibt die erste gefundene glatte Zahl zurück.p
muss übergeben werden, da 1.n
ein beliebiger Wert sein kann.Testfahrer:
Ausgabe:
quelle
Haskell - 120
Anwendungsbeispiel:
quelle
<1
anstelle von verwenden==0
?Q, 91 ZeichenK, 78 Zeichenk würde wahrscheinlich ein Dutzend Charaktere rasieren
edit: in der Tat, diesmal die obere Schranke als nicht inklusive behandeln
quelle
Hinweis: Diese Antwort ist nicht zulässig.
Diese Antwort verwendet mehrere Funktionen von Pyth, die hinzugefügt wurden, nachdem die Herausforderung gestellt wurde.
Ich habe eine weitere neue Funktion hinzugefügt, die unären Bereich für ein 2-Element-Tupel aufruft, wodurch die Lösung um zwei Zeichen verkürzt wird:
Pyth , 7
Die Eingabe erfolgt nun kommagetrennt. Der Rest ist der gleiche.
Diese Antwort verwendet eine Funktion von Pyth, die hinzugefügt wurde, nachdem diese Frage gestellt wurde, insbesondere nachdem @ aditsus wunderbare CJam-Lösung angezeigt wurde. Davon abgesehen wollte ich demonstrieren, was das Hinzufügen dieser Funktion ermöglicht hat. Das Merkmal ist
P
, dass es sich um eine Arity-1-Funktion handelt , die bei einer Ganzzahleingabe eine Liste aller Primfaktoren der Eingabe zurückgibt, sortiert von klein nach groß.Pyth , 9
Verwendet Bereiche im Python-Stil, wobei die Zeilenumbrüche in STDIN getrennt sind. Gibt die kleinste Lösung an STDOUT aus.
Erläuterung:
Tests:
quelle
Lua - 176 Zeichen
Ich sollte aufhören in Lua zu golfen. Es hat keinen Sinn.
quelle
Clojure -
173170 ZeichenIch bin ein Clojure-Neuling. Golf gespielt:
Probeläufe:
Bereiche schließen das untere Ende ein, schließen das obere Ende aus: [a, b) Druckt nur eine der glattesten Zahlen, wenn mehrere auftreten.
ergibt:
Ungolfed:
quelle
Ruby,
6562Mit Entschuldigung an https://codegolf.stackexchange.com/a/36484/6828 , ist dies die Golfversion (und etwas vereinfacht) davon. Verwendet einen inklusiven Bereich, da dieser ein Zeichen kürzer ist.
Und danke an YenTheFirst für das Speichern von drei Zeichen.
quelle
C # LINQ:
317303289262Ungolfed:
Es nimmt den Start und die Länge von der Kommandozeile auf und gibt die größte glatte Zahl zurück.
Ich habe Antworten von hier und hier verwendet , um meine Antwort zu geben.
Vielen Dank an VisualMelon für die Optimierung und die Reduzierung von 12 Byte! Ich habe auch die geschweiften Klammern beim Speichern von 2 Bytes entfernt, und CodeInChaos hat auf einige offensichtliche Dinge hingewiesen, die ich übersehen habe (nochmals vielen Dank).
quelle
F
indem Sieint b
neben m definieren. In ein paar Orte führen Sie den Vergleicha%b==0
, unda
undb
sind immer positiv , dass Sie ein Byte für jede durch Überprüfung schneiden kann , wenn es weniger ist als 1a%b<1
. Sie können ein Byte auch speichern, indem Sieb
die if-Bedingung inkrementierena%++b<0
und nicht die for -Bedingung, indem Sie es auf 1 initialisieren. Ich denke auch, dass es in diesem Fall billiger ist,System.Console.WriteLine
dienamespace
Klausel nur vollständig zu qualifizieren und zu vermeiden .m=...:m;
Ding fällt außerhalb der while-Schleife. Daher können Sie die Dropm=0,
und ersetzenreturn m;
mitreturn m=b>m?b:m;
. Dann kannst du dasm=...:m;
ganz fallen lassen.Aggregate
funktioniert. Ich habe es nur versucht, nachdem ich es in einer anderen Antwort gesehen habe, um zu meinem neuen Objekt zu gelangen, anstatt nur zu einem Feld darin es hat einfach perfekt funktioniert :)R 83
Wobei der untere Rand des Eingabebereichs
a
und der obere Rand (einschließlich) zugeordnet sindb
.gmp
ist ein Paket, das auf CRAN verfügbar ist. Es fühlte sich schmutzig an, bis ich diese absurdemf
Funktion in CJam sah. Installieren Sie durch Eingabeinstall.packages("gmp")
in der Konsole.quelle
lapply
3-mal verwenden, möchten Sie es möglicherweise aliasen (dhl=lapply
und dann verwendenl(...
). In ähnlicher Weise können Sie, da diesfactorize
die einzige Funktion ist, die Sie aus dem Paketgmp
verwenden,gmp::factorize
anstatt die Bibliothek zu laden und dann zu verwendenfactorize
. Ihr Code würde also werden,l=lapply;n=a:b;n[which.min(l(l(l(n,gmp::factorize),max),as.numeric))]
die 69 Bytes ist.PowerShell - 85
Dadurch wird ein Bereich von Zahlen (einschließlich) basierend auf dem maximalen Primfaktor jeder Zahl sortiert. Es wird das niedrigste sortierte Element zurückgegeben.
quelle
J - 16 Zeichen
Verwenden des Bereichsstils ( Start , Länge ), wie in den Kommentaren angegeben.
Um als dyadisches Verb verwendet zu werden: linkes Argument ist Start , recht ist Länge .
Eine ( Start- , End- ) Lösung ist +2 Zeichen und schließt das Ende aus. einschließlich des Endes ist +2 mehr. Aber auf der positiven Seite sieht es ziemlich gut aus, da wir alle {Klammern} zusammenpassen.
quelle
Im Ernst, 8 * 14/7 = 16 (nicht wettbewerbsfähig)
Ernsthaft wurde nach dieser Herausforderung erstellt, aber ich wollte diese Antwort posten, weil sie beispielhaft für die Art der Herausforderungen ist, bei denen Ernsthaft gut ist.
Probieren Sie es online!
Erläuterung:
quelle
Pyth , 7 Bytes
Probieren Sie es hier aus!
}
r
quelle
Cobra - 150
Ich bin mir nicht mal sicher, warum ich mich die Mühe gemacht habe, Cobra kann hier einfach nicht mithalten.
quelle
Ruby - 113 Zeichen
Verwenden der Stdlib. Gibt ein Ergebnis zurück. Getestet auf Rubin 2.1.2.
quelle
Perl (5,10+), 83
(Zeilenumbruch kann entfernt werden). Nimmt zwei Endpunkte eines Inklusivbereichs in zwei Standardzeilen auf (weil dies
<>
billiger ist als der ZugriffARGV
) und gibt die glatteste bis standardmäßige Ausgabe aus. Wenn es eine Gleichheit für glattestes gibt, druckt das kleinste. Könnte das größte auf Kosten eines Zeichens drucken.Der Algorithmus ist im Grunde der Weg von isaacg, den größten Primfaktor zu finden, obwohl wir ihn unabhängig gefunden haben. Dieser Teil lässt sich wunderbar zu einer einzigen Aussage in Perl zusammenfassen, der Rest hat mehr Overhead als ich gerne hätte.
Sollte unter
perl -E
oder mit eineruse 5.012
Präambel ausgeführt werden. Wenn Sie das nicht können, ersetzen Siesay$r
durchprint$r,$/
.quelle
Python 2 (84)
@ isaacgs Lösung , aber mit einer Nach-
min
Funktionstaste anstelle einer expliziten Min-Suche und einer rekursiven Funktion, die die Rolle der Iteration spielt.Führen Sie Stackless Python aus , um Rekursionsbeschränkungen zu vermeiden.
Es sieht verschwenderisch aus, den eingeklammerten Zustand zu verwenden
(n%p<1)
und dann seine Verneinung auch in Klammern zu wiederholen(n%p>0)
, aber das war das Beste, was ich bekommen habe. Ich habe ein paar Dinge ausprobiert, aber sie sind schlimmer geworden.Ich freue mich über jede Verbesserung, die Sie sich vorstellen können.
quelle
Java 8 - 422
454ZeichenIch lerne Java 8 und wollte dies in Bezug auf Java (oder sogar Java 8-Streams) ausprobieren.
Im Vergleich zu anderen Sprachen ist dies eine brutale, aber interessante Übung.
Golf gespielt:
Ungolfed:
Beispiellauf mit:
quelle
MATL ( nicht konkurrierend ), 20 Bytes
Diese Sprache wurde nach der Herausforderung entworfen
Die Reichweite ist an beiden Enden inklusive. Die Zahlen werden als zwei separate Eingänge verwendet.
Probieren Sie es online!
Erläuterung
quelle
&:[]y"@YfX>h]&X<)
oder vielleicht 16:[]y"@YfX>h]&X<)
. Das war&
wirklich eine großartige Idee (und ich vermute, dass esy
damals noch keine gab?).Yf
mit vorangestellten Einsen auch hier nützlich gewesen wäre, aber das reicht wahrscheinlich nicht aus, um zu entscheiden, dass es eine gute Idee im Allgemeinen ist. :)y
oder&
. Wir danken Suever für die sehr nützliche Semantik des letzteren (meine ursprüngliche Idee war, es als "eine Eingabe mehr als Standard" zu bezeichnen). Wenn wir mehr Fälle sehen, in denen dasYf
Hinzufügen von solchen nützlich wäre, kann es sich lohnen, diese Funktion hinzuzufügen. Das Problem ist, dass es ungefähr 34 Antworten gibt, dieYf
(gemäß diesem Skript ) verwendet werden, so dass es schwer zu sagen istJelly , 7 Bytes, Punktzahl = 7 ÷ 7 × 8 = 8, Herausforderung nach den Sprachdaten
Probieren Sie es online!
Nimmt die Endpunkte für den unteren und oberen Bereich als zwei separate Argumente. Gibt eine Liste aller glattesten Nummern im Bereich aus. (Dies kann als Funktion betrachtet werden. In diesem Fall handelt es sich bei der Ausgabe um eine Jelly-Liste oder um ein vollständiges Programm. In diesem Fall verwendet die Ausgabe dieselbe Listendarstellung wie JSON.)
Erläuterung
In Zeiten, in denen Ihr Jelly-Programm nur eine wörtliche Übersetzung der Spezifikation ist…
quelle