Cardinal Code Challenge


24

Tarea

Estás a cargo de hacer una brújula, más o menos.

Imagine su código fuente como la "aguja" de la brújula donde el correr en diferentes orientaciones produce una salida distinta.

Las orientaciones de código fuente admitidas son Norte, Este, Sur y Oeste.

Ejemplo

Digamos que tienes el código fuente:

ABCD
 J K
WXYZ

Consideraremos que esta es la orientación Norte, girando 90 grados en el sentido de las agujas del reloj nos señala al Este:

W A
XJB
Y C
ZKD

girando nuevamente apunta al sur:

ZYXW
K J 
DCBA

y finalmente, la última rotación hacia el oeste:

DKZ
C Y
BJX
A W

Cuando se ejecuta, cada uno de los ejemplos de código anteriores debe generar un carácter ASCII imprimible único y distinto de su elección.

Notas

Su código no tendrá entrada.

Los espacios vacíos o las nuevas líneas no colapsan / desaparecen al girar.

Las nuevas líneas iniciales / finales están bien en la salida.

Las respuestas pueden ser programas completos o funciones, por lo tanto, se envían a STDOUT o devuelven el resultado de la función.

Se aplican reglas estándar de ; ¡La respuesta más corta en bytes gana!


¿Podemos generar más de 1 carácter?
Sr. Xcoder

1
¿Tenemos que rellenar el código con espacios para que sea un rectángulo perfecto (y contar esos espacios en nuestra puntuación)? Por ejemplo, ¿sería válido un código con esta forma, dado que el primero es el envío?
Business Cat

2
Además de las especificaciones de salida, creo que esto es un duplicado
Digital Trauma, el

1
@BusinessCat No tiene que rellenar su código para hacer un rectángulo; ese ejemplo que proporcionó sería válido.
CzarMatt

44
@ Mr.Xcoder Um, ¿cómo podrían 4 programas idénticos imprimir 4 caracteres ASCII diferentes?
ETHproductions

Respuestas:


20

Jalea , 2 bytes

*2

Pruébalo en línea!

Tenga en cuenta que la entrada principal para un programa Jelly es su último enlace, donde cualquier personaje de nueva línea dividirá los enlaces), ninguno de los programas de dos líneas accede realmente a su enlace superior.

Los cuatro programas completos, todos los cuales imprimen implícitamente su resultado, son:

Norte :

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

Este :

*
2    -> literal 2 = 2

Sur :

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

Oeste :

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

1
Esta es la respuesta final. Bien hecho.
Erik the Outgolfer

19

Japt , 3 2 bytes

gy

De alguna manera, de alguna manera , encontré una solución extremadamente hacky de 2 bytes ...


Salidas del norte0 :

gy

Como no hay entrada implícita, su valor predeterminado es 0. gen un número devuelve el signo del número independientemente de sus argumentos ( "y"en este caso).


Salidas del este2 :

g
y

En un programa de varias líneas, la primera línea establece la entrada a su resultado. Esto es básicamente un no-op, ya que gon 0es 0. Luego ydevuelve el GCD de 0y ... ya que le falta un argumento, su valor predeterminado es 2(¡gracias, @Oliver !). Esto da 2como salida.


Salidas del surg :

yg

y, como antes, es GCD. Como gcd (0, x) es x para cualquier valor, yon se 0toma la libertad de devolver su argumento. En este caso, el argumento es "g"cuál es el resultado.


Salidas del oeste1 :

y
g

yen 0, como antes, vuelve 2. Esto se pasa a g, que (como ya se discutió) es la función de signo en los números. Por lo tanto, el resultado es 1.


8

Java (OpenJDK 8) , 7309 4421 855 bytes

-2888 bytes gracias a Leaky Nun
-3566 bytes gracias a 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//

Pruébalo en línea!

Versión antigua

Enfoque directo con comentarios que envuelven el código ^ 2 cuadrado, esto se puede hacer en casi cualquier idioma.
Un ejemplo (más legible) en Python

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

Gran aproximación general, ¡ahora solo necesito descubrir cómo hacerlo! :)
flawr

En su interface M{static void main(String[]a){System.out.println(0);}}lugar, puede usar para guardar algunos bytes.
Leaky Nun


1
@MagicOctopusUrn no se hizo a mano c;
Rod

1
@MagicOctopusUrn nah, hice esta respuesta para mostrar este algoritmo, el lenguaje es irrelevante: 3
Rod

7

Brain-Flak , 33 bytes

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

Pruébalo en línea!

Brain-Flak , 33 bytes

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

Pruébalo en línea!

