Tantangan Kode Utama

24

Tugas

Anda bertugas membuat kompas, semacam itu.

Bayangkan kode sumber Anda sebagai "jarum" kompas di mana menjalankan berbagai orientasi menghasilkan output yang berbeda.

Orientasi kode sumber yang didukung adalah Utara, Timur, Selatan, dan Barat.

Contoh

Katakanlah Anda memiliki kode sumber:

ABCD
 J K
WXYZ

Kami akan menganggap ini sebagai orientasi Utara, berputar 90 derajat searah jarum jam mengarahkan kita ke Timur:

W A
XJB
Y C
ZKD

berputar lagi menunjuk ke Selatan:

ZYXW
K J 
DCBA

dan akhirnya, rotasi terakhir ke Barat:

DKZ
C Y
BJX
A W

Ketika dijalankan, masing-masing contoh kode di atas harus menampilkan karakter ASCII tunggal yang dapat dicetak yang Anda pilih.

Catatan

Kode Anda tidak akan menerima input.

Ruang kosong atau garis baru tidak runtuh / hilang saat berputar.

Memimpin / mengikuti garis baru tidak apa-apa dalam output.

Jawaban dapat berupa seluruh program atau fungsi, dengan demikian output ke STDOUT atau mengembalikan hasil fungsi.

Standar aturan berlaku; jawaban terpendek dalam byte menang!

CzarMatt
sumber
Bisakah kita menghasilkan lebih dari 1 karakter?
Tn. Xcoder
1
Apakah kita harus mengisi kode dengan spasi sehingga itu adalah persegi panjang yang sempurna (dan menghitung ruang-ruang itu dalam skor kita)? Misalnya, apakah kode yang berbentuk seperti ini valid, mengingat yang pertama adalah pengiriman?
Business Cat
2
Terlepas dari spesifikasi keluaran, saya pikir ini adalah duplikat
Digital Trauma
1
@BusinessCat Anda tidak perlu mengisi kode Anda untuk membuat persegi panjang - contoh yang Anda berikan akan valid.
CzarMatt
4
@ Mr.Xcoder Um, bagaimana bisa 4 program identik mencetak 4 karakter ASCII yang berbeda?
ETHproduk

Jawaban:

20

Jelly , 2 byte

*2

Cobalah online!

Perhatikan bahwa entri utama untuk program Jelly adalah tautan terakhirnya, di mana karakter baris baru mana pun akan memecah tautan), tak satu pun dari program dua baris ini yang benar-benar mengakses tautan teratas mereka.

Keempat program lengkap, yang semuanya secara implisit mencetak hasilnya, adalah:

Utara :

*2   -> (implicit) zero raised to the power of 2 = 0

Timur :

*
2    -> literal 2 = 2

Selatan :

2*   -> two raised to the power of (implicit) 2 = 4

Barat :

2
*    -> (implicit) zero raised to the power of (implicit) zero = 1
Jonathan Allan
sumber
1
Ini jawaban terakhir. Sudah selesai dilakukan dengan baik.
Erik the Outgolfer
19

Japt , 3 2 byte

gy

Entah bagaimana, entah bagaimana , saya menemukan solusi 2-byte yang sangat aneh ...


Output utara0 :

gy

Karena tidak ada input implisit, maka defaultnya adalah 0. gpada nomor mengembalikan tanda nomor terlepas dari argumennya ( "y"dalam hal ini).


Output timur2 :

g
y

Dalam program multi-baris, baris pertama mengatur input ke hasilnya. Ini pada dasarnya adalah no-op, karena gon 0is 0. Kemudian ykembalikan GCD dari 0dan ... karena tidak ada argumen, defaultnya adalah 2(terima kasih, @Oliver !). Ini memberi 2sebagai output.


Output selatang :

yg

y, seperti sebelumnya, adalah GCD. Karena gcd (0, x) adalah x untuk nilai apa pun, yon 0mengambil kebebasan hanya dengan mengembalikan argumennya. Dalam hal ini, argumennya adalah "g", yang merupakan hasilnya.


