Vor kurzem war mein Ruf 25,121
. Ich bemerkte, dass jede Zifferngruppierung (dh die durch Kommas getrennten Zahlen) ein perfektes Quadrat war.
Ihre Herausforderung besteht darin, bei einer nicht negativen ganzen Zahl N und einer unären booleschen Black-Box-Funktion f : Z * → B einen Wahrheitswert zu erhalten, wenn jeder Wert von f , der auf die Zifferngruppierungen von N angewendet wird, wahr ist, andernfalls falsch.
Sie finden die Zifferngruppierungen, indem Sie die Zahl von rechts nach rechts in Dreiergruppen aufteilen. Die Gruppe ganz links kann aus 1, 2 oder 3 Ziffern bestehen. Einige Beispiele:
12398123 -> 12,398,123 (3 digit groupings)
10 -> 10 (1 digit grouping)
23045 -> 23,045 (2 digit groupings)
100000001 -> 100,000,001 (3 digit groupings)
1337 -> 1,337 (2 digit groupings)
0 -> 0 (1 digit grouping)
Zusätzliche Regeln
- Diese Funktion kann entweder auf Boolesche Werte (z. B.
true
undfalse
),1
s und0
s oder auf einen beliebigen Wert für "truthy / falsey" abgebildet werden. Bitte geben Sie an, welche Formate von Ihrer Antwort unterstützt werden. - Sie können eine Ganzzahl als Eingabe oder eine Ganzzahlzeichenfolge (dh eine aus Ziffern zusammengesetzte Zeichenfolge) verwenden.
- Sie können ein Programm oder eine Funktion schreiben.
- Wenn Sie die digitalen Gruppen an die Funktion f übergeben , sollten Sie alle unnötigen führenden Nullen kürzen. Beispielsweise sollte f , wenn es auf N = 123.000 angewendet wird, als f (123) und f (0) ausgeführt werden.
Testfälle
Funktionsnotation ist n -> f(n)
z n -> n == 0
. Alle Operatoren gehen von einer Ganzzahlarithmetik aus. (ZB sqrt(3) == 1
)
function f
integer N
boolean result
n -> n == n
1230192
true
n -> n != n
42
false
n -> n > 400
420000
false
n -> n > 0
0
false
n -> n -> 0
1
true
n -> sqrt(n) ** 2 == n
25121
true
n -> sqrt(n) ** 2 == n
4101
false
n -> mod(n, 2) == 0
2902414
true
n -> n % 10 > max(digits(n / 10))
10239120
false
n -> n % 10 > max(digits(n / 10))
123456789
true
code-golf
number
decision-problem
functional-programming
Conor O'Brien
quelle
quelle
n -> n > 0
anwenden0
), da die meisten Antworten darauf fehlschlagen.[0]
.Antworten:
Gelee , 5 Bytes
Probieren Sie es online!
Das Befehlszeilenargument ist die Zahl. Die Zeile über der Zeile, in der sich diese Funktion befindet, ist die Hauptzeile des restlichen Programms, dh der Code, der für jede der Gruppen aufgerufen wird. Achten Sie darauf, dass Sie sich nicht auf die Zeile beziehen, in der sich diese
bȷÇ€Ạ
befindet! Das hier verwendete Beispiel ist der 5. Testfall.quelle
n -> n != 0
zu0
0
und ihre Zifferngruppenliste ist[0]
, alsoṆ
wird sie jedem Element zugeordnet (dem einzelnen0
hier),[1]
wodurch die Liste zu und zurückgegeben wird, da alle Elemente dieser Liste wahr1
sind. Beachten Sie, dass sich[]
das Ergebnis nicht ändern würde , wenn ich stattdessen die Zifferngruppenliste hätte, da alle Elemente von[]
wahr sind (leere Wahrheit). Das Ergebnis kann jedoch für verschiedene Programme unterschiedlich sein, und die Regeln dafür sind nicht genau klar ( nachgefragtes OP ).Brachylog , 8 Bytes
Probieren Sie es online!
Die Blackbox-Funktion wechselt in die zweite Zeile (oder in die "Fußzeile" von TIO) und die Ganzzahl wird aus STDIN gelesen. Druckt
true.
oderfalse.
entsprechend.quelle
APL (Dyalog) ,
1613 Bytes3 Bytes gespart dank @ Adám
Probieren Sie es online!
Wie?
1e3⊥⍣¯1⊢⎕
- Nummer eingeben und in Basis 1000 codieren⎕¨
- Funktion eingeben und auf jede anwenden∧/
- Reduzieren Sie mit logisch undquelle
Python 2 , 46 Bytes
Probieren Sie es online!
quelle
*
anstelle vonand
.Haskell,
424038 BytesDie Blackbox-Funktion muss
True
oder zurückgebenFalse
.Probieren Sie es online!
Edit:
-2-4 Bytes dank @ovs.quelle
&&
stattand
C (GCC) ,
665848 Bytes-10 Bytes dank @Neil!
Probieren Sie es online!
quelle
g(f,i)int f();{i=!i||f(i%1000)&&g(f,i/1000);}
f(n){return n > n;}
um0
Wolfram Language (Mathematica) , 30 Byte
Probieren Sie es online!
quelle
JavaScript (ES6),
4036 BytesÜbernimmt die Funktion und den Wert durch Currying und gibt 0 oder 1 zurück. Bearbeiten: 4 Bytes dank @Shaggy gespeichert.
quelle
1000
->1e3
um ein paar Bytes zu sparen. Und könnten Sie ersetzen&&
mit&
für ein anderes Byte?function_name(n=>n>0)(0)
(Rückkehrtrue
)Pyth , 9 Bytes
Probieren Sie es online! (verwendet den dritten Testfall)
Angenommen, die Black-Box-Funktion heißt
y
. Sie können eine solche Funktion mitL
(argumentb
:) deklarieren , wie in TIO gezeigt. Ich werde alle Testfälle später implementieren, wenn ich Zeit habe.quelle
Stax , 8 Bytes
Stax-Programme haben keine Funktionsaufrufe oder Argumente, daher speichern wir einen Block im
Y
Register, der einen einzelnen Wert verbraucht und erzeugt. Dies kann vor dem Programmcode erfolgen.Hier ist ein Beispiel mit der perfekten Quadratfunktion.
quelle
Sauber , 54 Bytes
Probieren Sie es online!
Legt die Funktion
$ :: Int -> Bool
, eine Funktion erwartet anf :: Int -> Bool
anderer Stelle definiert werden.quelle
n -> n > 0
um0
Java (OpenJDK 9) , 94 Byte
Probieren Sie es online!
quelle
n -> n > 0
um0
Common Lisp ,
7372 BytesProbieren Sie es online!
quelle
Excel VBA, 79 Bytes
Eine anonyme VBE-Direktfensterfunktion, die Eingaben
n
als Ganzzahl aus dem Bereich[A1]
und den Namen einer öffentlich definierten VBA-Funktion aus dem Bereich entgegennimmt[B1]
.Anwendungsbeispiel
In einem öffentlichen Modul wird die Eingabefunktion in diesem Fall
f()
definiert.Die Eingangsvariablen werden gesetzt.
Die Sofortfensterfunktion wird dann aufgerufen.
quelle
Ruby , 37 Bytes
Probieren Sie es online!
Ein rekursives Lambda, das eine Funktion und eine Ganzzahl annimmt und einen Booleschen Wert zurückgibt.
36 Bytes (nur positives n)
Diese Version kehrt
1
für die Wahrheit,false
für die Falschheit zurück. Leider kann es beim ausfallenn = 0
Probieren Sie es online!
quelle
g=
ob es rekursiv ist1
als truthy Wertg[->n{n>0},0]
(Retourentrue
). Es schlägt nur fehl, wenn die Eingabe0
"nicht negativ" lautet , Sie sollten also zu 37 zurückkehren. EntschuldigungAppleseed , 51 Bytes
Anonyme Lambda-Funktion, die eine Zahl und eine Funktion übernimmt und einen booleschen Wert zurückgibt.
Probieren Sie es online!
quelle
Addiere ++ , 15 Bytes
Probieren Sie es online!
Erfordert
f
die Deklaration einer Funktion im TIO-Header.Wie es funktioniert
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
Erläuterung
Nimmt die Nummer als erste Eingabezeile und die Funktion als zweite.
Ausgänge 1 für truthy und 0 für falsy.
quelle
Q
undÊ
obwohl nicht funktioniert . Ich werde auf die 8-Byte-Version zurückgreifen..V
so vektorisierend, dass es die Liste nicht einmal als eigentliches Argument betrachtet..V
vektorisiert. In dem Beispiel in meinem Link ist esÈ
.Q
undÊ
würde mit Vektorisierung arbeiten, anders als ich es vorher angegeben habe, aber mit der automatischen Vektorisierung würden diese Befehle auf die gesamte Liste abgebildet, was sich außerhalb des Geistes der Herausforderung anfühlt, die wir brauchenε
.