Kardinal Kod Mücadelesi


24

Görev

Bir çeşit pusula yapmaktan sen sorumlusun.

Kaynak kodunuzu, farklı yönlerde çalışmanın farklı çıktılar ürettiği pusula "iğne" olarak hayal edin.

Desteklenen kaynak kodu yönlendirmeleri Kuzey, Doğu, Güney ve Batı'dır.

Örnek

Kaynak kodunuz olduğunu varsayalım:

ABCD
 J K
WXYZ

Bunu Kuzey yönünü dikkate alacağız, saat yönünde 90 derece döndürmek bizi Doğu'ya yönlendirir:

W A
XJB
Y C
ZKD

tekrar dönerek Güney noktaları:

ZYXW
K J 
DCBA

ve son olarak, Batı’ya son dönüş:

DKZ
C Y
BJX
A W

Çalıştığında, yukarıdaki kod örneklerinin her biri, seçtiğiniz bir tek, farklı yazdırılabilir ASCII karakteri vermelidir .

notlar

Kodunuz girdi almayacaktır.

Boş alanlar veya yeni çizgiler döndürülürken çökmez / kaybolmaz.

Önde gelen / takip eden yeni çizgiler çıktıda tamamdır.

Cevaplar tüm programlar veya fonksiyonlar olabilir, bu nedenle STDOUT'a verilir veya fonksiyon sonucunu döndürür.

Standart kuralları geçerlidir; bayt cinsinden en kısa cevap kazanır!


1 karakterden fazla çıktı alabilir miyiz?
Bay Xcoder

1
Kodu boşluklarla doldurmak zorunda mıyız, bu yüzden mükemmel bir dikdörtgen (ve puanları o boşlukları sayın)? Örneğin , birincisi başvuru ise, bu şekilde biçimlendirilmiş kod geçerli olur mu?
Business Cat

2
Çıktı belirtimi dışında, bunun bir kopya
Digital Trauma

1
@BusinessCat Dikdörtgen yapmak için kodunuzu doldurmanız gerekmez - sağladığınız örnek geçerli olur.
CzarMatt

4
@ Mr.Xcoder Um, 4 özdeş program nasıl 4 farklı ASCII karakter basabilir?
ETHProductions

Yanıtlar:


20

Jöle , 2 bayt

*2

Çevrimiçi deneyin!

Bir Jelly programının ana girişinin, herhangi bir yeni satır karakterinin bağlantıları böldüğü son bağlantı olduğunu unutmayın), iki satırlı programların hiçbiri gerçekten üst bağlantılarına erişemez.

Tamamı dolaylı olarak sonuçlarını basan dört tam program:

Kuzey :

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

Doğu :

*
2    -> literal 2 = 2

Güney :

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

Batı :

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

1
Bu son cevap. Aferin.
Outgolfer Erik,

19

Japt , 3 2 bayt

gy

Her nasılsa, her nasılsa , son derece hack 2 baytlık bir çözüm buldum ...


Kuzey çıkışlar 0:

gy

Örtük giriş olmadığından, varsayılan olarak değişir 0. gBir sayı üzerinde, bağımsız değişkenlerinden bağımsız olarak sayının işaretini döndürür ( "y"bu durumda).


Doğu çıktıları 2:

g
y

Çok satırlı bir programda, ilk satır girişi sonucuna ayarlar. Bu yana, temelde bir no-op olan gilgili 0DİR 0. Ardından GCD'yiy döndürür 0ve ... bir argüman eksik olduğundan, varsayılan olarak 2(teşekkürler, @Oliver !) Olur . Bu 2çıktı olarak verir .


Güney çıkışlar g:

yg

y, önceden olduğu gibi, GCD'dir. Yana gcd (0, x) olan X , herhangi bir değer için yüzerinde 0sadece bir argüman dönen özgürlük alır. Bu durumda, argüman "g"sonuçtur.


Batı çıktıları 1:

y
g