Brain-Flak , 36 bytes

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

Pruébalo en línea!

Brain-Flak , 38 bytes

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

Pruébalo en línea!

Brain-Flak , 41 bytes

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

Pruébalo en línea!


¡Santo cielo! Estaba trabajando en uno, pero no pude llegar a ninguna parte. Pensé que tomaría al menos 30-40 minutos de trabajo resolver algo. ¡Esto es increíble!
DJMcMayhem

1
¡Esto es muy genial!
CzarMatt

Tratando de jugar golf: P hasta ahora tiene 3 de ellos trabajando
Christopher


5

Befunge, 17 13 bytes

Pensé que Befunge sería divertido para un problema geométrico. Hay una solución trivial 4x4 similar a otras aquí (necesito 3 comandos) pero me las arreglé un poco mejor.

Editar: se olvidó de las nuevas líneas

Edición 2: me di cuenta de que podía crear un gato

Edición 3: el gato está muerto

2v3
@.v
.  
1@.

Gatito RIP: <

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

5

05AB1E , 5 3 bytes

Y'X

Norte , este , sur , oeste


Impresionante, eso fue rápido!
CzarMatt

@MagicOctopusUrn Creo Y'Xque funcionará, pero aún tengo que probarlo.
Riley

@Riley lo hace, también funciona hacia adelante y hacia atrás, Y'Xtambién es válido. Sin embargo, todavía estoy buscando un byte 2; ninguno de los 'comandos de punto' funciona, por lo que dudo que exista.
Urna mágica del pulpo

@MagicOctopusUrn No creo que haya una solución de 2 bytes con la forma en que funcionan las líneas nuevas. Sin embargo, no sería difícil hacer fuerza bruta.
Riley

10habría funcionado si permitieran varios caracteres para una salida; P. *
Urna de pulpo mágico

4

C (gcc) , 283 279 209 bytes

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

Pruébalo en línea!

El mismo viejo truco de comentarios aquí, pero al menos, en C, esto no se vuelve enorme ;)


¿Necesita alguna de las cuatro barras en el borde derecho justo encima del espacio?
ETHproductions

Hey ... uhm ... supongo, en realidad ... no. Buena captura, gracias :)
Felix Palmen

Creo que puedes juntarlo un poco más apretadamente moviendo cada uno );}a la línea de abajo, así (sin embargo, no he probado las rotaciones)
ETHproductions

Oh, el Wprograma en su configuración actual actualmente falla porque hay un extra sndespués del código real. Aparentemente, puede solucionar esto cambiando la barra diagonal justo antes pmde la línea superior a un punto y coma.
ETHproductions

uhh ... probablemente es hora de eliminar esto y comenzar de nuevo: o (la primera versión fue un cuadrado de barras, pero pensé que haría algo " inteligente " ahorrando algunos bytes ... maldición)
Felix Palmen

4

Laberinto , 9 bytes

!
2@2
 !)

Impresiones 0. Pruébalo en línea!

 2)
 @!
!2

Impresiones 3. Pruébalo en línea!

)!
2@2
  !

Impresiones 1. Pruébalo en línea!

 2!
!@
)2

Impresiones 2. Pruébalo en línea!

Explicación

Cada programa comienza en el primer espacio no ordenado en orden de lectura (es decir, el carácter superior izquierdo o superior central), moviéndose hacia el este. Para el primer programa:

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

Para el segundo programa:

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.

Para el tercer programa:

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

Para el cuarto programa:

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 bytes

O@$
)))

Impresiones 0. Pruébalo en línea!

)O
)@
)$

Impresiones 1. Pruébalo en línea!

)))
$@O

Impresiones 3. Pruébalo en línea!

$)
@)
O)

Impresiones 2. Pruébalo en línea!

Explicación

El primer programa es bastante fácil: Oimprime un cero implícito y @termina el programa.

Comenzando en el segundo programa, debemos observar el diseño de la cuadrícula triangular para comprender el flujo de control:

ingrese la descripción de la imagen aquí

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

Para el tercer programa:

ingrese la descripción de la imagen aquí

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

El cuarto es donde se pone realmente funky. Las líneas discontinuas indican celdas que no se ejecutan porque son omitidas por $:

ingrese la descripción de la imagen aquí

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

Súper geniales, excelentes diagramas también.
CzarMatt

3

PowerShell , 20 11 bytes

#4#
1#3
#2#

