Helloellolloloo Worldorldrldldd

50

Buat program yang mengambil kata yang Anda input, dan tambahkan kata itu ke bagian belakangnya sendiri dikurangi huruf pertama, lalu ulangi sampai semua huruf hilang. Misalnya, catakan menjadi catatt, dan helloakan menjadi helloellolloloo.

Masukkan salah
satu dari 26 huruf alfabet bahasa Inggris. Mungkin ada beberapa kata yang dipisahkan oleh spasi, dan perubahan harus diterapkan ke setiap kata.

Keluaran
Kata-kata dimasukkan, dengan setiap kata diletakkan setelahnya dengan huruf pertama hilang, dan kemudian dengan huruf kedua hilang, dan seterusnya sampai tidak ada lagi huruf untuk ditambahkan.

Lebih banyak contoh:

ill eel output illlll eelell

laser bat output laserasersererr batatt

darth vader output dartharthrththh vaderaderdererr

Ini kode golf, jadi kode terpendek menang.

Klarifikasi:
Anda dapat memperlakukan input atau output sebagai daftar. Anda dapat memisahkan kata menggunakan baris baru dan bukan spasi. Anda dapat menambahkan spasi tambahan ke input.

qazwsx
sumber
22
Sejujurnya, beberapa kata itu agak mengganggu. Yang perlu dilakukan hanyalah membutuhkan pemisahan, menerapkan fungsi pada setiap kata, dan kemudian bergabung kembali. Ini juga cukup melemahkan banyak esolang yang harus memeriksa ruang secara manual
Jo King
4
Bisakah kita menerima input sebagai daftar kata dan output seperti itu?
Quintec
4
Berapa panjang kata-kata yang perlu Anda tangani?
MickyT
5
Apakah boleh kata-kata dipisahkan oleh baris baru di output (bukan spasi)?
JayCe
10
1.Harap perbarui spesifikasi dengan tunjangan baru (array I / O, ruang tambahan, dll.) 2.Mohon informasikan solusi yang ada jika ada yang bisa menghemat byte dengan memanfaatkannya.
Shaggy

Jawaban:

34

Japt -m, 6 3 byte

Input dan output adalah susunan kata.

£sY

Cobalah


Penjelasan

        :For each word in the input array
£       :Map each letter at index Y
 sY     :  Slice the current word from index Y
Shaggy
sumber
1
Itu sangat kompak. Bagus!
qazwsx
9
@qazwsx: Sekarang 50% lebih ringkas!
Shaggy
1
Bukankah £dua byte di UTF-8?
Vi.
7
@ Vi, saya tidak menggunakan UTF-8 di sini.
Shaggy
36

brainfuck , 60 56 byte

,[>++++++++[-<----<++++>>]<[>>]<[[<]>.[[-]>[.>]<[<]>]],]

Cobalah online!

Membutuhkan ruang tambahan dan mencetak ruang terdepan. Kedua hal ini dapat dielakkan, tetapi berakhir pada 112 byte .

Penjelasan

,[  Loop over each byte of input
  Tape: 32 w o r-32 d'
  >++++++++[-<----<++++>>]   Subtract 32 from the character and add 32 to the previous char
  Tape: 32 w o r d-32 0'
  <[>>]<   If the last character was a space
  Tape: 32 w o r d-32 0'
  or
  Tape: 32 w o r d' space-32
  [
    [<]>.   Move to the end of the word and print out the space
    [   Loop over each letter
      [-]    Remove the first letter (initially space)
      >[.>]  Print the rest of the word
      <[<]>  Move back to the first letter
    ]
    Tape: clear
  ]
,]  Get the next byte of input
Jo King
sumber
21

Haskell, 36 21 byte

map$concat.scanr(:)""

Cobalah online!

Sunting: -15 byte, karena format IO baru (daftar kata, bukan kata-kata yang dipisahkan spasi)

nimi
sumber
Anda dapat mengurangi 5 karakter dengan mengganti scanr (:) ""dengan tails.
Frerich Raabe
1
@FrerichRaabe: ya, tapi itu akan membutuhkan import Data.Listyang menambahkan 17 byte ke skor.
nimi
18

Perl -p, 36 25 23 byte

s!\b|\S!$'=~s/ .*//r!eg

Cobalah online!

Ini adalah regsub tunggal. Pertama, ini cocok dengan semua batas kata atau karakter non-spasi:

