Memutar kata-kata!
Diberikan string dan bilangan bulat positif. Anda harus memutar senar, maju dan mundur.
Contoh Input / Output
Memasukkan
Programming Puzzles & Code Golf
4
Keluaran
Prog
mmar
ing
zzuP
les
oC &
de G
flo
Memasukkan
Input dapat diambil melalui STDIN, atau argumen fungsi. Input akan terdiri dari string dan integer positif, n . Bilangan bulat akan menentukan panjang setiap garis bengkok.
Tali diputar bolak-balik. Input dari HELLO, WORLD!
dan 5 akan terlihat seperti:
Keluaran
Output akan menjadi teks bengkok. Ini mungkin bukan spasi putih tambahan. Jika panjang string input tidak dapat dibagi menjadi panjang baris, tambahkan spasi hingga baris diisi:
Contoh dari ini:
Memasukkan
Hello, World!
5
Output (Perhatikan spasi putih di bagian paling akhir)
Hello
roW ,
ld!
Jawaban:
Pyth,
1915Pra-bantalan string, lalu balikkan satu sama lain garis saat mencetaknya. Padding sama dengan ukuran kotak, tetapi baris terakhir setelah memotong input dibuang.
Coba di sini
sumber
CJam, 19 byte
Contoh input:
Penjelasan
sumber
Snowman 1.0.1 , 91 byte
Atau semua dalam satu baris (untuk estetika, atau lebih khusus, anti-estetika), dengan biaya 2 byte:
Ini terlalu pendek, untuk Snowman. (Ini mungkin yang terpendek yang bisa didapat, saya bekerja di golf untuk waktu yang cukup lama.)
Ini memiliki satu peringatan: ia akan keluar dengan kesalahan (tetapi masih menghasilkan output yang benar) 50% dari waktu, ketika baris terakhir tidak terbalik. (Ini karena saya gunakan
ag
untuk mengelompokkan elemen array dalam kelompok dua sehingga saya dapat membalikkan satu sama lain, tapi saya tidak memeriksa apakah elemen terakhir memiliki kedua elemen yang diharapkan, sehingga akan mencoba mengakses elemen yang tidak ada jika ada jumlah garis ganjil.)Tidak dikelompokkan / penjelasan:
sumber
Python 2, 60
Mengambil
n
karakter pada satu waktu dari daris
, mencetaknya dengan arahd
yang bergantian antara1
dan-1
. Untuk penspasian pada baris terakhir,s
diisi dengann
spasi di bagian akhir sebelum dicacah, yang hanya memengaruhinya jika memiliki lebih sedikit darin
karakter yang tersisa.Solusi rekursif akan menghemat char (59) kecuali bahwa itu meninggalkan baris tambahan, yang tidak diperbolehkan.
sumber
Haskell ,
8375 bytechunksOf
Implementasi sederhana dengan take and drop, menerapkan jumlah genap atau ganjil pada output saat kita berjalan.Terima kasih kepada @BMO untuk lima byte dan @ ØrjanJohansen selama tiga byte!
Cobalah online!
sumber
cycle
menghemat 5 byte, coba online!g
dan menukarn
danl
: Cobalah online!Terjebak ,
42414038 BytesIni agak terlalu lama, mungkin akan mencoba bermain golf lebih banyak!
Inputnya harus seperti
"string"|n
.Penjelasan:
sumber
Haskell, 108 byte
Itu agak lama, ya ampun. Ini dia sedang beraksi:
sumber
let
ekspresi bekerja?let
yang dipisahkan oleh tanda titik koma - biasanya Anda akan menggunakan baris baru dan lekukan, tetapi Haskell juga memungkinkan Anda untuk menulislet a=b; c=d in expr
.(%) :: String -> String -> String
alih-alihIO ()
.Python 2, 109 byte
Harus menambahkan padding dengan spasi untuk baris terakhir menjadi benar.
Coba di sini
sumber
Lua,
918888848382 byteVersi lama:
Versi baru:
sumber
O, 60 byte
Program O pertama saya, dan yang lama itu!
Demo langsung.
sumber
Perl, 87 byte
Versi lama (mencetak baris baru):
String dilewatkan sebagai argumen fungsi tanpa baris baru. Panggil seperti ini:
sumber
Mumps, 86 byte
Meskipun bisa jadi 2 byte lebih pendek jika Anda menghapus yang pertama ',!' karakter dalam pernyataan R (baca dari STDIN); yang menambahkan carriage return antara input dan output. Jika itu tidak ada, output secara teknis benar, tetapi baris pertama akan muncul ditambahkan ke string input.[[Terminal Mumps standar yang saya gunakan tidak memiliki gema lokal. ]] Saat duduk, inilah ujiannya:
Perhatikan juga, sebenarnya ada carriage return / Enter penekanan tombol antara '123' dan '6' di akhir input. [[Masalah gema lokal lagi. ]]
Jika ada yang tertarik, saya bisa menjelaskan apa yang terjadi dengan kode; tapi saya sadar tidak ada banyak penggemar Mumps di luar sana ... :-)
sumber
PowerShell, 102 Bytes
Diminta sebagai berikut (jika disimpan ke file
CodeGolf55051.ps1
)Usaha Sebelumnya
(lebih panjang atau tidak valid)
PowerShell, 110 Bytes
PowerShell, 111 Bytes
Penjelasan
PowerShell, 180 Bytes
PowerShell, 196 Bytes
Penjelasan
(
{...}
dalam komentar di atas sebenarnya{0}|{1}|{2}
; saya menempatkan{...}
untuk meningkatkan keterbacaan.Powershell, 120 Bytes (tidak valid)
sumber
param($s,$i)$s+' '*($i-$s.Length%$i)-replace'(.{4})?(.)(.)(.)(.)',"`$1`n`$5`$4`$3`$2`n"-split"`n"|?{$_-ne""}
yang akan membuat Anda turun ke 108.[$r]
indeks akhir dengan[-not$r]
... kalau tidak, baris pertama membaca yang sebaliknya (yaitu, kanan-ke-kiri) daripada dalam contoh yang diberikan. Kalau tidak, eksekusi benar-benar apik!n
positif, dan kami dijamin bahwa panjang string adalah non-negatif (menurut definisi), itu berarti(($i-$l%$i)%i)
setara dengan($i-$l%$i)
, menghemat empat karakter.(-$l)%$i
. Tidak tahu dari mana asalnya. Menarik, bagaimanapun, itu tidak setara, meskipun seharusnya. Ini tampaknya merupakan kekhasan bagaimana PowerShell (di antara bahasa lain) mengimplementasikan fungsi modulo, yang berbeda dari yang saya (menjadi jurusan matematika) atau yang diharapkan oleh Wolfram-Alpha. Tampaknya, Anda harus tetap menggunakan versi yang lebih panjang. Bukti Referensi ->((y-x%y)%y) ==> ((y%y)-(x%y%y))%y ==> ((0)-(x%y))%y ==> (-x%y)%y ==> (-x)%y
Clojure, 83 byte,
87 byte,79 bytebeberapa koreksi setelah komentar di bawah, terima kasih Ørjan .
Cobalah online!
Clojure tampaknya sering absen dari jawaban kode golf. Ini tentu saja tidak dapat bersaing dalam byte panjang dengan bahasa golf, tapi saya pikir total absennya agak tidak beralasan.
Penjelasan:
s
memotongnya menjadi urutan daftar karakter di mana daftar memiliki panjangn
. Potongan terakhir akan diisi dengan spasi memanjangn
menggunakan "koleksi pad" yang dikembalikan dari(repeat " ")
mana mengembalikan urutan ruang malas yang tak terbatas#(..)
)#(or %)
yang berfungsi seperti fungsi identitas dan membalikkan (yaitu[#(or %) reverse #(or %) reverse ...]
) yang dikembalikan oleh siklus .#(apply ...)
:identity
atau secarareverse
bergantian pada chunk. Ini dilakukan melalui(% %2)
ekspresi yang memanggil fungsi yang dikirim sebagai argumen pertama ke fungsi anonim [yaituidentity
ataureverse
] menggunakan argumen kedua [yaitu potongan] ke fungsi anonim sebagai argumen untuk panggilan.(apply str ...)
untuk mengubah daftar karakter menjadi stringsatu trik yang kami gunakan di sini adalah bahwa banyak fungsi clojure seperti
map
mengambil jumlah koleksi sewenang-wenang sebagai args, yaitu di(map f coll1 coll2 coll3 ...)
mana fungsi f hanya perlu menerima argumen sebanyak ada koleksi. Dalam hal ini kami mengirimkan dalam dua koleksi, koleksi referensi fungsi bergantian dan string chunked.sumber
ld!
.fn
ataudefn
tidak apa-apa.) Di sisi lain fungsi Anda diperbolehkan untuk hanya mengembalikan hasilnya daripada mencetaknya.APL (Dyalog Unicode) , 19 byte
Cobalah online!
Mengambil
⊢∘⌽\
trik dari jawaban ngn yang brilian untuk tantangan boustrophedonise .Setelah menyadari bahwa kiriman saya terputus untuk baris dengan baris baru, saya telah menambahkan dua byte lagi. Di bawah ini adalah pengiriman yang lebih lama.
APL (Dyalog Unicode) , 17 byte
Cobalah online!
sumber
Python 3,
110108107103 byte(melihat jawaban lain), dengan
rjust
:95939290 bytesumber
PHP, 135 byte
Membawa dua argumen baris perintah seperti yang ditunjukkan pada
$argv
.sumber
CoffeeScript, 131 byte
Ini sepertinya terlalu lama.
sumber
Julia, 104 byte
Tidak Disatukan:
sumber
Python 3, 101 byte
Coba di sini
sumber
q, 46
.
sumber
{-1@[l;(&)(til(#)l:y cut x)mod 2;'[neg[y]$;|:]];}
(49 byte). Terima kasih atas ilhamnya! :)Q,
6456 byte{}
adalah fungsi yang harus disebut sebagai{}[x;y]
.x
akan menjadi string.y
akan menjadi panjang dari garis yang dihasilkan.Uji:
sunting : Menggunakan fungsi yang lebih pendek seperti yang diilhami oleh jawaban q lainnya oleh @tmartin
sumber
Python 2,
8275 byteSaya tidak bisa mengomentari @willem tapi saya membuat kodenya lebih kecil.
Coba di sini.Coba di sinisumber
Perl, 72 byte
70 byte, ditambah 2 byte untuk
-p0
.Demo:
Perhatikan bahwa input yang dibaca dari STDIN tidak dapat diakhiri dengan baris baru (yang akan menelan biaya 2 byte tambahan).
Penjelasan:
sumber
JavaScript ES6, 123 byte
Panggil dengan
t(input_string, twist_length)
, yang mengembalikan string output.sumber
Perl 5 , 51 byte
Cobalah online!
sumber
Ruby, 80
Demo online: http://ideone.com/w6o8PI
sumber
Coffeescript, 151 byte
Terlalu banyak = (
sumber
Bash,
8374Ini bergantian antara
cat
danrev
untuk substring dari argumen pertama dengan panjang argumen kedua.Variabel khusus yang digunakan meliputi
${#1}
(panjang tali)$1
)((i/$2%2))
(Ekspresi aritmatika membagi incrementor$i
dengan$2
dan kemudian mengambil modulo untuk menentukan odd vs even, yang menentukan apakah akan digunakan atau tidakrev
)${1:i:$2}
(substring$1
mulai dari posisi$i
dengan panjang$2
).sumber
bash
jawaban yang lain , yang baru saja saya lihat sekarang. Kami secara efektif memiliki logika yang sama. ... sebenarnya jawaban viktorahlström biarkan aku mengurangi 9 karakter lainnya.JavaScript ES6, 113 byte
Hanya celah saya sendiri pada pertanyaan saya sendiri. Ini akan menambah spasi sehingga dapat dibagi oleh
n
, dengan cara itu hanya membelah dan membalikkan.sumber