Verwenden Sie eine beliebige Programmiersprache, um Zahlen zwischen 1 und 99 (einschließlich beider) so anzuzeigen, dass:
- Die Zahlen sind durch ein einzelnes Leerzeichen getrennt.
- Wenn eine Zahl durch 3 teilbar ist, sollte sie in Klammern stehen.
- Wenn eine Zahl durch 4 teilbar ist, sollte sie in eckigen Klammern stehen.
- Wenn eine Zahl sowohl durch 3 als auch durch 4 teilbar ist, sollte sie sowohl in Klammern als auch in eckigen Klammern angegeben werden (wobei eckige Klammern näher an der Zahl stehen).
Ihr Programm sollte genau anzeigen:
1 2 (3) [4] 5 (6) 7 [8] (9) 10 11 ([12]) 13 14 (15) [16] 17 (18) 19 [20] (21) 22 23 ([24]) 25 26 (27) [28] 29 (30) 31 [32] (33) 34 35 ([36]) 37 38 (39) [40] 41 (42) 43 [44] (45) 46 47 ([48]) 49 50 (51) [52] 53 (54) 55 [56] (57) 58 59 ([60]) 61 62 (63) [64] 65 (66) 67 [68] (69) 70 71 ([72]) 73 74 (75) [76] 77 (78) 79 [80] (81) 82 83 ([84]) 85 86 (87) [88] 89 (90) 91 [92] (93) 94 95 ([96]) 97 98 (99)
code-golf
kolmogorov-complexity
Monolica
quelle
quelle
Antworten:
05AB1E , 23 Bytes
-1 Byte dank Kevin Cruijssen
Probieren Sie es online!
quelle
}?ð?
in]ðý
(schließen Sie sowohl die if als auch die Schleife und verbinden Sie den gesamten Stapel durch Leerzeichen)Å€
Python 2 ,
686560 BytesProbieren Sie es online!
quelle
R , 61 Bytes
Probieren Sie es online!
quelle
Jelly ,
21 bis20 BytesProbieren Sie es online!
Wie es funktioniert
quelle
D , 110 Bytes
Probieren Sie es online!
Portiert von der C ++ - Antwort von @ HatsuPointerKun.
quelle
Kohle , 30 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
J ,
5453 Bytes1 Byte weniger dank @Jonah
Probieren Sie es online!
quelle
stdout
hier tun ? Das habe ich noch nie gesehen. @ FrownyFrog#
. Ich hatte ein Hilfsverb umgebend mit eingeführt()
und[]
:g=. {.@[ , ":@] , {:@[
. ugh die Ausführlichkeit!LF
anstelle von benutzt hast_
. Letzteres scheint auch zu funktionieren.C, C ++,
136133131129128124 Bytes-5 Bytes dank Zacharý und inspiriert durch write () - Funktion in D-Sprache (siehe Zacharý-Antwort)
-2 Bytes dank mriklojn
-12 Bytes für die C-Version dank mriklojn
-4 Bytes dank Ceilingcat
C Spezifische Optimierung: 115 Bytes
quelle
inf f()
Ding machen? Entschuldigen Sie das Löschen meiner Kommentare, ich dachte, ich hätte etwasprintf
war eine Sache. Könnten Sie das C stdio dann nicht benutzen?int i
die Funktion als außerhalb deklarieren (im globalen Bereich), ist ihr Wert standardmäßig 0 und ihr Datentyp standardmäßig 0int
. Dies würde dazu führen, dass Ihre Schleife bei 0 beginnt.i;f(){for(;++i<=99;)
")\0"+i%3
statti%3?"":")"
. Außerdem denke ich, dass Siei=0
am Anfang der Schleife hinzufügen müssen .Powershell, 60 Bytes
Erläuterung:
$_, "($_)", "[$_]", "([$_])"
[!($_%3)+2*!($_%4)]
Weniger Golf-Testskript:
Ausgabe:
quelle
MathGolf ,
41403429 BytesHINWEIS: Es ist ein Leerzeichen vorhanden
Nur meine zweite MathGolf Antwort ..
-5 Bytes dank @JoKing .
Probieren Sie es online aus.
Erläuterung:
quelle
q
weggelassen werden kann und es wird implizit in Schleifen ausgeführt. Wusste auch nicht, dass eine 2/3/4 Saite eingebaut ist. Schade, dass der Drehtrick mit dem umschlossenen Array nicht funktioniert.Haskell , 77 Bytes
Probieren Sie es online!
Ich frage mich, ob
show[n]
man es nutzen kann, um Dinge zu verkürzen, bis jetzt ohne Erfolg .quelle
Lua,
161123 BytesProbieren Sie es online!
Ungolfed:
quelle
Python 2 ,
1059788868584 BytesProbieren Sie es online!
quelle
C (gcc) 84 Bytes
Am Anfang jeder "Klammerzeichenfolge" steht ein Nullbyte.
Probieren Sie es online!
quelle
PowerShell ,
6762 BytesProbieren Sie es online!
Grundsätzlich ein FizzBuzz mit String-Multiplikationszeiten Boolescher Variablen (implizit auf 1 oder 0 umgewandelt). Diese Zeichenfolgen verbleiben in der Pipeline und werden in Anführungszeichen in einem Skriptblock zusammengefasst. Da die Standardeinstellung
$OutputFieldSeparator
für ein Array Leerzeichen ist, erhalten wir implizit durch Leerzeichen getrennte Array-Elemente.quelle
C #,
124117123 Bytes-5 Bytes dank Kevin Cruijssen
Testen Sie mit:
quelle
x
stattdessen verwendeni
, um sich keine Sorgen über das zu machenint
? (Sie müssten es natürlich noch einstellen).i
und die Tatsache, dass ich es bei 0 initialisieren kann, wenn ichInvoke
. Aber würde das nicht bedeuten, dass ich die Deklaration von t (Action<int>
) und den Aufruf (t.Invoke(0)
) in das bytecount aufnehmen müsste?x=>{for(x=0;x++<99;)Console.Write((x%3==0?"(":"")+(x%4==0?"[":"")+x+(x%4==0?"]":"")+(x%3==0?")":"")+(x%99==0?"":" "));};
funktionieren würde.==0
können sein<1
.Rot ,
99 bis97 BytesProbieren Sie es online!
quelle
Ruby ,
7266 BytesDanke an @ jonathan-frech und @ conor-obrien für den zusätzlichen Zuschnitt.
quelle
a.join b
für eine Reihea
und Zeichenfolgeb
entsprichta*b
PowerShell,
988274676362 ByteSatte -31 Bytes dank @Veskah -5 Bytes dank @ ASCII-only
Probieren Sie es online!
Ich bin mir immer noch nicht ganz sicher, was ich hier gemacht habe.
quelle
"$a"
ersetzen den Wert trotzdem. (Hinweis: Einfache Anführungszeichen ersetzen nicht$foo
, nur doppelte Anführungszeichen). Ein weiterer Trick ist, wenn es nur um 0 oder 1 geht, sodass Sie mit Boolescher Logik ein Byte speichern könnenPerl -E, 60 Bytes
Einige Bytes können gespeichert werden, wenn wir Zeilenumbrüche zwischen den Zahlen verwenden können. In diesem Fall können wir das entfernen
$,=$";
, dasmap
in einefor
Schleife umwandeln und dassay
in die Schleife verschieben.quelle
/^1$|^(11+?)\1+$/
?Perl 6 ,
5148 BytesProbieren Sie es online!
quelle
Batch, 145 Bytes
Der Code fällt in die Unterroutine, aber die Zeichenfolge wurde zu diesem Zeitpunkt bereits gedruckt, sodass der Code harmlos ausgeführt wird.
quelle
PHP 103
for(;$i<1e2;$i++)$a.=$i%12==0?"([$i]) ":($i%3==0?"($i) ":($i%4==0?"[$i] ":"$i "));echo substr($a,5,-1);
https://www.ideone.com/SBAuWp
quelle
Sauber , 100 Bytes
Probieren Sie es online!
quelle
sfk , 225 bytes
Probieren Sie es online!
quelle
Bash, 61 Bytes
-14 Bytes, danke an Dennis
Erläuterung
Ziemlich einfach:
seq
produziert 1..99awk
mit dem Output Record Separator (ORS
) ein, der auf Leerzeichen gesetzt ist, so dass die Ausgabe eine einzelne Zeile ist.Probieren Sie es online!
quelle
JavaScript (Node.js) , 57 Byte
Probieren Sie es online!
Wurde in Community geändert, da die Optimierung zu stark davon abhängt
quelle
${n%4?n:`[${n}]`}
PHP, 65 Bytes
oder
(benötigt PHP 5.5 oder neuer)
Laufen Sie mit
-nr
oder versuchen Sie es online .quelle
Python 2 , 78 Bytes
Probieren Sie es online!
Ich habe mir diesen coolen Ansatz vorgestellt,
'([%0d])'
aber ich kann die Ausdrücke nicht kürzer fassen.quelle
Java 8,
9291 Bytes-1 Byte danke an @Dana
i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}
Probieren Sie es online!
Alternative Lösung, 82 Byte (mit nachfolgendem Speicherplatz in der Ausgabe - nicht sicher, ob dies zulässig ist):
i->{for(;i++<99;)out.printf((i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)+" ",i);}
Erläuterung:
for(;i++<99;)
- eine for-Schleife, die vom Wert von gehti
(in diesem Fall 0) bis 99 reichtout.printf(<part1>+<part2>,i);
- formatiert den String, bevor er sofort mit dem Wert von stdout gedruckt wirdi
wo
<part1>
ist(i>1?" ":"")
- druckt das Leerzeichen aus, bevor die Nummer gedruckt wird, sofern nicht , diese Zahl ist 1. In diesem Fall wird das Leerzeichen weggelassenund
<part2>
ist(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)
- wenni
durch 3 und 4 teilbar ist,i
sind eckige und runde Klammern um ihn herum; sonst wenni
durch 3 teilbar,i
hat runde Klammern; sonst wenni
durch 4 teilbar,i
hat eckige Klammern; sonsti
hat keine Klammern.quelle
(i>1:" ":"")
i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}
?