Saya memikirkan cara baru untuk menghasilkan kata sandi saya, dan meskipun itu mungkin tidak terlalu pintar dalam jangka panjang, itu masih bisa menjadi kode-golf yang menyenangkan.
Mengambil serangkaian kata, kata sandi dibuat sebagai berikut:
- Pilih karakter ke - n di kata ke - n
- Jika n lebih besar dari kata, lanjutkan menghitung mundur
Contoh:
This is a fun task!
T s a u !
T adalah karakter pertama
s adalah yang kedua
adalah yang pertama, tetapi bolak-balik itu juga yang ketiga
adalah yang kedua tetapi karena menghitung mundur itu juga yang keempat
'!' adalah karakter kelima dalam 'tugas!' dan dengan demikian akan dimasukkan dalam kata sandi akhir,Tsau!
Aturan
- Input akan berupa string
- Memisahkan string pada spasi, semua karakter lain harus disertakan
- Huruf besar harus tetap huruf besar, sama dengan huruf kecil
- Anda mengambil langkah n di setiap kata, di mana n adalah jumlah kata yang telah datang sebelum ditambah satu
- Jika n lebih besar dari kata, Anda harus melangkah mundur menelusuri kata, jika Anda menekan awal, Anda maju lagi sampai Anda telah melangkah n kali
- Karakter pertama dan terakhir hanya dilangkah satu kali, jadi 'asyik' pada posisi ketujuh sebagai contoh berjalan 'funufun' dan berakhir di n, bukan 'funnuff' dan berakhir di f
- Output harus berupa string
Contoh:
Input Output
Once Upon A Time OpAe
There was a man Taaa
Who made a task Waak
That was neat! Taa
This is a long string to display how the generator is supposed to work Tsagnoyotoipto
Kode terpendek dalam byte menang!
to
adalah kata ke-12 (0-diindeks) dalam string panjang, dan karena itu huruf kode harust
, bukano
.Tsau!
adalah bahasa Cina untukFuck!
Jawaban:
Python 2 , 72 byte
Cobalah online!
sumber
05AB1E , 11 byte
Cobalah online!
Penjelasan
sumber
Jelly , 12 byte
Cobalah online!
sumber
Java 10,
148117114110 byte-31 byte terima kasih kepada @SamYonnou dengan membuat port dari jawaban JavaScript @ user71546 .
-4 byte berkat @SamYonnou lagi, mengoptimalkan algoritma untuk Java.
Cobalah online.
Penjelasan:
sumber
s->{int i=-1,j;for(var a:s.split(" ")){System.out.print(a.charAt(++i>(j=a.length()-1)?j>0?i/j%2==0?i%j:j-i%j:0:i));}}
==0
ke<1
.++i>(j=a.length()-1)
s->{int i=-1,j;for(var a:s.split(" "))System.out.print(a.charAt(0<(j=a.length()+i-++i)?i/j%2<1?i%j:j-i%j:0));}
0<(j=a.length()+i-++i)?
ke(j=a.length()-1)>0*i++?
sehingga penjelasan sedikit lebih mudah untuk tipe (tidak ada byte yang disimpan melakukannya namun).Arang , 16 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Saya tidak sering menggunakan parameter terakhir Slice.
sumber
JavaScript (Node.js) ,
78706968 byte-1 byte @Arnauld
Cobalah online!
Penjelasan
sumber
Merah , 135 byte
Cobalah online!
Dapat dibaca:
sumber
Perl 5 , 76 byte
Cobalah online!
sumber
k ,
313028 byteCobalah online!
sumber
|-1_
->1_|
Pyth , 12 byte
Cobalah online
sumber
Japt
-P
,, 11 byteCobalah
Cobalah
Penjelasan
sumber
C (gcc) , 148 byte (versi string), 114 byte (versi cetak)
Jika saya harus mengembalikan sebuah string (versi panjang):
Cobalah online!
Kalau tidak, saya hanya mencetak dan tidak khawatir tentang buffer (versi pendek):
Cobalah online!
sumber
-(j>1)-1
dapat diganti+~(j>1)
dengan 1 byte lebih sedikit saya pikir.putchar( t[ j=strlen(t)-1, k = i++ % (j ? j*2 : 1), k<j ? k : j+j-k ]);
Cobalah online!*u++
denganc[i]
dan hapus u.AWK, 79 byte
Terutama karena saya penasaran melihat solusi awk atau bash yang lebih baik!
Cobalah online!
sumber
C # (.NET Core) , 111 byte
Cobalah online!
sumber
Haskell,
656261 byteCobalah online!
Ini membutuhkan versi terbaru
Prelude
yang memiliki<>
fungsi.Sunting: -3 byte terima kasih kepada @ user28667, -1 byte terima kasih kepada @B. Mehta
sumber
zipWith(\i w->(cycle$id<>reverse.drop 1.init$w)!!i)[0..].words
juga berfungsi.\i->(!!i).cycle.(id<>reverse.drop 1.init)
memfaktorkan keluarw
penyebutan eksplisit (TIO)Stax , 9 byte
Jalankan dan debug itu
Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.
Jalankan yang ini
sumber
PHP , 77 byte
Cobalah online!
sumber
foreach(...){$c=...;echo$c[...];}
menjadiforeach(...)echo($c=...)[...];
. Cobalah secara online: 87 byte.=
menyimpan dua byte:while(ord($w=$argv[++$i]))echo($w.=strrev(substr($w,1,-1)))[~-$i%strlen($w)];
coba onlinePowershell
208186170 byteTidak Disatukan:
Uji kasus di bawah ini atau coba online
sumber
""|%{
dengan Anda$args|%{
, tapi saya pikir Anda bisa bermain golf lebih efektif juga;)J, 43 byte
ungolfed
<;._1 ' '&,
berpisah pada spasi(, }.@}:)&.>
untuk setiap kata, bunuh elm pertama dan terakhir dan tambahkan kata#@> | i.@#
ambil sisa dari setiap panjang kata yang dibagi ke dalam indeksnya> {~"_1
ambil hasil itu dan ambil dari setiap kata.Cobalah online!
sumber