In einem unserer Arbeitsprojekte haben wir kürzlich eine besonders umfangreiche Methode zur Generierung einer 6-stelligen Zeichenfolge aus einem 15-stelligen Alphabet entdeckt. Einige von uns behaupteten "Ich wette, wir können das in einer Zeile bekommen", was ein kleines internes Codegolfspiel auslöste.
Ihre Aufgabe ist es, uns zu besiegen, was zweifellos nicht lange dauern wird!
Der ursprüngliche Algorithmus verwendete das Alphabet 0-9A-E, aber wir haben mit anderen Alphabeten experimentiert. Es gibt also drei Unteraufgaben.
- Generieren Sie eine
6
zufällige Zeichenfolge, indem Sie ein beliebiges hartcodiertes15
Alphabet wie auswählenABC123!@TPOI098
. (Dies ist nur ein Beispiel und sollte anpassbar sein, ohne die Byteanzahl zu beeinflussen.) - Generieren Sie eine
6
zufällige Zeichenfolge aus einem15
Buchstabenalphabet0123456789ABCDE
. - Generieren Sie eine
6
zufällige Zeichenfolge aus einem15
Buchstaben Ihrer Wahl (nur druckbare Zeichen bitte).
Jeder Charakter sollte die gleiche Auswahlmöglichkeit haben und Wiederholungen sollten möglich sein.
Das Beste, was wir für jede Unteraufgabe bewältigen konnten, ist:
- "ABC123! @ TPOI098" -
24 bytes
- "0123456789ABCDE" -
21 bytes
- Benutzerdefiniertes Alphabet -
13 bytes
Ihre Punktzahl ist die Summe der Bytes in der Lösung jeder Teilaufgabe. dh unsere Punktzahl ist derzeit 58.
Wir haben unter anderem versucht, CJam und Ruby zu verwenden. Das Original war in C #. Verwenden Sie eine beliebige Sprache, wir sind jedoch daran interessiert, Lösungen in diesen Sprachen zu finden
quelle
Antworten:
Jelly , 38 Bytes
TryItOnline Verbindungen A , B , und C .
A :
ABC123!@£POI098
22 Bytes(Denken Sie über eine Komprimierung nach, um diese zu verringern.)
B :
0123456789ABCDE
8 Bytes:C :
123456789ABCDEF
(Auswahl), 8 Bytes:Wie?
quelle
CJam (23 + 14 + 10 = 47 Bytes)
Beliebiges Alphabet: 23 Bytes ( Online-Demo )
Hexadezimales Alphabet: 14 Byte ( Online-Demo )
Benutzerdefiniertes Alphabet:
ABCDEFGHIJKLMNO
10 Byte ( Online-Demo )Präparation
Das Hexadezimale ist das Interessante:
Die sechs Zeichen bleiben auf dem Stapel und werden automatisch gedruckt.
quelle
AbHb
ist genial. Ich dachte über diesen allgemeinen Ansatz nach,_9>7*+
war aber zu lang.Perl, 46 + 26 + 26 = 98 Bytes
Ein Großteil des Kredits geht an @Dom Hastings für die Einsparung von 13 Bytes!
Die 3 Programme sind bis auf das sich ändernde Alphabet ziemlich identisch.
Hartcodiertes Alphabet (
ABC123!@)POI098
in diesem Beispiel) -> 46 Bytes:say map{substr"ABC123!@)POI098",15*rand,1}1..6
Festes Alphabet
0123456789ABCDE
-> 26 Bytes:printf"%X",rand 15for 1..6
Benutzerdefiniertes Alphabet
0123456789ABCDE
in diesem Fall -> 26 Bytes:printf"%X",rand 15for 1..6
Sie können sie alle in eine Datei einfügen, um sie auszuführen:
(Das
say "";
sind nur hier, um das Ausgabeformat zu verbessern)quelle
say
:say map{("ABC123!@)POI098"=~/./g)[rand 15]}1..6
und speichernsay map{(A..O)[rand 15]}1..6
. Für die Sekunde können Sie verwendenprintf
:printf"%X",rand 15for 1..6
um insgesamt 11 zu sparen! Ich bin mir sicher, dass Ton zu arkaner Magie raten kann, um noch mehr zu sparen!substr
speichert eine andere:say map{substr"ABC123!@)POI098",15*rand,1}1..6
printf"%X"
,substr..rand
undmap
es ist nur ein bisschen weniger offensichtlich, ich so lassen die Menschen ohne Spoiler perl Magie genießen! : DR, 33 + 43 + 59 = 135 Bytes
Beliebiges hartcodiertes Alphabet (ändern Sie die Zeichenfolge, um das Alphabet zu ändern):
Alphabet von
[0-9A-E]
:Benutzerdefiniertes Alphabet von stdin:
In allen Fällen wird das Ausgabewort auf stdout gedruckt.
quelle
JavaScript (ES6),
167166164163 Bytes1 Byte dank Neil
gespeichert 2 Byte dank ETHproductions
gespeichert 1 Byte dank premek.v gespeichert
Hardcoded:
"ABC123!@TPOI098"
(58 Bytes)Behoben:
"0123456789ABCDE"
(5857 Bytes)Benutzerdefiniert:
"()+.1=>?M[afhnt"
(514948 Bytes)quelle
(n=6)=>n?f(n-1)+("ABCDE"[n=Math.random()*15|0]||n-5):''
Spart dir ein Byte.1/8+Math
is great :).1+JSON
JSON+f
([object JSON](n
=>" (JNOS[]bcejnot"
)JavaScript (ES6), 184 Byte
Benutzerdefiniertes Alphabet: 66 Bytes
0-9A-E: 63 Bytes
0-9a-e: 55 Bytes
(Subtrahieren Sie 6 Bytes, wenn eine datumsbasierte Zufälligkeit zulässig ist.)
quelle
**
:_=>((Math.random()+1)*15**6|0).toString(15).slice(1)
f=
in derq, 42 Bytes
EIN
19 Bytes
B
14 Bytes
C
9 Bytes
(verwendet die ersten fünfzehn Buchstaben des Alphabets)
quelle
Julia (36 + 26 + 21 = 83)
quelle
CJam, 48 Bytes
Beliebiges Alphabet, 23 Bytes:
Probieren Sie es online!
Hexadezimalstellen, 15 Bytes:
Probieren Sie es online!
Alphabet
ABCDEFGHIJKLMNO
, 10 Bytes:Probieren Sie es online!
quelle
~c
stattdessen'A+
etwas technisch Druckbares zurückgegeben.Ruby 47 + 37 + 31 = 115
Hardcoded: "ABC123! @ TPOI098" (47)
Behoben: "0123456789ABCDE" (37)
Benutzerdefiniert: "ABCDEFGHIJKLMNO" (31)
quelle
05AB1E , 43 Bytes
Arbitratry Alphabet (
ABC123!@TPOI098
), 23 bytes Probieren Sie es onlineFast hexadezimales Alphabet (
0123456789ABCDE
), 10 Bytes Probieren Sie es online ausBenutzerdefiniertes Alphabet (
abcdefghijklmno
), 10 Byte. Probieren Sie es online ausquelle
Python 2, 70 + 70 + 64 = 204 Bytes
Leider ist das zweite Beispiel mit der ersten Methode einfacher als so etwas
choice([randint(48,57)),choice(65,69)])
quelle
from random import*
? Ich denke, Sie könnenimport random
undrandom.choice
zumindest in den ersten beiden Beispielen verwenden.import random random.choice
ist 27,from random import* choice
ist aber 26,import random as r r.choice
ist auch 27format(randrange(8**8),'X')
, glaube ich, mit ein bisschen mehr erreichen.F
Vitsy, 27 +
2422 +1310 =646259 Bytes# 1:
Probieren Sie es online!
# 2:
Probieren Sie es online!
#3:
Wo die verfügbaren Zeichen sind:
Probieren Sie es online!
quelle
J, 24 + 24 +
1810 = 58 BytesDank Meilen 8 Bytes gespart!
Ja, die zweite Zeichenfolge ist in J nicht leicht komprimierbar:
Wenn ein Hex-Alphabet in Kleinbuchstaben in Ordnung ist, gibt es
,hfd?6#15
9 Bytes zulässig, wie in @miles angegeben.Jedenfalls
?6#15
sind 6 Zufallszahlen zwischen 0 und 15;{~
ist take-from.u:
konvertiert Zahlen in Zeichen. Das letzte Beispiel codiertABCDEFGHIJKLMNOP
.Bonus: allgemeiner Fall
{~6?@##
ist ungefähr:quelle
hfd
, das in h ex f konvertiert wird rom d ecimal. Sie können eine 9-Byte-Lösung mit erhalten,hfd?6#15
. Der letzte Fall, nur um etwas leicht zu lesen, verwendet das Alphabet von'A'
für eine 10-Byte-Lösungu:65+?6#15
, was insgesamt 24 + 9 + 10 = 45 ergibt .PHP, 46 + 36 + 35 = 117 Bytes
Hardcoded (46 Bytes)
(47 Bytes)Hexadezimal (Kleinbuchstaben) (36 Byte)
Für Großbuchstaben 46 Bytes mit Hardcoded-Version.
Benutzerdefiniert (AO) (35 Byte)
quelle
Scala, 154 Bytes
Hartcodiertes Alphabet (54 Bytes):
Hex-Alphabet (54 Bytes):
Benutzerdefiniertes Alphabet
ABCDEFGHIJKLMNO
(47 Byte):Erläuterung:
'A'to'O'
Erzeugt eine Folge von 15 Zeichen (A bis O)quelle
Pip , 42 Bytes
Hardcoded Alphabet, 22 Bytes:
Hexadezimalziffern, 11 Bytes:
Erste 15 Kleinbuchstaben, 9 Bytes:
Erläuterung
Alle drei Programme beginnen mit
L6O
: 6-maliger Schleife und geben den angegebenen Ausdruck aus.RC"..."
: Zufällige Auswahl eines Zeichens aus der fest codierten ZeichenfolgeRR15TB16
: RandRange (15), konvertiert zur Basis 16z@RR15
: Kleinbuchstabenz
, indiziert mit RandRange (15)Probieren Sie es online!
quelle
Skript / skQuery , 108 Bytes
Hardcoded (43 Bytes):
0123456789ABCDE (34 Byte):
Auswahl (31 Bytes):
quelle
`
nach links verschieben?Jolf, 26 + 14 + 13 = 51 Bytes
Benutzerdefiniertes Alphabet, 24 Byte. Probieren Sie es hier aus!
0-9A-E Alphabet, 14 Bytes. Probieren Sie es hier aus!
lp^0wά
wirdlp
(0-Z) geschnitten (l
) von0
bis15
(wά
).1-9A-F Alphabet, 13 Bytes. Probieren Sie es hier aus!
lp^1ά
ist dasselbe wie oben, außer von1
bis16
.Allgemeine Methode:
Andere Versuche (mit String-Komprimierung):
quelle
PowerShell v2 +, 45 + 44 + 37 = 126 Byte
Festes Alphabet, 45 Bytes
Fast hexadezimales Alphabet, 44 Byte
Benutzerdefiniertes Alphabet (A bis O), 37 Byte
Alle folgen der gleichen Musterschleife von
0
bis5
, wobei jede Iteration einRandom
Zeichen oder einen ASCII-Wertchar
auswählt und diesen gegebenenfalls als -array ausgibt, und-join
zu einer Zeichenfolge zusammenfügt. Diese Zeichenfolge verbleibt in der Pipeline, und die Ausgabe ist implizit.Beispiele
quelle
Pyke, 35 Bytes
Beliebiges Alphabet, 20 Bytes
Probieren Sie es hier aus!
Hex-Alphabet, 8 Bytes
Probieren Sie es hier aus!
Benutzerdefiniertes Alphabet, 7 Byte
Probieren Sie es hier aus!
Alphabet gewählt:
abcdefghijklmno
quelle