Manche Menschen zählen Schafe, um einzuschlafen. Andere zählen Ziegen.
Schreiben Sie ein Programm oder eine Funktion, die eine positive ganze Zahl N aufnimmt und N-1 wache Ziegen gefolgt von einer schlafenden Ziege ausgibt, als würde jemand N Ziegen zählen und beim letzten Mal sind sie eingeschlafen.
Wachziegen sehen so aus:
\
___/o>
-(___)"
'' ''
Schlafende Ziegen sehen so aus:
\
___/->
,(___)"
`` ``
Sie sind mit einem einzigen Zwischenraum zwischen Bart und Schwanz benachbarter Ziegen verkettet:
\ \ \
___/o> ___/o> ___/->
-(___)" -(___)" ,(___)"
'' '' '' '' `` ``
Die Ausgabe darf abschließende Leerzeichen und eine einzelne abschließende Newline enthalten.
Der kürzeste Code in Bytes gewinnt.
Beispiele
N = 1:
\
___/->
,(___)"
`` ``
N = 2:
\ \
___/o> ___/->
-(___)" ,(___)"
'' '' `` ``
N = 3:
\ \ \
___/o> ___/o> ___/->
-(___)" -(___)" ,(___)"
'' '' '' '' `` ``
N = 4:
\ \ \ \
___/o> ___/o> ___/o> ___/->
-(___)" -(___)" -(___)" ,(___)"
'' '' '' '' '' '' `` ``
Größere N sollten genauso gut funktionieren.
code-golf
string
ascii-art
kolmogorov-complexity
Calvins Hobbys
quelle
quelle
Antworten:
MATL ,
5653 BytesProbieren Sie es online!
Erläuterung
Wach auf, Ziege
Die wache Ziege kann in die Schnur gepackt werden
und ausgepackt, wie noch erläutert wird. Die Symbole mit einfachen Anführungszeichen müssten jedoch dupliziert werden, um sie zu umgehen. Daher müsste das Zeichenfolgenliteral definiert werden als (beachten Sie die einschließenden Symbole mit einfachen Anführungszeichen und die Duplizierung der ursprünglichen Symbole):
Um Bytes zu sparen, definieren wir die Zeichenfolge mit Zeichen, die einen Codepunkt darüber liegen , um Doppelungen zu vermeiden. Das String-Literal wird
Am Ende des Codes werden wir 1 subtrahieren und in char konvertieren. (Wir könnten es jetzt tun, direkt nach dem String-Literal; aber wenn wir es für das Ende belassen, sparen wir eine weitere Duplikation mit einfachen Anführungszeichen, wie wir sehen werden.)
Um zu erklären, wie die Zeichenfolge entpackt wird, arbeiten wir mit den Originalzeichen (die am Ende des Codes durch Untertakten von 1 erzeugt werden), damit die Erklärung leichter zu befolgen ist. Wir formen zuerst die Saite um
in ein 8-zeiliges 2D-Zeichen-Array in Spalten-Hauptreihenfolge (nach unten, dann quer). Dadurch wird die letzte Spalte automatisch mit char 0 aufgefüllt (am Ende des Codes wird 1 durch Subtrahieren in die Zahl −1 umgewandelt, was wiederum char 0 ergibt). Char 0 wird als Leerzeichen angezeigt. So effektiv füllen wir uns mit Leerzeichen. Das Ergebnis der Umformung ist
Wir kippen jetzt vertikal:
und dann transponieren und wieder vertikal drehen, um die wache Ziege zu produzieren:
Die beiden Flip-Operationen sind erforderlich, da die ursprüngliche gepackte Zeichenfolge "in umgekehrter Reihenfolge" vorliegt. Dies dient dazu, die Tatsache auszunutzen, dass das tatsächliche 2D-Zeichen-Array, das die Ziege darstellt, in seiner ersten Zeile 6 Anfangsräume aufweist, die automatisch durch Auffüllen gefüllt werden, wenn die Zeichenfolge in ein 8-zeiliges 2D-Array umgewandelt wird. Das Auffüllen erfolgt jedoch am Ende (nicht am Anfang) der letzten Spalte (nicht der Zeile), daher das Umdrehen und Transponieren.
Schlafende Ziege
Ein schlafender Ziege ist aus einer Wach Ziege durch Transliteration Zeichen erzeugt
o
,'
,-
in-
,`
,,
bzw.. Aufgrund der Ein-Code-Punkt-Über-Transformation transliterieren wir Zeichen in " ," , " ,"p
, "(
," , " ," , " ," , " ," , " ," , " ," , " ," , " ," , " ," , " ," , "." Aus diesem Grund wurde die Subtraktionsoperation für das Ende des Programms belassen.'
.
a
-
Code-Struktur
N
und arbeite mit um 1 erhöhten Codepunkten.Kommentierter Code
quelle
Python 3.6, 102 Bytes
Ja, F-Saiten !
quelle
Javascript, 122 Bytes
Antworten
Randnotiz
Im folgenden Code (91 Bytes) sind die Ziegen vertikal ausgerichtet. Es entspricht nicht dem Ausgabeformat, aber es könnte interessant sein, festzustellen, dass die im Ausgabeformat erforderliche horizontale Ausrichtung mehr Bytes benötigt:
quelle
Batch, 234 Bytes
Übernimmt die Eingabe von stdin. Batch hat Probleme mit
"
und>
aus verschiedenen Gründen, daher muss ich Platzhalter verwenden und sie am Ende austauschen.quelle
set/pn
ahnung werke ._.^
Fluchtzeichen.Pyke,
5654 BytesProbieren Sie es hier aus!
4 Bytes zu viel, weil Pyke keine doppelten Anführungszeichen in Strings zulässt :(
quelle
JavaScript (ES6),
110 bis109 ByteDie Unterstützung aller drei Arten von Anführungszeichen war ärgerlich, aber zum Glück ließ mich der Kommentar von @ pinkfloydx33 inspirieren, dass ich die Anführungszeichen am Ende hinzufügen und so 1 Byte sparen konnte.
quelle
'+"'' ''"
(nehmen einfache Anführungszeichen sind Zecken zurück , da ich keine Ahnung , wie haben in den Kommentaren ein Graviszeichen in einen Code - Block zu erhalten)f=
in meiner Byteanzahl nicht eingeschlossen , es ist nur der Vollständigkeit halber da.GolfScript , 91 Bytes
Eingang:
3
Ausgabe:
Erläuterung
Probieren Sie es online!
quelle
Jelly ,
6256 BytesTesten Sie es bei TryItOnline
Wie?
quelle
PHP, 200 Bytes
quelle
C ++, 180 Bytes
quelle
#include <string>
und entwederusing namespace std;
oderusing std::string;
in Ihrer Byteanzahl nicht einzuschließen, wenn Ihre Funktion nicht ohne sie kompiliert werden kann.Pip , 60 + 1 = 61 Bytes
Ein Byte für das
n
Flag hinzugefügt .Konstruiert eine wache Ziege als eine Liste von Linien und reißt sie hinein
y
. String-Multiplikatoren, uma-1
Ziegen zu wecken. Ersetzt-o'
durch,-`
iny
und verkettet es bis zum Ende. Ausdrucke, durch Zeilenvorschub getrennt.Probieren Sie es online!
(Ich denke, dies ist das erste Mal, dass ich Pip 'Escape-String-Syntax verwende
\"...\"
, die wörtliche doppelte Anführungszeichen in der Zeichenfolge zulässt.)quelle
CJam , 58 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2.7,
101113 BytesBearbeiten: Funktionsdefinition hinzugefügt
entschärft:
Hinweis Python2.7 ist ein Byte kürzer als Python3, da beim Drucken keine Klammerung erforderlich ist.
quelle
n
Sie müssen Eingaben erhalten und haben den Schwanzwechsel für die schlafende Ziege verpasst (haben Sie auch die Py 3.6-Antwort gesehen?).print "...
und alles in eine Zeile setzen, indem Sie;
die beiden Anweisungen durch eine 1 trennen. Das Heck ist immer noch nicht in dem angezeigten Code enthalten, aber es sieht so aus, als hätten Sie es gezählt. Das alles sollte 112 Bytes ergeben .05AB1E , 66 Bytes
Probieren Sie es online!
Erläuterung
quelle
Bash + GNU Coreutils,
165155 BytesLaufen mit:
Grundsätzlich gibt das Programm N - mal die gleichen Ziege (umgekehrt), und ersetzt die erste
-
, für,
die ersteo
für-
und die erste'' ''
für die Backticks. Dann kehrt man die Zeilen um.quelle
PHP,
133131 BytesIch fand zwei Bytes zum Golfen entfernt von einer der Versionen ohne Curlys.
quelle
PowerShell v2 +, 96 Byte
(ab) verwendet die Standardformatierung
Write-Output
, um eine neue Zeile zwischen Elementen einzufügen. Nutzt die Verkettung und Multiplikation von Zeichenfolgen, um die Ziegen zeilenweise zu konstruieren. Der einzige wirkliche Trick ist, dass die erste Zeile$n--
die richtige Anzahl von Ohren ausgibt und diese dann nachträglich dekrementiert,$n
damit sie für den Rest der Zeilen korrekt ist.quelle
Ruby, 102 Bytes
quelle
Python 3. 170 Bytes
hmm, anscheinend ergibt das Konstruieren der Zeichenkette ohne Listenmanipulation einen kürzeren Code
quelle
IBM / Lotus Notes Formula,
187174188 Bytes(nicht konkurrierend)BEARBEITEN Sie haben einen Bereich gefunden, der nicht vorhanden sein sollte, und haben einen nicht benötigten @Implode entfernt
188 da ich die Tatsache verpasst hatte, dass der Schwanz der schlafenden Ziege anders ist :-(
Ungolfed:
Verwendung:
Erstellen Sie ein Notes-Formular mit zwei Feldern mit den Namen a und g.
a = editierbar, Nummer, g = berechnet, Text.
Fügen Sie die obige Formel in g ein und geben Sie einen Standardwert von 0 an.
Setzen Sie die Formularschriftart auf Terminal.
Erstellen Sie ein neues Dokument mit dem Formular, geben Sie eine Nummer in a ein und drücken Sie F9, um die Ziegen zu aktualisieren.
Proben:
Nicht konkurrieren, da das Format durcheinander kommt, wenn die Anzahl der Ziegen die Breite der Seite erreicht.Einen unendlich breiten Bildschirm gegeben es
solltefür eine beliebige Anzahl von Ziegen funktioniertallerdings. So sieht es aus, wenn die Seite nicht breit genug ist.quelle
Emacs Lisp, 241 Bytes
"Etwas ungolfed"
Wo
s
ist eine schlafende Ziege,a
fügt eine wache Ziege hinzu undg(n)
ist die Zählfunktion.quelle
Java 8,
236222218173 BytesErläuterung:
Probieren Sie es online aus.
quelle
Canvas , 58 Byte
Probieren Sie es online!
Ziemlich langweilige Antwort, wirklich ... baut die Wachziege, wiederholt sie horizontal
n-1
, baut und fügt die schlafende Ziege hinzu, druckt das Ergebnis.quelle