Ich dachte, ein "Bogen" wäre der beste Weg, um dieses Zahlenmuster zu beschreiben:
1234567887654321
1234567 7654321
123456 654321
12345 54321
1234 4321
123 321
12 21
1 1
Formal definiert besteht jede Zeile aus den Nummern 1 bis 9-n
, (n-1)*2
Leerzeichen und den Nummern 9-n
bis 1 (wobei n
die aktuelle Zeile ist).
Ihre Aufgabe ist es, mit dem kürzestmöglichen Code ein kleines Skript / Programm zu schreiben, das das obige Muster mit den folgenden Einschränkungen druckt:
- Sie können möglicherweise nicht das gesamte Muster fest codieren. Sie dürfen höchstens eine einzelne Zeile des Musters fest codieren.
- Ihr Programm muss am Ende jeder Zeile eine neue Zeile (eine beliebige Kombination von
\n
oder\r
) ausgeben .
Achtung, fertig, los!
code-golf
ascii-art
number
kolmogorov-complexity
Nathan Osman
quelle
quelle
123456787654321
wie es entspricht11111111^2
;-)11111111^2 == 123465787654321 != 1234567887654321
( Beachten Sie die wiederholte8
)Antworten:
Python 2,
65555351Verkürzt mit einigen von Ugorens Ideen.
quelle
s=s[1:]
pro Schleife undwhile s:
GolfScript (25 Zeichen)
quelle
APL (18)
Erläuterung:
1↓⎕D
: Die Ziffernfolge ("0123456789") abzüglich des ersten Elements↑∘(1↓⎕D)¨⌽⍳8
: Wählen Sie die ersten [8..1] Zeichen aus ('12345678', '1234567' ...)↑
: Format als Matrix (Füllen der nicht verwendeten Zeichen mit Leerzeichen)k,⌽k←
: Speichern ink
und Anzeigenk
gefolgt von der vertikalen Spiegelung vonk
quelle
Ruby:
6150 ZeichenProbelauf:
quelle
Befunge - 3 x 18 = 54
Ich hatte das Gefühl, ich musste etwas mit befunge tun, es ist zu lange her, seit ich es das letzte Mal benutzt habe. Dieses Problem schien der Sprache am ehesten zu entsprechen.
Es ist furchtbar langsam, da in der Druckschleife pro Zeichen etwa 8 Aktionen ausgeführt werden (die Zählweisen unterscheiden sich).
quelle
JavaScript, 71
quelle
s="1234567887654321";for(i=10;--i;)console.log(s=s.split(i).join(" "))
für 70 Zeichen, @SteveWorleyC 83 Zeichen
quelle
Python 2,
7562Es wird die Antwort von Volatility nicht übertreffen, aber hier ist ein anderer Ansatz, bei dem Pythons veränderbare Zeichenfolgen (
bytearray
) verwendet werden:Bearbeiten
Ich habe eine kürzere Version gefunden, mit
str.replace
:quelle
Perl, 41
Plus-
-E
Schalter. Gesamtanzahl der Zeichen in der Befehlszeile: 50benötigt mindestens perl5, version 10.
quelle
-E
eine Ein-Byte-Erweiterung des Programms ist.Mathematica
92 85 67 5451Methode Nr. 1 : (54 Zeichen) Erstellt ein Array unter Verwendung von Zeile Nr., Spalte Nr. Und Abstand vom linken und rechten Rand.
Methode 2 : (67 Zeichen) Füllen Sie immer kürzere Bereiche auf.
Methode 3 : (85 Zeichen) Füllen Sie selektiv jede Zeile eines Arrays.
Beginnen Sie mit einer Liste von 8 Leerzeichen. Ersetzen Sie die Positionen 1 und 16 durch "1"; Ersetzen Sie "2" an den Positionen 2 und 15 usw.
Methode 4 : (86 Zeichen) Leeren Sie selektiv jede Zeile eines Arrays.
Methode 5 : Verwenden von Zeichenfolgen (92 Zeichen)
quelle
()
und ersetzen#1
durch#
:Grid@Array[If[#2<9,#2,17-#2]/.x_/;x+#>9:>" "&,{8,16}]
Array
manchmal lassen sich schöne Tabellen erstellen, ohne dass Iteratoren hinzugefügt werden müssen.PHP, 68
(Inspiriert von HamZas Antwort)
for($n=8;$n;$r[]=$n--)echo str_replace($r," ","1234567887654321\n");
Spielt man die Tatsache ab, dass PHPs str_replace ein Array für die Suche und einen String für das Ersetzen akzeptieren kann, wird jedes Element im Array durch den angegebenen String ersetzt. Nach jeder Iteration wird die aktuelle Nummer zum Suchfeld hinzugefügt und aus der nächsten Schleife entfernt.
Beispiel für den Code in Aktion: http://ideone.com/9wVr0X
quelle
<pre>
Tags eingeschlossen war. Bei der Interpretation als HTML-Text werden die Leerzeichen reduziert und die Zeilenumbrüche ignoriert. Wenn Sie jedoch die Quelle überprüfen, sehen Sie etwas anderes.Marbelous 165
Pseudocode:
quelle
Python 2.x -
73656361 Zeichenquelle
PHP, 76
quelle
K 28
.
Sie könnten es für 36 verallgemeinern:
{-1_a,'|:'a:(#*m)$'m:{-1_x}\,/$1+!x}
quelle
Javascript, 67 Zeichen
Begeistert von Steveworleys Antwort (Ich würde es kommentieren, wenn ich könnte):
Code-Auszug
Das Vorhandensein der letzten Zeile folgt den Regeln.
Update: Schneiden Sie 2 Zeichen durch Entfernen von Klammern (Operator-Rangfolge) und 1 durch Entfernen eines nicht benötigten Leerzeichens
Es schien, als würde es mich belästigen, denn egal wie viele verschiedene Arten ich versuchte, durch un-hardcoding eines Codesegments zu verkürzen oder zu vereinfachen, die Länge blieb gleich, bis ich die unten aufgeführte Regel "Ich denke, dies zählt" anwenden ließ.
(Wenn das Drucken als das zählt, was zurückkommt, wenn dies in der Chrome-Konsole ausgeführt wird)
quelle
Brainfuck: 542 Bytes
quelle
Mathematica , 59
61 mit meinen eigenen Ideen:
Oder 59, entlehnt von Davids Antwort:
quelle
R: 52
quelle
Haskell, 84
Ein Ansatzpunkt für jemanden, der sich verbessern möchte:
Am wahrscheinlichsten wäre es, den
l++reverse l
Punkt frei zu machen und uns dielet
-Anweisung loswerden zu lassen, aber ich werde feststellen können, dass warap
, was Importe erfordert.quelle
PostScript: 105 Zeichen
Die Handhabung von Strings ist in PS nicht einfach, kann aber zu relativ einfachem Code führen:
Eine etwas längere Version mit 120 Zeichen kann jedoch unterschiedliche Zahlenbögen erzeugen, indem die 8 am Anfang der zweiten Zeile durch eine beliebige Zahl im Bereich von 1 bis 9 ersetzt wird:
quelle
GoRuby 2.1
36 Zeichen
Ungolfed
quelle
K 20
quelle
TSQL, 148
Edit: auf 148 mit dem Vorschlag von manatwork und dem Ändern von ORDER BY.
Lesbar:
Golf gespielt:
Ausgabe:
quelle
1
anstelle von Zeichenfolgen verwenden,'1'
in die Sie sie sofortcast
einfügenvarchar
. Das gibt mir 149 Zeichen:with t as(select 1n,cast(1as varchar(max))o union all select n+1,o+char(n+49)from t where n<8)select o+space(16-2*n)+reverse(o)from t order by o desc
.Haskell, 79
Dies funktioniert, indem Zeichen> n durch ersetzt werden
' '
, wobei Zeichen n aus "87654321" stammen (was zufällig das Ende der Zeichenfolge ist, an der die Ersetzung durchgeführt werden soll).quelle
PHP: 61 Zeichen (oder 60 Zeichen, wenn Sie \ n durch eine echte ASCII-Zeile ersetzen)
(Inspiriert von der Antwort von GigaWatt und HamZa)
http://ideone.com/FV1NXu
quelle
PowerShell: 38
Golf Code
Komplettlösung
8..1|%{
...}
Pipe-Ganzzahlen von 8 bis 1 in eine ForEach-Object-Schleife.-join(
...)
fügt die Ausgabe des verschachtelten Codes zu einer einzigen Zeichenfolge ohne Begrenzer zusammen.1..$_
gibt ganze Zahlen aus, die von 1 auf die aktuelle ganze Zahl in der Schleife aufsteigen.+" "*(8-$_)
Fügt der Ausgabe ein Doppel-Leerzeichen hinzu, multipliziert mit der Differenz zwischen 8 und der aktuellen Ganzzahl.+$_..1
Fügt der Ausgabe Ganzzahlen hinzu, die von der aktuellen Ganzzahl auf 1 absteigen.quelle
Javascript mit Lambdas, 147
Kann in Firefox überprüft werden.
quelle
CJam, 22 Zeichen
Keine gültige Antwort (da die Sprache nach der Frage entwickelt wurde) und auch nicht die kürzeste, aber hier geht es weiter:
Probieren Sie es hier online aus
quelle
Lua, 62
quelle