Dies ist ein Problem von NCPC 2005 . Roy hat eine Wohnung mit nur einer Steckdose, aber er hat ein paar Steckdosenleisten. Berechnen Sie mit den vorhandenen Steckdosenleisten die maximale Anzahl an Steckdosen. Die Anzahl der Steckdosen pro Steckdosenleiste wird als Eingabe angegeben.
Es stellt sich heraus, dass die Anzahl der Auslässe der Streifen jeweils ist
dann ist die Anzahl der Ausgänge ,
oder
.
Die Eingabe für das Programm oder die Funktion ist eine nicht leere Reihe positiver Ganzzahlen.
Beispiele
2 3 4
> 7
2 4 6
> 10
1 1 1 1 1 1 1 1
> 1
100 1000 10000
> 11098
code-golf
number
arithmetic
Pål GD
quelle
quelle
Antworten:
Gelee, 3 Bytes
Dekrement (alle), Summe, Inkrement. Probieren Sie es hier aus.
quelle
Netzhaut , 3 Bytes
Der Zeilenvorschub am Ende ist signifikant.
Die Eingabe ist eine durch Leerzeichen getrennte Liste von unären Zahlen .
Probieren Sie es online!
Erläuterung
Der Code entfernt einfach alle Leerzeichen sowie die folgenden
1
aus der Zeichenfolge. Hier ist, warum das funktioniert:Das Hinzufügen in unary ist einfach: Verketten Sie einfach die Zahlen, was dem Entfernen der Trennzeichen entspricht. Das Verringern um 1 ist ebenfalls einfach: Entfernen Sie einfach ein
1
von jeder Zahl. Wir wollen 1 mehr als die Summe der dekrementierten Eingaben, also entfernen wir einfach nur die1
s, die wir nach Leerzeichen finden, und dekrementieren dadurch alle Eingaben außer der ersten.quelle
Hexagony ,
1814 BytesEntfaltet:
Probieren Sie es online!
Ich denke nicht, dass Seitenlänge 2 möglich ist, aber es
musseine effizientere Lösung für Seitenlänge 3 geben.Dies ist der übliche Ansatz zum Dekrementieren aller, Summieren und Inkrementieren, aber ich muss später Diagramme hinzufügen, um zu zeigen, wie genau dies in Hexagony funktioniert.
quelle
Python, 24 Bytes
Probieren Sie es online aus
quelle
Mathematica, 9 Bytes
quelle
Haskell,
17-15BytesAnwendungsbeispiel:
( foldl1$(+).pred ) [2,4,6]
->10
.Alte Version, anderer Ansatz, 17 Bytes
succ.sum.map pred
.quelle
J, 6 Bytes
Summe plus eins minus Länge. Klammern Sie es ein und wenden Sie es wie folgt an:
quelle
Labyrinth , 9 Bytes
Probieren Sie es online!
Die übliche Grundierung:
Hier fangen wir oben links an
"
, ein No-Op, und gehen nach rechts. Der nächste ist?
ein Int aus STDIN gelesen (wirft Zeichen weg, die nicht als Integer analysiert werden können, z. B. Leerzeichen). Jetzt haben wir zwei Fälle:Wenn die Eingabe positiv ist, biegen wir nach rechts ab und führen Folgendes aus:
Wenn die Eingabe Null ist (was bei EOF auftritt), gehen wir geradeaus und führen Folgendes aus:
quelle
Pyth, 5 Bytes
Inkrement (Summe (Karte (Dekrement, Eingabe)))
quelle
ES6, 25 Bytes
quelle
l=>l.reduce((a,b)=>a+b-1)
.(,b)
ist teuer, aber ich mag diese Version auch.MATL, 3 Bytes
Probieren Sie es online aus.
Erläuterung
quelle
05AB1E , 4 Bytes
Code:
Erläuterung:
Nimmt Eingaben wie ein Array (zB
[3, 4, 5]
) auf.quelle
Sternenklar ,
2624 BytesErwartet durch Zeilenumbrüche getrennte Ganzzahlen. Probieren Sie es online!
Danke an @ MartinBüttner für -2 Bytes.
Die Schleife wird abgerollt, sodass die erste Zahl nicht dekrementiert wird, sodass keine Inkrementierung erforderlich ist. Zahlen pushen ist teuer in Starry ...
quelle
Bash + GNU-Dienstprogramme, 16
Wenn es
N
Steckdosenleisten gibt, sollteN-1
die durch Kommas getrennte Eingabeliste Trennzeichen enthalten. Alles was wir tun müssen, ist die Trennzeichen zu ersetzen- 1 +
und arithmetisch auszuwerten:Oder mit dem gleichen Trick:
Pure Bash (keine externen Dienstprogramme), 19
quelle
APL (NARS 2000),
1310 Bytes{1+(+/⍵)-⍴∊⍵}
Edit: Runter auf 10 mit Lynns (besserem) Ansatz.
{1++/1-⍨⍵}
quelle
gs2, 5 bytes
(CP437-codiert.)
Das ist
read-nums dec m1 sum inc
.quelle
CJam, 7 Bytes
Teste es hier.
Gleicher Ansatz wie bei Lynn (Alles dekrementieren, Summe, Inkrementieren). Dies funktioniert auch für 8 Bytes (und ist vielleicht etwas interessanter):
Dies faltet "Dekrementieren, Hinzufügen" über die Liste. Auf diese Weise wird das Dekrement nur auf alle Elemente mit Ausnahme des ersten angewendet, sodass wir uns nicht um das Inkrement separat kümmern müssen.
quelle
C
605955 Bytesquelle
Perl 6, 14 Bytes
Verwendung
quelle
{.sum-$_+1}
Im Ernst, 7 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Perl 6 , 20 Bytes
(Sie können
<<
anstelle von verwenden«
)Verwendung:
quelle
@arraya »+« @arrayb
++«@array
@array».method
@array»++
« a 'space separated' list of words »
Einige dieser Operatoren werden als Meta-Operatoren bezeichnet, da sie mit anderen Operatoren kombiniert werden. (Perl 5 hat diese Operatoren derzeit nicht.)Perl 5 23 + 2 = 25 oder 19 + 2 = 21
Benötigt
-ap
Flaggen:In einer Datei gespeichert und ausgeführt als
BEARBEITEN: Eine andere Antwort, kleiner (19 + 2), aber im Grunde von dev-null-Antwort kopiert:
quelle
F #, 25 Bytes
Dies ist eine Funktion, die ein Array / eine Liste / eine Folge von Ganzzahlen aufnimmt und das erforderliche Ergebnis zurückgibt.
Wie es funktioniert:
Seq.fold
Ermöglicht es Ihnen, eine Funktion auf jedes Element einer Sequenz anzuwenden, während Sie dabei einen Zustand mit sich herumtragen. Das Ergebnis der auf das erste Element angewendeten Funktion gibt den Zustand an, der in die Funktion für das zweite Element eingefügt wird, und so weiter. Um die Liste zusammenzufassen[1; 3; 4; 10]
, schreiben Sie sie beispielsweise folgendermaßen:Welches würde so angewendet werden:
Der letzte Status ist der Rückgabewert von
Seq.fold
.quelle
𝔼𝕊𝕄𝕚𝕟, 5 Zeichen / 7 Bytes
Try it here (Firefox only).
Verwendet eine benutzerdefinierte Codierung mit 10-Bit-Zeichen (danke @Dennis!). Führen Sie
encode('ï⒭+‡_')
die JS-Konsole aus, um das verschlüsselte Formular abzurufen, unddecode(/*ENCODED TEXT HERE*/)
abzurufen das codierte Formular zu decodieren.Erläuterung
Übersetzt in Javascript ES6 als:
quelle
Mornington Crescent ,
1909 18731839 BytesProbieren Sie es online!
quelle
Python 3, 79 Bytes
quelle
Ruby, 30 Bytes
Einfach genug - beginnend mit 1 addieren Sie die angegebenen Zahlen zu je -1 (Befehlszeilenargumente sind in
$*
). Schandeinject
ist so ein langes Wort.quelle
PowerShell, 19 Byte
Beachten Sie, dass dies
1 + p1-1 + p2-1 + ... + pn-1
äquivalent zu istp1-1 + p2-1 + ... + pn
.Nimmt Eingaben als separate Befehlszeilenargumente mit an
$args
. Wir-join
die zusammen mit einem-1+
Begrenzer einen String erstellen, wie z2-1+3-1+4
. Die Zeichenfolge wird dann anInvoke-Expression
(ähnlich wieeval
) weitergeleitet und gibt das Ergebnis aus.quelle
Perl, 21 + 2 = 23 Bytes
Benötigt
-a
und-E
:quelle
-a
Flag verwenden, um eine@F
Variable mit bereits geteilten Elementen zu erhalten, und -n durch -p ersetzen, damit Sie es nicht benötigensay
, und es auf 21 + 2 reduzieren:$a+=$_-1for@F;$_=++$a
-p
stattsay
ist das gleiche, weil ich es$_=
trotzdem verwenden muss.-a
ist eine gute Idee!Brainfuck, 15 Bytes
Annahme: Der Operator, gibt 0 zurück, wenn alle Eingaben erschöpft sind und keine Verlängerungskabel mit 0 Steckern vorhanden sind. Außerdem muss die E / A in Byte-Werten anstelle von ASCII-Zeichencodes vorliegen.
Erläuterung: Dies verwendet 2 Register. Ein "Value" -Akkumulatorregister, das die Anzahl der Geräte darstellt, die angeschlossen werden können, und ein "Current Cord" -Register, das den Wert des aktuellen Kabels protokolliert. Zunächst wird der Wert für die vorhandene Steckdose um 1 erhöht. Dann subtrahiert es für jedes Verlängerungskabel eins vom Wert, seit ein Stecker aufgenommen wurde, und erhöht dann den Wert um die Anzahl der Stecker.
Die meisten Online-Interpreter arbeiten nicht im Raw-Byte-Eingabemodus. Verwenden Sie diesen Code, um es online zu testen:
quelle