Herausforderung
Hier ist eine einfache.
Schreiben Sie eine Funktion oder ein Programm, wenn Sie eine Zahl in der Basis 10 als Eingabe eingeben, wird der Wert dieser Zahl in hexadezimaler Schreibweise zurückgegeben oder gedruckt .
Beispiele
15 -> F
1000 -> 3E8
256 -> 100
Regeln
- Keine eingebauten Hexadezimalfunktionen
- Buchstaben können in Klein- oder Großbuchstaben geschrieben werden
- Sie müssen sich nur um nicht negative ganze Zahlen, keine negativen oder lästigen Dezimalzahlen kümmern
- Es sollte mit jeder beliebig großen Anzahl funktionieren, bis zum Limit des Standardtyps der Sprache.
- Zeilenumbruch nicht zwingend erforderlich
- Wie üblich ist dies Codegolf , also gewinnt der kürzeste in Bytes gemessene Code!
code-golf
math
base-conversion
hexadecimal
Zufälliger Typ
quelle
quelle
000003E8
?Antworten:
APL (Dyalog APL) , 17 Bytes
Muss mit ausgeführt werden
⎕IO←0
, was bei vielen APL-Systemen standardmäßig der Fall ist.Probieren Sie es online!
(⎕D,⎕A)[
…]
D igits, die mit A lphabet verknüpft sind, dann indiziert von…16⊥⍣¯1
die Umkehrung von 16-Basis-zu-Zahl, dh Zahl-zu-Basis-16⊢
angewendet⎕
numerische Eingabequelle
Turing-Maschinencode, 412 Bytes
Wie üblich verwende ich die hier definierte Regeltabellensyntax. Sie können es auf dieser Site oder alternativ mit dieser Java-Implementierung testen .
Zählt von der Eingabe in Basis 10 abwärts, während von 0 in Basis 16 aufwärts gezählt wird. Wenn Null verringert wird, wird der Eingabeblock gelöscht und beendet.
quelle
10*n + 33
Anweisungen, um es für jeden beliebigen zu vervollständigenn
. Ich verstehe den Code allerdings nicht.Java,
9289 Bytesquelle
Javascript,
4943 Bytes.6 Bytes gespeichert von user81655 .
Teste es hier .
Dies hat zwei führende Nullen, was nach den Regeln zulässig ist.
Hier ist eine Version ohne führende Nullen: (47 Bytes).
Teste es hier .
Beide verwenden genau den gleichen Ansatz wie meine Python-Antwort .
quelle
i&15
wird automatisch in eine Ganzzahl konvertiert, wobei Dezimalstellen verworfen werden. Keine Notwendigkeit von~~
h=i=>i&&h(i>>4)+"0123456789abcdef"[i&15]
CJam,
2221 BytesDanke an @ MartinBüttner für das Golfen ab 1 Byte!
Probieren Sie es online!
Wie es funktioniert
quelle
ri{Gmd_9>7*sc+\}h;]W%
Pyth,
33262120 BytesDies war ein Spaß.
Probieren Sie es online aus.
Erklärt:
quelle
C (Funktion), 51
Die rekursive Funktion verwendet eine Ganzzahl als Parameter:
Testfahrer:
quelle
Haskell,
5958434139 BytesAnwendungsbeispiel:
sequence(s<$s)!!) $ 1000
->"00000000000003E8"
.Dadurch wird eine Liste aller Hexadezimalzahlen mit bis zu 16 Hexadezimalstellen erstellt. Zum Glück geschieht dies in der richtigen Reihenfolge, so dass wir einfach die
n
richtige auswählen können .Edit: @ Mauris drückte 2 Bytes aus. Vielen Dank!
quelle
s="0123456789ABCDEF";(sequence(s<$s)!!)
dc, 37
Dividiert rekursiv um 16 und schiebt den Rest auf den Stapel, bis sich nichts mehr teilen lässt. Drucken Sie dann jedes Element des Stapels mit divmod durch 10, um AF-Ziffern zu erhalten. Wahrscheinlich mehr Details morgen ... (und hoffentlich weniger Bytes).
quelle
Python,
59-58Bytes1 Byte von CarpetPython gespeichert
Rennen wie:
print h(15)
Testen Sie es hier (Ideone.com).
Erläuterung:
quelle
h=lambda i:(i>15 and h(i/16)or'')+"0123456789abcdef"[i%16]
.h=lambda i:(i>15 and h(i/16)or'')+chr(48+i%16+i%16/10*7)
C (GCC) ,
4544 BytesProbieren Sie es online!
quelle
Bash (Funktion), 62
Vielen Dank an @manatwork für den Vorschlag, eine Rekursion zu verwenden.
quelle
h(){ x=({0..9} {A..F});echo `(($1>15))&&h $[$1/16]`${x[$1%16]}; }
()
statt{ ;}
rund um die Funktion Körper spart noch mehr :)Perl 6 ,
5348 BytesDadurch wird eine Folge von Werten erstellt, die durch ganze Zahlen geteilt werden (
div
), bis das Ergebnis0
das0
von der Folge ausschließtEs kreuzt (
X
) diese Sequenz mit dem Moduloperator (%
) mit16
Diese Werte werden als Indizes in einer abgeflachten Liste verwendet, die aus zwei Bereichen
0..9
und besteht'A'..'Z'
Schließlich verkettet (
~
) es sie mit dem reverse (R
) Meta-OperatorWenn dies zu einem falschen Wert (leere Zeichenfolge) führt, geben Sie zurück
0
Verwendung:
quelle
MATL , 27 Bytes
Hierbei wird Version 5.1.0 der Sprache / des Compilers verwendet, die älter als diese Herausforderung ist.
Beispiel
Erläuterung
quelle
𝔼𝕊𝕄𝕚𝕟 31 Zeichen / 62 Bytes
Try it here (Firefox only).
Okay, ich habe mir noch ein paar Sachen ausgedacht, mit denen es besser ging.
Erläuterung
Es ist im Wesentlichen dieselbe Lösung wie die ES6-Lösung von @ SuperJedi224 - aber mit etwas anderem.
Seht ihr
⩥ḊĀⒸª⩥⁽ṁṇ⸩⨝
? Das ist eine wirklich ausgefallene Art zu schreiben"0123456789ABCDEF"
.⩥Ḋ
Erstellt einen Bereich von 0 bis 10,Ⓒª⩥⁽ṁṇ⸩
erstellt einen Bereich von 65 bis 71 und konvertiert ihn in eine ASCII-Ā...⨝
Zeichenfolge. Verkettet die beiden Bereiche und fügt sie zu einer Zeichenfolge zusammen. Dies war wahrscheinlich der coolste Teil meiner Lösung.Bonus nicht wettbewerbsfähige Version, 24 Zeichen / 45 Bytes
Ich habe beschlossen, eine alphabetische Zeichenfolge hinzuzufügen, wie in Pyth.
quelle
sed, 341 bytes
Es ist nicht die offensichtliche Sprache für diese Herausforderung, hat jedoch den Vorteil, dass Eingabenummern (abhängig von Ihrer Implementierung) mit bis zu 4000 Stellen und der Begrenzung des verfügbaren (virtuellen) Speichers Ihres Systems unterstützt werden. Ich habe RSA-1024 in ca. 0,6 Sekunden in Hex konvertiert, sodass es recht gut skaliert.
Es funktioniert mit der sukzessiven Division durch zwei, wobei alle 4 Übertragsbits eine hexadezimale Zahl gebildet wird. Wir verwenden Nicht-Buchstaben-Zeichen, um unsere Ausgabe darzustellen, sodass wir immer einen Übertrag zwischen der Dezimaleingabe und der Hexadezimalausgabe akkumulieren und ganz am Ende in ein herkömmliches Hexadezimal umwandeln.
quelle
PHP,
65 66 64 + 1 6259 Bytesrekursive Druckfunktion, druckt eine führende Null (
>16
vorher einfügen&&
, um sie zu entfernen)Programme, 64 Bytes +1 für
-R
(als Pipe mit ausführen-nR
)erfordert PHP 5.6 oder neuer (5.5 kann keine String-Literale indizieren)
oder
benötigt PHP 5.6 oder 7.0 (7.1 versteht negative String-Indizes)
Laufen Sie als Pipe mit
-nR
oder probieren Sie sie online aus .quelle
echo+$s
für Eingabe 0+
Zeichen schneidet die Ausgabe am ersten Buchstaben ... so ..?:0
Julia, 55 Bytes
Dies ist die grundlegende Implementierung einer rekursiven Funktion. Es akzeptiert eine Ganzzahl und gibt eine Zeichenfolge zurück.
Wenn die Eingabe kleiner als 15 ist, teilen Sie sie durch 16 und wiederholen Sie den Vorgang, andernfalls nehmen Sie die leere Zeichenfolge. Heften Sie dies auf die Vorderseite des entsprechend ausgewählten Hexadezimalzeichens.
quelle
Pyre , 98 Bytes
Dies in einer Sprache ohne arithmetische Operatoren zu tun, war wahrscheinlich ein Fehler.
Verwenden Sie wie folgt:
Ungolfed:
quelle
Ruby, 48 Zeichen
(Kopie des Loovjo ‚s Python Antwort .)
Probelauf:
quelle
Im Ernst, 35 Bytes
Hex Dump:
Probieren Sie es online
Erläuterung:
Beachten Sie, dass das
;7ªD+@9<7*+c
äquivalent zu ist4ª▀E
, was 8 Bytes einspart, aber ich dachte, dass eine Funktion, die die Basis-B-Ziffern als Zeichenfolge überträgt, möglicherweise als zu viel eines "eingebauten Heaxadezimals" betrachtet wird.quelle
Javascript ES6,
6458 Bytes6 Bytes gespart dank ן nןuɟ ן oן und user81655.
quelle
v=>eval('for(z="";v;v=v/16|0)z="0123456789ABCDEF"[v%16]+z')
v=>{for(z="";v>0;v=v/16|0)z=btoa``Ó]·ã»óÐ1``[v%16]+z;return z}
(Die doppelten Tilden sind einzelne Tilden) ==> 64 Zeichen, 71 Bytes. Ist es nicht wert.v=v/16|0
ist nur eine komplexe Art zu schreibenv>>=4
.Befunge-93, 58
Ich wette, es gibt einen Einzeiler, der kürzer ist, da all diese Zwischenräume in der Mitte der zweiten Linie verschwenderisch erscheinen, wenn ich zum ersten Mal eine echte Golfherausforderung in Befunge mache.
Sie können es hier durchlaufen . Teilweise Erklärung:
&
: Eingaben übernehmen.:88+%
: Nehmen Sie den Rest Modulo 16."0"+
: Fügen Sie es dem ASCII-Wert 0 hinzu.:"9"`
: Wenn das Ergebnis größer als der ASCII-Wert von 9 ist ...7*+
: Addiere 7, um es in einen Buchstaben umzuwandeln.\
: Speichern Sie das resultierende Zeichen auf dem Stapel.8/2/
: Durch 16 abrunden.:!#|_
: Verlasse die Schleife, wenn das Ergebnis 0 ist.#
: Andernfalls kehren Sie zum Modul zurück.>:#,_@
(Umwickeln): Wenn Sie fertig sind, geben Sie den Stapel in der LIFO-Reihenfolge aus.quelle
> <> , 46 + 3 = 49 Bytes
Dies wäre kürzer gewesen, wenn> <> eine Ganzzahldivision gehabt hätte, die wir jetzt durch Subtrahieren von Modulo 1 emulieren müssen. Trotzdem denke ich, dass dies einige ziemlich ordentliche Tricks erfordert!
Probieren Sie es online!
Erläuterung
Erste Schleife
Die erste Schleife führt die klassische Umwandlung in einen Hex-Algorithmus durch. Es tut Modulo 16 (
:f1+%
) und prüft, ob das Ergebnis <10 (:a(?
) ist. Wenn dies nicht7+
der Fall ist , müssen wir 7 ( ) hinzufügen , um von den Dezimalstellen zum Großbuchstaben in der ASCII-Tabelle zu gelangen. Andernfalls können wir fortfahren, indem wir den ASCII-Wert für 0 ("0"+
) hinzufügen und das auszugebende Zeichen an den unteren Rand des Stapels verschieben, da wir sie in umgekehrter Reihenfolge ausgeben müssen. Der oberste Wert wird dann durch das Ergebnis der Ganzzahldivision durch 16 ersetzt. Dies wird durch Berechnen von a / b - (a / b)% 1 (f1+,:1%-
) . Wenn die Schleife beendet ist, enthält der Stapel die Hexadezimalzeichen in umgekehrter Ausgabereihenfolge und eine 0.Zweite Schleife
Die zweite Schleife kehrt die Liste um und prüft, ob das oberste Element 0 ist. Wenn dies der Fall ist, wissen wir, dass alle Nicht-Nullen gedruckt wurden und wir sollten abbrechen. Ansonsten geben wir das Zeichen aus und kehren die Liste erneut um, um uns auf die nächste Iteration vorzubereiten. Die
:
beim Eintritt in die zweite Schleife wird die 0 duplizieren , die keine Wirkung.quelle
SpecBAS - 110 Bytes
Dies verwendet einen Algorithmus, den ich in WikiHow gefunden habe (2. Methode).
Strings in SpecBAS basieren auf 1, daher
+1
das richtige Element auswählen.quelle
C (clang) 83 Bytes
Probieren Sie es online!
Alternative Lösung in C
quelle
Ruby, 40 Bytes
Gestohlen vonInspiriert von der Antwort von manatwork, aber mit einer interessanten Lücke, um es kürzer zu machen.quelle
REXX,
8078 Bytesquelle
C 48 Bytes
Dies ist nicht ganz original, ich habe 5 Bytes von der Version Digital Trauma entfernt.
quelle
APL (NARS), Zeichen 34, Bytes 68
Prüfung:
quelle