[][H][e][l][l][o] [][W][o][r][l][d]

Perhatikan bahwa setiap kecocokan ini harus diganti dengan sisa kata:

[→Hello][Hello][ello][llo][lo][o→] (...)

Kita bisa menyelesaikan ini dengan variabel khusus $', yang menyimpan bagian dari string setelah pertandingan. Namun, kita perlu menerapkan regsub bersarang s/ .*//untuk itu, yang menghilangkan semua yang melewati ruang pertama $', untuk menyingkirkan kata-kata yang tersisa di input.

Terima kasih kepada @nwellnhof untuk 2 byte.

Gagang pintu
sumber
Anda bisa menggantinya [^ ]dengan \S.
nwellnhof
17

Python 3 , 49 byte

d=lambda s:' '.join(n+d(n[1:])for n in s.split())

Cobalah secara Online!

Ini mengambil keuntungan dari fakta yang "".split()mengembalikan array kosong sehingga bertindak sebagai pemeriksaan untuk kasus dasar dalam rekursi.

Cameron Aavik
sumber
17

Jelly , 3 byte

ḊƬ€

Cobalah online!

Tidak perlu Klagi karena array input / output sekarang diperbolehkan.

ḊƬ€
  €   For each word:
Ḋ       Remove the first letter
 Ƭ      until there are none left.
dylnan
sumber
Saya pikir Anda perlu ḊƬẎ)(atau ḊƬF), jika Anda mau).
Erik the Outgolfer
@EriktheOutgolfer, kurasa tidak. Setiap kata diwakili oleh array yang terpisah dalam output
dylnan
1
Saya tidak yakin apakah Anda dapat mengklaim itu, karena array bersarang, dan tidak ada yang ditentukan dalam pertanyaan untuk mengizinkannya.
Erik the Outgolfer
15

APL (Dyalog), 19 9 byte

{⌽∊,\⌽⍵}¨

terima kasih kepada @ H.PWiz untuk jogging otak saya

Ini berfungsi karena semua string di APL adalah array karakter.

{⌽∊,\⌽⍵}¨ 
        ¨ - for each string
      ⍵} - string argument - ex. "hello"
     ⌽ - reverse - "olleh"
   ,\ - scan magic - "o" "ol" "oll" "olle" "olleh"
  ∊ - enlist(join together) "oolollolleolleh"
{⌽ - reverse - "helloellolloloo"

TIO

Quintec
sumber
15

JavaScript (ES6), 33 byte

Disimpan 1 byte berkat @ShieruAsakoto

Format I / O: berbagai kata.

a=>a.map(g=w=>w&&w+g(w.slice(1)))

Cobalah online!


JavaScript (ES6), 35 byte

Format I / O: berbagai kata.

a=>a.map(w=>w.replace(/./g,"$&$'"))

Cobalah online!

Arnauld
sumber
2
44:s=>s.replace(/\S+/g,g=s=>s&&s+g(s.slice(1)))
Shieru Asakoto
1
Terima kasih untuk "sesuatu yang baru" untuk hari ini; tidak pernah tahu tentang $'(atau $<backtick>).
Shaggy
13

R , 82 75 67 byte

write(sapply(x<-scan(,""),substring,1:(y=max(nchar(x))),y),1,y,,"")

Cobalah online!

Beberapa byte disimpan berkat JayCe

Pisahkan output dengan baris baru.

The sapply(...)ekspresi menghasilkan vektor matriks / kolom dari substring yang sesuai, melapisi dengan ""yang diperlukan. writelalu cetak elemen-elemen matriks, yper baris, pisahkan dengan "".

Giuseppe
sumber
4
Bermain golf dengan pendekatan yang berbeda sambil menggendong bayi yang mengantuk; akan menambahkan penjelasan nanti.
Giuseppe
2
Jika panjang kata-kata dibatasi, misalnya 99 karakter atau ~ 1e6 maka Anda dapat mengetuk sekelompok byte dengan ...substring,1:1e6,1e6)...atau serupa
MickyT
2
Jika Anda dapat memisahkan kata dengan baris baru: tio . Saya telah menanyakan ini dalam komentar. Dapat bekerja dengan komentar @ MickyT
JayCe
@JayCe terlihat seperti itu bisa jadi 67 byte sebelum memasukkan saran MickyT
Giuseppe
8

