Eine erfreuliche Zahl (gemäß dieser Definition) ist eine Zahl, die durch den folgenden Prozess geleitet werden kann ( 41802000
als Beispiel):
- Trennen Sie die folgenden identischen Zahlen (
41802000 => [41802, 000]
) - Sortieren Sie die erste Hälfte der Ziffern und nehmen Sie das Maximum (
[41802, 000] => [8, 000]
) - Nimm die Länge des letzten Elements. Nenne die resultierenden Elemente A und B (
[8, 000] => A=8, B=3
) - Ist N B = A für eine ganze Zahl
N
? (True
in diesem Beispiel: 2 3 = 8)
Wenn die Eingabe True
aus dem folgenden Prozess resultiert , wird sie als angenehm angesehen.
Ihre Aufgabe ist es, eine ganze Zahl zu nehmen x
und auszugeben, ob x
es sich um eine erfreuliche Zahl handelt. Sie können zwei unterschiedliche Werte für truthy und falsey ausgeben, geben Sie jedoch bitte an, was Sie in Ihrer Antwort verwenden. x
muss garantiert mindestens zwei verschiedene Ziffern haben (z. B. 111
ist eine ungültige Eingabe). Wie bei den meisten Herausforderungen können Sie x
eine Zeichenfolge oder eine Ziffernliste verwenden.
Dies ist ein Code-Golf, so dass der kürzeste Code in Bytes gewinnt.
Testfälle
Input Output
41802000 1
100 1
123456788 0
451111111 0
234543454545444 0
12 1
41902000 0
92599 1
code-golf
math
decision-problem
Caird Coinheringaahing
quelle
quelle
list of digits
-Antworten:
APL (Dyalog) , 36 Bytes
Probieren Sie es online!
Wie?
Fast ein Gedicht.
⌽⍵
- die Eingabe einmal umkehren,1,2=/
- Holen Sie sich die Liste der Unterschiede.⌊\
- nur die erste Gruppe behalten,⌽
- und drehen Sie es um, um abzuschließen.o←
- zuweiseno
,~o
- Einsen und Nullen tauschen,⍵/⍨
- filtere die Eingabe damit,⍎¨
- das Ergebnis in eine Liste jeder Ziffer umwandeln,⌈/
- und das Maximum bekommen. (das ist ein)⍵/⍨o
- die Eingabe mito
unalt (ered) filtern ,≢
- und nimm die Länge, das wäre B.÷
- lassen Sie sich durch dieses Ergebnis dividieren,*
- und nimm A zu dieser Kraft, dich.⊢≡⌊
- ganze Zahl?quelle
05AB1E , 11 Bytes
Probieren Sie es online!
Erläuterung
Emigna hat 1 Byte gespeichert.
Beruht auf der Tatsache, dass wenn A eine positive ganze Zahl N ist , die hoch B ist , dann ist N = A 1 / B , daher muss es eine ganze Zahl sein.
quelle
UZX
sollte funktionieren anstatts{θs
41902000
(sollte falsch sein).418802000
Haskell ,
85757271 BytesBearbeiten : -10 Bytes, indem eine Liste von Ziffern anstelle einer Zeichenfolge verwendet wird. Vielen Dank an WhatToDo für den Hinweis, dass dies zulässig ist. -3 Bytes dank Ourous 'Lösung in Clean . -1 Byte dank user28667 .
Probieren Sie es online! Übernimmt die Eingabe als Ziffernliste. Anwendungsbeispiel:
f [4,1,8,0,2,0,0,0]
ErträgeTrue
.Erläuterung:
Gegeben einen Eingang
s=[4,1,8,0,2,0,0,0]
wirreverse
die Liste und trennen die führenden Elemente mitspan(==last s)
:([0,0,0],[2,0,8,1,4])
. Die Musterübereinstimmung auf(b,a)
Erträgeb=[0,0,0]
unda=[2,0,8,1,4]
.Das Listenverständnis
or[n^length b==maximum a|n<-[1..a]]
prüft, ob eine ganze Zahln
im Bereich von1
bis9
erfülltn^length b==maximum a
istn^3=8
.quelle
a
würde in Fällen wie fehlschlagen477
.b
, aber überprüfe jede ganze Zahln
von0
bis9
(früher von0
bisa
). Soweit ich sehe, ist das genau die Spezifikation.Haskell ,
10489 Bytes@Laikoni hat eine kürzere Lösung gefunden , aber das ist das Beste, was ich tun kann. Vielen Dank an @Laikoni für die Mitteilung, dass wir auch Ziffernlisten als Eingabe akzeptieren können.
Erläuterung:
Probieren Sie es online!
quelle
any(==a)
wenn Sie verwenden könntenelem a
?2888
?head.maximum
immer noch kürzer alsmaximum.concat
2 Bytes und behält die Funktionalität bei.R , 80 Bytes
Probieren Sie es online!
Dient
utf8ToInt - 48
zum Teilen der Nummer in Ziffern. Dadurch wird eine Warnung von der Konvertierung in eine Zeichenfolge ausgegeben.Mit rle erhalten Sie die Anzahl der nachfolgenden Ziffern und den Maximalwert der ersten Ziffern. Geben Sie true zurück, wenn einer der Werte zwischen 0 und max der Potenz des nachgestellten Zählers dem Maximalwert entspricht.
Ich denke, es gibt weitere Möglichkeiten zum Golfen, aber das kann bis morgen warten.
quelle
function(x,R=rle(rev(utf8ToInt(x)-48)))!max(R$v[-1])^(1/R$l[1])%%1
(66 Bytes,x
als Zeichenfolge)Jelly , 11 Bytes
Übernimmt die Eingabe als Ziffernliste.
Probieren Sie es online!
Wie es funktioniert
quelle
R, 66 Bytes
Diese Antwort ist mehr oder weniger eine Mischung aus den Antworten von MickyT und NofP , und auf ihre Anfrage hin ist es hier:
Es dauert X als Zeichenfolge.
quelle
JavaScript (ES7), 66 Byte
Nimmt Eingaben entweder als Zeichenfolge oder als Array von Zeichen entgegen. Gibt einen Booleschen Wert zurück.
Testfälle
Code-Snippet anzeigen
quelle
Sauber ,
13012811893 BytesDefiniert die Funktion
@
, wobei eine Liste mit ganzzahligen Ziffern erstellt wird.Probieren Sie es online!
quelle
Python 2 ,
95 bis78 BytesProbieren Sie es online!
quelle
i
, können Sie dielen
78 Bytes fallen lassenR 93 Bytes
Probieren Sie es online!
Der Code nimmt eine Ganzzahl als Eingabe und gibt FALSE zurück, wenn die Zahl gefällt, und ansonsten TRUE.
quelle
Python 3 ,
88-85BytesUngolfed:
True
oderFalse
.a ** (1 / b)
sie um mindestens 0,5 von b √a abweicht, was einen Wert über 2 53 erfordert (oder was auch immer Gleitkomma-Radix und Mantisse sein mögen) Länge, die Python gerade benutzt, siehesys.float_info
).quelle
int
und übergebenrange
. (Irgendwann wäre es praktikabler, den Suchbereich anhand von zu schätzen,a^(1/b)
als große Potenzen zu berechnen.)C (gcc) ,
144126117 BytesProbieren Sie es online!
quelle
Ruby , 64 Bytes
Eingabe als Zeichenfolge, gibt true zurück, wenn:
Probieren Sie es online!
quelle
Perl 6 , 55 Bytes
Probieren Sie es online!
Nach der Auswertung der ersten Regex - was nur gelingen kann, wenn die Eingabe eine positive Ganzzahl ist -
$0
enthält der erste Teil der Zahl und$1
die nachfolgenden wiederholten Ziffern.Die
comb
auf eine Zeichenfolge angewendete Methode ohne Argumente gibt eine Liste der Zeichen zurück, die im numerischen Kontext auf die Länge der Liste ausgewertet wird. Ist$0.comb.max
also die größte der Ziffern im Präfix und$1.comb
die Länge des Suffix.Wir prüfen dann, ob
any(^10)
(dh die Oder-Verknüpfung der Zahlen von 0 bis 9), wenn sie zur Potenz der Länge des Suffixes angehoben wird, gleich der größten Ziffer im Präfix ist. Dieso
Forces-Boolesche Bewertung der resultierenden Junction, die ansonsten für sich genommen als wahrer Wert in Ordnung wäre, erfordert jedoch, dass nur zwei unterschiedliche Werte zurückgegeben werden.quelle
.
anstelle von verwenden\d
.Kotlin , 106 Bytes
Ausgabe: wahr / falsch
Probieren Sie es online!
quelle
Add ++ , 21 Bytes
Probieren Sie es online!
Es sind dreieinhalb Monate vergangen, ich hoffe, ich ninke niemanden.
quelle
C # (.NET Core) , 132 Byte
Probieren Sie es online!
Danksagung
-12 Bytes dank @KevinCruijssen
DeGolfed
quelle
i=n.Length-2;for(;i>=0;i--)
kann Golf spieleni=n.Length-1;for(;i-->0;)
und man&&
kann Golf spielen&
.using System;
undSystem.Math.Pow
direkt verwenden.-48
kann für -3 Bytes Golf gespielt werden.Japt ,
2618 BytesProbieren Sie es online!
Nimmt die Eingabe als String, gibt ansonsten
1
für ansprechende Zahlen zurück0
.Kurze Erklärung:
Nehmen Sie die erste Eingabe und teilen Sie sie nach Werten auf, wo
(x,y) => x===y
wahr ist. Zum Beispiel'41802000'
zu['4','1','8','0','2','000']
.Nehmen Sie das Array aus dem ersten Schritt, entfernen Sie das letzte Element und erhalten Sie seine Länge, was B ergibt .
Suchen Sie das größte Element im verbleibenden Array und geben Sie A an , stellen Sie es auf die Potenz
1/B
und geben Sie dann zurück, wenn das Ergebnis durch eins teilbar ist.Das erste Mal mit Japt arbeiten, sehr offen für alle Empfehlungen.
8 Bytes gespart dank ETHproductions .
quelle
ó¶
. 2) Nicht sicher , warum haben Sie diev
in der zweiten Zeile, wie es nur die Zeichenfolge konvertiert in Kleinbuchstaben und hat keine Auswirkung auf die Länge ;-) 3) Sie können das vermeiden ,!(U
in der letzten Zeile durch Änderung%1
zuv1
, die zurückkehrt ,1
wenn das Thema ist teilbar durch 1 oder0
andersClojure, 168 Bytes
Probieren Sie es online!
quelle
Holzkohle , 33 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Gibt ein
-
für angenehme Zahlen aus. Erläuterung:Teilen Sie die Eingabe
q
in Zeichen auf.Entfernen Sie das letzte Zeichen aus
q
und verschieben Sie es aufu
(vordefiniert in eine leere Liste).Pop und Push wiederholt, während das letzte Zeichen
q
das erste Zeichen von istu
.Nehmen Sie die maximale Ziffer von
q
und erhöhen Sie sie auf den Kehrwert der Länge vonu
. Prüfen Sie dann, ob das Ergebnis eine ganze Zahl ist.quelle
Python 2 ,
9185 BytesProbieren Sie es online!
quelle
Perl 5 , 73 + 1 (
-p
) = 74 BytesProbieren Sie es online!
quelle
Java 8, 125 Bytes
Port von @ Ayb4btus C # .NET-Antwort .
Probieren Sie es online aus.
Erläuterung:
quelle
Pip ,
322221 BytesVerwendet
1
für falsey und0
für die Wahrheit , spart ein Byte. Probieren Sie es online!quelle
Pyth, 29 Bytes
Testsuite
Python 3 Übersetzung:quelle