Dieser kommt von einem realen Problem. Wir haben es natürlich gelöst, aber wir haben immer das Gefühl, es hätte besser gemacht werden können, dass es zu langwierig und umständlich ist. Allerdings kann sich keiner meiner Kollegen eine prägnantere Schreibweise vorstellen. Daher präsentiere ich es als Code-Golf.
Das Ziel ist es, eine nichtnegative Ganzzahl in eine Zeichenfolge zu konvertieren, so wie Excel die Spaltenüberschriften darstellt. Somit:
0 -> A
1 -> B
...
25 -> Z
26 -> AA
27 -> AB
...
51 -> AZ
52 -> BA
...
16,383 -> XFD
Es muss mindestens bis zu 16.383 funktionieren, aber darüber hinaus ist es auch akzeptabel (aber keine Bonuspunkte). Ich freue mich am meisten auf die C # -Lösung, aber gemäß den Traditionen von Code-Golf ist jede echte Programmiersprache willkommen.
code-golf
conversion
Vilx-
quelle
quelle
Antworten:
Perl 6 ,
1614 BytesFunktioniert auch über XFD hinaus. Dank der unendlichen Listen in Perl 6 dauert die Ausführung nicht ewig (anderthalb).
Probieren Sie es online!
quelle
Excel Formula :), 36 Zeichen
Verwendung:
Entschuldigung, konnte nicht widerstehen ...
quelle
<laughter type="evil">Muhahahahaha!</laughter>
"1"
mit1
Perl, 17 Zeichen
Der
..
Operator macht dasselbe wie das magische automatische Inkrementieren, benötigt jedoch keine temporäre Variable und Schleife. Es sei denn ,strict subs
in Rahmen ist, die BarewordsA
undXFD
werden als Strings interpretiert.( Diese Antwort wurde vorgeschlagen , von einem anonymen Benutzer als Bearbeitung auf einer bestehenden Antwort . Ich fühlte es verdient eine gesonderte Antwort zu sein, und haben es zu einem gemacht. Da es nicht fair wäre für mich rep zu gewinnen aus, ich‘ habe es zum Community Wiki gemacht. )
quelle
$_
und die Ausgabe der Wert des Ausdrucks ist, wird(A..XFD)[$_]
die Herausforderung mit nur 12 Zeichen gelöst .perl -E 'say[A..XFD]->[<>]' < number.txt
. Oder geben Sie in Shells, die dies unterstützen, einfach die Eingabe in der Befehlszeile mit einperl -E 'say[A..XFD]->[<>]' <<< 123
.say+(A..XFD)[<>]
C, 53 Zeichen
Es ist, als würde man mit einem Hammer Golf spielen ...
Normale Version:
Und die Verwendung ist wie folgt:
quelle
Haskell, 48
Weniger golfen:
Erläuterung
Der
sequence
Kombinator von Haskell führt eine Liste von Aktionen durch und gibt das Ergebnis jeder Aktion in einer Liste zurück. Beispielsweise:ist äquivalent zu:
In Haskell werden Aktionen wie Werte behandelt und unter Verwendung von
>>=
(Binden) undreturn
Primitiven zusammengeklebt. Jeder Typ kann eine "Aktion" sein, wenn er diese Operatoren durch eine Monade implementiert Instanz .Übrigens hat der Listentyp eine Monadeninstanz. Beispielsweise:
Das ist gleich
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
. Beachten Sie, dass das Listenverständnis auffällig ähnlich ist:Da Listen eine Art "Aktion" sind, können wir sie
sequence
mit Listen verwenden. Das Obige kann ausgedrückt werden als:Somit,
sequence
gibt uns Kombinationen kostenlos!So erstellen Sie die Liste:
Ich muss nur Listen erstellen, an die ich übergebe
sequence
Verwenden Sie dann,
concatMap
um beidesequence
auf die Listen anzuwenden und die resultierenden Listen zu verketten. ZufälligerweiseconcatMap
ist dies die=<<
Funktion für Listen. Mit der Listenmonade kann ich auch hier einige Zeichen rasieren.quelle
Perl, 26 Zeichen
quelle
Ruby, 35 Zeichen
Verwendung:
Hinweis: Es gibt auch eine kürzere Version (30 Zeichen) mit Rekursion.
Bei Verwendung dieser Funktion müssen Sie möglicherweise die Stapelgröße für große Zahlen erhöhen, abhängig von Ihrem Ruby-Interpreter.
quelle
Groovy, 47 Jahre alt
quelle
Python 45
51quelle
+chr(65+i%26)
innen ziehen und testeni>=0
, um 1 Zeichen zu speichern :)f=lambda i:
anstattdef f(i):return
f = lambda i: i >= 0 and f(math.floor(i / 26 - 1)) + chr(int(round(65 + i % 26))) or ''
Scala, 62 Zeichen
Verwendung:
kehrt zurück:
Sie können dies mit Simply Scala ausprobieren . Kopieren Sie die Funktion, fügen Sie sie ein und verwenden Sie
f(some integer)
, um das Ergebnis anzuzeigen.quelle
""+
auf demelse
Fall nicht.Excel VBA, 31 Bytes
Anonyme VBE-Direktfensterfunktion, die Eingaben von der Zelle
[A1]
und Ausgaben in das VBE-Direktfenster übernimmtquelle
JavaScript (Node.js) , 50 Byte
Probieren Sie es online!
Als ich sah, dass viele Leute anfingen, darauf zu antworten, antwortete ich auch.
Hinweis :
Dies ist im Grunde eine Abzocke der Antwort von @ kevinCruijssen in Java, die dank JS verkürzt wurde.
quelle
PHP, 30 Bytes
Führe es als Pipe mit -nr aus oder versuche es online .
quelle
Z
würde es[
eher gehen alsAA
.VBA / VB6 / VBScript (nicht Excel), 73 Byte
Der Anruf
s(16383)
wird zurückgegebenXFC
.quelle
i>675
-s(676)=A@@
(erwartetYZ
),s(677)=A@A
(erwartetZA
)Javascript, 147 Bytes
Ich hatte ein ähnliches Problem. Das ist der Golf der Lösung. Excel-Spalten sind bijektive Basis 26 .
Erweitert, außer bei Verwendung von 1-Indizes:
quelle
Java, 57 Bytes (rekursiv)
Probieren Sie es online aus.
Erläuterung:
Java 10, 62 Bytes (iterativ)
Probieren Sie es online aus.
Erläuterung:
quelle
Viertens (gviertens) , 59 Bytes
Probieren Sie es online!
Erläuterung
quelle
R , 65 Bytes
Rekursive Antwort wie viele frühere Antworten.
Probieren Sie es online!
quelle
Powershell, 68 Bytes
Alternative rekursive Version, 68 Bytes:
Testskript:
Ausgabe:
Hinweis: Powershell bietet keinen
div
Operator.quelle
Haskell, 48
Ich dachte wirklich, dass ich den anderen Haskell-Eintrag schlagen könnte, aber leider ...
Ich bin mir sicher, dass es möglich ist, ein paar Charaktere davon abzuhalten, aber ich habe fast ein Jahr lang nicht in Haskell codiert, also bin ich ziemlich rostig.
Es ist nicht genau das, was Sie als elegant bezeichnen würden.
quelle
string f(int n){return n<0?"":f(n/26-1)+(char)(n%26+65);}
57 Zeichen, also würde ich mich fast schlecht fühlen, wenn ich es als Antwort posten würde.Jq 1,5 , 71 Bytes
Erwartet Eingaben in
N
. z.BErweitert:
Probieren Sie es online!
quelle
> <> 29 Bytes
Probieren Sie es online!
quelle
Icon , 58 Bytes
Probieren Sie es online!
quelle