Geben Sie bei einer positiven Ganzzahl einen Wahrheits- / Falschwert aus, um festzustellen, ob sich die Zahl selbst fressen kann.
Regeln
Ganz links ist der Kopf, ganz rechts der Schwanz
Wenn der Kopf größer oder gleich dem Schwanz ist, frisst der Kopf den Schwanz und der neue Kopf wird zu ihrer Summe.
Wenn ist, wird der Kopf durch .
kann nicht ignoriert werden, die eingegebene Nummer wird jedoch niemals führende Nullen haben.
Beispiel:
number=2632
head-2, tail-2
2632 -> 463
head-4, tail-3
463 -> 76
head-7, tail-6
76 -> 3
If only one digit remains in the end, the number can eat itself.
Wenn der Kopf zu irgendeinem Zeitpunkt den Schwanz nicht fressen kann, lautet die Antwort "Falsch".
number=6724
072
False (0<2)
Testfälle:
True:
[2632, 92258, 60282, 38410,3210, 2302, 2742, 8628, 6793, 1, 2, 10, 100, 55, 121]
False:
[6724, 47, 472, 60247, 33265, 79350, 83147, 93101, 57088, 69513, 62738, 54754, 23931, 7164, 5289, 3435, 3949, 8630, 5018, 6715, 340, 2194]
Das ist Code-Golf, also gewinnt der kürzeste Code.
code-golf
decision-problem
Vedant Kandoi
quelle
quelle
Antworten:
JavaScript (ES6),
52 5150 Byte1 Byte dank @tsh gespeichert
Übernimmt die Eingabe als Zeichenfolge. Gibt einen Booleschen Wert zurück.
Probieren Sie es online!
Kommentiert
quelle
f=n=>n>[n%10]?f(-(-n[0]-n)%10+n.slice(1,-1)):!n[1]
Jelly , 11 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Perl 6 ,
6362 BytesProbieren Sie es online!
Erläuterung:
quelle
Java (JDK) , 83 Byte
Probieren Sie es online!
Credits
quelle
/10
und%10
in einer Schleife. Also gut gemacht, die Python-Antworten geschlagen; +1 von mir. :)r+=
nachr=
und?1:0
nach wechselt?1:r
.r=1
r&=h<n%10?0:r;return r;
Mathematica, 62 Bytes
Ruft zuerst
IntegerDigits
den Eingang auf, um eine Liste seiner Ziffern zu erhalten, und wendet dann wiederholt die folgende Regel an:Die Regel wird angewendet, bis das Muster nicht mehr übereinstimmt. In diesem Fall ist entweder nur noch eine Ziffer übrig (wahr) oder der Kopf ist kleiner als der Schwanz (falsch).
Anstatt aufzurufen
Length[__]==1
, können wir ein paar Bytes mit speichern0(__)=={0}
, alle Elemente in der Liste mit multiplizieren0
und dann mit der Liste vergleichen{0}
.quelle
Python 3 , 50 Bytes
Erste Zeile aus der Antwort von Black Owl Kai gestohlen .
Probieren Sie es online!
Die Ausgabe erfolgt über den Exit-Code. Fails (1) für falsche Eingaben und Ends (0) für wahrheitsgemäße Eingaben.
quelle
p%10<k>q
ein NameError nicht ausgelöst wird, wennp%10 >= k
?p%10<k>q
verhält es sich wiep%10<k and k>q
.Python 2 ,
1058281 BytesProbieren Sie es online!
Vielen Dank für eine massive -23 von @ ØrjanJohansen
Vielen Dank an @VedantKandoi (und @ ØrjanJohansen) für einen weiteren -1
quelle
for
mit einem umgekehrten Slice verwenden und auch%10
nur beim Testen ausführenif i[0]<i[-1]:x=0
und dannelse:....
. @ ØrjanJohansen, auch in deiner Antwort.True
Fälle, aber nicht für alleFalse
.Brachylog , 23 Bytes
Probieren Sie es online!
Dies ist eine 1-Byte- Ersparnis gegenüber der Fatalize-Lösung . Dies verwendet einen rekursiven Ansatz anstelle eines iterativen
Erläuterung
quelle
APL (Dyalog Unicode) , 33 Byte SBCS
Anonyme implizite Präfixfunktion, die eine Zeichenfolge als Argument verwendet.
Probieren Sie es online!
⍎¨
bewerte jedes Zeichen (dies gibt uns eine Liste von Ziffern){
…}
Wende das folgende "dfn" darauf an;⍵
ist das Argument (Ziffernliste):⌽⍵
kehren Sie das Argument um⊃
wähle das erste Element (das ist der Schwanz)t←
zuweisent
(für t ail)⍵<
Prüfen Sie für jede der Originalziffern, ob sie kleiner ist⊃
wähle das erste Richtig / Falsch:
wenn ja:0
falsch zurückgeben⋄
dann:3::
Wenn von nun an ein Indexfehler (außerhalb der Grenzen) auftritt:1
return true¯1↓⍵
Lass die letzte Ziffer fallen⊢
ergeben, dass (trennt1
und¯1
so werden sie nicht ein einziges Array bilden)t+@1
füge den Schwanz der ersten Ziffer (dem Kopf) hinzu10|
mod-10∇
rekursierenSobald wir eine einzelne Ziffer getroffen haben,
¯1↓
wird dies zu einer leeren Liste und@1
verursacht einen Indexfehler, da es keine erste Ziffer gibt, wodurch die Funktion true zurückgibt.quelle
Python 3 , 77 Bytes
Probieren Sie es online!
Und meine alte Lösung mit einem rekursiven Ansatz
Python 3 , 90 Bytes
Probieren Sie es online!
Übernimmt die Eingabe als Zeichenfolge.
quelle
Brachylog , 24 Bytes
Probieren Sie es online!
Ich sollte
ⁱ
das Standardverhalten so ändern , dass es eine unbekannte Anzahl von Iterationen durchläuft (derzeit wird standardmäßig 1 Iteration durchgeführt, was völlig nutzlos ist). Ich würde das dann nicht brauchen[…];I[…]⁾
, 3 Bytes einsparenErläuterung
Dieses Programm enthält eine hässliche Gabel in einer Gabel. Es gibt auch einige Klempnerarbeiten, die für die Bearbeitung von Ziffernlisten anstelle von Zahlen erforderlich sind (denn wenn wir Kopf und Schwanz entfernen , bleibt
76
uns etwas übrig0
, was nicht im Gegensatz zu dem steht,[7,6]
wo wir landen[]
).quelle
,
Ich könnte 1 Byte entfernen. Probieren Sie es online aus!Haskell,
706460 BytesDie Eingabe wird als Zeichenfolge verwendet.
Probieren Sie es online!
Bearbeiten: -6 Bytes mit dem @ Laikoni-Trick ,
||
anstelle separater Wachen zu verwenden. Weitere -4 Bytes dank @Laikoni.quelle
read[l b]
kann nurread b
daran liegen, dass du sowieso nur die letzte ziffer ansiehst. Spart 4 weitere Bytes, indem Sie auch in-lininglast
: Probieren Sie es online!Perl 5 , 64 Bytes
Probieren Sie es online!
quelle
Python 2 ,
7567 BytesProbieren Sie es online!
Rekursiver Lambda-Ansatz. Übernimmt die Eingabe als Zeichenfolge. Vielen Dank an Dennis für das Speichern von 8 Bytes!
quelle
Haskell ,
6964 BytesProbieren Sie es online! Anwendungsbeispiel:
f 2632
ErträgeTrue
.Edit: -5 Bytes weil
mod (h + mod n 10) 10 = mod (h + n) 10
quelle
||
, der mir half, meine Antwort auch zu verkürzen. Vielen Dank!Rubin, 139 Bytes
Probieren Sie es online!(Verfügt über zusätzlichen Code zum Verarbeiten der Eingabe, da es sich um eine Funktion handelt.)
Ungolfed-Code:
quelle
Retina 0,8,2 , 42 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Konvertieren Sie die Ziffern in unäre Zeichen und fügen Sie Trennzeichen ein.
Wenn die letzte Ziffer nicht größer als die erste ist, addieren Sie sie.
Modulo 10 ggf. reduzieren.
Wiederholen, bis die letzte Ziffer größer als die erste ist oder nur noch eine Ziffer übrig ist.
Prüfen Sie, ob nur noch eine Ziffer übrig ist.
quelle
05AB1E ,
262524 BytesKann wahrscheinlich ein bisschen mehr golfen werden. Es fühlt sich zu lang an, aber vielleicht ist die Herausforderung in Bezug auf Code komplexer als ich vorher gedacht habe.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
C ++ (gcc) , 144 Bytes
Probieren Sie es online!
Wenn ich zum ersten Mal so etwas versuche, lass es mich wissen, wenn ich etwas falsch formatiert habe. Ich bin nicht 100% sicher, welche Regeln für Dinge wie die Verwendung von Namespace zur Eliminierung der 5 Bytes "std ::" gelten, also habe ich es in gelassen.
Ungolfed:
quelle
#include
Aussagen. Ich würde jedoch vorschlagen, im Subdialekt " std lib facilities" von C ++ mit#include "std_lib_facilities.h"
vorangestelltem zu programmieren , was auch a bewirktusing namespace std;
. Dieser Header wurde vom Autor der Sprachversion (letzte Version ist 2010) für Studenten geschrieben, die neu in C ++ sind.#import<string>
. Probieren Sie es online!#!/usr/bin/sh
Newlinegcc -include "std_lib_facilities.h" $@
- Wenn ich einen C ++ - Kurs finde, der dieses Shell-Skript bereitstellt, würde das zählen?-include iostream
sind dies tatsächlich 144 Bytes.114 Bytes
Probieren Sie es online aus
quelle
C (gcc) (mit string.h) ,
110108 BytesProbieren Sie es online!
Da PPCG noch relativ neu ist, ist mir die korrekte Syntax zum Verknüpfen von Bibliotheken als neue Sprache fremd. Beachten Sie auch, dass die Funktion 0 oder 1 für false / true zurückgibt und dass für das Drucken des Ergebnisses in stdout stdio erforderlich ist. Wenn wir pedantisch sind und die Übung eine Ausgabe erfordert, erfordert die Sprache stdio das auch.
Konzeptuell ähnlich der Antwort von @ BenH, aber in C, also ein dickes Lob, wo sie fällig sind (Welcome to PPCG, btw), aber unter Verwendung von Rekursion. Es wird auch eine Arrayzeiger-Arithmetik verwendet, da der Dirty-Code kürzer als der Clean-Code ist.
Die Funktion ist rekursiv mit Endebedingungen, wenn die erste Zahl die letzte nicht essen kann oder die Länge 1 ist und false bzw. true zurückgibt. Diese Werte werden gefunden, indem ein Zeiger auf die C-Zeichenfolge (die ein Zeichen enthält) am Anfang und Ende der Zeichenfolge dereferenziert und mit diesen verglichen wird. Zeigerarithmetik wird durchgeführt, um das Ende der Zeichenkette zu finden. Schließlich wird das letzte Zeichen "gelöscht", indem es durch ein Null-Abschlusszeichen (0) ersetzt wird.
Es ist möglich, dass die Modularithmetik um ein oder zwei Bytes verkürzt wird, aber ich brauche nach dieser Zeigermanipulation bereits eine Dusche.
Ungolfed Version hier
Update: Zwei Bytes wurden gespeichert, indem c == 1 durch! C ersetzt wurde. Dies ist im Wesentlichen c == 0. Es wird eine zusätzliche Zeit ausgeführt und verdoppelt sich vor dem Löschen unnötigerweise, spart jedoch zwei Bytes. Ein Nebeneffekt ist, dass Zeichenfolgen mit der Länge Null keine unendliche Rekursion verursachen (obwohl wir keine Nullzeichenfolgen erhalten sollten, da in der Übung positive ganze Zahlen angegeben werden).
quelle
gcc
wenn - obwohl Warnungen generiertgcc
werden, Sie Ihren Code gerne ohne#include
s kompilieren . Außerdem könnten Sie mit 4 Bytes sparen-DR=return
. Schließlich sind die\0
s in Ihrem Testcode nicht erforderlich, da die Zeichenfolge sie bereits implizit enthält.b=case1?res1:case2?res2:res_else;
if(case1)return res1;if(case2)return res2;return res_else;
c
Sie Folgendes nicht verwenden : Sie können bestimmen, ob die Zeichenfolge eine Länge von 0 hathead-tail
.Powershell, 89 Bytes
Wichtig! Das Skript ruft sich selbst rekursiv auf. Speichern Sie das Skript als
g.ps1
Datei im aktuellen Verzeichnis. Sie können auch eine Skriptblockvariable anstelle einer Skriptdatei aufrufen (siehe das Testskript unten). Dieser Anruf hat die gleiche Länge.Anmerkung 1: Das Skript verwendet eine verzögerte Auswertung von logischen Operatoren
-or
und-and
. Wenn"$args"-notmatch'(.)(.*)(.)'
ist,True
dann wird der richtige Unterausdruck von-or
nicht ausgewertet. Auch wenn($m=$Matches).1-ge$m.3
istFalse
dann der richtige Teilausdruck von-and
wird auch nicht ausgewertet. So vermeiden wir eine unendliche Rekursion.Anmerkung 2: Der reguläre Ausdruck
'(.)(.*)(.)'
enthält keine Start- und Endanker, da der Ausdruck(.*)
standardmäßig gierig ist.Skript testen
Ausgabe:
Powershell, 90 Bytes
Keine Rekursion. Keine Abhängigkeit vom Dateinamen und keine Abhängigkeit vom Skriptblocknamen.
Eine PowerShell konvertiert implizit einen rechten Operanden in einen Typ eines linken Operanden. Daher
$s-ge$s%10
berechnet rechten Operanden$s%10
wieinteger
und vergleichen Sie es als ein ,string
weil Typ des linken Operanden iststring
. Und2+$s[0]+$s
wandelt ein Zeichen$s[0]
und Zeichenfolge$s
auf ,integer
weil linker Operand2
ganze Zahl ist.$s|% S*g 1($s.Length-2)
ist eine Abkürzung zu$s.Substring(1,($s.Length-2))
quelle
C # (Visual C # Interactive Compiler) , 69 Byte
Probieren Sie es online!
Erfolg oder Misserfolg hängen vom Vorhandensein oder Fehlen einer Ausnahme ab . Die Eingabe erfolgt in Form einer Zeichenfolge.
Weniger golfen ...
Es gibt ein paar zusätzliche Bytes für die Konvertierung zwischen Zeichen und Ziffern, aber insgesamt hat sich das nicht allzu stark auf die Größe ausgewirkt.
quelle
Perl 5
-pF
, 53 BytesProbieren Sie es online!
quelle
Brachylog , 18 Bytes
Probieren Sie es online!
Nimmt drei Bytes aus Fatalize Lösung nur durch nicht-deterministisch superscriptless
ⁱ
bestehenden jetzt, verliert aber drei weitere indem vage Jelly inspirierte Dinge mitz₁
zu vermeiden , mitc
,g
oder sogarh
. (Inspiriert durch den Versuch und das Scheitern, eine andere neue Funktion zu verwenden: dasʰ
Metapredikat.)quelle
PowerShell ,
9491 ByteProbieren Sie es online!
Skript testen
Ungolfed-Code:
quelle
$n[0]
Ihrefor
Erklärung nicht einchecken müssen - nur das Einchecken$n
sollte ausreichen.-6
stattdessen verwenden,-96
da es ausreicht,% 10return
7 Bytes entfernen und speichernparam($n)
oderfunction f($n)
.["1","2","3"]
nicht gültige Eingabe,"123"
ist es aber . Wenn @VedantKandoi ein Problem hat, kann ich es definitiv ändern!