brainfuck , 94 93 byte

-[-[-<]>>+<]>-<<+[[[-]<,[->+>+<<]>[-<+>]>>[-<->>+<]<]<<[>>+<<[-]]<[<]>[[.>]<[<]>[-]>]>>>>.<<]

Cobalah online!

  • Disimpan satu byte berkat Nitrodon - bermain golf .[-]>[.>]<[<]>untuk [.>]<[<]>[-]>.

Penjelasan

[[[ (dynamic) tape layout: ... NUL STR ... STR CHR FLG BUF SPC NUL ... ]]]

load a 32 into SPC
-[-[-<]>>+<]>-

while FLG
<<+[

 read a word
 [
  clear FLG; read CHR
  [-]<,
  copy CHR to BUF (using FLG as a temporary)
  [->+>+<<]>[-<+>]
  subtract SPC from BUF and save SPC
  >>[-<->>+<]
  move tape layout one to the right
  <
 ]

 strip trailing space; set FLG to true
 << [>>+<<[-]]
 to STR's first character
 <[<]>
 print word in all reduced forms
 [
  [.>]<[<]>[-]>
 ]

 print SPC; move to FLG
 >>>>.<<
]

Cobalah online!

Atribusi

Koleksi konstan Brainfuck Esolang digunakan untuk muatan ruang awal.

Jonathan Frech
sumber
Ini sepertinya tidak berakhir. Apakah itu dimaksudkan?
Jo King
1
@ Menjawab Ya. Dalam implementasi tertentu itu akan melebihi batas rekaman, keluar karena kesalahan.
Jonathan Frech
6

05AB1E , 5 byte

€.síJ

Cobalah online!

Penjelasan

€.s        # push suffixes of each
   í       # reverse each
    J      # join suffixes
Emigna
sumber
1
Alternatif 5-byte yang membosankan: í€ηJí(karena awalan adalah built-in 1-byte, bukan 2-byte seperti sufiks; masih memerlukan reverse-masing-masing namun pada awalnya, jadi jumlah-byte tetap 5).
Kevin Cruijssen
6

Vim , 47 byte (38 pukulan tombol)

Mulailah dengan input Anda sebagai satu-satunya baris dalam buffer Vim.

:s/<Space>/\r/g<CR>ggqaywPlxqqb99@aj0q99@bgg99J

Penjelasan

Ini menempatkan setiap kata pada barisnya sendiri, beralih pada setiap baris, kemudian bergabung kembali dengan mereka semua. Istirahat jika kata-kata lebih panjang dari 99 karakter atau jika input Anda memiliki lebih dari 99 kata.

  1. :s/<Space>/\r/g<CR> mengganti spasi dengan baris baru ( \r)
  2. gg posisi kursor di awal baris pertama
  3. qamulai merekam makro a :
  4. qbmulai merekam makro b :
    • 99@amengeksekusi makro yang sembilan puluh sembilan kali (memperkenalkan batas karakter)
    • j0 memposisikan kursor pada awal baris berikutnya
    • qberhenti merekam makro b
  5. 99@bmengeksekusi makro b sembilan puluh sembilan kali (memperkenalkan batas kata)
  6. gg posisi kursor di baris pertama
  7. 99J bergabung dengan sembilan puluh sembilan baris berikut dengan spasi (batas kata lagi)

Untuk 2 byte lainnya (2 stroke kunci) Anda dapat memperpanjang batas kata menjadi 999. Lain 4 byte, 9999, dll.

kamar
sumber
6

Sekam , 6 4 byte

-2 byte terima kasih kepada Jonathan Allan (menerima input sebagai daftar)!

moΣṫ

Cobalah online!

Penjelasan

Mengambil input sebagai daftar string dan memetakan fungsi berikut:

Σṫ  -- example argument: "abc"
 ṫ  -- tails: ["abc","bc","c"]
Σ   -- concat: "abcbcc"
ბიმო
sumber
Split & join mungkin tidak lagi diperlukan, spesifikasi saat ini dalam komentar.
Jonathan Allan
5

Retina 0.8.2 , 15 byte

 
¶
.
$&$%'
¶
 

Cobalah online! Catatan: spasi tambahan. Penjelasan:

Berpisah pada spasi.

.
$&$%'

Tambahkan sufiksnya ke setiap huruf. The %berarti bahwa kita hanya mendapatkan akhiran kata itu.

