Erstellen Sie eine Funktion oder ein Programm, mit dem ein Raster so nahe wie möglich an einem Quadrat liegt
- Sie erhalten eine Ganzzahl N als Eingabe, ganze Zahlen (1,2,3,25 usw.)
- Die Ausgabe muss ein perfektes rechteckiges Raster aus N Buchstaben sein, das so nah wie möglich an einem Quadrat liegt
- Das (Möchtegern-) Quadrat muss aus einem der vom Benutzer angegebenen Buchstaben O oder X bestehen
Punkte :
- Nur auf O oder X fest codiert: +1
- Ein Parameter (0/1, wahr / falsch, etwas Ähnliches) zum Drehen der Ausgabe (wie bei 5 oder 8): -10
- Entwerfen Sie das Quadrat (verwenden Sie sowohl O als auch X in einer Art Muster): -5
Ein Muster gilt als gültig, wenn es beide Zeichentypen enthält (wobei x / y-Achse> = 3 ist) und das Muster beim horizontalen oder vertikalen Spiegeln gleich bleibt (das Austauschen von Xs mit Os ist zulässig).
Beispiele
INPUT: 4 INPUT: 5 INPUT: 8 INPUT: 9
OO OOOOO XXXX XOX
OO XXXX OXO
or rotated 90deg XOX
Beispiele, die nicht erlaubt sind (Zeilen oder Spalten nicht gleich lang)
BAD RESULT: 5a BAD RESULT: 5b BAD RESULT: 8
OOO OO OOO
OO OO OOO
O OO
Wenn möglich, geben Sie bitte ein Online-Beispiel an.
"xo"[i]
statti
? Das scheint es nicht wert zu sein. Im Allgemeinen scheinen alle Ihre Belohnungen etwas niedrig zu sein.Antworten:
CJam, 16 (31 - 10 - 5)
Hierfür werden zwei Ganzzahlen eingegeben, von denen die erste
0
oder die1
Richtung und die zweite die AnzahlO
oderX
das Raster ist.Es wird ein alternatives
O
und gedrucktX
.Dies ist nur der Funktionskörper, um es auszuprobieren, fügen Sie
l~
vor dem Code Folgendes hinzu:und geben Sie gerne wie
Ausgabe wie zu bekommen
oder Eingabe wie
zum
Probieren Sie es hier online aus
Wie es funktioniert:
Beispiellauf:
quelle
APL (36 - 5 - 10 = 21)
Das linke Argument ist Rotation, das rechte Argument ist die Größe. Es wird auch ein einfaches Muster verwendet (es wechselt nur 'X' und 'O').
Erläuterung:
∆←,⍳2/⍵
: Generiere alle möglichen Zahlenpaare von1
bis⍵
und speichere in∆
.∆←∆[⍋|-/¨∆
...]
: sortiere∆
aufsteigend nach der absoluten Differenz der beiden Zahlen in jedem Paar und speichere das Ergebnis wieder in∆
.⊃∆/⍨⍵=×/¨∆
: Multiplizieren Sie für jedes Paar die Zahlen miteinander. Wählen Sie nur die Paare aus, mit denen multipliziert wird⍵
, und nehmen Sie das erste, das übereinstimmt (was aufgrund der Sortierung das "quadratischste" ist).⍺⌽
: Drehen Sie die Liste der Längen (die 2 Elemente enthält) um⍺
.'OX'⍴⍨
: Erstellen Sie eine Matrix dieser Größe und füllen Sie sie mit abwechselndemO
undX
.quelle
Haskell, 59 Zeichen
quelle
CJam,
252221 (31 - 10)Dies ist ein Funktionskörper. Wenn Sie ein vollständiges Programm wünschen, fügen Sie
riri
es der Vorderseite hinzu. Wenn Sie es als Codeblock verwenden möchten, umgeben Sie es in{}
. Testen Sie es auf cjam.aditsu.net .Die Eingabe erfolgt als zwei ganzzahlige Argumente: der Schalter, ob das Rechteck vertikal (ein Wert ungleich Null) oder horizontal (Null) ist, und die Anzahl der
O
zu verwendenden s.Erläuterung
quelle
JavaScript (E6) 84 (83 + 1) oder 101 (116-10-5)
Muster + Drehung (Parameter f, 0 oder 1) - Bonus 15
Kein Muster, keine Rotation - Strafe 1
Test In FireFox / Firebug - Konsole
quelle
Python,
7975 (keine Boni)Die Boni scheinen schwierig zu sein, daher hier eine ziemlich einfache Python-Funktion:
quelle
f(8)
gab mir eine Spalte von 8O
s, was falsch ist.>
dem es einen geben sollte<
. Es ist jetzt behoben. Danke für den Hinweis!Ruby, 74
Erläuterung
Integer
.n
(die Eingabe) durch jede Ganzzahl von 1 bis teilbar istn
.n
) zurück.String#*
Methode, um das Quadrat zu "zeichnen".quelle
APL (Dyalog Unicode) , 30-15 = 15 Byte SBCS
Anonymes Infix Lambda. Nimmt N als rechtes Argument und param als linkes Argument. Rechtecke haben entweder Streifen von X und O oder sind kariert.
Probieren Sie es online aus!
{
…}
"Dfn";⍺
ist linkes Argument (param),⍵
ist rechtes Argument ( N ):⍳⍵
ices ndices 1… N.∘.×⍨
Multiplikationstabelle davon⍵=
Maske, bei der N gleich ist⍸
true Indizes der wahren Werte in der Maskec←
Speichern Sie das inc
(für c andidates)≢
zählen die Kandidaten.5×
eine Hälfte multipliziert damit⌈
Decke (aufgerundet)⊃∘c
Wählen Sie dieses Element ausc
⍴∘'XO'
Verwenden Sie dies, um "XO" zyklisch umzuformen.⍉⍣⍺
transponieren, wenn paramquelle
05AB1E (Legacy) , Punktzahl: 7 (22 Bytes - 15 Bonus)
Probieren Sie es online aus oder überprüfen Sie weitere Testfälle .
Nimmt zuerst die Eingaben
N
und dann den Booleschen Wert (0
/1
), ob er sich drehen soll oder nicht.Verwendet die Python-Legacy-Version von 05AB1E, da zip mit einer String-Liste die Zeichen implizit abflacht und verbindet, im Gegensatz zur neueren Elixir-Rewrite-Version von 05AB1E.
Erläuterung:
quelle
GolfScript 26 (41 - 10 - 5)
Erwartet zwei Parameter auf dem Stapel:
0
für normal oder1
für transponiertn
WertDas Muster ist, dass das Brett voller
X
s ist und die obere linke Ecke ein istO
. Es ist unnötig zu erwähnen, dass dieses Muster beim Transponieren der Platine beibehalten wird.Demo: regelmäßig , transponiert
quelle
Mathematica, 71 Zeichen
quelle
Petit Computer BASIC, 72 Bytes
quelle
J , 32 Bytes - 15 = 17 Bytes
Probieren Sie es online aus!
Die Drehung wird durch ein 0/1-Flag gesteuert, das als linkes Argument verwendet wird
quelle
Retina 0,8,2 , 66 Bytes + 1 Byte Strafe = 67
Probieren Sie es online aus! Erläuterung:
Konvertieren Sie die Eingabe in eine Zeichenfolge von
X
s.Der erste Durchgang der äußeren Erfassung entspricht dem Anfang der Zeichenfolge, während bei nachfolgenden Durchläufen der vorherige Wert der inneren Erfassung übereinstimmt. Die innere Erfassung wird dann erhöht und abgeglichen. Das Ergebnis davon ist, dass die Menge an Zeichenfolge, die von der äußeren Erfassung verbraucht wird, das Quadrat der inneren Erfassung ist, das daher die Quadratwurzel der Eingabe nicht überschreiten kann. Währenddessen stellt die nachfolgende Wiederholung sicher, dass die innere Erfassung ein Faktor für die Länge der Zeichenfolge ist.
Speichern Sie den erkannten Faktor und berechnen Sie den anderen Divisor, indem Sie die Anzahl der nachfolgenden Wiederholungen addieren.
Ordnen Sie die Faktoren in einem Rechteck neu an.
quelle
Holzkohle , 33 Bytes - 10 - 5 = 18
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Eingabe
N
.Nehmen Sie den Bereich
0
..N
, behalten Sie nur die Zahlen, deren Quadrate nicht kleiner alsN
und dividiert sindN
, und nehmen Sie das Minimum dieser Zahlen.Verwenden Sie den erkannten Faktor, um ein Rechteck mit der entsprechenden Breite und Höhe mithilfe eines Schachbrettmusters auszugeben. (Dies sollte
UOη÷θηXO¶OX
für eine 1-Byte-Speicherung sein, aber das ist momentan fehlerhaft.)Wenn der zweite Eingang ungleich Null ist, drehen Sie den Ausgang. (Wenn die zweite Eingabe akzeptabel sein muss
0
oder2
akzeptabel ist, kann dies⟲N
für eine 1-Byte-Speicherung sein.)quelle