Bereitstellung einer Eingabe als vorzeichenlose Ganzzahl:
13457
Ihre Funktion / Subroutine sollte zurückgeben:
75431
Da dies ein Beliebtheitswettbewerb ist, seien Sie kreativ. Kreative Lösungen verwenden ungewöhnliche oder clevere Techniken, um bestimmte Aufgaben zu lösen.
Einschränkungen:
- Sie können keine Arrays verwenden.
- Sie können keine Zeichenfolgen verwenden.
- Keine RTL-Überschreibung (
‮
)
Brownie-Punkte für die Verwendung kreativer Arithmetik.
Da dies ein Beliebtheitswettbewerb ist, empfehle ich, den modulo ( %
) -Operator nicht in Ihrem Code zu verwenden.
Über führende Nullen:
Wenn die Eingabe lautet:
12340
Dann die Ausgabe:
4321
wäre akzeptabel.
popularity-contest
duci9y
quelle
quelle
1230
der Eingang? Dürfen wir ausgeben321
? (Andernfalls sind Strings erforderlich).Antworten:
Mathematica, kein Modulo!
Lassen Sie es uns aufschlüsseln.
Zuerst verwenden wir einige "kreative Arithmetik", um herauszufinden, wie viele Ziffern die Zahl enthält:
length = Ceiling[Log[10, n]];
Als nächstes rastern wir die Zahl zu einem schönen großen Bild:
Nun fragen wir nach dem Begrenzungsrahmen dieses Bildes und füllen die Breite und Höhe (tatsächlich unter Verwendung des Grundlinienversatzes anstelle der Bildhöhe, da MM dem Bild unter der Grundlinie ein Leerzeichen hinzufügt).
Als nächstes subtrahiert NestList rekursiv die Breite des Bildes geteilt durch die Länge des Strings, damit ImageTake Zeichen nacheinander vom Ende des Bildes abziehen kann. Diese werden von ImageAssemble wieder zu diesem Bild zusammengesetzt:
Dann geben wir das an die TextRecognize-Funktion zur optischen Zeichenerkennung weiter, die bei dieser Bildgröße und Rasterqualität die endgültige Ausgabe einwandfrei erkennen und uns die Ganzzahl geben kann:
Logarithmen und OCR - Es ist wie mit Schokolade und Erdnussbutter!
Neu und verbessert
Diese Version füllt die Zahl auf, um mit dem hartnäckigen Verhalten von TextRecognize bei kleinen Zahlen fertig zu werden, und subtrahiert dann das Pad am Ende. Dies funktioniert sogar für einstellige Zahlen!
Es ist mir ein Rätsel, warum Sie für eine einzelne Nummer eine umgekehrte Routine ausführen. Der Vollständigkeit halber habe ich es sogar für Eingaben von Null und Eins funktionieren lassen, was normalerweise zu Fehlern führen würde, da das Protokoll mit Fußboden keine 1 für sie zurückgibt.
quelle
TextRegognize
funktioniert nicht für kleine Zahlen. Und Sie haben Tippfehlerheight = b[[3]];
. Bitte überprüfen Sie auch meine Antwort! :)TextRecognize
ist, dass es einen String zurückgibt, der nicht erlaubt ist und auch Sie müssen ihn zurück in Zahl konvertieren.Perl / LuaTeX / Tesseract
Das folgende Perl-Skript liest die Nummer als Kommandozeilenargument, zB:
1234567890
Das folgende Perl-Skript druckt die Nummer über LuaTeX. Im laufenden Betrieb wird eine virtuelle Schriftart erstellt, die die Ziffern horizontal spiegelt.
Dann wird die ganze Zahl wieder horizontal gespiegelt:
Das endgültige Bild wird per OCR (Tesseract) erneut gelesen:
0987654321
quelle
Brainfuck
Grundsätzlich handelt es sich nur um ein Umkehrprogramm.
UPD: Wie Sylwester in Kommentaren betonte, würde dieses Programm in den klassischen Brainfuck-Interpreten / Compilern (ohne die Möglichkeit, vom Nullpunkt im Speicherarray nach links zu springen) nicht funktionieren, wenn zu Beginn kein> vorhanden wäre, umso stabiler Version ist:
quelle
>
am Anfang, um eine Null-Zelle vor den Daten zu machen, wird dies in vielen Interpreten / Compilern nicht funktionieren.[.<]
hat keine Nullzelle, bei der man anhalten kann und die fehlschlägt. Fehler vonbf -n rev1.bf
istError: Out of range! Youwanted to '<' below the first cell.
. Wenn du kompilierst bekommst dusegfault
vielleicht ein.,[.,]
Haskell
Keine Arrays, Strings oder Module.
Ich weiß auch, dass wir keine Listen oder Zeichenfolgen verwenden sollen, aber ich finde es toll, wie kurz es ist, wenn Sie das tun:
quelle
C ++
quelle
?:
Ich nehme an, jemand muss der Partypooper sein.
Bash
Größenbeschränkungen hängen von Ihrer Muschel ab, aber Sie werden in Ordnung sein.
quelle
declare -i
. Vergleichefoo=089
unddeclare -i foo=089
(ungültige Oktalzahl).Javascript
EDIT : Da es einen Vorschlag gibt,
%
Operator nicht zu verwenden , benutze ich jetzt einen kleinen Trick.Ich weiß, dass dies kein Code-Golf ist, aber es gibt keinen Grund, es länger zu machen.
r(13457)
kehrt zurück75431
Außerdem ist es viel schneller als die String- Methode (
n.toString().split('').reverse().join('')
):==> JSPerf-Bericht <==
quelle
~~
stattMath.floor
?~~
anstelle vonMath.floor
(die Änderung von @ Victor vorgeschlagen)Python
Ich bin mir nicht sicher, ob diese Implementierung für die kreative Mathematik geeignet ist
Auch% operator wurde per se nicht verwendet, obwohl man vielleicht argumentieren könnte, dass divmod dasselbe tut, aber dann muss die Frage umformuliert werden :-)
Implementierung
Demo
Wie funktioniert es?
Dies ist eine rekursive Divmod-Lösung. * Diese Lösung ermittelt die niedrigstwertige Ziffer und schiebt sie dann an das Ende der Zahl. *
Noch eine Python-Implementierung
Wie funktioniert es?
Dies ist eine rekursive Lösung, bei der die extremen Ziffern der Zahl vertauscht werden
Beispiellauf
quelle
Um genau zu sein, eine Überbeanspruchung des Modulo-Operators:
Beachten Sie, dass dies immer 5 Stellen umkehrt und 32-Bit-Ganzzahlen bei Eingabewerten über 39045 überlaufen.
quelle
C #
Hier ist eine Möglichkeit, dies ohne den Modulus (
%
) -Operator und nur mit einfacher Arithmetik zu tun .quelle
%
Operator einfach nicht verwenden . :) Ich verstehe, was du meinst, mein Text war ein wenig irreführend.Bash
quelle
C
Keine Strings, Arrays, Module oder Divisionen. Stattdessen Division durch wiederholte Subtraktion.
quelle
Mathematica
Aus Zahlen ein Bild machen, es reflektieren, in Ziffern aufteilen. Dann gibt es zwei Alternativen:
Vergleichen Sie jedes Bild einer reflektierten Ziffer mit vorbereiteten früheren Bildern, ersetzen Sie es durch die entsprechende Ziffer und bilden Sie daraus die Zahl.
Reflektieren Sie jede Ziffer einzeln, erstellen Sie ein neues Bild und übergeben Sie es an die Bilderkennungsfunktion.
Ich habe beides getan
BEARBEITEN : Das Auffüllen mit drei Nullen wurde hinzugefügt, da es
TextRecognise
nur bei Ganzzahlen> 999 korrekt funktioniert.quelle
Lua
Keine Arrays oder Zeichenfolgen verwendet. Die Nummer wird in Ziffern aufgeteilt und anhand der Argumentliste wieder zusammengesetzt.
quelle
%
! : PPython2
Angenommen, "Ganzzahl ohne Vorzeichen" ist 32-Bit
Bei Eingabe
1230
wird ausgegeben0321
.quelle
"Since this is a popularity contest, I suggest not using the modulus (%) operator in your code."
Nachsatz
Keine Arrays, keine Strings, keine Variablen.
Das gleiche ohne
mod
(das ist nur eine Abkürzung, also kein großer Unterschied):quelle
C #
Dies verwendet keine Strings oder Arrays, sondern den .NET-
Stack<T>
Typ (EDIT: ursprünglich verwendeter Modul-Operator; jetzt entfernt)quelle
C
Insofern ist die offensichtliche Lösung in ein paar anderen Sprachen dargestellt, könnte es auch in C posten.
Golf gespielt:
Ungolfed:
EDIT: Habe gerade den Modul bearbeitet.
Golf (kein Modul):
Ungolfed (kein Modul):
quelle
Java
Dies ist das, was ich mir ausgedacht habe, keine Zeichenketten, keine Arrays ... nicht einmal Variablen (in Java wohlgemerkt):
EDIT Eine lesbarere Version
quelle
Power Shell
Eine schnelle Lösung in PowerShell. Es werden weder implizit noch explizit Arrays oder Zeichenfolgen verwendet.
Testen:
quelle
Python (leicht in der Montage gemacht)
Kehrt die Bits eines Bytes um. Punkte dafür, dass nicht genau dasselbe getan wurde, was alle anderen getan haben?
Beispiel
quelle
C ++
AUSGABE
Drei Probeläufe
Test mit Nullen
Es kehrt auch schwebende Zahlen um !!!
Wenn Sie diesen Code ausführen möchten , führen Sie ihn auf Ihrem Computer aus, da während der Laufzeit eine temporäre Datei erstellt wird und ich nicht sicher bin, ob Online-Compiler eine temporäre Datei auf Ihrem Computer erstellen würden
quelle
ECMAScript 6
Dann:
reverse(12345)
Ausgänge54321
reverse(3240)
Ausgänge423
reverse(6342975)
Ausgänge5792436
quelle
Fission
Dieses Programm kehrt die Eingabe um.
quelle
FORTH
Ich denke das ist das Gegenteil von populär ... aber Forth zu benutzen ist immer kreativ ...Lassen Sie uns ein neues Wort erstellen
Hier wird das Wort U / verwendet, das den Rest und den Quotienten zurückgibt. Der Rest wird als Zahl in einem Feld mit einer Länge von 1 Zeichen ausgegeben, bis die Dividende Null ist. Es wird kein String verwendet, zumindest bis etwas an das Video gesendet wird. Ich verwende keinen Modulo-Operator, sondern eine Ganzzahldivision mit Rest und Quotient. Lass es uns versuchen
quelle
Turing-Maschinencode
Verwenden Sie die Syntax von hier.
Probieren Sie es online!
quelle
Python
quelle
rev(1230)
gibt321
. Ich nehme an, es sollte wirklich geben0321
?C
quelle
Stapel
Verpasste den Teil, in dem es darum ging, keine Saiten zu verwenden - na ja.
quelle
Python 2
quelle