y0 dan önce olduğu gibi döner 2. Bu daha sonra g(daha önce tartışıldığı gibi) sayılar üzerindeki işaret işlevidir. Bu nedenle, sonuç 1.


8

Java (OpenJDK 8) , 7309 4421 855 bayt

Buğday Sihirbazı sayesinde Leaky Nun
-3566 bytes sayesinde -2888 byte

//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//

Çevrimiçi deneyin!

Eski versiyon

^ 2 kare kodunu saran yorumlar ile basit bir yaklaşım, bu hemen hemen her dilde yapılabilir.
python'da (okunabilir) bir örnek

##p#####
# r  2 #
print 1#
# n  t #
# t  n #
#4 tnirp
# 3  r #
#####p##

Büyük genel değerlendirme, şimdi nasıl yapacağımı çözmem gerek! :)
kusur

interface M{static void main(String[]a){System.out.println(0);}}Bazı baytları kaydetmek için bunun yerine kullanabilirsiniz .
Sızdıran Rahibe,


1
@ MagicOctopusUrn elle yapılmamıştır c;
Rod

1
@MagicOctopusUrn nah, bu algoritmayı göstermek için bu cevabı yaptım, dil konu dışı: 3
Rod

7

Brain-Flak , 33 bayt

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

Çevrimiçi deneyin!

Brain-Flak , 33 bayt

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

Çevrimiçi deneyin!

Brain-Flak , 36 bayt

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

Çevrimiçi deneyin!

Brain-Flak , 38 bayt

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

Çevrimiçi deneyin!

Brain-Flak , 41 bayt

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

Çevrimiçi deneyin!


Kutsal bok! Biri üzerinde çalışıyordum ama bir yer bulamadım. Bir şeyleri çözmenin en az 30-40 dakika çalışacağını düşündüm. Bu harika!
DJMcMayhem

1
Bu çok havalı!
CzarMatt

Seni golf oynamaya çalışıyorum: P şimdiye kadar 3 tanesi çalışıyor
Christopher


5

Befunge, 17 13 bayt

Befunge'nin geometrik bir problem için eğlenceli olacağını düşündüm. Burada başkalarına benzer önemsiz bir 4x4 çözümü var (3 komuta ihtiyacım var) ama biraz daha iyi başardım.

Düzenleme: yeni satırları unuttum

Düzenleme 2: bir kedi yaratabileceğimi farkettim

Düzenleme 3: kedi öldü

2v3
@.v
.  
1@.

RIP kitty: <

1.@ 2
^._.^
3 @.4

5

05AB1E , 5 3 bayt

Y'X

Kuzey , doğu , güney , batı


Etkileyici, bu hızlı oldu!
CzarMatt

@ MagicOctopusUrn Ben Y'Xçalışacak düşünüyorum , ama yine de denemek zorundayım.
Riley

@Riley, aynı zamanda ileri ve geri çalışır, Y'Xaynı zamanda geçerlidir. Yine de 2 bayt için olsa da; 'nokta komutlarının' hiçbiri bunun için çalışmaz, bu yüzden var olduğundan şüpheliyim.
Magic Octopus Urn

@ MagicOctopusUrn Newlines çalışma yolu ile 2 baytlık bir çözüm olduğunu sanmıyorum. Yine de Force'u kırmak zor olmazdı.
Riley

10bir çıktı için birden fazla karaktere izin verirlerse işe yarayacaklardı; P. *
Magic Octopus Urn

4

C (gcc) , 283 279 209 bayt

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

Çevrimiçi deneyin!

Burada aynı eski yorum hile, ama en azından, C bu huuuge alamaz ;)


Boşluğun hemen üzerindeki sağ kenardaki dört eğik çizgiden birine ihtiyacınız var mı?
ETHproductions 23

Hey .. uhm ... Sanırım, aslında ... hayır. İyi yakalama, teşekkürler :)
Felix Palmen

Ben her hareket ettirerek biraz daha sıkı bir araya paketi düşünüyorum );}, aşağıda hattına şöyle (I rotasyonları olsa test etmedim)
ETHproductions