Bergabunglah dengan spasi.

Neil
sumber
5

Pepe , 167 153 byte

REEerEeeEeeeeeRrEEEEerEEEEEeerEErEEeerreErEEeErreEREEEEEEEreereErEerEEEErEEeerrEEreRRErEEEEreREEreeereReeRerEEEEEErEEEeerreEerEEeerEEEEerEEeEreereErEeree

Cobalah online!

tidak terdefinisi
sumber
5

Kode rakitan x86 16-bit, 24 byte

     47             inc    di
     B020           mov    al,20h
l1:  3806           cmp    [si],al
     7212           jb     l5 ;less means end of string
     7401           je     l2  ;equal means space was seen
     4F             dec    di ;overwrite extra space
l2:  E80300         call   l3
     46             inc    si ;move to next character in word
     75F1           jne    l1
l3:  56             push   si
l4:  3806           cmp    [si],al
     A4             movsb      ;copy character
     77FB           ja     l4  ;until either zero or space is seen
     5E             pop    si
l5:  C3             ret

Panggil dengan si = pointer ke string sumber, di = pointer ke buffer output.
String sumber membutuhkan byte nol untuk mengakhirinya.
Kode ini sama dalam 16- atau 32- atau 64-bit (si / di menjadi esi / edi atau rsi / rdi).
Kode 32-bit berukuran dua byte lebih besar karena panggilan yang diperluas.
Kode 64-bit adalah tiga byte lebih besar lagi karena inc / dec rsi / rdi menarik awalan (tetapi jika diketahui bahwa mereka berada dalam ruang memori 32-bit, maka mereka dapat esi / edi lagi untuk menghindari penalti itu) .

Peter Ferrie
sumber
4

MATL , 18 16 byte

"@gXH"HX@Jh)]0&h

Input adalah array kata sel. Cobalah online!

Penjelasan

"         % Implicit input: cell array of strings. For each cell
  @g      %   Push content of current cell, that is, a word
  XH      %   Copy into clipboard H
  "       %   For each letter
    H     %     Push word
    X@    %     Push iteration index
    Jh)   %     Index from that until the end into current word
  ]       %   End
  0       %   Push 0. Will be cast to char. Char(0) is displayed as space
  &h      %   Concatenate horizontally all elements so far. Implicit display
Luis Mendo
sumber
4

K4 / K (oK) , 9 byte

Larutan:

,/'(1_)\'

Cobalah online!

Penjelasan:

,/'(1_)\' / the solution
        ' / apply to each
       \  / scan
   (  )   / do this together
    1_    / drop first
,/'       / flatten (,/) each (')
streetster
sumber
4

C ++ (dentang) , 174 byte

#include<map>
#include<string.h>
std::string r(std::string w){while(auto x=strchr(w.c_str(),32))return r(w.substr(0,x-w.c_str()))+" "+r(x+1);return w!=""?w+r(w.substr(1)):w;}

Cobalah online!

Ini kiriman pertama saya, dan saya tidak tahu apakah mengembalikan string daripada mencetak tidak apa-apa :)

QJot
sumber
2
Selamat datang di PPCG! Ya, mengembalikan string tidak apa-apa. Semoga kamu tetap disini!
Jo King
Anda dapat menggunakan simetri operator ketimpangan untuk menghapus spasi dan karenanya menghemat byte - return w!=""?bisa jadi return""!=w?.
Jonathan Frech
3

Arang , 14 byte

⪫E⪪S ⭆ι✂ιμLι¹ 

Cobalah online! Catatan: Ruang tambahan. Tautan adalah untuk mengucapkan versi kode. Penjelasan:

   S            Input string
  ⪪             Split on spaces
 E              Map over each word
      ι         Current word
     ⭆          Map over each character and join
        ι       Current word
         μ      Current index
           ι    Current word
          L     Length
            ¹   Literal 1
       ✂        Slice
⪫               Join with spaces
                Implicitly print
Neil
sumber
3

C (gcc) , 79 byte

f(s,t)char*s,*t;{for(;*s;printf("%.*s",*s^32?t?t-s:~0:1,s),s++)t=strchr(s,32);}

Cobalah online!

gastropner
sumber
3

Pip -s , 11 byte

J_@>,#_Mq^s

