Défi Cardinal Code


24

Tâche

Vous êtes en charge de fabriquer une boussole, en quelque sorte.

Imaginez votre code source comme «l'aiguille» de la boussole où courir à différentes orientations produit une sortie distincte.

Les orientations de code source prises en charge sont le nord, l'est, le sud et l'ouest.

Exemple

Disons que vous avez du code source:

ABCD
 J K
WXYZ

Nous considérerons ceci comme l'orientation Nord, une rotation de 90 degrés dans le sens horaire nous pointe vers l'Est:

W A
XJB
Y C
ZKD

tourner à nouveau pointe vers le sud:

ZYXW
K J 
DCBA

et enfin, la dernière rotation vers l'Ouest:

DKZ
C Y
BJX
A W

Lorsqu'il est exécuté, chacun des exemples de code ci-dessus doit générer un seul caractère ASCII imprimable distinct de votre choix.

Remarques

Votre code ne prendra aucune entrée.

Les espaces vides ou les nouvelles lignes ne s'effondrent pas / ne disparaissent pas lors de la rotation.

Les nouvelles lignes de début / fin sont correctes en sortie.

Les réponses peuvent être des programmes ou des fonctions entières, donc sorties vers STDOUT ou retour du résultat de la fonction.

Les règles de standard s'appliquent; réponse la plus courte en octets gagne!


Pouvons-nous produire plus d'un caractère?
M. Xcoder

1
Devons-nous remplir le code avec des espaces afin que ce soit un rectangle parfait (et compter ces espaces dans notre score)? Par exemple, coderez forme ce soit valide, étant donné la première est la soumission?
Business Cat

2
Mis à part les spécifications de sortie, je pense que c'est un doublon
Digital Trauma

1
@BusinessCat Vous n'avez pas besoin de remplir votre code pour faire un rectangle - cet exemple que vous avez fourni serait valide.
CzarMatt

4
@ Mr.Xcoder Um, comment 4 programmes identiques pourraient-ils imprimer 4 caractères ASCII différents?
ETHproductions

Réponses:


20

Gelée , 2 octets

*2

Essayez-le en ligne!

Notez que l'entrée principale d'un programme Jelly est son dernier lien, où tout caractère de nouvelle ligne divisera les liens), aucun des programmes à deux lignes n'accède réellement à son lien supérieur.

Les quatre programmes complets, qui impriment tous implicitement leur résultat, sont:

Nord :

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

Est :

*
2    -> literal 2 = 2

Sud :

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

Ouest :

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

1
Ceci est la réponse finale. Bien joué.
Erik the Outgolfer

19

Japt , 3 2 octets

gy

D'une manière ou d'une autre , j'ai trouvé une solution extrêmement hacky sur 2 octets ...


Sorties Nord0 :

gy

Puisqu'il n'y a pas d'entrée implicite, il est par défaut 0. gsur un nombre renvoie le signe du nombre indépendamment de ses arguments ( "y"dans ce cas).


Sorties Est2 :

g
y

Dans un programme à plusieurs lignes, la première ligne définit l'entrée sur son résultat. Ceci est essentiellement un no-op, puisque gsur 0est - 0. yRetourne ensuite le GCD de0 et ... comme il manque un argument, il est par défaut 2(merci, @Oliver !). Cela donne 2comme sortie.


Sorties Sudg :

yg

y, comme précédemment, est GCD. Puisque gcd (0, x) est x pour n'importe quelle valeur, yon 0prend la liberté de simplement renvoyer son argument. Dans ce cas, l'argument est "g", qui est le résultat.


OuestSorties1 :

y
g

ysur 0, comme précédemment, revient 2. Ceci est ensuite transmis à g, qui (comme déjà discuté) est la fonction de signe sur les nombres. Par conséquent, le résultat est 1.


8

Java (OpenJDK 8) , 7309 4421 855 octets

-2888 octets grâce à Leaky Nun
-3566 octets grâce à 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//

Essayez-le en ligne!

Ancienne version

Une approche simple avec des commentaires enveloppant le code ^ 2 carré, cela peut être fait dans à peu près n'importe quelle langue.
un exemple (plus lisible) en python

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

Grande approche générale, maintenant je dois juste trouver comment le faire! :)
flawr

Vous pouvez utiliser à la interface M{static void main(String[]a){System.out.println(0);}}place pour enregistrer certains octets.
Leaky Nun


1
@MagicOctopusUrn cela n'a pas été fait à la main c;
Rod

1
@MagicOctopusUrn nah, j'ai fait cette réponse pour montrer cet algorithme, le langage n'est pas pertinent: 3
Rod

7

Brain-Flak , 33 octets

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

Essayez-le en ligne!

Brain-Flak , 33 octets

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

Essayez-le en ligne!

Brain-Flak , 36 octets

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

Essayez-le en ligne!

