Viele von Ihnen haben vielleicht irgendwann im Internet mit Menschen aus Russland interagiert, und eine Untergruppe von Ihnen hat vielleicht die etwas seltsame Methode bemerkt, sich auszudrücken.
z.B удали игру нуб)))
Wo die )))
zur Betonung der vorherigen Aussage hinzugefügt wurden, habe ich an einer Theorie gearbeitet, die besagt, dass das Verhältnis von )
's zum Rest der Zeichenkette direkt proportional zur implizierten Betonung ist, aber ich finde es oft schwierig, das Verhältnis zu berechnen Da ich auch im Fluge versuche, mit einer Menge Missbrauch umzugehen, möchte ich den kürzestmöglichen Code, um zu berechnen, wie die resultierende Zeichenfolge laut Original aussehen soll, für einen Wert der Begeisterung zwischen 0 und 500% Dies erleichtert meine Recherche erheblich, da ich nicht jedes Mal, wenn ich meine Hypothese testen möchte, umfangreiche Skripte abtippen muss.
Die Herausforderung:
Schreiben Sie ein vollständiges Programm oder eine Funktion, die mit zwei Argumenten, einer Zeichenfolge unbekannter Länge und einer Zahl entweder im Ganzzahlformat (zwischen 0 und 500) oder im Dezimalformat (zwischen 0 und 5, mit 2 Genauigkeitspunkten) arbeitet
- Geben Sie die ursprüngliche Zeichenfolge mit den Suffixen
)
's zurück bzw. zeigen Sie sie an - Die Zahl wird als Verhältnis der eingegebenen Zahl zur Länge der Zeichenfolge berechnet.
- Wenn also die Zahl 200 oder 2.00 angegeben wurde, müssen 200% der Zeichenfolge mit dem Suffix
)
's' versehen werden - Die Anzahl der Klammern, auf die in Dezimalsituationen gerundet wird, spielt keine Rolle.
- Skript ist erforderlich, um druckbare ASCII-Zeichen zu unterstützen.
- Es muss nur ein Eingabezahlenformat Ihrer Wahl unterstützt werden.
Beispiele:
"codegolf" 125 = codegolf))))))))))
"codegolf" 75 = codegolf))))))
"noob team omg" 0.5 = noob team omg))))))
"hi!" 4.99 = hi!)))))))))))))))
Beispielcode (PowerShell) (mit Dezimaleingabe):
Function Get-RussianString ([string]$InputStr,[decimal]$Ratio){
$StrLen = $InputStr.Length
$SuffixCount = $StrLen * $Ratio
$Suffix = [string]::New(")",$SuffixCount)
return $InputStr + $Suffix
}
Get-RussianString "codegolf" 0.5
codegolf))))
Das ist Code-Golf, also gewinnt der kürzeste Code!
)
Akzente wie eine!
? Handelt es sich um ein Codierungsproblem?!
s, aber sie tippen sie so, wie sie sind. Es ist nicht besonders häufig, aber ziemlich ikonisch.)
ist ein reduziertes Emoticon:)
. Soweit ich weiß, wird es von jungen Leuten sehr häufig verwendet.)
ist keine Betonung, es ist einfach der Smiley. Soweit ich weiß, ist es schwieriger,:
mit russischer Tastatur zu tippen , deshalb lächeln sie ohne Augen.:
Auf russischem Layout (ЙЦУКЕН) ist es genauso schwer zu schreiben wie^
auf QWERTY. Aber in der Tat ist die)
eine reduzierte Version von:)
. Es ist viel einfacher, die Umschalttaste-0 zu drücken und zu halten, als die Tasten wiederholt zu wechseln.Antworten:
Gelee , 7 Bytes
Probieren Sie es online!
Verwendet das Dezimalformat.
Wie?
quelle
Perl 6, 21 Bytes
quelle
Gemeines Lisp,
595250Klammern? Ich bin dabei.
Einzelheiten
Formatieren Sie die Steuerzeichenfolge
~a
: hübsches Druckargument (hier der angegebene String)~v@{...~}
: Iterationsblock, beschränkt auf V-Iteration, wobei V als Argument verwendet wird, nämlich der(* ...)
Ausdruck. Die Iteration soll eine Liste durchlaufen, aber wenn Sie den@
Modifikator hinzufügen , ist die Liste die verbleibende Liste der Argumente für die Formatfunktion. Es muss mindestens ein Element in der iterierten Liste vorhanden sein (ansonsten beenden wir, ohne V zu berücksichtigen). Aus diesem Grund gibt es ein zusätzliches Argument für format (0).Da kein Element in der Liste vom Format belegt wird, ist die Schleife unendlich, aber glücklicherweise wird sie auch durch V begrenzt, auch bekannt als die Anzahl der zu druckenden Klammern.
Edit: danke an Michael Vehrs für den Hinweis, dass das numerische Argument nicht gerundet werden muss (die Frage erlaubt das Abschneiden / Abrunden, wie wir wollen, daher funktioniert das Standardverhalten hier).
quelle
format
akzeptiert ein Dezimalargument zuv
. Vielleicht auch bei Common Lisp?format
akzeptiert ...", da Standardschemaformat
nicht unterstützt~r
; und Guilesformat
folgt dem Beispiel von Common Lisps.JavaScript ES6,
383130 Bytesquelle
s=>n=>s+')'.repeat(s.length*n)
Sief("hi!")(4.99)
Python 2 , 29 Bytes
s in der Zeichenfolge ist p der Prozentsatz (Ganzzahl).
Probieren Sie es online!
quelle
05AB1E ,
98 BytesProbieren Sie es online!
Funktioniert sowohl für Ganzzahlen als auch für Dezimalzahlen, Argumentreihenfolge:
f(String, Double)
quelle
ï
implizit×
mit float-Argument erledigt wird .Python, 30 Bytes
Verwendet die Dezimaleingabe.
Probieren Sie es online!
quelle
Pyth, 8 Bytes
Online-Test! Erst das Aufregungsverhältnis, dann die Saite, über die man sich begeistern kann.
Erläuterung:
quelle
PowerShell , 33 Byte
Probieren Sie es online!
Unterstützt das Dezimalformat.
quelle
R
624642 BytesAnonyme Funktion, die Zeichenfolge
a
und Dezimalzahl verwendetn
, druckt die Ausgabe auf stdout.quelle
Pyth, 9 Bytes
Nimmt zwei Eingabezeilen auf: String und Ratio (dezimal).
Probieren Sie es auf pyth.herokuapp.com
Erläuterung
A
bezeichnet das erste Argument einer Funktion,B
ihr zweites Argument.quelle
TI-Basic, 33 Bytes
Übernimmt die Dezimaleingabe.
quelle
Perl 5, 29 Bytes
(Zahl ist erstes Argument, Zeichenfolge ist zweites.)
Probieren Sie es online!
quelle
CJam , 9 Bytes
Probieren Sie es online!
Geben Sie die Zeichenfolge in der ersten Zeile ein und das Betonungsverhältnis in der zweiten Zeile zwischen 0 und 5.
Erläuterung
quelle
MATL,
11108 BytesDiese Lösung verwendet die Dezimalform der zweiten Eingabe
Probieren Sie es online!
Erläuterung
quelle
sB ~ 17 Bytes
Erklärt:
Klammern werden automatisch geschlossen
Hier ist die Ausgabe des Compilers, wenn Sie interessiert sind:
Diese Version des Compilers wurde am 27.01.2017 um 23:12 Uhr geschrieben, möglicherweise ein paar Minuten nachdem diese Frage gestellt wurde. Hier ist eine Version, die mit der ältesten Version des Compilers funktioniert, die eine Stunde früher geschrieben wurde:
iS$,N?S$;')'*(N*l(S$))
(22 Bytes)quelle
PostgreSQL, 102 Bytes
Einzelheiten
Verwendet das ganzzahlige Eingabeformat.
Dies füllt die Eingabezeichenfolge einfach mit der rechten Maustaste mit Parens auf die Ziellänge aus.
Angerufen mit
quelle
Bash + Coreutils, 45 Bytes
Probieren Sie es online!
Ganzzahleingabe.
quelle
echo $1`jot -b \) -s '' $[${#1}*$2/100]`
40 Bytes :)Groovy, 27 Bytes
Einfache Lösung
Testprogramm :
quelle
Rebol, 39 Bytes
quelle
Clojure, 40 Bytes
Ziemlich langweilige Lösung:
Reduziert einfach die
str
Funktion in einer Liste schließender Klammern mit einem String als Anfangsparameter.Sehen Sie es online: https://ideone.com/5jEgWS
Nicht so langweilige Lösung (64 Bytes):
Konvertiert die Eingabezeichenfolge in ein Symbol (um Anführungszeichen zu entfernen) und wendet die Funktion wiederholt darauf
list
an(a (a) ((a)) (((a))) ... )
. Takesnth
Element konvertiert es in einen String und ersetzt alle öffnenden Klammern durch nichts.Sehen Sie es online: https://ideone.com/C8JmaU
quelle
#(.replaceAll(str(nth(iterate list %)(*(count %)%2)))"[(\"]""")
1 Byte weniger (yay). Ich wollte comp machen, kann es aber nicht unter 70 Bytes bringen.")"
um\)
ein Byte zu speichern.SimpleTemplate, 92 Byte
Nimmt den String als ersten Parameter und das "Verhältnis" als zweiten.
Das Verhältnis liegt zwischen 0 und 5 mit 2 Dezimalstellen.
Wie Sie sehen, ist es nicht optimal.
Die 2
{echo}
dort könnte auf 1 reduziert werden.Aufgrund eines Fehlers im Compiler kann dieser Code nicht weiter reduziert werden.
Ungolfed:
Wenn kein Fehler vorhanden wäre, würde der Code wie folgt aussehen: 86 Bytes:
quelle
C # Interactive,
7767 BytesC # interactive ist süß.
quelle
using System;
oder vollständig qualifizierenMath
. Auch nicht sicher, ob Sie es in interaktiven tun können, aber Sie könnten zu einem kompilierenFunc<string, Func<int, string>>
, um Bytes zu sparen, dhs=>p=>s+new...
Math.Round
nur um ein Castingint
sollte anrufenFloor
und die OP sagte entwederFloor
oderCeiling
ist in OrdnungSmileBASIC, 29 Bytes
quelle
3*4.99
=14.97
, nur14
oder15
als Antwort akzeptabel wäre, sollte die 29-Byte-Version aber gut funktionieren, sorry!Gol> <> (Golf), 17 Bytes
Probieren Sie es hier aus .
In der obersten Zeile werden die Zeichen (
i
) gelesen, bis eine neue Zeile gefunden wird (ASCII 10,a
). Anschließend wird die Zeile nach unten verschoben (v
).Dann verwerfen wir ein Zeichen (die Newline) mit
~
, drücken die Länge des Stapels (l
), lesen ein Float (I
), multiplizieren die beiden undR
drücken das Zeichen ")" so oft wie nötig . Zum Schluss kehren Sie den Stack um (r
), geben ihn aus und stoppen ihn (H
).quelle
PHP, 50 Bytes
Nimmt Zeichenfolge und Dezimalzahl als Befehlszeilenargumente. schneidet Polsterung. Laufen mit
-r
;Nervenzusammenbruch
quelle
Ruby, 25 Bytes
Ich benutze Lambdas . Das Testprogramm würde ungefähr so aussehen:
quelle
Clojure, 68 Bytes
Eine anonyme Funktion, die Dezimaleingaben akzeptiert.
Buchstäblich das erste Lisp-Programm, das ich je geschrieben habe! Ich hab schon spaß
quelle
#(...)
und die entfernenprint
(da Funktionsrückgaben akzeptabel sein sollten). Sie können ändern ,reduce
umapply
für diestr
Funktion, und Sie können ändern")"
zu\)
, was das Gleiche tut. So soll der endgültige Code sein:#(str %(apply str(repeat(*(count %)%2)\)))))
.(#(...) "codegolf" 125)
müssen 125 Prozent der Länge von "codegolf " hinzugefügt werden. Das feste Programm wäre also:, das sind 49 Bytes.#(str %(apply str(repeat(*(count %)%2 1/100)\))))
C ++ 14, 43 Bytes
Als unbenanntes Lambda, das seine Eingabe modifiziert, wird angenommen, dass
s
es ähnlich zustd::string
(hat.append(int,char)
undp
vom Fließkommatyp ist:Verwendungszweck:
quelle
Haskell , 37 Bytes
Probieren Sie es online! Verwendungszweck:
"codegolf" ! 125
Eine Version, die eine Dezimalzahl annimmt: (41 Bytes)
Probieren Sie es online! Verwendungszweck:
"codegolf" ! 1.25
quelle