lwap Sie fesselt sich!

27

Wenn Sie eine Liste oder eine durch Trennzeichen getrennte Zeichenfolge angegeben haben, geben Sie eine Liste oder eine durch Trennzeichen getrennte Zeichenfolge mit dem ersten Zeichen jedes Wortes ein Wort später aus.

Für diese Herausforderung besteht ein "Wort" nur aus druckbaren ASCII-Zeichen mit Ausnahme des Leerzeichens, des Zeilenumbruchs und des Tabulators.

Nehmen Sie zum Beispiel die Zeichenfolge "Guten Tag, Welt!" (durch Leerzeichen getrennt):

1. String
"Good afternoon, World!"

2. Get the first characters:
"[G]ood [a]fternoon, [W]orld!"

3. Move the characters over. The character at the end gets moved to the beginning.
"[W]ood [G]fternoon, [a]orld!"

4. Final string
"Wood Gfternoon, aorld!"

Das ist , also gewinnt der kürzeste Code!

Testfälle:

Input -> output (space-delimited)

"Good afternoon, World!" -> "Wood Gfternoon, aorld!"
"This is a long sentence." -> "shis Ts i aong lentence."
"Programming Puzzles and Code Golf" -> Grogramming Puzzles Pnd aode Colf"
"Input -> output" -> "onput I> -utput"
"The quick brown fox jumped over the lazy dog." -> "dhe Tuick qrown box fumped jver ohe tazy log."
"good green grass grows." -> "good green grass grows."
Genosse SparklePony
quelle
Ist ein Leerzeichen in der Ausgabe zulässig?
Business Cat
Können wir davon ausgehen, dass zwischen den Wörtern höchstens ein Leerzeichen steht?
Math Junkie
Mit einigen Regeln, nach denen Buchstaben aufeinander folgen können, hätten Sie einen Spoonerism-Generator. de.wikipedia.org/wiki/Spoonerism
Anzeigename
@ BusinessCat Ja.
Genosse SparklePony
@mathjunkie Ja.
Genosse SparklePony

Antworten:

10

05AB1E , 7 6 Bytes

€ćÁ2ôJ

Erläuterung:

€ć      Extract head of each
  Á     Rotate to the right
    2ô  Split into pieces of length two
      J Join

Probieren Sie es online!

Okx
quelle
Sie können Ein- und Ausgaben als Liste verwenden, wissen Sie.
Genosse SparklePony
8

Japt , 11 10 9 8 Bytes

Nutzt den Indexumbruch und die negative Indizierung von Japt.

ËhUgEÉ g

Probieren Sie es online aus


Erläuterung

        :Implicit input of array U (each element is an individual word).
Ë       :Map over the array.
h       :Replace the first character of the current element (word) ...
Ug      :  with the word in the array at index ...
EÉ      :    current index (E) -1's ...
g       :  first character.
        :Implicit output of array of modified words
Zottelig
quelle
Ich glaube , Sie Eingabe als Liste als auch nehmen können, ein weiteres Byte auf die rettende¸
ETHproductions
Das könnte eine Strecke sein, @ETHproductions, aber ich werde fragen. EDIT: Bestätigt hier
Shaggy
1
Ja, ganz am Anfang des Beitrags steht "Angesichts einer Liste oder einer durch Trennzeichen getrennten Zeichenfolge". Ich bin mir jedoch nicht sicher, wie lange das schon ist (ich glaube, seit die Herausforderung zum ersten Mal veröffentlicht wurde).
ETHproductions
Schön! Verwenden hwar eine gute Idee. Ich bin auf £g´Y ¯1 +XÅdie Idee gekommen, mit deiner Technik £ XhUg´Y ¯1 zu werden.
Oliver
5

Haskell , 43 Bytes

p%((a:b):r)=(p:b):a%r
_%e=e
(%)=<<head.last

Probieren Sie es online! Verwendet eine Liste von Zeichenfolgen für die Eingabe und Ausgabe.

