Herausforderung:
Eingabe: Drei Ganzzahlen: Länge der Unterkante; Ausgangsmenge von Sandkörnern; Index
Ausgabe: Gibt den Zustand des unteren Teils einer Sanduhr am angegebenen Index aus, basierend auf der angegebenen Länge der Unterkante und der Menge der Sandkörner.
Herausforderungsregeln:
- Wir simulieren die Sandkörner mit den Ziffern 1-9
- Wir setzen die aktuell verbleibende Menge Sandkörner oben in die Mitte, gefolgt von einem einzelnen Zeichen Ihrer Wahl (ohne Ziffern, Leerzeichen und
-
Zeilenumbrüche ; dh ) in der Zeile darunter - Wenn die Sanduhr gefüllt wird, füllen wir sie zeilenweise, ziffernweise
- Wenn der Sand nach links oder rechts wandern kann, gehen wir IMMER nach rechts (das gleiche gilt für das Ausgleichen der verbleibenden Sandkörnermenge über der Sanduhr).
- Wenn wir 9 erreicht haben, ist es voll und wir können an dieser bestimmten Stelle in der Sanduhr keinen Sand mehr hineinpassen
- Die Menge der verbleibenden Sandkörner ist auch immer richtig ausgerichtet
- Sobald die untere Hälfte der Sanduhr vollständig gefüllt ist oder die verbleibende Menge an Sandkörnern 0 erreicht, können wir nicht weiter gehen, und dies wäre die Ausgabe für alle Indizes, die über diesen Punkt hinausgehen
- Sowohl 0-indiziert als auch 1-indiziert ist zulässig. Bitte geben Sie an, was Sie in Ihrer Antwort verwendet haben.
- Nachgestellte und führende Leerzeichen und eine einzelne nachgestellte oder führende neue Zeile sind optional
- Sie können anstelle einer Null ein beliebiges anderes Zeichen verwenden, um leere Stellen im unteren Teil der Sanduhr auszufüllen (mit Ausnahme von Ziffern, Zeilenumbrüchen oder dem Zeichen, das Sie als Hals verwendet haben), wenn Sie diese anzeigen möchten.
- Die Länge der Unterkante ist immer ungerade
- Die Länge der Unterkante beträgt
>= 3
; und die Mengen an Sandkörnern>= 0
- Wenn Sie möchten, können Sie auch alle Status bis einschließlich des angegebenen Index drucken
- Sie können davon ausgehen, dass der Index (mit dem Index 0) niemals größer ist als die Gesamtmenge der Sandkörner (wenn also 100 Sandkörner vorhanden sind, ist der Index 100 die maximal gültige Indexeingabe).
- Der erste Index (0 für 0-indexiert; 1 für 1-indexiert) gibt eine leere Sanduhr mit der Menge an Sandkörnern darüber aus.
Beispiel: Bilder (oder ASCII-Kunst) sagen mehr als tausend Worte. Hier ist ein Beispiel:
Länge der unteren Kante eingeben: 5
Menge der Sandkörner eingeben: 100
Anstelle eines aktuellen Index zeige ich hier alle Schritte an:
Ausgabe für alle möglichen Indizes mit Unterkantenlänge 5
und Sandkornmenge 100
:
100
-
0
000
00000
99
-
0
000
00100
98
-
0
000
00110
97
-
0
000
01110
96
-
0
000
01111
95
-
0
000
11111
94
-
0
000
11211
93
-
0
000
11221
92
-
0
000
12221
91
-
0
000
12222
90
-
0
000
22222
89
-
0
000
22322
88
-
0
000
22332
87
-
0
000
23332
86
-
0
000
23333
85
-
0
000
33333
84
-
0
000
33433
83
-
0
000
33443
82
-
0
000
34443
81
-
0
000
34444
80
-
0
000
44444
79
-
0
000
44544
78
-
0
000
44554
77
-
0
000
45554
76
-
0
000
45555
75
-
0
000
55555
74
-
0
000
55655
73
-
0
000
55665
72
-
0
000
56665
71
-
0
000
56666
70
-
0
000
66666
69
-
0
000
66766
68
-
0
000
66776
67
-
0
000
67776
66
-
0
000
67777
65
-
0
000
77777
64
-
0
000
77877
63
-
0
000
77887
62
-
0
000
78887
61
-
0
000
78888
60
-
0
000
88888
59
-
0
000
88988
58
-
0
000
88998
57
-
0
000
89998
56
-
0
000
89999
55
-
0
000
99999
54
-
0
010
99999
53
-
0
011
99999
52
-
0
111
99999
51
-
0
121
99999
50
-
0
122
99999
49
0
222
99999
48
-
0
232
99999
47
-
0
233
99999
46
-
0
333
99999
45
-
0
343
99999
44
-
0
344
99999
43
-
0
444
99999
42
-
0
454
99999
41
-
0
455
99999
40
-
0
555
99999
39
-
0
565
99999
38
-
0
566
99999
37
-
0
666
99999
36
-
0
676
99999
35
-
0
677
99999
34
-
0
777
99999
33
-
0
787
99999
32
-
0
788
99999
31
-
0
888
99999
30
-
0
898
99999
29
-
0
899
99999
28
-
0
999
99999
27
-
1
999
99999
26
-
2
999
99999
25
-
3
999
99999
24
-
4
999
99999
23
-
5
999
99999
22
-
6
999
99999
21
-
7
999
99999
20
-
8
999
99999
19
-
9
999
99999
Also als Beispiel:
inputs: 5,100,1
output:
99
-
0
000
00100
Same example with another valid output format:
99
~
.
...
..1..
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methode mit den richtigen Parametern und vollständige Programme verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
INPUTS: bottom-edge length, amount of grains of sand, index (0-indexed)
inputs: 5,100,1
output:
99
-
0
000
00100
inputs: 5,100,24
output:
76
-
0
000
45555
inputs: 5,100,100
output:
19
-
9
999
99999
inputs: 5,10,15
output:
0
-
0
000
22222
inputs: 3,30,20
output:
10
-
0
677
inputs: 3,3,0
3
-
0
000
inputs: 9,250,100
150
-
0
000
00000
2333332
999999999
inputs: 9,225,220
5
-
4
999
99999
9999999
999999999
inputs: 13,1234567890,250
1234567640
-
0
000
00000
0000000
344444443
99999999999
9999999999999
inputs: 25,25,25
0
-
0
000
00000
0000000
000000000
00000000000
0000000000000
000000000000000
00000000000000000
0000000000000000000
000000000000000000000
00000000000000000000000
1111111111111111111111111
5,100,10000
warum tut20+9+9+9+9+9+9+9+9+9 = 101
?Antworten:
05AB1E ,
6863595756 BytesProbieren Sie es online!
Erläuterung
IÅÉÅ9
Wir initialisieren den Stack mit einer Liste von Neunern.
Jede Liste stellt eine Zeile dar, sodass die Länge jeder Liste ungerade ist und die Länge der letzten Liste der ersten Eingabe entspricht.
Eine Eingabe von 5 würde ergeben
[[9], [9, 9, 9], [9, 9, 9, 9, 9]]
[DOO²Q#ćD_Piˆëć<¸«¸ì]
Wir iterieren dann über diese Listen und dekrementieren die Elemente in einer Liste, bis die Liste nur noch aus Nullen besteht. Dann fahren wir mit der nächsten Liste fort. Wir hören auf, wenn die Gesamtsumme der zweiten Eingabe entspricht.
Jetzt müssen wir die endgültige Liste aussortieren, indem wir das Entfernen von Elementen von wechselnden Seiten simulieren, anstatt wie bisher von links nach rechts.
Jetzt formatieren wir die Ausgabe richtig
quelle
Sauber ,
305289 BytesProbieren Sie es online!
quelle
Perl 5 , 301 Bytes
Probieren Sie es online!
quelle
Charcoal ,
686362 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 5 Bytes gespart, indem die jetzt nicht mehr benötigte Indexbereichsprüfung entfernt wurde. Erläuterung:
Geben Sie die Länge in
q
, die Anzahl der Sandkörner inh
und den Index in einz
.Führen Sie eine Schleife über die
(q+1)/2
Zeilen (von unten nach oben), dann 9 Körner in jeder Zelle in der Zeile und dann eine Schleife über die Ziffern in der Zeile.Zur Ziffer springen.
Verteilen Sie nach Möglichkeit ein Sandkorn auf diese Ziffer, und verringern Sie dabei die verbleibende Sandmenge und den verbleibenden Index. Wenn wir den Index übergeben haben, werden dabei immer noch Leerzeichen in Nullen umgewandelt, wodurch die Sanduhr gefüllt wird. Die Ziffer wird nach oben gedruckt, da sich der Cursor nach der letzten Ziffer am Hals befindet.
Drucken Sie den Hals.
Die verbleibende Sandmenge zentrieren und ausdrucken.
quelle