Brain-Flak , 38 octets

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

Essayez-le en ligne!

Brain-Flak , 41 octets

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

Essayez-le en ligne!


Merde! J'en travaillais sur un, mais je n'ai pu aller nulle part. J'ai pensé qu'il faudrait au moins 30 à 40 minutes de travail pour comprendre quelque chose. Ceci est incroyable!
DJMcMayhem

1
C'est très cool!
CzarMatt

Essayer de vous jouer au golf: P jusqu'à présent, 3 d'entre eux travaillent
Christopher


5

Befunge, 17 13 octets

Je pensais que Befunge serait amusant pour un problème géométrique. Il y a une solution 4x4 triviale semblable à d'autres ici (j'ai besoin de 3 commandes) mais j'ai réussi un peu mieux.

Modifier: oublié les nouvelles lignes

Edit 2: réalisé que je pouvais créer un chat

Edit 3: le chat est mort

2v3
@.v
.  
1@.

Kitty RIP: <

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

5

05AB1E , 5 3 octets

Y'X

Nord , Est , Sud , Ouest


Impressionnant, c'était rapide!
CzarMatt

@MagicOctopusUrn Je pense que Y'Xcela fonctionnera, mais je dois encore l'essayer.
Riley

@Riley, il fonctionne également en avant et en arrière, Y'Xest également valide. Toujours à la recherche d'un 2 octets cependant; aucune des «commandes point» ne fonctionne pour elle, donc je doute qu'elle existe.
Urne de poulpe magique

@MagicOctopusUrn Je ne pense pas qu'il existe une solution à 2 octets avec le fonctionnement des sauts de ligne. Il ne serait cependant pas difficile de forcer Force.
Riley

10aurait fonctionné s'ils avaient autorisé plusieurs caractères pour une sortie; P. *
Magic Octopus Urn

4

C (gcc) , 283 279 209 octets

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

Essayez-le en ligne!

Même vieux truc de commentaire ici, mais au moins, en C, cela ne devient pas huuuge ;)


Avez-vous besoin de l'une des quatre barres obliques sur le bord droit juste au-dessus de l'écart?
ETHproductions

Hé ... euh ... je suppose, en fait ... non. Bonne prise, merci :)
Felix Palmen

Je pense que vous pouvez le regrouper un peu plus étroitement en déplaçant chacun );}vers la ligne ci-dessous, comme ça (je n'ai pas testé les rotations cependant)
ETHproductions

Oh, le Wprogramme de votre configuration actuelle échoue actuellement car il y a un supplément snaprès le code réel. Apparemment, vous pouvez résoudre ce problème en remplaçant la barre oblique juste avant la pmligne supérieure par un point-virgule.
ETHproductions

euhh ... probablement le temps de supprimer cela et de recommencer: o (la première version était un carré de barres obliques, mais je pensais que je ferais une chose " intelligente " en économisant quelques octets ... bon sang)
Felix Palmen

4

Labyrinthe , 9 octets

!
2@2
 !)

Impressions 0. Essayez-le en ligne!

 2)
 @!
!2

Impressions 3. Essayez-le en ligne!

)!
2@2
  !

Impressions 1. Essayez-le en ligne!

 2!
!@
)2

Impressions 2. Essayez-le en ligne!

Explication

Chaque programme commence au premier non-espace dans l'ordre de lecture (c'est-à-dire soit le caractère supérieur gauche ou supérieur central), se déplaçant vers l'est. Pour le premier programme:

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

Pour le deuxième programme:

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.

Pour le troisième programme:

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

Pour le quatrième programme:

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 octets

O@$
)))

Impressions 0. Essayez-le en ligne!

)O
)@
)$

Impressions 1. Essayez-le en ligne!

)))
$@O

Impressions 3. Essayez-le en ligne!

$)
@)
O)

Impressions 2. Essayez-le en ligne!

Explication

Le premier programme est assez simple: Oimprime un zéro implicite et@ termine le programme.

À partir du deuxième programme, nous devons examiner la disposition de la grille triangulaire pour comprendre le flux de contrôle:

enter image description here

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

Pour le troisième programme:

enter image description here

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

Le quatrième est l'endroit où ça devient vraiment génial. Les lignes en pointillés indiquent les cellules qui ne sont pas exécutées car elles sont ignorées par $:

enter image description here

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

Super cool, super diagrammes aussi.
CzarMatt

3

PowerShell , 20 11 octets

#4#
1#3
#2#