Erinnert sich an den ersten Buchstaben des vorherigen Wortes pund macht ihn rekursiv zum ersten Buchstaben des aktuellen Wortes, während der neue erste Buchstabe die Kette entlang gesendet wird. Der vorherige erste Buchstabe wird als der erste Buchstabe des letzten Wortes initialisiert.

xnor
quelle
4

Ruby, 85 77 63 Bytes

Ich bin mir ziemlich sicher, dass dies viel kürzer sein könnte.

Edit: Danke für @manatwork zum Sammeln -> Karte

a=gets.split;$><<a.zip(a.rotate -1).map{|x,y|y[0]+x[1..-1]}*' '
Peter Lenkefi
quelle
Sie könnten beide .collectund .eachdurch ersetzen .map.
manatwork
1
-pflag (+1 Byte) und i=-2;gsub(r=/\b\w/){$_.scan(r)[i+=1]}für ultimatives Golfspiel
Value Ink
4

Gelee , 6 Bytes

Ḣ€ṙ-;"

Probieren Sie es online!

Dank an Dennis , der die Regeln besser gelesen hat als ich, wird eine Liste der Wörter zurückgegeben. Es funktioniert nicht als vollständiges Programm.

Erik der Outgolfer
quelle
4

CJam , 12 10 9 Bytes

1 Byte dank jimmy23013 gespeichert

q~Sf+:()o

Nimmt die Eingabe als eine Liste von Wörtern.

Probieren Sie es online!

Erläuterung

     e# Example input: ["Good" "afternoon," "World!"]
q~   e# Read and eval the input.
     e# STACK: [["Good" "afternoon," "World!"]]
Sf+  e# Append a space to each word.
     e# STACK: [["Good " "afternoon, " "World! "]]
:(   e# Remove the first character from each substring.
     e# STACK: [["ood " 'G "fternoon, " 'a "orld! " 'W]]
)o   e# Remove and print the last element of the array.
     e# STACK: [["ood " 'G "fternoon, " 'a "orld! "]]
     e# Implicitly join the remaining array with no separator and output.
Geschäfts-Katze
quelle
Sie können Ein- und Ausgaben als Liste verwenden, wissen Sie.
Genosse SparklePony
@ComradeSparklePony Das hast du bestätigt, nachdem ich geantwortet habe: P Golfing it now
Business Cat
)ofür 1m>.
Jimmy23013
3

V , 7 Bytes