Oh, Wgeçerli kurulumunuzdaki program şu anda başarısız oluyor, çünkü sngerçek koddan sonra bir ekstra var . Görünüşe göre pmüst satırın hemen önündeki eğik çizgiyi noktalı virgülle değiştirerek bunu düzeltebilirsiniz .
ETHproductions

ahh ... muhtemelen zaman bu silip baştan başlamak için: o (ilk versiyon bölü kare, ama düşünce bir "yapardım zeki bazı bayt ... kahretsin tasarrufu" şey)
Felix Palmen

4

Labirent , 9 bayt

!
2@2
 !)

Yazdırır 0. Çevrimiçi deneyin!

 2)
 @!
!2

Yazdırır 3. Çevrimiçi deneyin!

)!
2@2
  !

Yazdırır 1. Çevrimiçi deneyin!

 2!
!@
)2

Yazdırır 2.Çevrimiçi deneyin!

açıklama

Her program, ilk boş olmayan alanda okuma sırasına göre (yani sol üst veya orta üst karakter), doğuya doğru hareket ederek başlar. İlk program için:

!   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.

İkinci program için:

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.

Üçüncü program için:

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

Dördüncü program için:

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.

4

Wumpus , 7 bayt

O@$
)))

Yazdırır 0. Çevrimiçi deneyin!

)O
)@
)$

Yazdırır 1. Çevrimiçi deneyin!

)))
$@O

Yazdırır 3. Çevrimiçi deneyin!

$)
@)
O)

Yazdırır 2. Çevrimiçi deneyin!

açıklama

İlk program yeterince kolaydır: Oörtük bir sıfır yazdırır ve @programı sonlandırır.

İkinci programdan başlayarak kontrol akışını anlamak için üçgen ızgara düzenine bakmamız gerekir:

enter image description here

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

Üçüncü program için:

enter image description here

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

Dördüncüsü, gerçekten korkaklaştığı yerdir. Kesikli çizgiler $: tarafından atlanmadıkları için çalıştırılmayan hücreleri gösterir :

enter image description here

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

Süper havalı, harika diyagramlar da.
CzarMatt

3

PowerShell , 20 11 bayt

#4#
1#3
#2#

