Tugas: Diberikan input yang terdiri dari tepat satu karakter <>^v
, mengeluarkan input kedua yang terdiri dari karakter ASCII yang dapat dicetak (dari angkasa hingga tilde), diorientasikan dengan panah.
Mari kita asumsikan input kedua untuk program ini ABC
. Inilah yang harus dilakukan:
- Input
>
: cetakABC
. - Input
<
: cetakCBA
. - Input
^
: cetakC\nB\nA
, atau input diputar -90 °. - Input
v
: cetakA\nB\nC
, atau input diputar 90 °.
Uji kasus
input => \n output
---
">", "thanks!" =>
thanks!
---
"<", "Hello, World!" =>
!dlroW ,olleH
---
"^", "This is text." =>
.
t
x
e
t
s
i
s
i
h
T
---
"v", "Tokyo" =>
T
o
k
y
o
---
"<", ">>>" =>
>>>
Ini adalah kode-golf , jadi program terpendek dalam byte menang.
>ABC
>
orientasi.Jawaban:
MATL ,
106 byte4 byte disimpan berkat Martin!
Cobalah online!
Versi lama, tanpa operasi modulo: 10 byte
Cobalah online!
sumber
mod 11
trik ini (Anda harus memutar sebaliknya) .Python 3,
645148 byteDisimpan 6 byte berkat xnor.
Disimpan 7 byte berkat Lynn.
Disimpan 3 byte berkat DSM dan Morgan dari begitu python.
Fungsi menerima salah satu karakter dari
<>^v
sebagai argumen pertama dan string yang perlu diputar sebagai argumen kedua.Ini versi yang lebih mudah dibaca:
sumber
s[1|-(c in'<^')]
dansep='\n'*(c in'^v')
lambda
jika Anda menggunakanjoin
dengan sep Anda daripada mencetak.Haskell, 57 byte
Contoh penggunaan:
f "v" "ABC"
->"A\nB\nC"
.Arah
>
adalah fungsi idendity,<
membalikkan argumen itu,v
menambahkan baris baru untuk masing-masing karakter dalam string dan tetes yang terakhir dan^
yangv
diikuti oleh<
.sumber
Japt, 9 byte
Terinspirasi oleh jawaban @ DonMuesli, meskipun saya baru memperhatikan bahwa CJam menggunakan teknik yang persis sama. Uji secara online!
Bagaimana itu bekerja
sumber
Error: Japt.stdout must be sent to an HTMLElement
dll.CJam, 13 byte
Input adalah karakter orientasi yang diikuti secara langsung oleh string yang akan diputar.
Uji di sini.
Penjelasan
Yay untuk sihir modulo. Mengambil empat karakter modulo 11 memetakannya ke:
Ini semua berbeda modulo 4 dan yang lebih penting mereka rapi meningkat:
3, 0, 1, 2
. Itu berarti kita bisa menggunakan hasil darimod 11
untuk menentukan seberapa sering memutar (tanpa perlu eksplisitmod 4
, karena empat rotasi adalah no-op pula). Kami biasanya harus mengimbangi angka-angka ini dengan 1, sehingga>
benar - benar menghasilkan8
dan menjadi no-op, tetapi cara saya memutarnya, sebenarnya membalikkan string pada aplikasi pertama sehingga kami selalu mendapatkan satu putaran gratis.sumber
Pyth,
1715Cobalah di sini atau jalankan Test Suite
2 byte disimpan berkat Jakube!
Cara lainnya menggunakan trik mod:
Coba di sini .
sumber
Julia, 51 byte
Ini adalah fungsi yang menerima a
Char
dan string dan mengembalikan string.Membiarkan
d
menjadi karakter yang menunjukkan arah dans
menjadi string. Jikad
dibiarkan atau naik, kita menggunakan kebalikan daris
, jika tidak kita gunakans
seperti yang diberikan. Kami membangun pemisah sebagai string kosong jikad
kiri atau kanan, atau baris baru jikad
naik atau turun. Lewati string dan pemisah kejoin
, yang akan menyisipkan pemisah antara setiap karakter string dan mengembalikan string.Verifikasi semua kasus uji online
sumber
Bash + GNU Utilities, 67
sumber
-q
's, tetapi AndaJavaScript (ES6),
766765 bytePort dari jawaban Julia @Alex A. Sunting: Disimpan 9 bytes berkat @ETHproductions. Menyimpan dua byte secara terpisah berkat @ edc65.
sumber
/[v^]/.test(a)
=>'Z'<a
?:
versi yang membosankan lebih pendek 1 byte.(/v|>/.test(a)?[...b]:[...b].reverse())...
harus 65Perl,
5451 + 1 = 52 byteMembutuhkan
-n
bendera dan gratis-M5.010
|-E
. Mengambil input sebagai berikutdirection\nline
::Saya suka itu
$/x/[v^]/
terlihat seperti substitusi.Bagaimana itu bekerja:
sumber
PowerShell, 84 byte
Ini akan menjadi omong kosong lengkap untuk orang-orang yang tidak terbiasa dengan PowerShell. Mari kita lalui.
Mengambil input
param([char]$a,$b)
, dengan karakter pemeran eksplisit untuk$a
. Sisa dari program ini adalah satu pernyataan. Kami akan mulai dengan babak pertama, hingga-join
.Kami sedang membuat array dinamis baru
(...,...)
dan mengindeks ke dalamnya$a%7-eq6
. Nilai-nilai ASCII untukv
dan>
adalah116
dan62
, masing-masing, dan116%7 = 62%7 = 6
, dan mereka adalah dua arah yang "naik" ke bawah dan ke kanan. Jadi, jika itu-eq
adalah$true
, kami akan mengambil nilai kedua, yang$b[0..$c]
, atau sebuah array dari karakter$b
hingga akhir . Kami mendapatkan nilai$c
dari nilai pertama$b[($c=$b.length)..0]
,, yang dipilih jika karakter inputnya adalah^
atau<
(yaitu, sehingga melewati string ke belakang). Penting untuk dicatat adalah bahwa bahkan jika nilai kedua dipilih,$c
nilai tersebut masih dihitung dan disimpan, sehingga kami dapat menggunakannya kembali sebagai jalan pintas seperti ini.Jadi, kita sekarang punya berbagai karakter baik maju atau mundur. Kami kemudian
-join
karakter-karakter tersebut bersama-sama dengan hasil indeks array dinamis lain. Kali ini kami memilih berdasarkan pada apakah nilai ASCII di$a
bawah90
(benar-benar banyak nilai akan berfungsi, saya memilih ini hanya karena). Karena>
dan<
keduanya memiliki nilai di bawah ini90
,-lt
is$false
, jadi kami memilih string kosong""
, dan dengan demikian char-array digabungkan. Jika tidak, kami memilih karakter baris baru"`n"
untuk bergabung dengan char-array bersama dengan baris baru.String yang dihasilkan ini ditinggalkan di jalur pipa, dan outputnya implisit.
Contoh
sumber
C,
123119117114 byteGolf:
Program pengujian, dengan penjelasan & kode yang agak tidak digubah:
Tips diterima!
sumber
Retina , 60 byte
Membutuhkan golf ...
Input adalah semua sebagai satu string, mis
^ABC
.^
atau<
, balikkan string<
atau>
, hapus baris baruCobalah online.
sumber
Dyalog APL , 15 byte
⍪
buat string menjadi tabel 1-kolom⍣(
...)
ulangi ( n ) kali⍞
dapatkan input string⎕UCS
dikonversi ke11|
istirahat pembagian kode kode UCS ketika dibagi dengan 11⌽∘⍉
rotate -90 ° (flip-transpose)Metode alternatif (panjang yang sama):
⎕
mendapatkan input yang dievaluasi (jadi seseorang harus memasukkan, misalnya '^' atau nama program / variabel yang mengembalikan karakter yang diinginkan)'<^>v'⍳
indeks ke dalam stringsumber
Jolf, 22 byte
Coba di sini! Anda harus menggantinya
ƒ
dengan\x9f
. Mengambil sengatan, lalu karakter arah.sumber
JavaScript ES6,
918384 byteMembangun string yang diperlukan dan mendapatkan indeks yang
a
terletak di.indexOf
Digunakan karena^
merupakan token regex. Berkat produk ETH untuk perbaikan bug dan byte yang dicukur!sumber
f("v","abc")
kembalic\nb\na
untukku.(a,b)=>[b,(c=[...b].reverse()).join``,[...b].join`\n`,c.join`\n`]["><v^".indexOf(a)]
c
secara harfiahd
.JavaScript (ES6) 71
Uji
sumber
Perl 5, 67 byte
66 plus satu untuk
-p
Input adalah string tunggal yang karakter pertamanya menentukan orientasi.
sumber
DUP , 48 byte
Try it here.
Lambda anonim yang mengambil argumen dan input STDIN. Pemakaian:
Penjelasan
sumber
Serius, 41 byte
Mengambil string sebagai input pertama dan arah (
><v^
) sebagai input kedua.Cobalah online!
sumber
D, 198 byte
: c
Kurang bermain golf:
sumber