Wir scheinen nie zu bekommen müde Alphabet bezogenen Herausforderungen ...
Das Rezept
Gegeben
- eine Folge von Buchstaben
S
und - zwei positive ganze Zahlen
M
,N
,
Produziere eine Buchstabensuppe mit den Buchstaben S
, die zufällige Positionen in einer rechteckigen Schüssel der Größe M
× einnehmen N
, umrahmt von einem nicht-alphabetischen Zeichen, das kein Leerzeichen ist, um den Rand der Schüssel darzustellen.
Positionen, die nicht von Buchstaben verwendet werden, sollten als Leerzeichen angezeigt werden. Siehe die folgenden Beispiele .
Zusätzliche Regeln
- Die Größe
M
×N
bezieht sich auf das Innere der Schüssel. Die Größe inklusive Rand beträgtM+2
×N+2
. - Jedes Zeichen von
S
sollte einmal in der Schüssel in einer anderen Position erscheinen . Das heißt, ein Zeichen kann kein anderes überschreiben. S
kann Duplikate enthalten . Wenn es sich beispielsweiseS
um die Zeichenfolge handelt'abcc'
, muss die Suppe einea
, eineb
und zwei enthaltenc
(alle an verschiedenen Positionen).- Die Eingänge werden die erfüllen Einschränkungen
M >= 1
,N >= 1
,1 <= length(S) <= M*N
. - Der Rand der Schüssel kann ein beliebiges nicht alphabetisches Zeichen ohne Leerzeichen sein , das für alle Programmläufe und Eingabewerte gleich ist.
- Die Buchstabenpositionen in der Schüssel sind zufällig, daher kann das Ergebnis bei jedem Ausführen des Programms mit denselben Eingaben abweichen.
- In Anbetracht der Eingabe sollte jeder mögliche Satz von Buchstabenpositionen eine Wahrscheinlichkeit ungleich Null haben . Da dies anhand einiger Programmrealisierungen nicht überprüft werden kann, erläutern Sie bitte, wie Ihr Code dies erfüllt.
- Führende oder nachfolgende Leerzeichen am Rand sind zulässig.
S
wird nur Großbuchstaben enthalten . Wenn Sie möchten, können Sie nur Kleinbuchstaben verwenden .- Ein- und Ausgabe sind wie gewohnt flexibel . Beispielsweise kann die Ausgabe eine Zeichenfolge mit Zeilenumbrüchen, ein 2D-Zeichenarray oder eine Liste von Zeilen sein.
- Programme oder Funktionen sind in jeder Programmiersprache zulässig . Standardlücken sind verboten.
- Der kürzeste Code in Bytes gewinnt.
Beispiele
Eingaben werden angezeigt als S, [M N]
, wobei M
die Anzahl der Zeilen und N
die Anzahl der Spalten ist. Das Zeichen #
wird für den Rand verwendet.
'O', [1 1]:
###
#O#
###
'HEY', [1 3]:
#####
#YHE#
#####
'HELLO', [4 11]:
#############
# O #
# H #
# LE #
# L #
#############
'ADVNJSGHETILMVXERTYIOJKCVNCSF', [8 12]:
##############
#K V L S #
# A V X H #
#T M C #
# I O N#
# YC #
# G I R SE#
# J F #
#JT D V EN #
##############
'OOOOOOOOOOXXXXX', [13 31]:
#################################
# X #
# O #
# #
# X #
# O #
# X O #
# O #
# X #
# O #
# X #
# O #
# O O O #
# O #
#################################
'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ', [11 41]
###########################################
# JU#
# Q C M G R T U Y H #
# KI E H M YO #
# V BW I JC #
# SV D P B U #
# A F RF J KP E #
# E N TH Z #
# N BM O Q I AS N WX #
# S O K G L P Q #
#Z L T R L A F DD#
# V Y WX C G XZ #
###########################################
|+-
?Antworten:
05AB1E ,
2018161514 ByteNimmt drei Eingaben in der Reihenfolge auf: Höhe, Breite, Zeichenfolge. Ausgabe als 2D-Liste von Zeichen.
Verwendet
8
als Grenze, könnte aber eine beliebige Ziffer sein.-1 Byte dank @Grimy .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle . (TIO enthält
}}J»
in der Fußzeile einen hübschen Ausdruck des Ergebnisses. Sie können ihn auch entfernen, um stattdessen die tatsächliche 2D-Liste der ausgegebenen Zeichen anzuzeigen.)Erläuterung:
quelle
*j
! Hier ist 13 für Legacy oder eine hässliche 14 für Modern (gibt ein 2D-Zeichen-Array aus).1,1,"O"
, daher denke ich, dass er auch der 14-Byte-Wert für das Erbe sein muss. Vielen Dank für -1.APL (Dyalog Unicode) , 25 Byte SBCS
Probieren Sie es online!
-22 danke an @ngn, -7 danke an @ngn und @ Adám
Erläuterung:
APL (Dyalog Extended) , 21 Byte SBCSDie Winkel der Felge sind unterschiedliche Charaktere
Probieren Sie es online!
Verwenden Sie die DFN, um die Box anzuzeigen.
quelle
'#',∘⌽∘⍉⍣4⊢⍴∘(?⍨∘≢⊃¨⊂)↑⍨∘(×/)
Probieren Sie es online!{'#',∘⌽∘⍉⍣4⊢⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
(oder≥
anstelle von>
if⎕io=1
)'#',∘⌽∘⍉⍣4{⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
'#',∘⌽∘⍉⍣4{⍵⍴⊃¨↓∘⍺¨?⍨×/⍵}
Python 3 , 110 Bytes
Probieren Sie es online!
Randomisiert mithilfe eines
set
Verständnisses und gibt ein 2D-Zeichenfeld zurück.quelle
f'{s:{m*n}}'
Teil? Denn das ist die Syntax für einen formatierten String, der zufällig auch mit einem beginntf
.Bash + Coreutils,
139125 ZeichenProbelauf:
Probieren Sie es online!
Bash + Coreutils + Boxen, 97 Zeichen
Probelauf:
Probieren Sie es online! (Teilweise, da
boxes
nicht auf TIO installiert.)quelle
J ,
3029 Bytes-1 Byte danke an Jonah
Probieren Sie es online!
quelle
9!:1]6!:9''
behebt das{.
. Leichter Tweak für 29'#'|.@|:@,^:4[$*/@[(?~@[{{.)]
: Probieren Sie es online!PowerShell ,
16311193 ByteProbieren Sie es online!
$w
Übernimmt die Eingabe als idth,$h
eight,$s
tring.Erstellt eine Zeichenfolge mit
#
der entsprechenden$w
ID, verknüpft diese mit einer gewissen Berechnung und anschließend#
erneut mit derselben Zeichenfolge. Die Berechnung beginnt mit der Eingabe von$s
tring und dem Ausführen eines .padRight
bis zur$w
Länge von idth x$h
8 (dh, eine Zeichenfolge muss lang genug sein, um den rechteckigen Raum vollständig zut
belegen) . Wir konvertieren dann die Zeichenfolge oCharArray
undsort
esRandom
ergibt sich uns den durcheinandergebrachten Mittelteil, zum Schluss teilen wir-replace
ihn in gleich große$w
Stücke und umgeben diese Stücke mit#
s.-52 dank der Inspiration von AZTECCO
-18 bytes dank mazzy
quelle
-replace
statt .JavaScript (ES7), 125 Byte
Gibt eine Zeichenfolge zurück. Verwendet
0
als Rahmenzeichen.Probieren Sie es online!
Kommentiert
quelle
APL (Dyalog Extended) , 23 Byte SBCS
Anonyme stillschweigende Infix-Funktion. Nimmt
[M,N]
als linkes Argument undS
als rechtes Argument.Probieren Sie es online!
×/⍛(
…)
wende die folgende Funktion zwischen den Argumenten an und ersetze das linke Argument durch sein Produkt:↑
nimmM
×N
Zeichen vonS
und fülle sie mit Leerzeichen auf der rechten Seite auf⊇
ordne das in der folgenden Reihenfolge:?⍨⍤
die gemischten Indizes 1 bis ...⊣
das linke Argument (M
×N
)⍴
r eshape, die der folgenden Form:⊣
das linke Argument (dhM
Zeilen undN
Spalten)'#'
…⍣4
Wenden Sie die folgende Funktion viermal an, jeweils mit dem Rautezeichen als linkes Argument:∘⍉
transponieren Sie das rechte Argument,∘⌽
spiegeln Sie das rechte Argument und,
verketten Sie eine Spalte mit Rautezeichen auf der linken Seitequelle
PHP 7.4,
1079994 ZeichenDank an:
join()
(-8 Zeichen)chunk_split()
des$end
Parameters (-5 Zeichen)Probieren Sie es online!
PHP 7.3,
117112108 ZeichenDank an:
join()
(-5 Zeichen)chunk_split()
des$end
Parameters (-4 Zeichen)Probelauf:
Probieren Sie es online!
quelle
fn($s,$r,$c)=>($b=str_repeat(9,$c+2))."\n9".join("9\n9".str_split(str_shuffle(str_pad($s,$r*$c)),$c))."9\n$b";
sollte in PHP 7.4 ( wiki.php.net/rfc/arrow_functions_v2 ) funktionieren , und ein Release Canditate wurde veröffentlicht ( wiki.php.net/todo/php74 ), es ist also ein verfügbarer "Compiler", der kam vor dieser Herausforderung, und jeder kann es nutzen.join()
, aber es ist mir nicht gelungen, die Größe zu reduzieren. ☹chunk_split
: 94 Bytes Ich habe auch das letzte Semikolon entfernt, da ich glaube, dass es nicht benötigt wird. Sie haben eine Funktion geschrieben, daher sollte der Code, der es einer Variablen zuweisen wird, nicht zählen.MATL ,
2219 BytesProbieren Sie es online!
Vielen Dank an @LuisMendo für das Speichern von 3 Bytes. Jetzt hat es den gleichen Bytecount wie die Antwort von @ flawr , aber ausreichend verschieden, um trotzdem zu posten. Überblick über den Agorithmus auf hoher Ebene:
quelle
Z}&O
durchZ"
, und das ermöglicht es Ihnen , auch die letzte zu entfernenc
1$O
.Ruby , 121 Bytes
Erstellt die Schüssel, fragt die Indizes aller Leerzeichen in der Schüssel ab, tastet eine Anzahl von Leerzeichen ab, die der Größe der Zeichenfolge entspricht, und füllt sie aus. Es
sample
wird keine sortierte Liste zurückgegeben, sodass kein Mischen erforderlich ist. Das Durchsuchen von Indizes bis9*m*n
(die mit ziemlicher Sicherheit außerhalb des Bereichs liegen) erhält weiterhin alle Leerzeichen und ist 1 Byte kürzer alsr.size
.Probieren Sie es online!
quelle
Rot ,
120116114112 Bytes-2 Bytes dank @Kevin Cruijssen!
Probieren Sie es online!
quelle
+ 1
undto"""00"0 n
stattdessen verwenden.copy
, für die gleiche Byteanzahl.t
Zeile vor dem Schleifen als führendes / nachfolgendes Element zu platzieren, um die beiden losenprint t
zu speichern ? Ich bezweifle es, aber da ich nicht weiß, wie ich Elemente zu einer Liste hinzufügen soll, bin ich mir nicht sicher.Perl 6 ,
7467 Bytes-5 Bytes dank Jo King
Probieren Sie es online!
Erläuterung
quelle
Perl 5
-lF
,9997 Bytes-2 Bytes mit freundlicher Genehmigung von @NahuelFouilleul
Probieren Sie es online!
quelle
($i++%$n==0)
könnte geändert werden von!($i++%$n)
k4,
3228 Bytesedit: -4 danke an Galen Ivanov!
genannt wie
Erläuterung:
quelle
#
am Ende jeder Zeile anhängen und 4-mal transponieren / umkehren, so etwas .Java (JDK) ,
180 bis178 ByteKein einziger zusätzlicher Import:
Probieren Sie es online!
Es war ein ziemlicher Kampf, dieses Golfspiel zu gewinnen. Insbesondere die mit den Collections.shuffle () / Arrays-Methoden verbundenen Importe waren zu viel, um akzeptiert zu werden, sodass ich meinen eigenen String-Shuffling-Algorithmus erstellen musste (wahrscheinlich weder effizient noch gleichmäßig verteilt). Ein riesiges Dankeschön an Steven für den Beweis, dass eine Reihe von Positionen generiert werden kann dem Algorithmus kann.
Formatiert (mit Erklärung):
quelle
.replaceAll("(.{"+n+"})","\n#$1#")
Kann werden.replaceAll(".{"+n+"}","\n#$0#")
Kohle , 27 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Übernimmt die Eingabe in der Reihenfolge Breite, Höhe, Zeichenfolge. Erläuterung:
Geben Sie die Breite und Höhe ein.
Rahmen die Schüssel.
Schleife über die Zeichen in der Zeichenkette.
Springe zu einer zufälligen Position in der Schüssel, bis eine leere Stelle gefunden wird.
Druckt das aktuelle Zeichen, ohne den Cursor zu bewegen.
quelle
Move(:UpLeft)
nötig Ohne funktioniert es gut, aber vielleicht haben Sie es aus einem Grund hinzugefügt, über den ich nicht nachdenke?Japt
-R
,2118 BytesVersuch es
quelle
MATL ,
29 2719 BytesProbieren Sie es online!
Danke @LuisMendo für -8 Bytes!
Erläuterung:
p
Berechnet die Anzahl der Suppenpixel. DannZ@
erzeugt eine zufällige Permutation der Größe der Anzahl von Pixeln Suppe. Wir werden dies als Indizes verwenden, zuiy~h
denen die Eingabezeichenfolge mit genügend Leerzeichen hinzugefügt wird.w)
vertauscht die beiden und indiziert einen mit dem anderen. Wir formen dann1Ge
die Form in das gewünschte Rechteck um und#
füllen es mit -pad aufTT35&Ya
.quelle
T-SQL 2017, 232 Byte
Dies online zu testen ist eine ältere Version von SQL-Server, die einen anderen Charakter kostet. Ich habe die kürzere Version gepostet.
Golf gespielt:
Probieren Sie es online aus
Ungolfed:
quelle
C (Klappern) ,
169164162160 BytesProbieren Sie es online!
-2 Setzen Sie a = o in time (), und rufen Sie // for (srand (time (a = o)) auf; ...
Gespeichert 7 @ceilingcat Vorschlag zur Verwendung von - ~ Variable und Auto-Speicher für Zeichenfolge o sowie viele Verbesserungen.
Degolf:
quelle
*a=--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(;
stattdessen vor--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(*a=0;
Icon ,
136133131118 BytesProbieren Sie es online!
quelle
Gelee , 16 Bytes
Ein dyadischer Link, der eine Liste von ganzen Zahlen
[M, N]
auf der linken Seite und eine Liste von ZeichenS
auf der rechten Seite akzeptiert, die eine Liste von Zeichenlisten , die Zeilen, ergibt. Verwendet das Tilde-Zeichen,~
, als Rahmen.Probieren Sie es online!
Alle möglichen Ausgaben haben eine Wahrscheinlichkeit ungleich Null, dass sie ausgegeben werden, da wir
Ẋ
eine Liste der Zeichen von shuffle ( ) erstellenS
zusammen mit der entsprechenden Anzahl von Leerzeichen .Der Code
Ṿ€«”~ZƊ⁺
speichert das Byte, von dem ich mir vorstelle, dass es erforderlich wäre, es mit Zeilenumbrüchen zu verbinden, die vollständige Programme mit einer Ganzzahl wie Null benötigen (z . B.P⁶ẋaẊs⁸Ṫ;€0ZUƊ4¡Y
oderP⁶ẋaẊs⁸Ṫj@€Ø0Z$⁺Y
). Vielleicht gibt es eine Möglichkeit, mehr zu sparen ...?quelle