Erstellen Sie ein Programm, das alle ganzen Zahlen einschließlich eines Intervalls druckt (a, b)
und ein Vielfaches von 8 in der Folge durch zufällige (gleichmäßig verteilte, von anderen Zeichen unabhängige), nicht numerische, nicht mit Leerzeichen versehene, druckbare ASCII-Zeichen ersetzt.
Nehmen Sie in allen Fällen 0 <a <b an.
Wenn die Zahl mehr als eine Ziffer hat, stellen Sie sicher, dass die Anzahl der Zeichen in der Ersetzung übereinstimmt!
Beispiele:
(1, 16) -> 1 2 3 4 5 6 7 $ 9 10 11 12 13 14 15 n@
(115, 123) -> 115, 116, 117, 118, 119, :F<, 121, 122, 123
(1, 3) -> 1 2 3
Nicht-Beispiele:
(1, 16) -> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
(115, 123) -> 115 116 117 118 119 $ 121 122 123
Das ist Code Golf, also gewinnt der kürzeste Code in Bytes!
Aktueller Gewinner:
Pyke (21 Bytes) von Schlammfischen
Am beliebtesten:
Antworten:
Pyke,
2221 BytesProbieren Sie es hier aus!
Nimmt die Eingabe in der Form:
higher
,lower
quelle
Python 2, 126 Bytes
Probieren Sie es online!
Vielen Dank an Flp.Tkc und EasterlyIrk für all ihre Hilfe!
quelle
b/a
statt verwendena<=b
und Sie brauchen die;
am Ende nicht. Auchimport random,string
spart ein paar Bytes. tio.run/nexus/…Python 2 , 119 Bytes
Probieren Sie es online!
quelle
zsh,
10098 BytesDie beiden Eingabeargumente werden als Befehlszeilenargumente übergeben und die Zahlen in separaten Zeilen ausgegeben.
quelle
Mathematica, 96 Bytes
Erläuterung
Für Eingänge
m
undn
:Generieren
{m, m + 1, m + 2, ... , n}
Wenden Sie für alle Zahlen, die durch 8 teilbar sind (nennen Sie das
a
), diese Ersetzungsregel an:Ruft eine Liste aller druckbaren ASCII-Zeichen mit Ausnahme der Ziffern ab.
Wählen Sie pseudozufällig
Floor[Log10[a] + 1]
Zeichen aus der Liste aus, um Duplikate zuzulassen.Verbinde die Charaktere.
quelle
FromCharacterCode
(r=Range)@##/.a_?(8∣#&):>FromCharacterCode[Join[33~r~47,58~r~127]~RandomChoice~⌊Log10@a+1⌋]<>""&
R, 73 Bytes
Liest die Eingabe von stdin und ersetzt die durch teilbaren Zahlen durch
8
eine einheitlich ausgewählte Stichprobe von ASCII-Zeichen im Bereich32...47, 58...126
. Um die zufällige Stichprobe zu zeichnen, benötigen wir einen Vektor von Zeichen, der leiderintToUtf8()
eine Zeichenfolge anstelle eines Vektors zurückgibt, sodass wir ihn auch über den Bereich mit vektorisieren müssensapply
.quelle
Python 2, 126 Bytes
(man outgolf nicht einfach Dennis)
Da ich viel an der Antwort von Heather gearbeitet habe, dachte ich, ich würde auch meine eigenen Lösungen posten.
Dies ist eine Funktion, die zwei Argumente akzeptiert und direkt an druckt
STDOUT
.127 Bytes
Dies ist eine unbenannte anonyme Funktion, die Sie verwenden, einer Variablen zuweisen (z. B.
f
) und dann mit aufrufen könnenf(a, b)
. Dies gibt die Ausgabe als Liste zurück.quelle
Pip , 28 Bytes
Nimmt die Zahlen als Befehlszeilenargumente und druckt eine durch Zeilenumbrüche getrennte Liste der Ergebnisse. Probieren Sie es online!
Erläuterung:
quelle
JavaScript (ES6), 114 Byte
Diese verdammten Einbauten mit 23-Byte-Namen ...
quelle
MATL , 26 Bytes
Probieren Sie es online!
Erläuterung
quelle
Pyth , 24 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Bash + apg ,
6476 BytesEDITS:
Golf gespielt
Prüfung
quelle
crazy8 8 8
ergeben würdePerl 6 , 60 Bytes
Erläuterung:
{ map { }, $^a .. $^b }
: Ein Lambda, das zwei Argumente akzeptiert, die Liste der Ganzzahlen in diesem Bereich generiert und diese mit der folgenden Transformation für jedes Element zurückgibt:$_ % 8 ?? $_ !!
: Wenn das Element nicht durch 8 teilbar ist, geben Sie es unverändert weiter. Andernfalls...S:g/./{ }/
: ... Ersetzen Sie jedes Zeichen der Zeichenfolgendarstellung durch den von diesem Ausdruck generierten Wert:grep(/\D/, "!" .. "~").pick
: Generieren Sie den Zeichenbereich zwischen!
und~
(in Unicode-Reihenfolge), filtern Sie die Ziffern heraus und wählen Sie eines der verbleibenden Zeichen nach dem Zufallsprinzip aus.quelle
PHP, 163 Bytes
Erläuterung:
$n = range(48,57)
Dies sind die ASCII-Codes für Zahlen, die sich in der Mitte von Sonderzeichen (32-47) und anderen Zeichen (58-126) befinden.$c = array_diff(range(32,126), $n)
Schließen Sie mithilfe des$n
Arrays numerische Zeichen aus und erstellen Sie ein Array akzeptabler ASCII-Zeichen.foreach(range($a,$b) as $v)
Durchlaufen Sie den Wertebereich von$a
bis$b
(einschließlich) als $ v innerhalb der Schleife.if($v % 8 != 0) { echo $v; }
Teste mit dem Mod-Operator, ob $ v gleichmäßig durch 8 teilbar ist%
.else { for($i = 0; $i < strlen($v); $i++) { ... }}
Wenn dies nicht gleichmäßig durch 8 teilbar ist, wiederholen Sie die Schleife so oft, bis die Anzahl der Ziffern erreicht ist, und drucken Sie die Zeichen aus (im nächsten Schritt).echo chr($c[array_rand($c)])
Drucken Sie ein einzelnes Zeichen aus dem zulässigen Feld der ASCII-Werte in$c
.array_rand
Gibt einen Index im Array zurück, daher müssen wir den tatsächlichen Wert an diesem Index mit ermitteln$c[random_key]
.Ich könnte dies wahrscheinlich verkleinern, indem ich es
$c
anders erstelle , und die Schleife zum Drucken der ASCII-Zeichen fühlt sich klobig an, so dass ich weiter darüber nachdenken werde, wie ich das verkürzen kann.quelle
postgresql9.6 251 Zeichen
sehr langer Code, aber postgresql macht es auch.
formatiertes SQL ist hier:
quelle
Perl, 66 Bytes
Laufen mit
-E
Flagge:Das ist ganz einfach:
-
<>..<>
Erstellt eine Liste der Nummern zwischen den 2 Eingangsnummern. Undmap
iteriert dann darüber:-
$_%8||...
: Die...
werden nur ausgeführt, wenn$_
es sich um ein Vielfaches von 8 handelt.-
s%.%xxx%ge
: Ersetzen Sie jedes Zeichen durchxxx
.-
do{$_=chr rand 126}until/[!-\/:-~]/
Wähle ein zufälliges Zeichen (von 0 bis 126), bis wir ein zufriedenstellendes erhalten/[!-\/:-~]/
, d. h. eine, die druckbar ist und keine Ziffer ist.-
say
: drucke es aus.quelle
C (GCC) ,
129119 BytesProbieren Sie es online!
129 → 119 Verwenden Sie den
%94+33
Trick von OOBalanceUngolfed:
quelle
puts
anstelle vonprintf
).C
157115BytesProbieren Sie es hier online aus . Danke an jxh für das Golfen mit 42 Bytes.
Ungolfed-Version:
quelle
Java 10,
149147 Bytes (Lambda-Funktion)Probieren Sie es online aus.
Java 10,
227225 Bytes (volles Programm)Probieren Sie es online aus.
Erläuterung:
quelle
t<33|(t>47&t<59)|t>126;
darüber ist. Grundsätzlich wurde eine Zufallszahl im Bereich generiert[0,127)
und dann überprüft, ob diese gültig ist (also im Bereich[33..47,59..126]
alle druckbaren nicht-stelligen ASCII-Zeichen). Wenn es ist: gut, füge es an. Wenn nicht: Erzeugen Sie erneut eine Zufallszahl im Bereich[0,127)
und validieren Sie sie erneut, bis wir ein gültiges Zeichen gefunden haben.APL (Dyalog Extended) , 32 Byte
Probieren Sie es online!
Vielen Dank an Adám und dzaima für ihre Hilfe. Zum ersten Mal mit Dyalog Extended!
Erläuterung:
quelle
Scala , 198 Bytes
Eine verbesserte Funktionsversion mit unveränderlichem Zustand (03-04-2018)
Probieren Sie es online!
Eine funktionale Style-Lösung in Scala (350 Bytes) zum Spaß.
Verbesserungsvorschläge sind willkommen.
quelle
Python 2, 180 Bytes
BEARBEITEN:
Vielen Dank an @ Flp.Tkc für die Erkenntnis, dass ich die Aufgabe nicht richtig gelesen habe.
Vielen Dank an @Caleb für den Hinweis, dass ich ein paar verwenden könnte, um die Byteanzahl zu reduzieren.
Vielen Dank an @Dennis für den Hinweis, dass Zahlen nicht eingeschlossen werden können.
EDIT 2:
Die aktuelle Version könnte wahrscheinlich mehr vereinfacht werden als sie ist.
quelle
Power ,
8289 BytesProbieren Sie es online!
quelle
QBIC , 79 Bytes
Das Überspringen der Zahlen ist eine kostspielige Angelegenheit. Hier ist eine Version, die möglicherweise auch zufällig
0-9
20 Bytes weniger auswählt :Beispielausgabe für
1, 89
Erläuterung:
quelle
05AB1E , 17 Bytes
Nimmt die Eingabe als
highest\nlowest
und gibt eine Liste aus.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Japt , 20 Bytes
Versuch es
quelle
Viertens (gviertens) , 128 Bytes
Probieren Sie es online!
Erläuterung
Schleife von Anfang bis Ende, drucke die Zahl, wenn nicht ein Vielfaches von 8, ansonsten erhalte die Anzahl der Ziffern in der Zahl und drucke so viele zufällige Zeichen, gefolgt von einem Leerzeichen
Code Erklärung
Ungolfed
Normalerweise spiele ich meine Lösungen nicht ab, aber diese ist lang / kompliziert genug, dass ich denke, dass sie gebraucht werden
quelle
PHP , 130 Bytes
Probieren Sie es online!
Ungolfed:
quelle
$x-= $x > 58 ?: 11; // subtract 11, if x is less than 58
- könnten Sie näher darauf eingehen?Subtract one from x. If x was less than or equal to 58, subtract a further ten from it.
, nein?Kotlin , 136 Bytes
Probieren Sie es online!
quelle