Output barat1 :

y
g

ypada 0, seperti sebelumnya, kembali 2. Ini kemudian diteruskan ke g, yang (sebagaimana telah dibahas) adalah fungsi tanda pada angka. Karena itu, hasilnya adalah 1.

Produksi ETH
sumber
8

Java (OpenJDK 8) , 7309 4421 855 byte

-2888 bytes berkat Leaky Nun
-3566 bytes berkat Wheat Wizard

//i/////////////////////////////////////////////////////////////
//n//////////////////////////////////////////////////////////////////
interface M{static void main(String[]a){System.out.println(0);}}/////
//e//}};)2(nltnirp.tuo.metsyS{)a][gnirtS(niam diov citats{M ecafretni
//r//////////////////////////////////////////////////////////////////
//f}/////////////////////////////////////////////////////////////////
//a}//
//c;//
//e)//
// 3//
//M(//
//{n//
//sl//
//tt//
//an//
//ti//
//ir//
//cp//
// .//
//vt//
//ou//
//io//
//d.//
// m//
//me//
//at//
//is//
//ny//
//(S//
//S{//
//t)//
//ra//
//i]//
//n[//
//gg//
//[n//
//]i//
//ar//
//)t//
//{S//
//S(//
//yn//
//si//
//ta//
//em//
//m //
//.d//
//oi//
//uo//
//tv//
//. //
//pc//
//ri//
//it//
//na//
//tt//
//ls//
//n{//
//(M//
//1 //
//)e//
//;c//
//}a//
//}f//
///r//
///e//
 //t//
 //n//
 //i//

Cobalah online!

Versi lama

Pendekatan langsung dengan komentar yang membungkus kode ^ 2 persegi, ini dapat dilakukan dalam hampir semua bahasa.
contoh (lebih mudah dibaca) dengan python

##p#####
# r  2 #
print 1#
# n  t #
# t  n #
#4 tnirp
# 3  r #
#####p##
tongkat
sumber
Penaksiran umum yang bagus, sekarang saya hanya perlu mencari tahu bagaimana melakukannya! :)
flawr
Anda dapat menggunakan interface M{static void main(String[]a){System.out.println(0);}}sebagai gantinya untuk menyimpan beberapa byte.
Leaky Nun
1
@ MagicOctopusUrn itu tidak dilakukan dengan tangan c;
Rod
1
@ MagicOctopusUrn nah, saya membuat jawaban ini untuk menunjukkan algoritma ini, bahasa tidak relevan: 3
Rod
7

Brain-Flak , 33 byte

##)(##))()()  ((
((  ))##    ()##

Cobalah online!

Brain-Flak , 33 byte

##)     ## #
(( ))#)())()
  # ( (

Cobalah online!

Brain-Flak , 36 byte

#)##     ## #
  (())#)())()
 #   ( (

Cobalah online!

Brain-Flak , 38 byte

######  (#
(()()())#))((
       #(  ##

Cobalah online!

Brain-Flak , 41 byte

##(#####(#
(()()())#
##))()((
####((#)#)#

Cobalah online!

Wisaya Gandum
sumber
Sial! Saya sedang mengerjakan satu, tapi saya tidak bisa ke mana-mana. Saya pikir itu akan membutuhkan setidaknya 30-40 menit kerja untuk memikirkan sesuatu. Ini luar biasa!
DJMcMayhem
1
Ini keren sekali!
CzarMatt
Mencoba bermain golf Anda: P sejauh ini ada 3 dari mereka yang bekerja
Christopher
5

Befunge, 17 13 byte

Saya pikir Befunge akan menyenangkan untuk masalah geometris. Ada solusi 4x4 sepele yang mirip dengan yang lain di sini (saya perlu 3 perintah) tapi saya berhasil sedikit lebih baik.

Sunting: lupa tentang baris baru

Sunting 2: sadar saya bisa membuat kucing