Abusa de los comentarios ( #) como una locura, y del hecho de que un solo número colocado en la tubería obtiene salida tal cual. Las impresiones de arriba 1. Pruébalo en línea!

Desde aquí, puede ver fácilmente que cada rotación produce solo un número que se encuentra a la "izquierda" de los comentarios, por lo que solo se generará un número por rotación.

¡Guardado 9 bytes gracias a Wheat Wizard !


No conozco PowerShell, pero ¿no funcionaría esto ?
Wheat Wizard

@WheatWizard Sí, de hecho. ¡Gracias!
AdmBorkBork

3

Estrellado , 34 bytes

  zz  
  +   
   .  
    + 
      

O con espacios que se muestran como guiones para que pueda verlos:

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

Pruébalo en línea!

Los comandos en Starry son +, .y algunas otras cosas, y lo que hacen está determinado por cuántos espacios hay delante de ellos: a +con n espacios empuja n −5 a la pila, y .con un número par de espacios lo imprime. Las zlíneas sy nuevas se ignoran por completo.

Hay 6 espacios antes del primero, +por lo que empuja 6−5 = 1, y lo .imprime.

Y las rotaciones:

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

Pruébalo en línea! Esto imprime "8".

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

Pruébalo en línea! Esto imprime "2".

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

Pruébalo en línea!Y esto imprime "3".


Qué lenguaje tan ordenado. Además, nunca dije que debías rellenar con espacios en blanco para formar un rectángulo. Pero si su fuente se basa en los espacios, entonces supongo que tiene que contarlos.
CzarMatt

@CzarMatt, gracias por la aclaración! He actualizado la publicación.
No es un árbol el


2

Lote, 90 bytes.

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

Batch realmente no tiene un carácter de comentario. Para los comentarios de línea completa, :funciona, ya que introduce una etiqueta, pero todavía necesito algo para terminar el echocomando mientras que no funciona cuando se invierte. &:parece funcionar, que es todo lo que necesito aquí, pero realmente confunde a Batch, me equivoca si no pongo un :antes @en la siguiente línea y también de alguna manera me olvido de imprimir una nueva línea.


2

MATLAB, 29 17 5 11 bytes

Al darse cuenta de que la pregunta requería caracteres ASCII individuales no solo una salida distinta, aquí hay un enfoque MATLAB que hará exactamente eso:

%4%
1%3
%2%

Esto imprimirá implícitamente 1, 2, 3 o 4 dependiendo de la rotación.


Ahora que lo pienso, esto también funcionaría en MATL. Sin embargo, el mismo número de bytes que el mío.
Sanchises



1

JS, 17 B

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

Salidas:
Norte: 2,
Este: 3,
Sur: 4,
Oeste: 0.33333333333….
(como en: 2, 3/1, 4, 1/3)


Bienvenido a PPCG! No creo que esto sea válido, ya que en un entorno que no es REPL, el número no se mostrará. (Podría estar equivocado allí)
Zacharý

(Solo agregue REPL después de JS, entonces creo que está bien)
Zacharý

1
La salida debe ser un único carácter ASCII imprimible, por lo que, como mi MATLAB, no es válido.
Tom Carpenter

1

Perdon, quise decir:

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

y 28B. Y salidas como 0.5, 3, 2, 0.


Bienvenido a PPCG! Debe poner el nombre del idioma y el recuento de bytes en un encabezado. Y este es un fragmento, no un programa completo o una función, que no es válido. (Podría estar equivocado)
Zacharý

@ Zacharý Creo que codegolf.meta.stackexchange.com/questions/7842/… dice que se permiten REPLs
SuperStormer

De cualquier manera, deben especificar que es un JS REPL.
Zacharý

2
La salida debe ser un único carácter ASCII imprimible, por lo que, como mi MATLAB, no es válido.
Tom Carpenter

1

JavaScript (ES6), 86 bytes

Salidas 0 para el norte, 1 para el este, 2 para el sur y 3 para el oeste.

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


1

MATL , 11 bytes

HxI
xFx
TxK

Pruébalo en línea!

Comencemos esto en MATL. El desafío principal es que MATL simplemente falla si una función requiere entrada si la pila está vacía. Tal vez algo inteligente con modificadores como X, Y, Zy& podría hacer algo más corto, pero no pude encontrar una combinación adecuada.

Explicación: todos los caracteres introducen un único número entero en la pila y los xelimina a todos, excepto el último.


1

Perl, 49 bytes

Código de 48 bytes + 1 para -p.

Asume una entrada vacía que TIO no admite, por lo que se agrega una nueva línea en su lugar y no se usa. Imprime N , E , S , W .

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

Pruébalo en línea!


1

C (gcc) , 120 bytes

Esperaba más sinergia entre las variantes.

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

norte

Este

Sur

Oeste

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.