Îxjp
{P

Probieren Sie es online!

Erläuterung:

Î       " On every line:
 x      "   Delete the first character
  j     "   Move down a line
   p    "   And paste a character (into column 2)
{       " Move to the beginning of the input
 P      " And paste the last thing we deleted (into column 1)
DJMcMayhem
quelle
3

JavaScript (ES6), 46 Byte

s=>s.map((k,i)=>s.slice(i-1)[0][0]+k.slice(1))

Nutzt die Tatsache, dass slice(-1)das letzte Element eines Arrays zurückgegeben wird.

Ausschnitt

Rick Hitchcock
quelle
Könnten Sie beitreten entfernen? Frage besagt, dass Sie eine Liste ausgeben können. Es würde 8 Bytes sparen
Craig Ayre
1
@CraigAyre, süß, danke!
Rick Hitchcock
3

Vim, 16 , 9 Bytes

<C-v>GdjPGD{P

7 Bytes gespart dank @Wossname!

Nimmt die Eingabe eines Wortes pro Zeile vor, z

Hello
world
and
good
day
to
you

Ich denke, das sollte in Ordnung sein, da die Eingabe als Liste erlaubt ist.

Probieren Sie es online!

DJMcMayhem
quelle
Dies kann mit 12 Tastenanschlägen erfolgen, wenn Sie dies sozusagen von Hand tun. Ich bin mir nicht sicher, wie ich diese Syntax hier artikulieren soll oder ob es überhaupt gültig ist, dies in diesem Puzzle zu tun. ^vGdjPGd$ggP (Wobei ^ v die Tastenkombination [Strg + v] ist,
stelle
@ Wossname Ah, das ist eine großartige Idee! Theres ein paar kleine Dinge , die ich noch mehr hinzugefügt Bytes zu speichern (zum Beispiel dd -> D, gg -> }) Danke für den Tipp!
DJMcMayhem
Ich wusste nicht, dd und gg hatten beide kürzere Versionen!
Super
Wie wäre es mit der Verwendung der "hochgestellten HTML-Tags" um den Buchstaben v im Code anstelle von "<Cv>"? Dadurch würde der Code in der Antwort in der richtigen Länge angezeigt. Ihr Code würde also so aussehen ... <sup> V </ sup> GdjPGD {P ..., was ziemlich ordentlich aussieht, wenn die stackexchange-Webseite ihn richtig formatiert.
Wossname
1
Ich sehe, die geschweiften Klammern springen zwischen den Absätzen umher, das funktioniert hier, weil es sich nur um einen Absatz handelt. Cool. Oh wow, das macht das schnelle Scrollen durch große Codedateien wirklich einfach! Danke für diesen Tipp. :)
Wossname
3

> <> , 44 45 Bytes

90.f3+0.>&i&01.>~r&l0=?;o20.
 i:" "=?^:1+ ?!^

Nimmt durch Leerzeichen getrennte Wörter an.

Korrektur von Aaron hinzugefügt 1 Byte

AGourd
quelle
2

Python 2, 74 Bytes

Probieren Sie es online aus

S=input().split()
print' '.join(b[0]+a[1:]for a,b in zip(S,S[-1:]+S[:-1]))

-5 Bytes, danke an @Rod

Totes Opossum
quelle
@ Rod Guter Vorschlag, danke!
Dead Possum
4
S[:-1]kann gekürzt werden auf S; Zipping-Listen unterschiedlicher Länge kürzen automatisch die längeren
Julian Wolf
2

Haskell , 50 Bytes

f=zipWith(:).((:).last<*>init).map head<*>map tail

Eingabe und Ausgabe erfolgen als Wortlisten.

faubi
quelle
1
Funktionen können unbenannt sein, daher können Sie die weglassen f=.
nimi
1
Oh, cool, ich wusste nicht, dass es einen Online-Compiler für Haskell gibt. Ich werde meine Kommentare löschen, da ich falsch liege ^^
Fund Monica's Lawsuit
2

PHP, 62 Bytes

$c=end($_GET);foreach($_GET as$g)echo$g|$g[0]=$c^$g^$c=$g,' ';
user63956
quelle
2

C #, 78 77 Bytes

using System.Linq;a=>a.Select((s,i)=>a[i-->0?i:a.Count-1][0]+s.Substring(1));

Kompiliert zu einer Voll- Func<List<string>, IEnumerable<string>>/ Formatierten Version:

using System;
using System.Collections.Generic;
using System.Linq;

class P
{
    static void Main()
    {
        Func<List<string>, IEnumerable<string>> f = a =>
                a.Select((s, i) => a[i-- > 0 ? i : a.Count - 1][0] + s.Substring(1));

        Console.WriteLine(string.Join(" ", f(new List<string>() { "Good", "afternoon,", "World!" })));
        Console.WriteLine(string.Join(" ", f(new List<string>() { "This", "is", "a", "long", "sentence." })));

        Console.ReadLine();
    }
}
TheLethalCoder
quelle
2

Brachylog , 12 Bytes

{hᵐ↻|bᵐ}ᶠzcᵐ

Probieren Sie es online!

Erläuterung

Example input: ["Good","afternoon,","World!"]

{      }ᶠ       Find: [["W","G","a"],["ood","fternoon,","orld!"]]
 hᵐ↻              Take the head of each string, cyclically permute them
    |             (and)
     bᵐ           Get the strings without their heads
         z      Zip: [["W","ood"],["G","fternoon,"],["a","orld!"]]
          cᵐ    Map concatenate on each list: ["Wood","Gfternoon,","aorld!"]
Tödlich
quelle
2

R, 72-70 Bytes

function(x)paste0(substr(x,1,1)[c(y<-length(x),2:y-1)],substring(x,2))

Probieren Sie es online aus

2 Bytes gespart dank Giuseppe.

Ein- und Ausgabe sind Listen. Nimmt einen Teilstring, der aus den ersten Buchstaben besteht, fügt den letzten Teilstring in den Vordergrund ein und fügt ihn zusammen mit einem Teilstring des restlichen Wortes ein. Der Radrennschritt ist ein Killer, aber ich kann keinen Weg finden, ihn weiter zu reduzieren.

user2390246
quelle
1
Sie könnten 2:y-1anstelle von 1:(y-1)da :Vorrang haben, -wodurch Sie 2 Bytes sparen.
Giuseppe
2

Python 2 + Numpy, 104 Bytes

from numpy import *
s=fromstring(input(),"b")
m=roll(s==32,1)
m[0]=1
s[m]=roll(s[m],1)
print s.tobytes()
Mikhail V
quelle
1
Sie müssen die import-Anweisung in die Byteanzahl aufnehmen. Coole Antwort!
Genosse SparklePony
Außerdem müssen Sie Ihren Eingabe- und Ausgabecode in der Byteanzahl haben
Felipe Nardi Batista
1
Ich denke, Sie können die letzte Zeile für 1 Byte löschen.
Ørjan Johansen
@ ØrjanJohansen ja, auch "b" statt "u1" funktioniert, also -2 bytes.
Mikhail V
2

APL (Dyalog) , 6 Bytes

Nimmt eine Matrix mit einem Wort pro Spalte.

¯1∘⌽@1

Probieren Sie es online!

¯1∘⌽ einen schritt nach rechts drehen

@ beim

1 Reihe 1

Adam
quelle
clevere Eingabe Idee
Jonah
1

Mathematica, 59 Bytes

""<>#&/@Thread@{RotateRight@#~StringTake~1,#~StringDrop~1}&

Probieren Sie es online!

Nimmt und gibt eine Liste von Wörtern zurück.

Wenn Sie es vorziehen, Zeichenfolgen zu nehmen und zurückzugeben, funktioniert dies für 87 Bytes:

StringRiffle[Thread@{RotateRight@#~StringTake~1,#~StringDrop~1}&@StringSplit@#," ",""]&
Kein Baum
quelle
1

Retina, 46 37 31 Bytes

(\S)(\S* +)
$2$1
(.* .)(.)
$2$1

Probieren Sie es online

Wird noch golfen ..

Mathe-Junkie
quelle
1
Kannst du das (.*)und nicht fallen lassen $3?
Neil
@ Neil ja, danke
Math Junkie
Wenn Sie +in der ersten Zeile nach a *drehen, drehen Sie (.* .)in der dritten Zeile nach (.*)-2 Bytes. Probieren Sie es online!
PunPun1000
1

kdb +, 25 22 Bytes

Lösung:

rotate[-1;1#'a],'1_'a:

Beispiel:

q)rotate[-1;1#'a],'1_'a:("The";"quick";"brown";"fox";"jumped";"over";"the";"lazy";"dog.")
"dhe"
"Tuick"
"qrown"
"box"
"fumped"
"jver"
"ohe"
"tazy"
"log."

Erläuterung:

1_'a:             // (y) drop first character of each element of a
,'                // join each left with each right
rotate[-1;1#'a]   // (x) take first character of each element of a, rotate backwards 1 char

Extra:

Eine Version, die eine reguläre Zeichenfolge (37 Byte) benötigt:

q){" "sv rotate[-1;1#'a],'1_'a:" "vs x}"The quick brown fox jumped over the lazy dog."
"dhe Tuick qrown box fumped jver ohe tazy log."
Streetster
quelle
0

Netzhaut , 25 bis 20 Bytes

Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.

Om$`^.((?=.*¶))?
$#1

Probieren Sie es online!

Eingang und Ausgang sind zeilenweise getrennt. Die Testsuite führt die erforderliche E / A-Konvertierung aus der Raumtrennung durch.

Martin Ender
quelle
Es ist in Ordnung, die Zeilenvorschubtrennung zu verwenden.
Genosse SparklePony
0

Mathematica, 134 Bytes

(w=Characters@StringSplit@#;d=Drop[w,0,1];StringRiffle[StringJoin/@Table[PrependTo[d[[i]],RotateRight[First/@w][[i]]],{i,Length@w}]])&
J42161217
quelle
0

Pyth, 12 Bytes

.b+hNtY.>Q1Q

Nimmt eine Liste von Wörtern und gibt eine Liste von Wörtern zurück.

Versuch es!

KarlKastor
quelle
0

Java (OpenJDK 8) , 97 Byte

for(int n=s.length,i=0,j=n-1;i<n;j%=n)System.out.print(s[j++].charAt(0)+s[i++].substring(1)+" ");

Probieren Sie es online!

Schüchterner Beluga
quelle
Dies ist ein Ausschnitt, keine Funktion. Außerdem sollten Sie die gesamte Zeichenfolge als ein Argument verwenden und Kommas und Fragezeichen unverändert in der Ausgabe beibehalten.
Kevin Cruijssen
0

C 106.77 Bytes

i,a,b;f(char*o){a=*o;for(i=0;o[i++];)if(o[i]==32){b=o[++i];o[i]=a;a=b;}*o=a;}

-29 Bytes von Scottinet

Ändert die Zeichenfolge an Ort und Stelle.

Ungolfed:

char *f(char *o){
    char a=*o,b; // start with a as the first character of the first word
    for(int i=0;++i<strlen(o);){
        // iterate through the string with i as the index
        if(o[i]==32){ // if the current character is a space, 
                      // i.e. if a word begins after this character
            b=o[++i]; // store the beginning of the next word in b
            o[i]=a; // set the beginning of the next word to a
            a=b; // set a to what the beginning of the next work used to be
        }
    }
    *o=a; 
    // set the beginning of the first word to the old beginning of the last word
}
Pizzapants184
quelle
Golfier-Versionsvorschlag (exakt derselbe Code): -29 Bytes
Scottinet
74 Bytes
Ceilingcat
0

Schale , 11 Bytes

Foz:ṙ_1TmΓ,

Eingabe und Ausgabe als Liste von Strings, probieren Sie es online!

(Die Kopfzeile wandelt die Eingabe nur in eine Wortliste um und fügt der Ausgabeliste Leerzeichen hinzu.)

Erläuterung

F(z:ṙ_1)TmΓ,  -- example input: ["Good" "afternoon,","World!"]
         m    -- map the following (example on "Good")
          Γ   -- | pattern match head & tail: 'G' "ood"
           ,  -- | construct tuple: ('G',"ood")
              -- : [('G',"ood"),('a',"fternoon,"),('W',"orld!")]
        T     -- unzip: ("GaW",["ood","fternoon,","orld!"])
F(     )      -- apply the function to the pair
    ṙ_1       -- | rotate first argument by 1 (to right): "WGa"
  z:          -- | zip the two by (example with 'W' and "ood")
              -- | | cons/(re)construct string: "Wood"
              -- :-: ["Wood","Gfternoon,","aorld!"]

Alternative, 11 Bytes

§oz:ṙ_1m←mt

Probieren Sie es online!

ბიმო
quelle
0

AWK , 63 Bytes

{for(R=substr($NF,1,1);++j<=NF;R=r)sub(r=substr($j,1,1),R,$j)}1

Probieren Sie es online!

Es scheint, dass es einen Weg geben sollte, die Redundanz zu reduzieren, aber ich sehe es nicht.

Hinweis: Die TIO-Verbindung verfügt über 4 zusätzliche Bytes, um eine mehrzeilige Eingabe zu ermöglichen.

Robert Benson
quelle