Mengambil daftar kata-kata yang dipisahkan oleh ruang dari stdin. Cobalah online!

Penjelasan

             s is space (implicit)
        q    Read a line of stdin
         ^s  Split it on spaces
       M     Map this lambda function to each word:
 _            The word...
  @>          sliced starting at index...
    ,#_       range(len(word))
              This creates len(word) slices ["word" "ord" "rd" "d"]
J             Join those into a single string
             The resulting list of modified words is printed; the -s flag uses space
             as the separator
DLosc
sumber
3

Python 2 , 63 byte

lambda s:' '.join(map(g,s.split()))
g=lambda s:s and s+g(s[1:])

Cobalah online!

TFeld
sumber
Ini 64 byte di komputer saya, mac OS.
aydinugur
3

C #, 111 90 byte

b=>string.Join(" ",(b.Split(' ').Select(x=>string.Concat(x.Select((y, i)=>x.Substring(i))))))

Cobalah secara Online!

Dengan Mengubah input dan output ke array, saya menghemat beberapa byte:

b=>b.Select(x=>string.Concat(x.Select((y,i)=>x.Substring(i)))).ToArray()

Cobalah secara Online!

LiefdeWen
sumber
3

K (oK) , 17 13 byte

{,/|:'|,\|x}'

Cobalah online!

Awali fungsi anonim; Input diambil sebagai daftar string, yang pada gilirannya adalah daftar karakter.

Terima kasih @streetster untuk 4 byte.

Bagaimana:

{,/|:'|,\|x}' //Main function, argument x → ("ill";"eel")
            ' // For each element of the argument
         |x}  // Flip it. x → ("lli";"lee")
       ,\     // Concatenate each element, keeping intermediates. x → (("l";"ll";"lli");("l";"le";"lee")
      |       // Flip it again. x → (("lli";"ll";"l");("lee";"le";"l"))
   |:'        // Now flip each element. x → (("ill";"ll";"l");("eel";"el";"l"))
{,/           // Concatenation scan. x → ("illlll";"eelell")
J. Sallé
sumber
Anda dapat mengembalikan daftar, lihat juga solusi oK saya
streetster
@streetster oh, bagus. Saya masih dalam proses belajar K, jadi solusi saya tidak akan sesingkat atau seanggun yang saya inginkan. Terimakasih atas peringatannya!
J. Sallé
Ratakan sebelum membalikkan memungkinkan Anda untuk menghilangkan "mundur-masing-masing", membawanya ke 10 byte: {|,/,\|x}'
hoosierEE
3

Common Lisp , 179 byte

(defun r(s)(cond((endp s)nil)((eql(first s)#\Space)(princ " ")(r(rest s)))(t(q s)(r(rest s)))))(defun q (l)(cond((eql(first l)#\Space)t)((endp l)t)(t(princ(first l))(q(rest l)))))

Cobalah online!

Ini adalah percobaan pertama saya untuk bermain golf

JRowan
sumber
Halo dan selamat datang di PPCG. Menghapus spasi dapat menghemat 29 byte .
Jonathan Frech
@Johnathan Frech terima kasih saya baru saja memperbarui tanpa spasi
JRowan
Saya pikir Anda melewatkan empat ruang berlebihan.
Jonathan Frech
Kemungkinan besar Anda juga dapat menggunakan caralih- alih firstdan cdralih-alih restmenambah kiriman Anda.
Jonathan Frech
Na, aku baik-baik saja dengan itu sekarang haha, mungkin sakit kembali dan mengacaukannya nanti. Saya baru belajar cadel sekarang guru saya berkata untuk tidak pernah menggunakan mobil dan cdr sehingga mereka keluar dari kepala saya ketika saya melakukannya
JRowan
3

Lua , 70 byte

for i=1,#arg do x=arg[i]for i=1,#x do io.write(x:sub(i))end print()end

Cobalah online!

Penjelasan

Argumen dalam Lua disimpan dalam tabel argmulai dari indeks 1. Operator unary #mengembalikan ukuran tabel dan fungsi s:sub(a,b)mengembalikan substring berdasarkan string yang sdibatasi oleh bilangan bulat adan b, jika b tidak dilewati akan mengembalikan sisa string.

Saya harus menggunakan io.write()daripada print()menghindari garis putus-putus, dan menambahkan print()di akhir karena alasan yang berlawanan.

Marcio Medeiros
sumber