Schreiben Sie mit den wenigsten Unicode-Zeichen eine Funktion, die drei Parameter akzeptiert:
- Gesamtzahl der Dominosteine
n
th Domino betroffen- Kipprichtung des betroffenen Dominos (
0
oderL
für links1
oderR
für rechts)
Sobald ein Domino gestürzt ist, muss er auch die verbleibenden Dominosteine in die gleiche Richtung stürzen.
Sie sollten die Dominosteine mit |
einem stehenden Dominostein und \
und ausgeben/
repräsentiert einen Domino nach links gekippt bzw. rechts.
Beispiele
10, 5, 1
sollte zurückkehren ||||//////
6, 3, 0
sollte zurückkehren\\\|||
if(third_parameter)
anstelle vonif(third_paramter=='l')
Antworten:
Ruby, 38 (46) Zeichen
Diese Funktion nimmt die Richtung als Ganzzahl (
1
für rechts,0
für links). Eine Funktion, die eine Zeichenfolge benötigt, ist 8 Zeichen länger:Anwendungsbeispiele:
quelle
Haskell, 70
Angenommen, es gibt eine Typrichtung , die die Konstruktoren R und L hat .
quelle
J -
3226 charJ kann nicht mehr als zwei Argumente verarbeiten, ohne eine Liste zu verwenden, und es kann keine inhomogenen Listen verarbeiten, ohne zu boxen. Daher ist es ideal, die Eingabe als Liste mit drei ganzen Zahlen zu haben. Die Parameterreihenfolge ist die Umkehrung der Standardreihenfolge: 0 für links oder 1 für rechts, Position und Gesamtzahl der Dominosteine. Der Grund dafür ist, dass J sie von rechts nach links durchläuft.
Hier ist was los ist.
F`G/
Auf eine Liste angewendetx,y,z
wird ausgewertetx F (y G z)
.y G z
die Dominosteine konstruiert beiden Möglichkeiten haben gestürzt könnten, und dannF
Verwendungenx
wählt , welche der beiden verwendet werden soll.Unten finden Sie ein Hin und Her mit dem J REPL, das erklärt, wie die Funktion zusammengesetzt ist: Eingezogene Zeilen werden in den REPL eingegeben, und die Antworten schließen mit dem linken Rand ab. Denken Sie daran, dass J ausschließlich von rechts nach links bewertet, es sei denn, es gibt Parens:
Auf Kosten einiger Zeichen können wir die Bestellung zur Standardbestellung machen: Fügen Sie einfach
@|.
das Ende der Funktion an:Die Anpassung an ein String-Argument für die Richtung wäre jedoch sehr viel kostspieliger.
quelle
/
wie Sie zwei Ausgänge erstellen und den gewünschten auswählen. Ich glaube, mir fehlt die Anerkennung, die es verdient.PowerShell, 66
Wahrscheinlich die gleiche Idee, die jeder andere hatte.
quelle
Golfscript (44
53)Mein erstes Golfscript-Programm. Ich habe viel länger gebraucht, als es hätte sein sollen, und es kann wahrscheinlich intelligenter und prägnanter gemacht werden (ich bin mir sicher, dass jemand das beweisen wird :)):
Eine Beispieleingabe ist
10 5 0
.Ungolfed:
quelle
d
um zu sein0
/1
statt'l'
/'r'
die Ihnen etwas kürzeren Code gibt. Andernfallsd'l'=
kann oyu , wenn Sie in einer Variablen speichern , diese anstelle des zweiten Vergleichs mit verwendend
. Im Begriff könnenx i j
Sie beide Leerzeichen speichern, wenn Sie anstelle von einen nicht alphanumerischen Variablennamen verwendeni
.'l'
/ gewählt,'r'
weil ich damals noch nicht gesehen habe, dass wir ganze Zahlen verwenden können. Der nicht-alphanumerische Trick ist clever, danke! Vielleicht aktualisiere ich die Antwort später.GolfScript,
2823 ZeichenArgumente auf dem Stapel, versuchen Sie es online :
quelle
Python - 45
52Dies erfordert
1
für rechts und0
für links.Hier ist eine Version , die nimmt
r
undl
richtig, bei 58 :Einige Anwendungsbeispiele ...
quelle
JS (ES6) -
7974726562danke an @nderscore!
Der 3. Parameter ist ein Boolescher Wert (0: links / 1: rechts)
quelle
d=(a,b,c)=>"\\"[r="repeat"](!c&&a-b+1)+"|"[r](--b)+"/"[r](c&&a-b)
[r='repeat'][r]
15 Zeichen..repeat.repeat
14 ZeichenPython2 / 3 - 54
Der letzte Zusatz zur Regel war ganz nett (die 0/1 anstelle von 'l' / 'r'). Meins tatsächlich kleiner gemacht als die vorhandene Python-Lösung. 0 ist links, 1 ist rechts
quelle
Haskell , 42 Bytes
Probieren Sie es online!
Nimmt Eingaben wie
(%) n k b
fürn
Dominosteinek
entgegenb
.Findet das Zeichen an jeder Position
c
von1
bisn
unter Verwendung eines arithmetischen Ausdrucks, um den Zeichenindex 0, 1 oder 2 zu berechnen.Testfälle von hier genommen .
Haskell , 44 Bytes
Probieren Sie es online!
Eine interessante Strategie, die etwas länger gedauert hat. Erzeugt die Zeichenfolge
"\\|/"<*[1..n]
mitn
aufeinanderfolgenden Kopien jedes Symbols und nimmt dann ein Stückn
zusammenhängender Zeichen, wobei die Startposition arithmetisch bestimmt wird.quelle
Python 2.7,
68 65 61 5958 ZeichenVerwenden
d=1
für links undd=0
rechtsHinweis: Vielen Dank an @TheRare für das weitere Golfen.
quelle
d and'\\'...or'/'...
?('\\'...,'/'...)[d]
f=lambda a,p,d:('|'*(p-1)+'/'*(a-p+1),'\\'*p+'|'*(a-p))[d]
Also, I don't think your code works when falling left.
Könnten Sie einen Testfall beweisen?Javascript, 46 Zeichen
Scheint zu schummeln, um 0 = 1 und 1 = r zu tun, aber es gibt. Schrumpfe es mit einer kleinen Rekursion.
edit: habe einen offensichtlichen Charakter verpasst
quelle
JavaScript (ES6) 61
63Bearbeiten Es war eine Schande für mich.
Nicht so verschieden von @xem, aber ich fand es selbst und es ist kürzer. Parameter d ist 0/1 für links / rechts
In der Firefox-Konsole testen
Ausgabe
quelle
--p
?Perl,
6765 ZeichenWeisen Sie die ersten drei Parameter zu (Summe, Position, Richtung als Ganzzahl [0 links, 1 rechts]). Extras gehen in den Äther. Subtrahiere 1 von der Position, wenn wir nach rechts gehen, damit auch der Domino in Position X gedreht wird.
quelle
$p--if$d
durch$p-=$d
, um zwei Zeichen zu verlieren :)Haskell , 57 Bytes
Dank diesem Tipp werden 4 Bytes gespart
Probieren Sie es online!
Haskell ,
69616058 BytesProbieren Sie es online!
Keine sehr komplexe Antwort, aber sie übertrifft beide vorhandenen Haskell-Antworten.
quelle
R ,
75686157 BytesEine anonyme Funktion. Ich werde eine ausführlichere Erklärung posten, wenn Interesse besteht.
Probieren Sie es online!
quelle
Haskell , 51 Bytes
a
= Anzahl der Dominosteine,b
= 1-basierter Index des berührten,c
= Richtung (0
ist links und1
ist rechts).Probieren Sie es online!
quelle
(a#b)c= ...
.PHP - 64
Eine einfache Schleife, die den Charakter wiedergibt.
Generiert eine
Notice: Undefined variable: i
, hier ist eine andere Version, die den Fehler unterdrückt (65 Zeichen):Und eine fehlerfreie Version (69 Zeichen):
Andere Funktionen in PHP:
sprintf
/printf
PolsterungAuffüllen über
str_pad
/str_repeat
Funktionenmit beiden
printf
undstr_repeat
Funktionenquelle
Scala 75 Zeichen
quelle
CJam - 20
Der Hauptcode befindet sich in der zweiten Zeile, die erste Zeile dient nur zum Abrufen der Parameter von der Standardeingabe (ansonsten müssen Sie die Parameter in den Code eingeben).
Versuchen Sie es unter http://cjam.aditsu.net/
Beispiele:
Erläuterung:
:X
speichert die letzten Parameter (0/1 Richtung) in die Variable X-
subtrahiert X aus der Abschlagstellung, die Länge der ersten Folge von Zeichen zu erhalten (nennen wir sie L)_
macht eine Kopie von L"\|"X=
den Charakter bekommt zuerst zu verwenden:\
für X = 0 und|
für X = 1 wird*
die Zeichenfolge L-malo
ausgedruckt. Wenn Sie diese Zeichenfolge aus dem Stapel entfernen, wird-
L von der Anzahl der Dominosteine subtrahiert, und die Länge der zweiten Zeichenfolge (nennen wir sie R)"|/"X=
wird ermittelt, zu der das Zeichen gehört Verwenden Sie next:|
für X = 0 und/
für X = 1 wird*
dieses Zeichen R-mal wiederholtquelle
Common Lisp
Dies wird in einem Codegolf nicht gewinnen, unterstreicht jedoch die Rechtfertigungsformatrichtlinie von Common Lisp:
Die Arithmetik ist nicht schlecht:
n
ist die Gesamtzahl der Dominosteine;p
ist die Position des ersten umgestürzten Dominos;d
ist entweder0
oder1
und repräsentiert links und rechts (wie in den Kommentaren erlaubt) und wird als Index für verwendetx
;x
ist eine Reihe von\
,|
, und/
. Die Formatzeichenfolge verwendet zwei (verschachtelte) Ausrichtungsanweisungen, von denen jede ein Füllzeichen zulässt. Somit:quelle
PHP, 89 Zeichen
Nur weil ich PHP liebe.
BEARBEITEN: Der folgende Code macht das gleiche.
quelle
($i+1>$p)
. 2) Umschreiben Ihres ternären Ausdrucks, um$d?($i+1<$p?'|':'/'):$i+1>$p?'|':'\\'
weitere 3 Bytes zu sparen. Oder einfach entfernen==0
und Richtungen umkehren. 3) Mit können$i++<$a
Sie$i++
die Post-Bedingung entfernen und$i
anstelle von$i+1
(-6 Bytes) verwenden. 4)$i=0
ist nicht notwendig; Sie müssen jedoch Benachrichtigungen unterdrücken (Option--n
), wenn Sie sie entfernen (-4 Byte).J ,
23 2119 BytesProbieren Sie es online!
Die Eingabe ist eine Liste von Ganzzahlen in der Standardreihenfolge.
quelle
05AB1E , 19 Bytes
Ich habe immer noch das Gefühl, dass es ein bisschen lang ist, aber es funktioniert. Und besser als die ursprüngliche 23-Byte-Lösung, die ich mit der if-else-Konstruktion hatte, die ich schnell fallen ließ.
Die Eingabereihenfolge ist dieselbe wie bei der Challenge: Gesamtlänge, Index,
1
/0
für links / rechts.Probieren Sie es online aus oder überprüfen Sie beide Testfälle .
Erläuterung:
quelle
C ++ 181
quelle
return 0
ausmain
.C(n)>>k>>p
wäre kurzgeschlossen alsC(n)C(k)C(p)
wäre es nicht? Und wenn das Define für P () das Argument stringifizieren könnte, würde das dann nicht Zeichen für alle Anführungszeichen speichern? Und wenn Sie p mit 'l' und 'r' vergleichen: 0 und 1 wären kürzer - insbesondere> 0 anstelle von == 'r' und <1 anstelle von == 'l' (vorausgesetzt, Sie sind in Ordnung, wenn Sie Zahlen anstelle von verwenden r / l - wenn nicht <'r' ist immer noch kürzer als == 'l' und> 'l' ist immer noch kürzer als == 'r')PHP -
105,97, 96Beispielergebnisse:
quelle
Javascript,
8185 ZeichenDas erste Mal versucht Codegolf, hat Spaß gemacht, danke :)
quelle
JavaScript - 85 Zeichen
1 = Links, 0 = Rechts
quelle
Clojure, 81 Zeichen
quelle
vb.net (~ 75c)
quelle