Abuse les commentaires ( #) comme des fous, et le fait qu'un seul numéro placé sur le pipeline soit sorti tel quel. Les impressions ci-dessus 1. Essayez-le en ligne!

De là, vous pouvez facilement voir que chaque rotation ne produit qu'un seul nombre qui se trouve à la "gauche" des commentaires, et donc il n'y a qu'un seul nombre qui sera affiché par rotation.

Enregistré 9 octets grâce à Wheat Wizard !


Je ne sais pas PowerShell, mais cela ne fonctionnerait- il pas ?
Wheat Wizard

@WheatWizard Oui, en effet. Merci!
AdmBorkBork

3

Étoilé , 34 octets

  zz  
  +   
   .  
    + 
      

Ou avec des espaces représentés par des tirets pour que vous puissiez les voir:

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

Essayez-le en ligne!

Les commandes dans Starry sont +, entre .autres choses, et ce qu'elles font est déterminé par le nombre d'espaces devant elles: a +avec n espaces pousse n −5 dans la pile, et .avec un nombre pair d'espaces l'imprime. lez s et les nouvelles lignes sont complètement ignorés.

Il y a 6 espaces avant le premier +donc il pousse 6−5 = 1, et le. affiche.

Et les rotations:

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

Essayez-le en ligne! Cela imprime "8".

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

Essayez-le en ligne! Cela imprime "2".

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

Essayez-le en ligne! Et cela imprime "3".


Quelle langue soignée. De plus, je n'ai jamais dit qu'il fallait remplir avec des espaces pour former un rectangle. Mais si votre source dépend des espaces, je suppose que vous devez les compter.
CzarMatt

@CzarMatt, merci pour la clarification! J'ai mis à jour le message.
Pas un arbre


2

Lot, 90 octets

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

Le lot n'a pas vraiment de caractère de commentaire. Pour les commentaires sur toute la ligne, :fonctionne, car il introduit une étiquette, mais j'ai encore besoin de quelque chose pour terminer leecho commande tout en étant non-op lorsqu'il est inversé. &:semble fonctionner, ce qui est tout ce dont j'ai besoin ici, mais cela confond vraiment Batch, l'erreur si je ne mets pas de :avant @sur la ligne suivante, et oublie également d'imprimer une nouvelle ligne.


2

MATLAB, 29 17 5 11 octets

Après avoir réalisé que la question appelait des caractères ASCII uniques et pas seulement une sortie distincte, voici une approche MATLAB qui fera exactement cela:

%4%
1%3
%2%

Cela imprimera implicitement 1, 2, 3 ou 4 selon la rotation.


À bien y penser, cela fonctionnerait aussi dans MATL. Le même nombre d'octets que le mien, cependant.
Sanchises



1

JS, 17 B

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

Sorties:
Nord: 2,
Est: 3,
Sud: 4,
Ouest: 0,33333333333….
(comme dans: 2, 3/1, 4, 1/3)


Bienvenue chez PPCG! Je ne pense pas que ce soit valide, car dans un environnement non REPL, le nombre ne sera pas affiché. (J'ai peut-être tort là-bas)
Zacharý

(Ajoutez simplement REPL après JS, alors je pense que ça va)
Zacharý

1
La sortie doit être un seul caractère ASCII imprimable, donc comme mon MATLAB, ce n'est pas valide.
Tom Carpenter

1

Désolé, je voulais dire:

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

et 28B. Et les sorties comme 0,5, 3, 2, 0.


Bienvenue chez PPCG! Vous devez mettre le nom de la langue et le nombre d'octets dans un en-tête. Et ceci est un extrait, pas un programme complet ou une fonction, qui n'est pas valide. (Je peux me tromper)
Zacharý

@ Zacharý Je pense que codegolf.meta.stackexchange.com/questions/7842/… dit que les REPL sont autorisées
SuperStormer

Dans tous les cas, ils doivent spécifier qu'il s'agit d'un JS REPL.
Zacharý

2
La sortie doit être un seul caractère ASCII imprimable, donc comme mon MATLAB, ce n'est pas valide.
Tom Carpenter

1

JavaScript (ES6), 86 octets

Sorties 0 pour le nord, 1 pour l'est, 2 pour le sud et 3 pour l'ouest.

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


1

MATL , 11 octets

HxI
xFx
TxK

Essayez-le en ligne!

Commençons par MATL. Le principal défi est que MATL échoue simplement si une fonction nécessite une entrée si la pile est vide. Peut-être quelque chose d'intelligent avec des modificateurs commeX que , Y,Z et& pourrait faire quelque chose de plus court, mais je ne pouvais pas trouver une combinaison appropriée.

Explication: tous les caractères poussent un seul entier sur la pile et les xsuppriment tous sauf le dernier.


1

Perl, 49 octets

Code de 48 octets + 1 pour -p.

Suppose une entrée vide que TIO ne prend pas en charge, donc une nouvelle ligne est ajoutée à sa place et n'est pas utilisée. Prints N , E , S , W .

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

Essayez-le en ligne!


1

C (gcc) , 120 octets

J'avais espéré plus de synergie entre les variantes.

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

Nord

est

Sud

Ouest

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.