Identikon adalah penggambaran visual dari nilai hash, sering kali dibuat dari pengaturan simetris bentuk geometris. Avatar Stack Exchange default Anda adalah sebuah identitas. Tantangan ini adalah tentang membuat "wordenticons" , versi sederhana dari identicons berbasis teks yang berlaku untuk string huruf kecil, yaitu kata-kata.
Tantangan
Tulis sebuah program atau fungsi yang mengambil string S dan mengeluarkan kata-katanya. S dijamin tidak kosong dan hanya berisi huruf kecil huruf Inggris az. Anda dapat mengasumsikan S memiliki baris tambahan.
Wordenticon S akan berupa kisi-kisi teks persegi panjang dengan panjang sisi yang 2*length(S)
terdiri dari spasi (
), bilah vertikal, ( |
), dan bilah horizontal ( ―
).
Untuk menghasilkan wordenticon S, bentuk kotak persegi di mana setiap kolom berhubungan dengan huruf S (dalam urutan pembacaan kiri-ke-kanan normal) dan setiap baris berhubungan dengan huruf S (dalam urutan pembacaan normal dari atas ke bawah) ).
Sebagai contoh, jika S adalah food
grid awal kita terlihat seperti
food
f....
o....
o....
d....
di mana .
hanya tempat penampung.
Untuk setiap titik kosong (setiap .
) di kisi:
- Jika huruf kolom muncul sebelum huruf baris sesuai abjad, ganti
.
dengan|
. - Jika huruf kolom muncul setelah huruf baris secara alfabet, ganti
.
dengan―
. - Jika kolom dan huruf baris sama, ganti
.
dengan
Berikut adalah food
contoh setelah masing-masing langkah ini:
Menambahkan
|
:food f...| o|..| o|..| d....
Menambahkan
―
:food f.――| o|..| o|..| d―――.
Menambahkan
food f ――| o| | o| | d―――
Untuk menyelesaikan wordenticon, hapus baris dan kolom berlebihan yang berisi kata-kata
――|
| |
| |
―――
lalu cermin semuanya secara horizontal
――||――
| || |
| || |
――― ―――
dan akhirnya cermin lagi secara vertikal
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
menghasilkan 2*length(S)
kotak teks panjang sisi yang merupakan wordenticon akhir.
Contohnya
Berikut adalah beberapa contoh wordenticon tambahan. Perhatikan bahwa kata-kata yang berbeda dapat memiliki wordenticons yang identik dan beberapa wordenticons dapat sepenuhnya dibuat dari spasi (sayangnya markdown tidak ingin menerjemahkannya).
food
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
mood
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
foof
―― ――
| || |
| || |
―― ――
―― ――
| || |
| || |
―― ――
fool
――――――
| || |
| || |
|―― ――|
|―― ――|
| || |
| || |
――――――
a [2*2 grid of spaces]
to
||
― ―
― ―
||
it
――
| |
| |
――
tt [4*4 grid of spaces]
abc
――――
| ―― |
|| ||
|| ||
| ―― |
――――
and
――――
| || |
|― ―|
|― ―|
| || |
――――
but
――――
| || |
|― ―|
|― ―|
| || |
――――
you
||||
― ―― ―
―| |―
―| |―
― ―― ―
||||
bob
― ―
| || |
― ―
― ―
| || |
― ―
cat
|――|
― ―― ―
|| ||
|| ||
― ―― ―
|――|
cart
|――――|
― ―――― ―
|| ―― ||
||| |||
||| |||
|| ―― ||
― ―――― ―
|――――|
todo
||||||
― | | ―
―― ―― ――
― | | ―
― | | ―
―― ―― ――
― | | ―
||||||
mice
||||||
― |||| ―
―― ―― ――
――| |――
――| |――
―― ―― ――
― |||| ―
||||||
zyxw
||||||
― |||| ―
―― || ――
――― ―――
――― ―――
―― || ――
― |||| ―
||||||
banana
|―|―||―|―|
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|―|―||―|―|
codegolf
――――――――――――――
| ||| |||| ||| |
|― ―――――――――― ―|
|―| ―――――――― |―|
|―|| ――||―― ||―|
| ||| |||| ||| |
|―|||― || ―|||―|
|―||――― ―――||―|
|―||――― ―――||―|
|―|||― || ―|||―|
| ||| |||| ||| |
|―|| ――||―― ||―|
|―| ―――――――― |―|
|― ―――――――――― ―|
| ||| |||| ||| |
――――――――――――――
programming
―||―||||||||||||―||―
| || |||||||||||| || |
―― |―||||||||||||―| ――
――― ―|―――― ――――|― ―――
| || |||||||||||| || |
――――― ―――――――――― ―――――
―――|―| |―||―| |―|―――
―――|―| |―||―| |―|―――
―――|―|―― ―||― ――|―|―――
―――|―|||| || ||||―|―――
――― ―|―――― ――――|― ―――
――― ―|―――― ――――|― ―――
―――|―|||| || ||||―|―――
―――|―|―― ―||― ――|―|―――
―――|―| |―||―| |―|―――
―――|―| |―||―| |―|―――
――――― ―――――――――― ―――――
| || |||||||||||| || |
――― ―|―――― ――――|― ―――
―― |―||||||||||||―| ――
| || |||||||||||| || |
―||―||||||||||||―||―
abcdefghijklm
――――――――――――――――――――――――
| ―――――――――――――――――――――― |
|| ―――――――――――――――――――― ||
||| ―――――――――――――――――― |||
|||| ―――――――――――――――― ||||
||||| ―――――――――――――― |||||
|||||| ―――――――――――― ||||||
||||||| ―――――――――― |||||||
|||||||| ―――――――― ||||||||
||||||||| ―――――― |||||||||
|||||||||| ―――― ||||||||||
||||||||||| ―― |||||||||||
|||||||||||| ||||||||||||
|||||||||||| ||||||||||||
||||||||||| ―― |||||||||||
|||||||||| ―――― ||||||||||
||||||||| ―――――― |||||||||
|||||||| ―――――――― ||||||||
||||||| ―――――――――― |||||||
|||||| ―――――――――――― ||||||
||||| ―――――――――――――― |||||
|||| ―――――――――――――――― ||||
||| ―――――――――――――――――― |||
|| ―――――――――――――――――――― ||
| ―――――――――――――――――――――― |
――――――――――――――――――――――――
Mencetak gol
Ini adalah kode-golf , kode terpendek dalam byte yang menang. Tiebreaker melanjutkan ke jawaban sebelumnya.
Catatan
- Contoh bilah horizontal (
―
) dalam kode Anda dapat dihitung sebagai 1 byte, bukan 3 byte UTF-8 yang sebenarnya diperlukan. (Hingga sepuluh contoh.) - Jika diinginkan, Anda dapat menggunakan tanda hubung biasa (
-
) sebagai ganti bilah horizontal (―
). - Menghapus atau menambahkan spasi tambahan di garis kata kunci tidak diizinkan (bahkan jika bentuknya tidak berubah). Ini harus berupa
2*length(S)
persegi panjang sisi teks yang tepat . - Output wordenticon secara opsional dapat memiliki satu baris tambahan.
programming
,and
dancodegolf
tetapi Anda lupapuzzles
...Jawaban:
MATL,
2015 byteCobalah di MATL Online
Penjelasan
sumber
Java,
329305264259192 byteTerimakasih untuk:
StringBuilder
denganString
.Golf:
Tidak Disatukan:
Pasti yang menyenangkan. Upaya pertama adalah fungsi yang
O(n)
akhirnya diganti dengan bentuk yang lebih sederhana ini setelah saya terlalu frustrasi.Dan, untuk menguji:
sumber
\u2015
. Menggunakan bilah horizontal (atau cukup dash) dalam kode mentah tidak masalah.String
alih-alihStringBuilder
jawabannya bisa jauh lebih pendek ... (walaupun mungkin membutuhkan lebih banyak memori)int
s pada baris yang sama:int i,j,l=m.length();for(i=0;i<l;i++){...
Haskell, 93 byte
Contoh penggunaan:
Cara kerjanya (catatan:
(f <*> g) x
didefinisikan sebagaif x (g x)
):Versi alternatif: fungsi "temukan penggantian"
((("- |"!!).fromEnum).).compare
juga dapat ditulis sebagaia#b|a<b='-'|a>b='|'|1<2=' '
dan dipanggil melalui(#)
untuk jumlah byte yang sama.sumber
Jelly , 16 byte
Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES6), 94 byte
Menggunakan tanda hubung karena saya biasanya menjalankan shell SpiderMonkey JS pada Windows dan Unicode tidak berfungsi jika saya melakukannya.
sumber
[...s,s].reverse()
+1Pyth,
3130Test Suite
Sayangnya tidak dapat menjatuhkan
Q
karena beberapa bifurcate. Algoritma yang cukup mendasar sejauh ini, hitungan memperlakukan bilah horizontal sebagai 1 byte.sumber
Haskell, 66 byte
sumber
JavaScript ES6,
138126123 bytesebagian besar kode adalah pantulan / pembalikan
sumber
J,
2620 byte6 byte berkat @Zgarb .
Jawaban 26 byte sebelumnya
Menggunakan algoritma yang sama dengan jawaban Dennis.
Pemakaian:
(
>>
input makna (STDIN),<<
output makna (STDOUT))sumber
' |-'{~3*@-/~@u:[,|.
Mathematica,
124110104102 byteFungsi anonim. Karakter Unicode adalah U + F3C7 untuk
\[Transpose]
.sumber
Javascript
146142132130124 byteTest suite:
Terima kasih untuk @HelkaHomba, karena membantu menghapus setidaknya 50 byte, dan @Downgoat selama 3 byte!
sumber
Sebenarnya, 53 byte
Sekali lagi, kemampuan pemrosesan string yang buruk adalah kryptonite-nya. Ini masih lebih pendek dari Jawa, jadi saya punya itu untuk saya, yang bagus.
Cobalah online!
Penjelasan:
Kode dapat dipisahkan menjadi 3 bagian berbeda: kode terjemahan, kode pemrosesan, dan kode mirroring. Untuk keterbacaan, saya akan menjelaskan setiap bagian secara terpisah.
Kode terjemahan (dimulai dengan string input
s
,, pada tumpukan):Memproses kode (dimulai dengan daftar
n**2
karakter, sesuai dengan sudut kanan bawah):Kode mirroring (dimulai dengan
n**2+n
string -length, dengan periode yang bertindak sebagai baris baru)sumber
> <> , 109 byte
Masukan melalui STDIN. Cobalah online!
Penjelasan:
Input yang dibacanya dan dicerminkan pada baris pertama. Untuk input
abcd
, ini meninggalkandcbaabcd
tumpukan. Setiap setengah kemudian dicerminkan untuk memberiabcddcba
(baris 2). Kemudian, setiap elemen digandakan dan dibiarkan pada tumpukannya sendiri pada gilirannya (baris 3 dan 4). Setelah proses ini, tumpukan tumpukan terlihat sedikit seperti ini:Untuk setiap tumpukan secara bergantian, nilai baris (bagian bawah tumpukan) dibandingkan dengan nilai kolom (bagian atas tumpukan). Karakter yang sesuai dipilih dari
- |
dan ditulis ke STDOUT. Nilai kolom kemudian diputar sehingga kolom berikutnya berada di atas tumpukan (baris 6).Setelah semua kolom dipertimbangkan, nilai baris dibuang, baris baru dicetak, dan nilai kolom dimasukkan ke tumpukan sebelumnya (baris 7), agar proses keluaran dimulai lagi.
The
]
perintah, selain bermunculan dari tumpukan tumpukan, mengosongkan stack saat ini jika itu adalah satu-satunya kiri. Kondisi akhir program adalah jika tumpukan kosong, karena semua baris telah diproses (baris 5).sumber
C #,
169150 byteterima kasih FryAmTheEggman
ungolfed:
saran golf lebih dihargai
sumber
t+=c==k?" ":c>k?"|":"-";
harus bekerja. Saya belum banyak bermain C #, tapi sangat mungkin menggunakanfor
loop reguler lebih pendek.Reverse()
danToArray()
merupakan bagian dariSystem.Linq
pernyataan penggunaan.C #
166143 byte,Penjelasan:
Uji:
sumber
IEnumerable<char>
Anda dapat menyimpan beberapa byte dengan menggunakan.Reverse()
langsung pada string melewatkan.ToCharArray()
var a = new[] { '-', ' ', '|' };
kevar a = "- |";
karena Anda dapat menggunakan pengindeksan pada stringCJam, 20 byte
Uji di sini.
Menggunakan pendekatan yang jelas menghitung produk luar dan menggunakan perbedaan dan sgn untuk menghitung karakter di setiap sel.
sumber
Clojure, 171 byte
ungolfed:
sumber
J,
7570 byte5 byte disimpan berkat Dennis.
Saya akan berusaha mengubahnya menjadi kata kerja diam-diam nanti.
sumber
Oktaf, 39 byte
Menciptakan fungsi anonim yang dapat dijalankan menggunakan
ans('string')
.Demo
Penjelasan
Solusi ini menggabungkan string input (
x
) dan menggunakan invers (flip(x)
)[x, flip(x)]
. Pembalikan ditugaskany
untuk mempersingkat jawaban[x, y = flip(x)]
,. Kami kemudian membuat vektor kolom dari hal yang sama dengan menggabungkanx
dany
dan mengambil transpos:[x,y]'
. Kemudian kami mengambil perbedaan yang akan disiarkan secara otomatis untuk membuat array perbedaan 2D antara representasi surat ASCII dalam string. Kami menggunakansign
untuk membuat ini baik-1
,0
atau1
dan kemudian menambahkan2
untuk mendapatkan nilai indeks berbasis 1 valid. Kami kemudian menggunakan ini untuk mengindeks ke string awal'| -'
.sumber
Julia, 70 byte
Ini adalah upaya pertama saya di golf kode dan saya belum pernah menggunakan Julia, jadi katakan padaku apa yang Anda pikirkan:
Cobalah online!
Tidak Disatukan:
Saya pikir itu mungkin bisa dibuat lebih pendek. Kode ini menyimpan karakter dari wordicon dalam matriks:
Sayangnya, saya tidak dapat mengatur untuk menghasilkan output yang diinginkan menggunakan matriks.
sumber
Jolf, 42 byte
Tidak bermain golf. Saya mungkin lupa tentang matriks bawaan yang dimiliki Jolf.
Coba di sini! Kode ini menggunakan fungsi panah (
Ψ
) untuk peta matriks.sumber
Javascript, 303 Bytes
Tidak disatukan
Tidak ada fantasi 2015 di sini
sumber
var x = 1
, cukup lakukanx = 1
. Dalam kode golf tidak ada yang peduli tentang mengikuti praktik terbaik. :)Python 2, 126 byte
Ini pada dasarnya adalah port dari solusi Sebenarnya saya .
Cobalah online
Penjelasan:
sumber
Python 3.5,
250223175 byte:Cobalah secara Online! (Ideone) (Dua case uji terakhir tidak akan muncul di output karena hanya berupa baris kosong. Program saya sedang memprosesnya, yang menegaskan fakta bahwa ada 10 case input, tetapi hanya 8 output yang muncul.)
Tidak dikumpulkan diikuti oleh Penjelasan:
p=[[' ―'[O(i)<O(g)],'|'][O(i)>O(g)]for i in o for g in o]
Buat daftar,, di
p
mana a|
ditambahkan jika Nilai Titik Unicode huruf kolom kurang dari nilai huruf baris, a–
ditambahkan jika Nilai Titik Unicode huruf kolom lebih dari nilai huruf baris, ataujika keduanya nilainya sama.
u='\n'.join([''.join(p[i:G+i]+p[i:G+i][::-1])for i in range(0,len(p),G)])
Buat string bergabung dengan baris baru
u
,, dari daftarp
dengan membaginya menjadi segmen string yang bergabung, masing-masing terdiri dari jumlah panjang input karakter baik maju dan mundur, sehingga masing-masing memiliki panjang 2 kali berapa banyak karakter yang ada dalam input. Ini adalah bagian atas dari kata kunci Anda. Jadi, dalam hal input Andafood
, ini akan kembali:print(u+'\n'+u[::-1])
Akhirnya, output
u
diikuti oleh baris baru dan kemudianu
dibalik untuk secara vertikal mencerminkan paruh pertama untuk babak kedua. Ini adalah wordenticon lengkap Anda, yang padafood
akhirnya akan menjadi:sumber
R , 101 byte
101 byte karena saya menggunakan
―
(yang saya pikir terlihat lebih baik daripada-
).Cobalah online!
Saya terkejut tidak ada jawaban R sebelumnya karena kita dapat mengeksploitasi simetri dan matriks R untuk mendapatkan jawaban yang cukup kompetitif, meskipun ini menjadi
string
masalah.Penjelasan Tidak Dikunci:
sumber
C (gcc) , 202 byte
Cobalah online!
Bekerja dengan mengulang-ulang setiap karakter, kemudian memperbarui karakter yang dihasilkan (dan refleksi daripadanya).
sumber
05AB1E (warisan) ,
202221 byte+2 byte sebagai perbaikan bug untuk input char-tunggal ..
-1 byte dengan menggunakan tanda hubung biasa,
-
bukan―
, karena kita dapat menggunakan… |-
alih-alih"… |―"
(karena… |―
akan bertindak sebagai string kamus)Menggunakan versi lama 05AB1E, karena secara implisit bergabung dengan baris baru saat mirroring, yang membutuhkan tambahan eksplisit
»
dalam versi baru.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber