Dies wurde durch eine Funktion inspiriert, die ich kürzlich zu meiner Sprache Add ++ hinzugefügt habe . Deshalb werde ich eine kurze Antwort in Add ++ einreichen, aber ich werde es nicht akzeptieren, wenn es gewinnt (es wäre nicht fair)
Hassen Sie es nicht, wenn Sie Zahlen multiplizieren können, aber keine Strings? Also solltest du das korrigieren, richtig?
Sie müssen eine Funktion oder ein vollständiges Programm schreiben, das zwei nicht leere Zeichenfolgen als Eingabe und Ausgabe ihrer multiplizierten Version verwendet.
Wie multipliziert man Saiten? Ich werde Ihnen sagen!
Um zwei Zeichenfolgen zu multiplizieren, nehmen Sie zwei Zeichenfolgen und vergleichen jedes Zeichen. Das Zeichen mit dem höchsten Codepunkt wird dann zur Ausgabe hinzugefügt. Wenn sie gleich sind, fügen Sie einfach das Zeichen zur Ausgabe hinzu.
Es wird nicht garantiert, dass die Saiten gleich lang sind. Wenn die Längen unterschiedlich sind, ist die Länge der letzten Zeichenfolge die Länge der kürzesten Zeichenfolge. Die Eingabe erfolgt immer in Kleinbuchstaben und kann beliebige Zeichen im druckbaren ASCII-Bereich ( 0x20 - 0x7E
) mit Ausnahme von Großbuchstaben enthalten.
Sie können in jedem vernünftigen Format wie Zeichenfolge, Liste usw. ausgeben. Seien Sie vernünftig, Ganzzahlen sind in dieser Herausforderung keine vernünftige Methode für die Ausgabe.
Mit Eingaben von hello,
und world!
funktioniert das so
hello,
world!
w > h so "w" is added ("w")
o > e so "o" is added ("wo")
r > l so "r" is added ("wor")
l = l so "l" is added ("worl")
d < o so "o" is added ("worlo")
! < , so "," is added ("worlo,")
Also die endgültige Ausgabe für hello,
und world!
wäre worlo,
!
Weitere Testfälle
(ohne Stufen)
input1
input2 => output
programming puzzles & code golf!?
not yet graduated, needs a rehaul => prtgyetmirgduuzzlesneedsde rolful
king
object => oing
blended
bold => boln
lab0ur win.
the "super bowl" => the0usuwir.
donald j.
trumfefe! => trumlefj.
Dies ist ein Code-Golf, also gewinnt der kürzeste Code! Luok!
Antworten:
Haskell, 11 Bytes
Probieren Sie es online!
Es gibt nicht viel zu erklären.
quelle
zipWith
nicht allzu seltsam. Es ist ein ziemlich verbreitetes funktionales Primitiv. Die Idee, zwei Listen zusammen zu "zippen", ist mit vielen Problemen verbunden. Wenn Sie dies tun, möchten Sie häufig eine Funktion auf die resultierenden 2-Element-Elemente anwenden, daher der Teil "with".05AB1E , 4 Bytes
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
ø€à
sollte funktionieren, aber es nicht.Perl 6 , 22 Bytes
Als Bonus akzeptiert es eine beliebige Anzahl von Multiplikanden, nicht nur zwei.
quelle
Japt , 16 Bytes
Online testen! Übernimmt die Eingabe als Array von zwei Zeichenfolgen.
Das Fehlen von Min- und Max-Built-Ins schadet Japt hier, schafft es aber dennoch, ein anständiges Ergebnis zu erzielen ...
Erläuterung
quelle
Gelee , 5 Bytes
Probieren Sie es online!
Wie es funktioniert
Beispiel
Sei s = gemischt und t = fett .
ż
Ausbeuten["bb", "lo", "el", "nd", 'd', 'e', 'd']
. Die letzten drei Elemente sind Zeichen.«
ist das vektorisierende dyadische Minimum, also ergibt es['b', 'l', 'e', 'd', 'd', 'e', 'd']
.œ-"
Entfernt genau ein Vorkommen des n- ten Zeichens im zweiten Array aus der n- ten Zeichenfolge / dem n- ten Zeichen im ersten Array["b", "o", "l", "n", "", "", ""]
.œ-
ist das Multiset-Subtraktionsatom , und das schnelle bewirkt ,"
dass es vektorisiert.Beim Drucken lautet dies einfach boln .
quelle
PHP> = 7.1, 52 Bytes
PHP Sandbox Online
PHP> = 7.1, 69 Bytes
PHP Sandbox Online
PHP> = 7.1, 70 Bytes
PHP Sandbox Online
quelle
for(;$t=min(~$argv[1][$i],~$argv[2][$i++]);)echo~$t;
.Alice , 8 Bytes
Probieren Sie es online!
Erläuterung
Alice hat auch diesen Operator (den ich als " Überlagern" bezeichnet habe ), aber er beschränkt die Ausgabe nicht auf die Länge der kürzeren Zeichenfolge (stattdessen werden die verbleibenden Zeichen der längeren Zeichenfolge angehängt). Es hat jedoch auch einen Operator, der die längere von zwei Zeichenfolgen auf die Länge der kürzeren abschneidet.
quelle
Retina , 28 Bytes
Probieren Sie es online!
Erläuterung
Das
{
weist Retina an, das gesamte Programm in einer Schleife auszuführen, bis die Arbeitszeichenfolge nicht mehr geändert werden kann.O
macht dies zu einer Sortierstufe, die standardmäßig nicht leere Zeilen sortiert. Die^
Option kehrt das Ergebnis um. Tatsächlich erhalten wir also eine umgekehrte Sortierung der beiden Zeilen, wenn sie nicht leer sind, wobei die Zeile mit dem größeren führenden Zeichen oben steht.Leere Zeilen, falls vorhanden, verwerfen.
Wenn nur noch eine Zeile übrig ist, war eine der Zeilen leer, und die andere wird ebenfalls entfernt, um den Vorgang abzubrechen.
Hier wird viel konfiguriert. Dies entspricht (
M
) dem ersten Zeichen in der Arbeitszeichenfolge (^.
), gibt es zurück (!
), druckt es ohne nachfolgenden Zeilenumbruch (\
) und setzt dann die Arbeitszeichenfolge auf ihren vorherigen Wert zurück (*
). Mit anderen Worten, wir drucken einfach das erste Zeichen der Arbeitszeichenfolge (das maximale führende Zeichen), ohne die Zeichenfolge tatsächlich zu ändern.Schließlich entfernen wir das erste Zeichen aus jeder Zeile, sodass die nächste Iteration das nächste Zeichen verarbeitet.
quelle
G`.
dies nicht erforderlich ist. Dabei wird jedoch ein zusätzlicher Zeilenumbruch ausgegeben, den Sie entfernen können, indem Sie am Anfang der Antwort^.+¶$
ein oder ein voranstellen\
.\
).C 58 Bytes
Versuchen Sie es online
quelle
f(s,t)char*s,*t;{
gibt die gleiche Länge.JavaScript (ES6),
47-45ByteGibt
c>b[i]
nach dem Ende von zweckmäßigerweise false zurückb
. Bearbeiten: 2 Bytes dank @ETHproductions gespeichert.quelle
Gelee , 6 Bytes
Probieren Sie es online!
quelle
żṢ€Ḋ€
undżṢ€ZṪ
beide sparen ein Byte.Mathematica, 78 Bytes
In Mathematica gibt es bereits eine andere Antwort . Diese Antwort wird als Liste von Zeichenfolgen eingegeben und
/@
kann daher#
anstelle von verwendet werden{##}
. Und wir können nurMap
den langen Funktionsnamen für das Objekt verwenden, anstatt ihn Variablen zuzuweisen. (Tatsächlich wird jeder in Mathematica integrierte Symbolname höchstens einmal in der Funktion verwendet.)quelle
Java 8,
12412011763 Bytes-4 Bytes dank @ Khaled.K .
-3 Bytes dank @Jakob .
Eingaben bestehen aus zwei Zeichen-Arrays und enden mit einem
ArrayIndexOutOfBoundsException
.Erläuterung:
Probieren Sie es hier aus.
quelle
C #,
8178 BytesC # hat implizit
char
aufint
Umwandlung (weil einchar
eigentlich eine istint
unten) , das ist schön, und statt die Suche nach kürzester Zeichenfolge nur versuchen , bis zum Versagenquelle
a=>b=>
indem Sie auf a übersetzenFunc<string, Func<string, string>>
. Sie können die geschweiften Klammern um die for-Schleife entfernen, um 2 Byte zu sparen.C# has implicit char to int conversion
ist wahr, weil achar
einint
darunterliegendes ist.sizeof(int) == 4
abersizeof(char) == 2
.MATL , 8 Bytes
Die Eingabe ist ein Zellenarray von Zeichenfolgen im Format
{'abcd' 'efg'}
Probieren Sie es online!
Nebenbei funktioniert dies auch für mehr als zwei Saiten .
Erläuterung
Betrachten Sie die Eingabe
{'blended' 'bold'}
. Der Stapel wird verkehrt herum mit neueren Elementen angezeigt.quelle
R, 103 Bytes
Code:
Testfälle:
quelle
Python 2 ,
474434 Bytes-3 Bytes dank musicman523. -10 Bytes dank Blender.
Übernimmt die Eingabe als Liste von Zeichenfolgen.
Probieren Sie es online!
quelle
V ,
28, 24, 21 BytesProbieren Sie es online!
Hexdump:
Drei Bytes gespart dank @ nmjcman101!
Erläuterung:
quelle
dG
nötig? Werden mit denÍî
sowieso nicht alle Zeilenumbrüche entfernt ?CJam , 12 Bytes
Die Eingabe ist eine Liste von zwei Zeichenfolgen. Das Programm wird mit einem Fehler beendet (nachdem die richtige Ausgabe erstellt wurde), wenn die beiden Zeichenfolgen unterschiedliche Längen haben.
Probieren Sie es online!
Erläuterung
quelle
Clojure, 31 Bytes
Yay for function composition :) Gibt eine Folge von Zeichen anstelle eines Strings zurück, aber diese funktionieren in Clojure meistens genauso, außer beim Drucken oder beim Regex-Abgleich.
Funktioniert leider
max
nicht mit Charakteren.quelle
max
funktioniert nicht,max-key
tut es aber .#(map(partial max-key int)% %2)
Es ist jedoch genau dieselbe Byteanzahl.(ffirst (sort-by second ...)
.Javascript (ES2015),
666349 BytesErläuterung:
Vorherige Versionen:
quelle
Retina ,
5536 BytesProbieren Sie es online! Erläuterung: Vor einer Zeile steht das Ergebnis. Während beide Zeichenketten noch Zeichen haben, werden die Eingaben sortiert und das führende Zeichen mit dem höchsten Codepunkt zum Ergebnis verschoben, während das andere führende Zeichen gelöscht wird. Schließlich wird das Ergebnis gedruckt.
quelle
Schale , 2 Bytes
Probieren Sie es online!
"Ungolfed" / Erklärt
Macht man davon Gebrauch
zip f
, so schneidet man die kürzere Liste ab, so dass es immer zwei Argumente gibtf
, zBzip f [1,2] [3,4,5] == zip f [1,2] [3,4] == [f 1 3, f 2 4]
:quelle
Kotlin,
504137 Bytes-9 Bytes mit Funktionsreferenzsyntax -4 Bytes mit Erweiterungsfunktion
Wenn sich s und x im Gültigkeitsbereich und nicht in einer Funktion befinden, beträgt diese Methode nur 16 Byte
Demo
quelle
PowerShell, 75 Byte
Als .ps1-Datei speichern und ausführen
Bisher 78 Bytes:
quelle
J, 25 Bytes
Erläuterung
Die Hälfte der Bytes wird für die Lösung aufgewendet, um sicherzustellen, dass beide Eingaben die kürzere Eingabelänge haben (wir würden uns über eine Verbesserung dieses Teils freuen, wenn jemand eine hat):
<.&#
ist das Minimum der beiden Längen und{."1,:
benötigt so viele Zeichen aus beiden Zeilen der 2-zeiligen Tabelle, die aus der linken Zeichenfolge besteht, die über der rechten Zeichenfolge gestapelt ist.Verwenden Sie das Unter-Verb
&.
, um jedes Zeichen in seinen ASCII-Index zu konvertieren, nehmen Sie das Maximum der beiden Zahlen und konvertieren Sie es dann zurück in Zeichen.Probieren Sie es online!
quelle
[:>./&.(3&u:)<.&#$&>;
u:
ein TIL für mich.Java 8 + Eclipse - Collections,
7064 Bytesa
undb
stammen beideMutableList<Character>
aus Eclipse-Sammlungen.quelle
Addiere ++ , 8 Bytes
Probieren Sie es online!
In den Versionen 0.4 bis 1.11 werden
^
je nach Art der Argumente zwei Zahlen exponiert oder zwei Zeichenfolgen "multipliziert".quelle
Mathematica, 102 Bytes
Eingang
quelle
L@a~Min~L@b
speichert ein ByteAPL (Dyalog) , 22 Bytes
Nimmt zwei (oder mehr!) Zeichenfolgen als richtiges Argument.
Probieren Sie es online!
{
eine anonyme Funktion, bei der das richtige Argument durch ⍵ dargestellt wird⎕UCS
die Symbole aus dem U nicode C haracter S et, die dem entsprechen⌈⌿
Maximalwert in jeder Spalte von⎕UCS
der Code zeigt aus dem U nicode C haracter S et für das↑
Matrifiziert (Matrix aus Liste der Zeichenketten)⍵
Argumente↑¨⍨
jeweils begrenzt auf die⌊/
Minimum von≢¨
die Längen⍵
der Argumente}
quelle