Die meisten Menschen sind mit der Frage vertraut, wie man Schafe zählt, um einzuschlafen. Es gibt eine Schafherde, von denen einige über einen Zaun springen, und Sie zählen die Schafe, wenn sie springen. Angeblich hilft dies, Ihren Geist zu beruhigen und Sie in einen schlafähnlichen Zustand zu versetzen, so dass Sie einschlafen.
Hier ist ein ASCII-Schaf, das nach rechts zeigt und darauf wartet, gezählt zu werden:
'00^>
||
Hier ist ein ASCII-Schaf, das über einen Zaun springt:
'00^>
/\
++
Hier ist eine nach links, die bereits gezählt wurde:
<^00'
||
Die Herausforderung
Bei zwei eingegebenen Ganzzahlen n
und m
mit der n > 2
Beschreibung, wie viele Schafe insgesamt gezählt wurden und m > 0
wie viele Schafe bereits gezählt wurden, wird eine ASCII-Kunstdarstellung zum Zählen von Schafen zum Einschlafen ausgegeben.
Nun zur Wendung:
- Aufgrund der Größe der Ställe, in denen sich die Schafe befinden, kann die oberste Reihe nur maximal
10
Schafe aufnehmen, wobei die aktuell springenden Schafe nicht berücksichtigt werden, die sich ebenfalls immer in der obersten Reihe befinden müssen. - In den folgenden Reihen dürfen sich die Schafe nicht außerhalb ihrer jeweiligen Ställe befinden (in der zweiten Reihe können Sie nicht mehr Schafe links haben als in der ersten Reihe, und rechts auch nicht).
- Wenn es
11
mehr oder mehr Schafe gibt, muss die oberste Reihe10
plus die springenden Schafe enthalten. - Führende / nachfolgende Leerzeichen und Leerzeichen zwischen den Schafen spielen keine Rolle, solange:
- Zwischen Schafen besteht mindestens ein Leerzeichen
- Alle Zeichen sind entsprechend ausgerichtet.
Solange diese Regeln eingehalten werden, liegt die tatsächliche Anordnung der Schafe bei Ihrer Umsetzung.
Beispiele
Hier ist zum Beispiel n=3
und m=1
der einfachste Fall.
'00^>
'00^> /\ <^00'
|| ++ ||
Hier ist n=11
und m=6
, die meisten Schafe, die auf eine horizontale Linie passen können.
'00^>
'00^> '00^> '00^> '00^> /\ <^00' <^00' <^00' <^00' <^00' <^00'
|| || || || ++ || || || || || ||
Hier ist ein anderes Beispiel dafür, mit n=11
undm=1
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00'
|| || || || || || || || || ++ ||
Ein größeres Beispiel mit n=30
undm=12
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00'
|| || || || || || || || ++ || ||
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> <^00' <^00'
|| || || || || || || || || ||
'00^> <^00' <^00'
|| || ||
<^00' <^00'
|| ||
<^00' <^00'
|| ||
<^00' <^00'
|| ||
Hier ist ein Beispiel mit n=17
undm=2
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00'
|| || || || || || || || ++ || ||
'00^> '00^> '00^> '00^> '00^> '00^>
|| || || || || ||
Hier ist ein Beispiel mit n=19
undm=3
'00^>
'00^> '00^> '00^> '00^> '00^> '00^> '00^> /\ <^00' <^00' <^00'
|| || || || || || || ++ || || ||
'00^> '00^> '00^> '00^> '00^> '00^> '00^>
|| || || || || || ||
'00^>
||
Beachten Sie, dass dies alles Beispiele sind . Im letzten Fall können Sie auf der rechten Seite eine vertikale Reihe von Schafen erstellen, sodass die linke Seite stattdessen auf zwei Reihen passt. Oder vielleicht ein 2x2 Quadrat Schafe auf der rechten Seite, das auch die Schafe auf der linken Seite in zwei Reihen passen würde. Etc.
E / A und Regeln
- Die Eingabe kann in jedem vernünftigen Format und mit jeder geeigneten Methode erfolgen .
- Führende / nachfolgende Zeilenumbrüche oder andere Leerzeichen sind optional, sofern die Zeichen entsprechend ausgerichtet sind.
- Entweder ein vollständiges Programm oder eine Funktion sind akzeptabel. Wenn es sich um eine Funktion handelt, können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Die Ausgabe kann an die Konsole erfolgen, als Liste von Zeichenfolgen, als einzelne Zeichenfolge usw. zurückgegeben werden.
- Standardlücken sind verboten.
- Dies ist Code-Golf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Bytes) gewinnt.
n=11
undm=9
n=11
so dass0<m<=10
. Dies zwingt Sie dazu, alle Schafe in der obersten Reihe und eine dynamische Anzahl von Schafen links (n-1-m
) und rechts (m
) des Zauns zu haben, und kann keine festen Stiftgrößen verwenden.Antworten:
APL (Dyalog Unicode) , 118 Byte SBCS
Anonymes Infix Lambda. Nimmt
n
als linkes Argument undm
als rechtes Argument. Gibt ein verschachteltes Array-Ergebnis zurück, aber die Standardanzeige dieses verschachtelten Arrays folgt den Spezifikationen. Verwendet bis zu neun Spalten für gezählte Schafe und verbleibende Spalten für wartende Schafe.Probieren Sie es online aus!
{
…}
Anonymes Lambda;⍺
ist linkes Argument,⍵
ist rechtes ArgumentDiese Funktion besteht aus drei Teilen: Warten , Springen und Zählen . Jedes ist in Klammern gesetzt, sodass das Ergebnis eine Liste mit drei Elementen ist.
Zählte
(r⍴(×/r←9,⍨∘⌈⍵÷9)↑⍵⍴⊂S←⌽↑''(b←'''00^<')' ||')
''(
…)' ||'
Die drei Linien eines gespiegelten gezählten Schafs, wobei die mittlere lautet:b←'''00^<'
der Körper und ist zugeordnetb
↑
Mischen Sie die Liste der Zeichenfolgen in eine Zeichenmatrix (Auffüllen mit Leerzeichen).⌽
spiegeln das widerS←
zuweisenS
(großes S heep)⊂
Legen Sie es bei, damit wir es als Einheit behandeln können⍵⍴
Verwenden Sie die Anzahl der gezählten Schafe, um diese zyklisch umzugestalten(
…)↑
Nehmen Sie die folgende Anzahl von Elementen daraus (Auffüllen mit prototypischen Elementen, dh dasselbe Array, wobei jedoch alle Zeichen durch Leerzeichen ersetzt werden)⍵÷9
ein Neuntel der Anzahl der gezählten Schafe⌈
zusammenfassen9,⍨
füge 9 hinzur←
zuweisenr
(was wir wollen r eshape mit, Zeilen und Spalten)×/
Produkt dieser Liste (so viele Elemente benötigen wir, einschließlich Füllungen)r⍴
Formen Sie das zu einem Array mit den Bemaßungslängen umr
Springen
(↑(s←'>',⍨¯1↓b)' /\' ' ++')
(
…)' /\' ' ++'
Die drei Linien eines springenden Schafs, die erste ist:¯1↓b
Löschen Sie das letzte Zeichen vonb
'>',⍨
einen nach rechts gerichteten Kopf anhängens←
store ins
(kleinen s heep)↑
Mischen Sie die Liste der Zeichenfolgen in eine Zeichenmatrix (Auffüllen mit Leerzeichen).Warten
(r⍴(×/r←d,⍨⌈w÷d←10-⍵⌊⊢/r)↑w⍴(w←⍺-⍵+1)⍴⊂s@2⌽S)
⌽S
SpiegelS
s@2
setzts
in Zeile 2 , daß (die aktuellen Daten dort ersetzen)⊂
Legen Sie es bei, damit wir es als Einheit behandeln können(
… Das)⍴
zyklisch auf folgende Größe umformen:⍵+1
die Anzahl der gezählten Schafe plus eins⍺-
subtrahieren Sie das von der Summew←
zuweisenw
( w arte)(
…)↑
Nehmen Sie die folgende Anzahl von Elementen daraus (Polsterung mit prototypischen Elementen)⊢/r
das am weitesten rechts stehende Element vonr
(dh die Anzahl der verwendeten Spalten für gezählte Schafe)⍵⌊
das Minimum von total und das10-
subtrahieren Sie das von zehnd←
zuweisend
( d ifference; fehlende Spalten)w÷
w
durch das teilen⌈
aufrunden (gibt die Anzahl der benötigten Zeilen an)d,⍨
anhängend
r←
zuweisenr
(was wir wollen r eshape mit, Zeilen und Spalten)×/
Produkt dieser Liste (so viele Elemente benötigen wir, einschließlich Füllungen)r⍴
Formen Sie das zu einem Array mit den Bemaßungslängen umr
quelle
n=11,m=9
und die Regel "Die oberste Reihe muss 10 plus die springenden Schafe enthalten."?Javascript,
281,293, 288 BytesSeien Sie vorsichtig, wenn Sie das folgende Snippet verwenden. Es besteht ein hohes Risiko für plötzlich induzierte Narkolepsie.
quelle
m = n
Sie eine Fehlermeldung erhalten.C 392 Bytes
Vielen Dank an @Jonathan Frech für das Speichern eines Bytes!
Probieren Sie es online aus!
Abgerollt:
quelle
y+=1+!t
kann seiny-=~!t
.Python 2 ,
222277 BytesProbieren Sie es online aus!
quelle
n=11
undm=2
.AWK , 293 Bytes
Probieren Sie es online aus!
Ich habe versucht, Zeichenfolgenersetzungen zu verwenden, um einige Schleifen zu vermeiden, aber es wurde viel mehr Code benötigt.
Erläuterung
Ich muss sagen, dass die Schafkunst ziemlich süß ist. :) :)
quelle
Holzkohle , 98 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Geben Sie die Anzahl der Schafe ein, die bereits gezählt wurden.
Geben Sie die Gesamtzahl der Schafe ein und berechnen Sie, wie viele noch gezählt werden müssen.
Erstellen Sie ein Array mit zwei Arrays. Jedes Array enthält die folgenden Elemente:
Reflektiere die Leinwand und drucke das halb springende Schaf.
Schleife durch die Schafe auf dieser Seite.
Drucken Sie ein Schaf.
Wenn dies das Ende der Reihe ist, drucken Sie einige Zeilenumbrüche und Leerzeichen, um zum Anfang des nächsten Schafs zu gelangen.
quelle