Sunting 3: kucing sudah mati

2v3
@.v
.  
1@.

RIP kitty: <

1.@ 2
^._.^
3 @.4
algmyr
sumber
5

05AB1E , 5 3 byte

Y'X

Utara , Timur , Selatan , Barat

Riley
sumber
Mengesankan, itu cepat!
CzarMatt
@ MagicOctopusUrn saya pikir Y'Xakan berhasil, tapi saya masih harus mencobanya.
Riley
@Riley tidak, juga berfungsi maju dan mundur, Y'Xjuga valid. Masih mencari 2 byte; tidak ada 'perintah dot' yang berfungsi untuk itu, jadi saya ragu itu ada.
Magic Octopus Mm
@ MagicOctopusUrn Saya tidak berpikir ada solusi 2 byte dengan cara kerja baris baru. Tidak akan sulit untuk memaksa Force.
Riley
10akan bekerja jika mereka mengizinkan beberapa karakter untuk sebuah output; P. *
Magic Octopus Mm
4

C (gcc) , 283 279 209 byte

/////////)pm//
/////////;ua//
main(){//}ti//
puts("N"//sn//
);}///////((//
//////////")//
///"//////W{//
///E//////"///
//)"//////////
//((///////};)
//ns//"S"(stup
//it}//{)(niam
//au;/////////
//mp)/////////

Cobalah online!

Trik komentar lama yang sama di sini, tapi setidaknya, di C ini tidak mendapatkan huuuge ;)

Felix Palmen
sumber
Apakah Anda memerlukan salah satu dari empat garis miring di tepi kanan tepat di atas celah?
ETHproduk
Hei .. uhm ... kurasa, sebenarnya ... tidak. Tangkapan yang bagus, terima kasih :)
Felix Palmen
Saya pikir Anda dapat mengemasnya sedikit lebih erat dengan menggerakkan masing-masing );}ke baris di bawah ini, seperti itu (saya belum menguji rotasi)
ETHproduksi
Oh, Wprogram dalam pengaturan Anda saat ini gagal karena ada tambahan snsetelah kode aktual. Tampaknya Anda dapat memperbaikinya dengan mengubah garis miring tepat sebelum pmdi baris paling atas menjadi titik koma.
ETHproduksi
uhh ... mungkin saatnya untuk menghapus ini dan memulai lagi dari awal: o (versi pertama adalah serangkaian tebasan, tapi saya pikir saya akan melakukan hal " pintar " menghemat beberapa byte ... sialan)
Felix Palmen
4

Labirin , 9 byte

!
2@2
 !)

Cetakan 0. Cobalah online!

 2)
 @!
!2

Cetakan 3. Cobalah online!

)!
2@2
  !

Cetakan 1. Cobalah online!

 2!
!@
)2

Cetakan 2. Cobalah online!

Penjelasan

Setiap program dimulai pada non-spasi pertama dalam urutan membaca (yaitu karakter kiri atas atau tengah tengah), bergerak ke timur. Untuk program pertama:

!   Print an implicit zero.
    The IP can't move east, so it moves south instead.
2   Push a 2.
    The IP can't keep going south, so it turns east instead.
@   Terminate the program.

Untuk program kedua:

2   Push a 2.
)   Increment it to 3.
    The IP can't keep going east, so it turns south instead.
!   Print the 3.
    The IP can't keep going south, so it turns west instead.
@   Terminate the program.

Untuk program ketiga:

)   Increment an implicit zero to 1.
!   Print the 1.
    The IP can't keep going east, so it turns south instead.
@   Terminate the program.

Untuk program keempat:

2   Push a 2.
!   Print the 2.
    The IP can't keep going east, so it turns back around to move west.
2   Push another 2.
    The IP can't keep going west, so it turns south instead.
@   Terminate the program.
Martin Ender
sumber
4

Wumpus , 7 byte

O@$
)))

Cetakan 0. Cobalah online!

)O
)@
)$