Kötüye kullanılan yorumları ( #) kötüye kullanır ve boru hattına tek bir sayının olduğu gibi çıktı verir. Yukarıdaki baskılar 1. Çevrimiçi deneyin!

Buradan, her rotasyonun yorumların "solunda" yalnızca bir sayı verdiğini kolayca görebilirsiniz ve bu nedenle rotasyon başına çıkacak yalnızca bir sayı vardır.

Buğday Sihirbazı sayesinde 9 bayt kurtardı !


Powershell'i tanımıyorsun, ama bu işe yaramaz mı?
Buğday Sihirbazı

@WheatWizard Evet, gerçekten. Teşekkürler!
AdmBorkBork

3

Yıldızlı , 34 bayt

  zz  
  +   
   .  
    + 
      

Veya tire olarak gösterilen boşluklarla onları görebilirsiniz:

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

Çevrimiçi deneyin!

Starry komutlar vardır +, .ve diğer bazı şeyler ve onlardan önce kaç tane alanlarda neler yaptıklarını belirlenir: a +ile n alanlarda iter n -5 yığınına ve. boşluklar baskılar bunun eşit bir sayı ile. zLer ve satırbaşları tamamen göz ardı edilir.

İlk önce 6 boşluk var + bu yüzden 6−5 = 1 iter. onu yazdırır.

Ve rotasyonlar:

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

Çevrimiçi deneyin! Bu "8" yazdırır.

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

Çevrimiçi deneyin! Bu "2" yazdırır.

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

Çevrimiçi deneyin! Ve bu "3" yazdırır.


Ne kadar temiz bir dil. Ayrıca, bir dikdörtgen oluşturmak için boşlukla doldurmanız gerektiğini asla söylemedim. Ancak kaynağınız boşluklara güveniyorsa, sanırım onları saymanız gerekir.
CzarMatt

@CarMatt, açıklama için teşekkürler! Gönderiyi güncelledim.
Ağaç değil,


2

Toplu iş, 90 bayt

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

Toplu işlem gerçekten bir yorum karakterine sahip değil. Tüm yorumlar için, :bir etiket getirdiği için çalışır, ancak echogeri çevrildiğinde no-op olurken komutu sonlandırmak için hala bir şeye ihtiyacım var . &:sanki burada ihtiyacım olan tek şey çalışıyor gibi görünüyor, ama gerçekten de Batch'ı şaşırtıyor , bir sonraki satıra daha :önce koymazsam hata yapıyor @ve bir şekilde yeni bir satır yazdırmayı unutuyor.


2

MATLAB, 29 17 5 11 bayt

Tek ASCII karakterleri için çağrılan sorunun yalnızca farklı bir çıktı değil, işte bunu yapacak olan bir MATLAB yaklaşımı olduğunu fark ettikten sonra:

%4%
1%3
%2%

Bu, dönüşe bağlı olarak örtük olarak 1, 2, 3 veya 4 yazdırır.


Bir düşünün, bu MATL'de de işe yarayacak. Yine de benimki ile aynı bayt sayısı.
Sanchises



1

JS, 17 B

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

Çıktılar:
Kuzey: 2,
Doğu: 3,
Güney: 4,
Batı: 0.33333333333….
(içinde: 2, 3/1, 4, 1/3)


PPCG'ye Hoşgeldiniz! REPL olmayan bir ortamda olduğu gibi numara gösterilmeyecek gibi bunun geçerli olduğunu sanmıyorum. (Orada yanlış olabilir)
Zacharý

(Sadece JS sonra REPL ekleyin, o zaman iyi olduğunu düşünüyorum)
Zacharý

1
Çıktı, tek bir yazdırılabilir ASCII karakteri olmalıdır, bu yüzden MATLAB'ım gibi, bu geçersiz.
Tom Carpenter

1

Üzgünüm, demek istedim:

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

ve 28B. Ve 0,5, 3, 2, 0 olarak çıktılar.


PPCG'ye Hoşgeldiniz! Dil adını ve bayt sayısını bir başlığa koymalısınız. Ve bu bir pasaj, tam bir program veya geçerli olmayan bir fonksiyon değil. (Yanlış olabilir)
Zacharý

@ Zacharý Bence codegolf.meta.stackexchange.com/questions/7842/… REPL’lere izin verildiğini söylüyor
SuperStormer

Her iki durumda da bir JS REPL olduğunu belirtmelidirler.
Zacharý

2
Çıktı, tek bir yazdırılabilir ASCII karakteri olmalıdır, bu yüzden MATLAB'ım gibi, bu geçersiz.
Tom Carpenter

1

JavaScript (ES6), 86 bayt

Kuzey için 0, Doğu için 1, Güney için 2 ve Batı için 3 çıktı.

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


1

MATL , 11 bayt

HxI
xFx
TxK

Çevrimiçi deneyin!

Bunu MATL'de başlatalım. En büyük zorluk, MATL'nin, yığın boşsa, bir fonksiyonun giriş yapmasını gerektirmesi durumunda başarısız olmasıdır. Düzenleyici kullanılan akıllı Belki bir şey gibi X, Y, Zve &daha kısa bir şey yapabiliriz, ama uygun bir birleşimini bulamadık.

Açıklama: tüm karakterler yığında tek bir tamsayı itiyor ve xhepsini sonuncusundan kaldırıyor.


1

Perl, 49 bayt

İçin 48 bayt kodu + 1 -p.

TIO'nun desteklemediği boş bir girdi olduğunu varsayar, bu nedenle yerine bir yeni satır eklenir ve kullanılmaz. N , E , S , W yazdırır .

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

Çevrimiçi deneyin!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.