Cetakan 1. Cobalah online!

)))
$@O

Cetakan 3. Cobalah online!

$)
@)
O)

Cetakan 2. Cobalah online!

Penjelasan

Program pertama cukup mudah: Omencetak nol implisit dan@ mengakhiri program.

Mulai dari program kedua, kita perlu melihat tata letak kotak segitiga untuk memahami aliran kontrol:

masukkan deskripsi gambar di sini

)   Increment an implicit zero to 1.
O   Print the 1.
))  Two irrelevant increments.
@   Terminate the program.

Untuk program ketiga:

masukkan deskripsi gambar di sini

))) Increment an implicit zero to 3.
O   Print the 3.
@   Terminate the program.

Yang keempat adalah di mana ia menjadi sangat funky. Garis putus-putus menunjukkan sel yang tidak dieksekusi karena dilewati oleh $:

masukkan deskripsi gambar di sini

$   Skip the ).
$   Skip the @.
))  Increment an implicit zero to 2.
O   Print the 2.
))  Two irrelevant increments.
@   Terminate the program.
Martin Ender
sumber
Super keren, diagram yang hebat juga.
CzarMatt
3

PowerShell , 20 11 byte

#4#
1#3
#2#

Menyalahgunakan komentar ( #) seperti orang gila, dan fakta bahwa satu nomor yang ditempatkan pada pipeline mendapat output apa adanya. Cetakan di atas1 . Cobalah online!

Dari sini, Anda dapat dengan mudah melihat bahwa setiap rotasi hanya menghasilkan satu angka yang ada di "kiri" komentar, dan hanya ada satu angka yang akan menjadi output per rotasi.

Disimpan 9 byte berkat Wheat Wizard !

AdmBorkBork
sumber
Tidak tahu PowerShell, tetapi tidakkah ini bekerja?
Wheat Wizard
@ WoatWizard Ya, memang. Terima kasih!
AdmBorkBork
3

Starry , 34 byte

  zz  
  +   
   .  
    + 
      

Atau dengan spasi yang ditampilkan sebagai tanda hubung sehingga Anda dapat melihatnya:

--zz--
--+---
---.--
----+-
------

Cobalah online!

Perintah-perintah di Starry adalah +, .dan beberapa hal lain, dan apa yang mereka lakukan ditentukan oleh berapa banyak ruang yang ada sebelum mereka: a +dengan n spasi mendorong n −5 ke stack, dan .dengan sejumlah spasi bahkan mencetaknya. Ituz s dan baris baru diabaikan seluruhnya.

Ada 6 spasi sebelum yang pertama +sehingga mendorong 6−5 = 1, dan. mencetaknya.

Dan rotasi:

-----
-----
---+z
--.-z
-+---
-----

Cobalah online! Ini mencetak "8".

------
-+----
--.---
---+--
--zz--

Cobalah online! Ini mencetak "2".

-----
---+-
z-.--
z+---
-----
-----

Cobalah online! Dan ini mencetak "3".

Bukan pohon
sumber
Bahasa yang apik. Juga, saya tidak pernah mengatakan Anda harus menggunakan spasi untuk membentuk persegi panjang. Tetapi jika sumber Anda bergantung pada spasi maka saya kira Anda harus menghitungnya.
CzarMatt
@CzarMatt, terima kasih atas klarifikasi! Saya telah memperbarui pos.
Bukan pohon
2

Batch, 90 byte

 :: :::@:
:&s ohce@
:e   : c:
      :h:
:o     o:
:h:
:c :   w:
@echo n&:
:@::: ::

Batch tidak benar-benar memiliki karakter komentar. Untuk komentar seluruh baris, :berfungsi, karena memperkenalkan label, tetapi saya masih membutuhkan sesuatu untuk menghentikan echoperintah sementara menjadi no-op ketika dibalik. &:tampaknya berfungsi, itulah yang saya butuhkan di sini, tetapi itu benar-benar membingungkan Batch, keliru jika saya tidak meletakkan :sebelum @pada baris berikutnya, dan juga entah bagaimana lupa untuk mencetak baris baru.

Neil
sumber
2

MATLAB, 29 17 5 11 byte

Setelah menyadari bahwa pertanyaan yang dipanggil untuk karakter ASCII tunggal bukan hanya keluaran yang berbeda, berikut adalah pendekatan MATLAB yang akan melakukan hal itu:

%4%
1%3
%2%

Ini secara implisit akan mencetak 1, 2, 3, atau 4 tergantung pada rotasi.

Tom Carpenter
sumber
Kalau dipikir-pikir, ini akan bekerja di MATL juga. Byte sama dengan saya.
Sanchises
1

JS, 17 B

//1//
2///4
//3//

Output:
Utara: 2,
Timur: 3,
Selatan: 4,
Barat: 0.33333333333….
(seperti dalam: 2, 3/1, 4, 1/3)

gfdfgdds
sumber
Selamat datang di PPCG! Saya rasa ini tidak valid, karena di lingkungan non-REPL, angkanya tidak akan ditampilkan. (Saya mungkin salah di sana)
Zacharý
(Cukup tambahkan REPL setelah JS, maka saya pikir tidak masalah)
Zacharý
1
Output harus berupa karakter ASCII yang dapat dicetak, jadi seperti MATLAB saya, ini tidak valid.
Tom Carpenter
1

Maaf, maksud saya:

//0//
////
 1/2
/////
//3//

dan 28B. Dan output sebagai 0,5, 3, 2, 0.

gdsgsgsgsgsgsgsg
sumber
Selamat datang di PPCG! Anda harus memasukkan nama bahasa dan jumlah byte dalam header. Dan ini adalah cuplikan, bukan program lengkap atau fungsi, yang tidak valid. (Saya mungkin salah)
Zacharý
@ Zacharý Saya pikir codegolf.meta.stackexchange.com/questions/7842/… mengatakan bahwa REPL diizinkan
SuperStormer
Either way, mereka harus menentukan bahwa itu adalah REPL JS.
Zacharý
2
Output harus berupa karakter ASCII yang dapat dicetak, jadi seperti MATLAB saya, ini tidak valid.
Tom Carpenter
1

JavaScript (ES6), 86 byte

Output 0 untuk Utara, 1 untuk Timur, 2 untuk Selatan, dan 3 untuk Barat.

////  _//
////  =//
_=>0//>//
  ////1//
  // //
//3////
//>//2>=_
//=  ////
//_  ////

kamoroso94
sumber
1

MATL , 11 byte

HxI
xFx
TxK

Cobalah online!

Mari kita mulai ini di MATL. Tantangan utama adalah bahwa MATL gagal jika suatu fungsi membutuhkan input jika stack kosong. Mungkin sesuatu pintar dengan pengubah seperti X, Y, Zdan &bisa membuat sesuatu yang lebih pendek, tapi aku tidak bisa menemukan kombinasi yang cocok.

Penjelasan: semua karakter mendorong bilangan bulat tunggal pada tumpukan, dan xmenghapus semuanya kecuali yang terakhir.

Sanchises
sumber
1

Perl, 49 byte

48 byte kode +1 untuk -p.

Mengasumsikan input kosong yang TIO tidak mendukung, sehingga baris baru ditambahkan di tempatnya dan tidak digunakan. Cetakan N , E , S , W .

# ####
#S= _$
#; W#
 $_=N#
#_ _#
#= $#
#E#
 ## #

Cobalah online!

Dom Hastings
sumber
1

C (gcc) , 120 byte

Saya berharap lebih banyak sinergi antar varian.

//}=)f8 ///
// c{(7 ///
   ;rr; //}
        ;c=
78; /// r{)
f(r /// r(f
){r /// ;38
=c;
}// ;rr;
/// 9({c //
/// 6f)=}//

Utara

Timur

Selatan

Barat

gastropner
sumber